...

понедельник, 6 апреля 2015 г.

[Из песочницы] Что под капотом у динамической магнитной полосы?

Вводная




Время не стоит на месте — оно течет и изменяется. Технический прогресс диктует свои правила жизни. Одно из этих правил — наличие важнейшего инструмента повседневности — пластиковой карточки. Кредитные, расчетные, депозитные, карточки-визитки, клубные, карточки постоянных покупателей — теперь без них не обходится ни одно цивилизованное общество. Но что делать, если этих «общепризнанных инструментов жизнедеятельности человека» становится слишком много? Что если от их избытка ваш любимый кошелек начинает трещать по швам? Сегодня мы поговорим о том, как данной проблемы можно избежать. А именно, как несколько карточек превратить… в одну.



Немного теории




Как же хранится информация? Да очень просто. По сути, магнитная полоса — это последовательность маленьких участков, намагниченных в противоположных направлениях. На месте перехода между участками напряженность магнитного поля резко меняется. Именно это изменение магнитного поля фиксирует магнитная головка, которая скользит по полосе, когда вы проводите карточку. За счет резкого изменения магнитного поля в катушке головки возникает ЭДС (электродвижущая сила), проще говоря, появляется импульс напряжения, который затем усиливается и передается дальше.

Для различия нулей и единиц используется так называемое F/2F кодирование: то есть при кодировании нуля используется частота F, а для единицы — частота 2F. Например, в начале дорожки у нас идет несколько нулей, служащих для синхронизации, тогда декодирующее устройство примерно вычисляет частоту F (в частности время одного полупериода равного Т), и если же импульс возникал по истечению времени Т, то мы имеем дело с нулем, если посередине этого времени и в конце (удвоенная частота), то это логическая единица.


image


Этот метод построен на принципе того, что мы не сможем моментально изменить скорость провода карточкой в 1.5 раза. Благодаря тому, что у нас присутствует импульс в конце каждого бита, мы можем корректировать время Т без опасения плавного изменения скорости. В противном случае это грозит сбоем синхронизации.


На каждой карточке с магнитной полосой всегда имеется 3 трека. Другое дело, что они не всегда используются.
























1й трекформат ALPHA79 символов7 бит на символплотность записи 210 бит на дюйм
2й трекформат BCD40 символов5 бит на символплотность записи 75 бит на дюйм
3й трекформат BCD107 символов5 бит на символплотность записи 210 бит на дюйм



В случае дисконтных карт чаще всего используется только вторая дорожка, по причине того, что на ней самая маленькая плотность записи, и, как следствие, самая большая устойчивость к помехам в виде прилипших субстанций, царапин или даже трещин. Обычно там записан числовой идентификатор носителя карты, он же на всякий случай продублирован на лицевой части самой карты.

В случае банковских карт используется первая и вторая дорожки. Смысл данных известен только самим банкам.

3-я дорожка в подавляющем количестве случаев не используется.

Физическая ширина информационной дорожки составляет 2.8 мм.


Формате BCD











































































































































































b1b2b3b4b5CharacterFunction
000010(0H)Data
100001(1H)"
010002(2H)"
110013(3H)"
001004(4H)"
101015(5H)"
011016(6H)"
111007(7H)"
000108(8H)"
100119(9H)"
01011:(AH)Control
11010;(BH)Start Sentinel
00111<(CH)Control
10110=(DH)Field Separator
01110>(EH)Control
11111?(FH)End Sentinel






5-й бит выступает в роли бита паритета.

В формате кодирования альфа (там, где 7 бит на символ) есть возможность хранить цифры, латинские буквы и немного спецсимволов.


формат кодирования альфа













































































































































































































































































































































































































































































































































































































































































































































































































b1b2b3b4b5b6b7CharacterFunction
0000001space(0H)Special
1000000!(1H)"
0100000"(2H)"
1100001#(3H)"
0010000$(4H)"
1010001%(5H)Start Sentinel
0110001&(6H)Special
1110000'(7H)"
0001000((8H)"
1001001)(9H)"
0101001*(AH)"
1101000+(BH)"
0011001,(CH)"
1011000(DH)"
0111000.(EH)"
1111001/(FH)"
00001000(10H)Data (numeric)
10001011(11H)"
01001012(12H)"
11001003(13H)"
00101014(14H)"
10101005(15H)"
01101006(16H)"
11101017(17H)"
00011018(18H)"
10011009(19H)"
0101100:(1AH)Special
1101101;(1BH)"
0011100<(1CH)"
1011101=(1DH)"
0111101>(1EH)"
1111100?(1FH)End Sentinel
0000010@(20H)Special
1000011A(21H)Data (alpha)
0100011B(22H)"
1100010C(23H)"
0010011D(24H)"
1010010E(25H)"
0110010F(26H)"
1110011G(27H)"
0001011H(28H)"
1001010I(29H)"
0101010J(2AH)"
1101011K(2BH)"
0011010L(2CH)"
1011011M(2DH)"
0111011N(2EH)"
1111010O(2FH)"
0000111P(30H)"
1000110Q(31H)"
0100110R(32H)"
1100111S(33H)"
0010110T(34H)"
1010111U(35H)"
0110111V(36H)"
1110110W(37H)"
0001110X(38H)"
1001111Y(39H)"
0101111Z(3AH)"
1101110[(3BH)Special
0011111(3DH) Special
1011110](3EH)Special
0111110^(3FH)Field Separator
1111111_(40H)Special






7-й бит выступает в качестве бита паритета.

Информация на 2-й или 3-й дорожке хранится в следующей последовательности:



  1. Некоторое количество нулевых бит, около 20;

  2. Символ начала данных «;»;

  3. число, или несколько чисел разделенных между собой символом «=»;

  4. признак конца данных «?»;

  5. LRC (Longitudinal Redundancy Check) — для проверки всего сообщения;

  6. Некоторое количество нулевых бит, около 20;




Первая дорожка содержит аналогичную последовательность за исключением символа начала данных «%».

К практике




Для того, чтобы имитировать магнитную полосу во время провода карточкой, необходимо генерировать изменение магнитного поля вблизи считывающей головки. Для этого подойдет простая катушка, на которую будет подаваться специально промодулированный сигнал. Для того, чтобы наш имитатор карточки можно было протягивать, необходимо катушку разместить на протяжении всей карточки. Также неплохо, чтобы направление намагниченности совпадало с направлением на карточке. Тут нам повезло: он проходит вдоль длинного края карточки и будет достаточно однослойной катушки длинной примерно с карточку. Для усиления намагниченности в качестве сердечника будем использовать магнитомягкий ферромагнетик из электрической стали (сердечника трансформатора). Форма сердечника — прямоугольная; плоской стороной прилегает к считывающей головке, что делает их взаимосвязь более сильной.

image


В процессе намотки нам поможет шуруповерт. Также желательно покрыть перед этим сердечник лаком, чтобы исключить возможность короткого замыкания витков через сердечник, иначе область катушки в пространствах между замкнутыми витками не эффективна.


Для удобства считывания упакуем нашу катушку в «корпус», сходный с формой стандартной пластиковой карточкой.


image


Обмотаем скотчем.


image


Теперь задумаемся о том, как будем подавать на катушку сигнал. Для этого нам понадобится драйвер. Так как выходной мощности портов GPIO контроллера нам не хватит, воспользуемся схемой типа Н-мост.


image


MS1 и MS2 подключаем к портам контроллера, выход Р1 — на катушку.

Конденсаторы С43 и С44 служат в качестве фильтров для снятия постоянной составляющей с катушки. Это позволяет сэкономить заряд батареи, а также управлять крутизной фронтов импульса, что в свою очередь положительно влияет на магнитное взаимодействие катушки и магнитной головки (величина ЭДС прямпропорциональна скорости изменения магнитного поля).


Установим фильтр, чтобы избавить остальную часть схемы от бросков по питанию.


image


Для генерации импульсов на выходе головки нам нужно на выходы катушки подавать импульсы в противофазе. Для этого одновременно меняем логические уровни на MS1 и MS2 на противоположные, благодаря чему на выходы катушки кратковременно будет приложено удвоенное значение напряжения VMS. Другой способ — использовать только одно плечо H-моста с одной стороны катушки и среднюю точку на другом.


image


Контроллер для управления схемой взят с запасом вычислительной мощности — STM32F405.


Итак, код на примере второй дорожки:



//инициализация порта:
#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();
}




Функции для передачи битов готовы.

Более продвинутый уровень — преобразовать информацию в последовательность нулей и единиц и начинать их поочередную передачу (если же преобразовывать каждый символ в момент передачи это сулит сдвижки по времени и нарушением синхронизации приемной части). Но мы пренебрежем этим для простоты исполнения.



//отправка сообщения
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();
}
}
}




В случае, если вы планируете одновременно эмулировать две или более полосы, следует учесть, что из-за разной плотности записи на дорожках между импульсами возникают различные временные промежутки, для измерения которых потребуется соответственное количество измерителей времени. Например, можно воспользоваться таймерами или «таском» в операционной системе.

Исследовательская часть





  1. В основном успешность затеи зависит от следующих факторов:

  2. Напряжение VMS;

  3. Количества витков катушки;

  4. Диаметр провода в катушке;

  5. Поперечное сечение сердечника;

  6. Емкость конденсаторов С43 и С44;

  7. Частота F;

  8. Расстояние катушки от считывающей головки;

  9. Магнитная проницаемость сердечника.




Стоит учесть, что некоторые параметры изменяемы в конкретных пределах, некоторые — зависимы друг от друга.

К примеру, давайте подадим различное напряжение на катушку и выясним, как будет его изменение влиять на результат при учете неизменности остальных параметров:




















































Напряжение ВРасстояние срабатывания ммРасстояние воздействия ммНеравномерность считывания %Неравномерность воздействия %
2.30010% с концов15% с концов
2.60130% с концов70% с концов
2.80270%30%
2.915100%0%
327100%0%
3.3411100%0%

Расстояние срабатывания – максимальное расстояние, при котором происходит успешное считывание (0 при непосредственном прикосновении).


Расстояние воздействия – расстояние, при котором чтение производится, но с ошибкой.


Неравномерность считывания – в связи с тем, что магнитный сердечник не замкнут, на его концах более сильное магнитное поле.


По составленной таблице видно, что лучший результат приходится на диапазон напряжения 2.8-2.9 В.


графики форм сигнала на концах катушки в зависимости от напряжения
2.3 В:

image


2.6 В:


image


2.8 В:


image


2.9 В:


image


3 В:


image


3.3 В:


image






Выводы




В процессе работы два недостатка:


  1. Влияние сигнала предыдущей дорожки на соседнюю;

  2. Неравномерная интенсивность магнитного поля вдоль катушки. Проявляется особенно сильно при протаскивании карточки в отличие от ее неподвижного состояния.




В первом случае может помочь использование дополнительных экранов, или схематическое решение в виде подачи ослабленного сигнала на соседнюю катушку в инверсном подключении. Таким образом, сигнал и помеха будут в противофазе и погасят друг друга. Также дополнительную помощь оказывает замыкание магнитного контура.

image


Во втором случае может помочь замкнутость магнитного контура, а также плавное изменение площади сечения сердечника ближе к концам катушки.


image


Видео работы устройства:



GitHub


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий