入門
時間は静止していません-それは流れ、変化します。 技術の進歩は、独自の生活ルールを決定します。 これらのルールの1つは、日常生活で最も重要なツールであるプラスチックカードの存在です。 クレジット、決済、預金、名刺、クラブ、ポイントカード-今では文明社会はそれらなしではできません。 しかし、これらの「普遍的に認識されている人間の生活の道具」が多すぎるとどうなるでしょうか? お気に入りの財布がその過剰から縫い目で破裂し始めたらどうなりますか? 今日は、この問題を回避する方法についてお話します。 つまり、いくつかのカードを1枚に変える方法です。
理論のビット
情報はどのように保存されますか? はい、とても簡単です。 実際、磁気ストリップは、反対方向に磁化された一連の小さなセクションです。 セクション間の遷移で、磁場は急激に変化します。 磁気ヘッドがキャプチャするのはこの磁場の変化であり、カードを保持するとストリップに沿ってスライドします。 ヘッドコイル内の磁場の急激な変化により、EMF(起電力)が発生します。つまり、電圧パルスが発生し、それが増幅されてさらに送信されます。
ゼロと1を区別するために、いわゆるF / 2Fコーディングが使用されます。つまり、ゼロをコーディングする場合は周波数Fが使用され、ユニットの場合は周波数2Fが使用されます。 たとえば、トラックの先頭に同期する複数のゼロがあり、デコードデバイスは周波数F(特に、Tに等しい1半サイクルの時間)を概算し、パルスが時間Tの後に発生した場合、ゼロを処理します。この時間の途中で、最後に(2倍の頻度)、これは論理ユニットです。
この方法は、1.5倍の速度でカードによってワイヤ速度を即座に変更できないという原則に基づいています。 各ビットの終わりにパルスがあるため、速度の滑らかな変化を恐れずに時間Tを調整できます。 そうしないと、同期が失敗します。
各磁気ストライプカードには、常に3つのトラックがあります。 もう1つは、常に使用されるわけではないということです。
1曲目 | アルファ形式 | 79文字 | 1文字あたり7ビット | 210 bps |
セカンドトラック | BCDフォーマット | 40文字 | 1文字あたり5ビット | 記録密度75ビット/インチ |
3曲目 | BCDフォーマット | 107文字 | 1文字あたり5ビット | 210 bps |
割引カードの場合、ほとんどの場合、2番目のトラックのみが使用されます。これは、記録密度が最も低く、その結果、付着物、傷、ひび割れの形での干渉に対する最大の耐性があるためです。 通常、カードキャリアの数値識別子が書き込まれます。これは、念のため、カード自体の前面に複製されています。
銀行カードの場合、最初と2番目のトラックが使用されます。 データの意味は、銀行自体にのみ知られています。
ほとんどの場合、3番目のトラックは使用されません。
情報トラックの物理的な幅は2.8 mmです。
BCDフォーマット
b1 | b2 | b3 | b4 | b5 | キャラクター | 機能 | |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | 0 | (0H) | データ |
1 | 0 | 0 | 0 | 0 | 1 | (1H) | 」 |
0 | 1 | 0 | 0 | 0 | 2 | (2H) | 」 |
1 | 1 | 0 | 0 | 1 | 3 | (3H) | 」 |
0 | 0 | 1 | 0 | 0 | 4 | (4H) | 」 |
1 | 0 | 1 | 0 | 1 | 5 | (5H) | 」 |
0 | 1 | 1 | 0 | 1 | 6 | (6H) | 」 |
1 | 1 | 1 | 0 | 0 | 7 | (7H) | 」 |
0 | 0 | 0 | 1 | 0 | 8 | (8H) | 」 |
1 | 0 | 0 | 1 | 1 | 9 | (9H) | 」 |
0 | 1 | 0 | 1 | 1 | : | (AH) | 制御 |
1 | 1 | 0 | 1 | 0 | ; | (Bh) | 歩sentを開始 |
0 | 0 | 1 | 1 | 1 | < | (CH) | 制御 |
1 | 0 | 1 | 1 | 0 | = | (DH) | フィールドセパレーター |
0 | 1 | 1 | 1 | 0 | > | (えー) | 制御 |
1 | 1 | 1 | 1 | 1 | ? | (Fh) | 終了センチネル |
5番目のビットはパリティビットとして機能します。
アルファエンコード形式(1文字あたり7ビット)では、数字、ラテン文字、およびいくつかの特殊文字を格納できます。
アルファエンコード形式
b1 | b2 | b3 | b4 | b5 | b6 | b7 | キャラクター | 機能 | |
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 1 | スペース | (0H) | 特別な |
1 | 0 | 0 | 0 | 0 | 0 | 0 | ! | (1H) | 」 |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 」 | (2H) | 」 |
1 | 1 | 0 | 0 | 0 | 0 | 1 | # | (3H) | 」 |
0 | 0 | 1 | 0 | 0 | 0 | 0 | $ | (4H) | 」 |
1 | 0 | 1 | 0 | 0 | 0 | 1 | % | (5H) | 歩sentを開始 |
0 | 1 | 1 | 0 | 0 | 0 | 1 | & | (6H) | 特別な |
1 | 1 | 1 | 0 | 0 | 0 | 0 | '' | (7H) | 」 |
0 | 0 | 0 | 1 | 0 | 0 | 0 | ( | (8H) | 」 |
1 | 0 | 0 | 1 | 0 | 0 | 1 | ) | (9H) | 」 |
0 | 1 | 0 | 1 | 0 | 0 | 1 | * | (AH) | 」 |
1 | 1 | 0 | 1 | 0 | 0 | 0 | + | (Bh) | 」 |
0 | 0 | 1 | 1 | 0 | 0 | 1 | 、 | (CH) | 」 |
1 | 0 | 1 | 1 | 0 | 0 | 0 | - | (DH) | 」 |
0 | 1 | 1 | 1 | 0 | 0 | 0 | 。 | (えー) | 」 |
1 | 1 | 1 | 1 | 0 | 0 | 1 | / | (Fh) | 」 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | (10H) | データ(数値) |
1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | (11H) | 」 |
0 | 1 | 0 | 0 | 1 | 0 | 1 | 2 | (12H) | 」 |
1 | 1 | 0 | 0 | 1 | 0 | 0 | 3 | (13H) | 」 |
0 | 0 | 1 | 0 | 1 | 0 | 1 | 4 | (14H) | 」 |
1 | 0 | 1 | 0 | 1 | 0 | 0 | 5 | (15H) | 」 |
0 | 1 | 1 | 0 | 1 | 0 | 0 | 6 | (16H) | 」 |
1 | 1 | 1 | 0 | 1 | 0 | 1 | 7 | (17H) | 」 |
0 | 0 | 0 | 1 | 1 | 0 | 1 | 8 | (18H) | 」 |
1 | 0 | 0 | 1 | 1 | 0 | 0 | 9 | (19H) | 」 |
0 | 1 | 0 | 1 | 1 | 0 | 0 | : | (1AH) | 特別な |
1 | 1 | 0 | 1 | 1 | 0 | 1 | ; | (1BH) | 」 |
0 | 0 | 1 | 1 | 1 | 0 | 0 | < | (1CH) | 」 |
1 | 0 | 1 | 1 | 1 | 0 | 1 | = | (1DH) | 」 |
0 | 1 | 1 | 1 | 1 | 0 | 1 | > | (1EH) | 」 |
1 | 1 | 1 | 1 | 1 | 0 | 0 | ? | (1FH) | 終了センチネル |
0 | 0 | 0 | 0 | 0 | 1 | 0 | @ | (20H) | 特別な |
1 | 0 | 0 | 0 | 0 | 1 | 1 | A | (21H) | データ(アルファ) |
0 | 1 | 0 | 0 | 0 | 1 | 1 | B | (22H) | 」 |
1 | 1 | 0 | 0 | 0 | 1 | 0 | C | (23H) | 」 |
0 | 0 | 1 | 0 | 0 | 1 | 1 | D | (24H) | 」 |
1 | 0 | 1 | 0 | 0 | 1 | 0 | E | (25H) | 」 |
0 | 1 | 1 | 0 | 0 | 1 | 0 | F | (26H) | 」 |
1 | 1 | 1 | 0 | 0 | 1 | 1 | G | (27H) | 」 |
0 | 0 | 0 | 1 | 0 | 1 | 1 | H | (28H) | 」 |
1 | 0 | 0 | 1 | 0 | 1 | 0 | 私は | (29H) | 」 |
0 | 1 | 0 | 1 | 0 | 1 | 0 | J | (2AH) | 」 |
1 | 1 | 0 | 1 | 0 | 1 | 1 | K | (2BH) | 」 |
0 | 0 | 1 | 1 | 0 | 1 | 0 | L | (2CH) | 」 |
1 | 0 | 1 | 1 | 0 | 1 | 1 | M | (2dh) | 」 |
0 | 1 | 1 | 1 | 0 | 1 | 1 | N | (2EH) | 」 |
1 | 1 | 1 | 1 | 0 | 1 | 0 | O | (2FH) | 」 |
0 | 0 | 0 | 0 | 1 | 1 | 1 | P | (30H) | 」 |
1 | 0 | 0 | 0 | 1 | 1 | 0 | Q | (31H) | 」 |
0 | 1 | 0 | 0 | 1 | 1 | 0 | R | (32H) | 」 |
1 | 1 | 0 | 0 | 1 | 1 | 1 | S | (33H) | 」 |
0 | 0 | 1 | 0 | 1 | 1 | 0 | T | (34H) | 」 |
1 | 0 | 1 | 0 | 1 | 1 | 1 | うん | (35H) | 」 |
0 | 1 | 1 | 0 | 1 | 1 | 1 | V | (36H) | 」 |
1 | 1 | 1 | 0 | 1 | 1 | 0 | W | (37H) | 」 |
0 | 0 | 0 | 1 | 1 | 1 | 0 | X | (38H) | 」 |
1 | 0 | 0 | 1 | 1 | 1 | 1 | Y | (39H) | 」 |
0 | 1 | 0 | 1 | 1 | 1 | 1 | Z | (3AH) | 」 |
1 | 1 | 0 | 1 | 1 | 1 | 0 | [ | (3BH) | 特別な |
0 | 0 | 1 | 1 | 1 | 1 | 1 | ( | 3DH)スペシャル | |
1 | 0 | 1 | 1 | 1 | 1 | 0 | ] | (3EH) | 特別な |
0 | 1 | 1 | 1 | 1 | 1 | 0 | ^ | (3FH) | フィールドセパレーター |
1 | 1 | 1 | 1 | 1 | 1 | 1 | _ | (40H) | 特別な |
7番目のビットはパリティビットとして機能します。
2番目または3番目のトラックの情報は、次の順序で保存されます。
- 一定数のゼロビット、約20。
- データの先頭の文字「;」;
- 記号「=」で区切られた数字または複数の数字。
- データ終了の記号「?」。
- LRC(Longitudinal Redundancy Check)-メッセージ全体を確認します。
- 一定数のゼロビット、約20。
最初のトラックには、開始記号「%」を除いて同様のシーケンスが含まれています。
練習する
ワイヤーカードの間に磁気ストリップをシミュレートするには、読み取りヘッドの近くで磁場の変化を生成する必要があります。 このために、特別に変調された信号が供給される単純なコイルが適しています。 カードシミュレーターを引き伸ばすには、カード全体にリールを配置する必要があります。 磁化の方向がカードの方向と一致することも良いです。 ここで私たちは幸運でした:それはカードの長辺に沿って走り、カードの長さ程度の単層コイルで十分です。 磁化を強化するために、鉄鋼の軟磁性強磁性体(変圧器コア)をコアとして使用します。 コアの形状は長方形です。 読み取りヘッドに隣接する平らな側。
ドライバーを巻く過程で役立ちます。 また、コアを通るターンの短絡の可能性を排除するために、コアの前にワニスでコーティングすることが望ましいです。
読みやすくするために、標準のプラスチックカードの形に似た「ケース」にコイルを詰めます。
テープ付きテープ。
次に、コイルに信号を送信する方法について考えてみましょう。 そのためにはドライバーが必要です。 コントローラーのGPIOポートの出力電力では十分ではないため、Hブリッジタイプの回路を使用します。
MS1とMS2をコントローラーポートに接続し、出力P1-コイルに接続します。
コンデンサC43およびC44は、コイルからDC成分を除去するためのフィルターとして機能します。 これにより、バッテリーの電力を節約できるだけでなく、パルスエッジの急峻さを制御できます。これにより、コイルと磁気ヘッドの磁気的相互作用にプラスの影響があります(EMFの大きさは、磁場の変化率に直接比例します)。
フィルタを取り付けて、回路の残りの部分を電力サージから保護します。
ヘッドの出力でパルスを生成するには、逆位相のパルスをコイルの出力に印加する必要があります。 これを行うには、MS1とMS2の論理レベルを反対に変更し、2倍のVMS電圧がコイル出力に短時間印加されるようにします。 別の方法は、コイルの一方の側でHブリッジの一方のアームのみを使用し、他方の側で中間点を使用することです。
回路を制御するためのコントローラーは、予備の計算能力-STM32F405を使用しています。
したがって、2番目のトラックの例のコードは次のとおりです。
// : #define STRIPE_2_PIN_P GPIO_Pin_13 #define STRIPE_2_PIN_N GPIO_Pin_14 #define STRIPE_2_PORT GPIOB #define STRIPE_2_RCC_PERIPH RCC_AHB1Periph_GPIOB void stripe_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(STRIPE_2_RCC_PERIPH, ENABLE); GPIO_SetBits(STRIPE_2_PORT, STRIPE_2_PIN_P); GPIO_ResetBits(STRIPE_2_PORT, STRIPE_2_PIN_N); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = STRIPE_2_PIN_P | STRIPE_2_PIN_N; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(STRIPE_2_PORT, &GPIO_InitStructure); } // : void stripe_2_toggle(void) { GPIO_ToggleBits(STRIPE_2_PORT, STRIPE_2_PIN_P | STRIPE_2_PIN_N); } // : void stripe_2_tx_0 (void) { stripe_2_toggle(); vait_stripe_2_period(); } // : void stripe_2_tx_1 (void) { stripe_2_toggle(); vait_stripe_2_half_period(); stripe_2_toggle(); vait_stripe_2_half_period(); }
ビットを送信するための機能が用意されています。
より高度なレベルは、情報をゼロと1のシーケンスに変換し、それらを順次送信し始めることです(送信時に各文字が変換される場合、これはタイムシフトと受信側の同期の違反を約束します)。 しかし、実行を容易にするためにこれを無視しています。
// void buff_2_to_magnetic(char * stripe_2_buff) { unsigned char i, lrc = 0; for (i = 0; i < 20; i++) { stripe_2_tx_0(); } while (*stripe_2_buff) { for (i = 0; i < 5; i++) { if (*stripe_2_buff & (1 << i)) { stripe_2_tx_1(); } else { stripe_2_tx_0(); } } lrc ^= *stripe_2_buff; stripe_2_buff++; } for (i = 0; i < 5; i++) { if (lrc & (1 << i)) { stripe_2_tx_1(); } else { stripe_2_tx_0(); } } }
2つ以上の帯域を同時にシミュレートする場合、パルス間のトラックの記録密度が異なるため、適切な数のタイムメーターが必要な測定には異なる時間間隔が発生することに注意してください。 たとえば、オペレーティングシステムでタイマーまたは「タスク」を使用できます。
研究部
- 基本的に、事業の成功は次の要因に依存します。
- VMS電圧;
- コイルの巻き数。
- コイル内のワイヤの直径。
- コア断面;
- コンデンサ容量C43およびC44。
- 周波数f;
- 読み取りヘッドからのコイルの距離。
- コアの透磁率。
一部のパラメーターは特定の制限内で可変であり、一部は互いに依存していることを考慮する価値があります。
たとえば、コイルに異なる電圧を印加し、残りのパラメーターの不変性を考慮して、コイルの変化が結果にどのように影響するかを調べましょう。
電圧V | 作動距離mm | 衝撃距離mm | 不均一な読み取り% | 露出の不均一性% |
---|---|---|---|---|
2.3 | 0 | 0 | 10%オフ | 15%オフ |
2.6 | 0 | 1 | 30%オフ | 70%オフ |
2.8 | 0 | 2 | 70% | 30% |
2.9 | 1 | 5 | 100% | 0% |
3 | 2 | 7 | 100% | 0% |
3.3 | 4 | 11 | 100% | 0% |
応答距離-正常な読み取りが発生する最大距離(直接接触の場合は0)。
衝撃距離-読み取りが行われるが、エラーが発生する距離。
不均一な読み取り-磁気コアが閉じられていないという事実により、両端に強い磁場があります。
まとめた表によると、最良の結果は2.8〜2.9 Vの電圧範囲にあります。
電圧の関数としてのコイルの両端の電圧波形
2.3 V:
2.6 V:
2.8 V:
2.9 V:
3 V:
3.3 V:
2.6 V:
2.8 V:
2.9 V:
3 V:
3.3 V:
結論
このプロセスでは、2つの欠点があります。
- 隣接する前のトラックの信号の影響。
- コイルに沿った不均一な磁場強度。 静止状態とは対照的に、カードをドラッグすると特に強く現れます。
最初のケースでは、追加のスクリーンの使用、または逆接続で弱められた信号を隣接するコイルに供給する形式の概略ソリューションが役立ちます。 したがって、信号と干渉は逆位相になり、互いに相殺されます。 また、磁気回路の閉鎖によって追加のヘルプが提供されます。
2番目のケースでは、閉じた磁気回路が役立つだけでなく、コイルの端に近いコアの断面積の滑らかな変化も役立ちます。
ビデオデバイスの操作:
Github