Схема считывателя магнитных полос

Tomcat

Professional
Messages
2,630
Reputation
8
Reaction score
614
Points
113

Л. Падилья​


Требования​

Для чтения магнитных полос такой конструкции вам понадобится магнитная головка, два транзистора, несколько резисторов и конденсаторов, источник питания постоянного тока на 12 В, компьютер (с компилятором C) для декодирования данных и некоторые навыки пайки. При настройке и проверке схемы настоятельно рекомендуется использовать вольтметр и осциллограф. Возможно, вы сможете заменить прицел звуковой картой, если она сможет оцифровывать достаточно быстро.

Магнитную головку следует выбирать так, чтобы размер дорожки соответствовал размеру магнитной полосы. Я обнаружил, что размер дорожки обычного монофонического кассетного проигрывателя немного меньше требуемого, но он работает хорошо. Использование стереозвуковой головки не рекомендуется, если вы не хотите читать две дорожки одновременно, но я не проверял, такое же ли разделение звуковых дорожек, как и у дорожек данных.

Описание схемы​

Слабый сигнал от магнитной головки необходимо усилить, чтобы управлять входным портом компьютера. По этой причине вам понадобится схема, подобная той, что показана на рисунке ниже (или подобная), которая по сути представляет собой усилитель. Транзистор Q1 действует как предусилитель, повышая слабый входной сигнал (менее 1 мВ) до уровня десятых долей вольта. Как предусилитель он имеет низкий коэффициент шума; это достигается за счет работы транзистора при малом токе (менее 1 мА) и низком напряжении (менее 2 В).

Транзистор Q2 действует как усилитель и драйвер входного порта компьютера. По этой причине его выход подключен напрямую, без конденсатора, к входному порту компьютера. Поэтому уровень постоянного напряжения транзистора необходимо отрегулировать в соответствии со спецификациями используемого порта. Оба транзистора, Q1 и Q2, должны быть обычными кремниевыми биполярными NPN-транзисторами общего назначения. Стоимость электронных компонентов не имеет решающего значения, особенно конденсаторов. Вы можете выбрать из того, что у вас уже есть, те, которые ближе к тем, что на рисунке.

Эта схема предназначена для работы с источником питания 12 В постоянного тока. Можно использовать другой, но тогда вам придется изменить номинал резисторов, чтобы рабочая точка транзисторов осталась на прежнем месте. Вы можете получить +12 В постоянного тока от блока питания вашего ПК, который также имеет +5 В постоянного тока. Потребляемая мощность этой схемы должна составлять около 60 мВт. Если ваш источник питания стабилизирован (то есть в случае с источником питания компьютера), вы можете удалить конденсатор C7, в противном случае вам следует использовать как можно большее значение. Обратите внимание на номинальное напряжение конденсатора, оно должно быть не менее 16 В. Также следует обратить внимание на полярность того и других конденсаторов. Клемма с номиналом «-» должна быть подключена к земле или ближе к земле, чем другая клемма. Подробности смотрите на схеме.

magamp.gif


Настройка схемы​

Вы можете сделать схему так, как показано на рисунке, и она должна работать. Однако для оптимальной работы желательно, чтобы R2 и R6 были переменными резисторами номиналом около 20 кОм и 2 кОм соответственно. Изначально курсор резисторов поставить в среднее положение, то есть получить около 10 кОм и 1 кОм соответственно. Затем, проводя картой с магнитной полосой, медленно меняйте значение R2, пока не получите прямоугольный сигнал с максимальной амплитудой и минимальным шумом. Это легко сделать, если у вас есть осциллограф (или звуковая карта, действующая как осциллограф), если его нет, то можно подключить к выходу динамик и попробовать сделать это на слух, хотя результаты могут быть непредсказуемыми.

После того, как вы установили R2 для оптимальной производительности, вам необходимо настроить R6 на правильное значение. С помощью вольтметра измерьте напряжение постоянного тока на выходе схемы. Затем, НЕ проводя карту, медленно меняйте значение R6 до тех пор, пока уровень постоянного тока на выходе не станет где-то между 4,0 и 4,5 Вольт. При этом предполагается, что входной порт компьютера, который вы собираетесь использовать, работает с уровнями TTL, то есть 0 и +5 В. Идеальное напряжение на выходе будет +5 В, но надо учитывать, что при свайпе карты выход усилителя превысит это напряжение. По этой причине вам следует установить значение ниже +5 В для выхода усилителя, когда не считывается никакая карта.

Советы​

Стабилитрон Z1 используется для защиты порта компьютера от чрезмерного повышения напряжения. Его обратное напряжение пробоя должно составлять от 5,5 до 6,5 Вольт. Если вы не можете получить стабилитрон с такой характеристикой, вы можете получить тот же эффект с обычными диодами. Обычный кремниевый диод снижает напряжение сигнала в прямом направлении примерно на 0,6 В, поэтому, если вы соедините 10 обычных кремниевых диодов последовательно, они будут вести себя в прямом направлении как стабилитрон с обратным напряжением пробоя 6 В в обратном направлении. Вы также можете использовать комбинацию обоих типов. Если у вас есть стабилитрон на 4 В, вам следует подключить 3 обычных диода последовательно со стабилитроном, чтобы получить напряжение пробоя около 5,8 В. Помните , что стабилитрон должен быть установлен в обратном направлении, а нормальные диоды - в прямом направлении. Если такую защиту с помощью диодов получить все-таки не получается, то следует установить постоянное напряжение схемы, когда она не читается, на меньшее значение, например, между 3,0 и 3,5 Вольта. Это дает вам дополнительный запас защиты и при этом позволит правильно управлять портом компьютера.

Следует обратить внимание на правильное заземление каждой части схемы, особенно высоких частот, для чего нужны конденсаторы С4 и С6. Заземление очень важно для устранения шума. Металлический экран магнитной головки должен быть заземлен. Вы также можете поместить схему в металлический корпус и заземлить ее. Подключите магнитную головку к цепи кабелем как можно короче, чтобы избежать возникновения помех. Вы должны принять во внимание, что вблизи компьютера находится (электрически) очень шумная среда. Вы можете даже заметить, что уровень шума значительно снижается, если вы также заземлены во время проведения карты.

Механика ридера​

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

В этом случае вам следует прикрепить магнитную головку (чувствительной стороной вниз ) к куску пластика, дерева или чему-то другому правильной формы и гладкой поверхности. Затем закрепите две полоски (по одной с каждой стороны головы) на доске в качестве направляющей, по которой магнитная головка может двигаться только вперед и назад (плавно). Не забудьте оставить достаточно места между доской и полосками, чтобы можно было ввести карту, которую нужно прочитать. После того, как вы закрепите карту на доске так, чтобы ее магнитная полоса проходила параллельно полосам, вы можете легко провести головкой по карте. Теперь вам нужно лишь небольшими шагами перемещать положение карты, пока не найдете трек, который нужно прочитать. Вы знаете, что трек улавливается, когда сигнал с усилителя представляет собой идеальную прямоугольную волну с максимальной амплитудой и минимальным шумом. Поскольку большинство карт соответствуют стандартам ISO, я предлагаю вам сделать на считывателе несколько отметок, чтобы обозначить положение дорожек. Таким образом, вам не придется повторять весь процесс каждый раз, когда вы захотите прочитать карту.

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

magread.jpg


maghead.jpg


В последнее время я использую очень простой способ смахивания карт, не требующий специальной доски с закрепленными на ней полосками (рейками). Просто положите карту на компьютерный стол и используйте клавиатуру в качестве направляющей для магнитной головки, т. е. это похоже на описанный выше метод, но с использованием обычного стола и только одной направляющей, одной стороны клавиатуры вашего компьютера. Поместите две карты, по одной с каждой стороны считываемой карты (все три карты должны иметь одинаковую толщину), чтобы обеспечить плавное перемещение магнитной головки (вам все равно нужно прикрепить головку к чему-то, подходящему для проведения пальцем). Убедитесь, что магнитная полоса дополнительных карт не мешает считываемой магнитной полосе, т. е. магнитная головка не будет их считывать. Единственная проблема заключается в том, чтобы магнитная полоса была совмещена с клавиатурой. Найдите наш способ исправить это.

Использование программного обеспечения​

Считыватель магнитных карт следует подключить к порту джойстика (выход считывателя к контакту 2 и заземление к контакту 4 ) или к параллельному порту (выход считывателя к контакту 15 и заземление к контакту 18 ) ПК, если вы собираетесь использовать программное обеспечение, представленное на этих страницах. Я обнаружил лучшую производительность при использовании параллельного порта, и поэтому это порт по умолчанию. Вы можете использовать любой ПК, нет необходимости в быстром и мощном ПК. Скомпилируйте исходный код, оптимизируя его по скорости. Если вы не используете Turbo C++ v1.01 , возможно, вам придется немного изменить код, в основном заголовки и имена функций.

Когда вы запускаете программу, она ожидает активности во входном порту, то есть проведения карты. Когда активность прекращается, программа начинает декодировать биты, формировать байты и проверять четность и LRC. Входной уровень порта высокий как с подключенным к нему считывателем, так и без него. Когда вы проводите по карте, некоторые изменения направления потока создают отрицательный ток, который снижает выходной сигнал считывателя ниже +0,4 В и, таким образом, переводит входной порт из высокого состояния в низкое. Противоположное изменение направления потока увеличивает выходное напряжение считывателя более +5 В и, таким образом, снова переводит входной порт из низкого состояния в высокое. Это активность, которую обнаруживает программа.

Программа имеет два входных аргумента: тип и количество начальных и конечных тактовых битов считываемой дорожки. Есть четыре действительных трека: три стандартных и один экспериментальный. Экспериментальная дорожка не проверяет четность или LRC и декодирует биты немного иначе, чем стандартная: 0 — это то же самое, но 1 — это только одно короткое обращение потока, а не два коротких последовательных обращения, как в стандарте. Такое нестандартное кодирование битов я нашел как минимум в одной карте (карте копировального аппарата). Количество тактовых битов зависит от карты, которую вы читаете. Если вы не знаете, какой номер использовать, введите 1, тогда программа будет использовать номер по умолчанию в зависимости от типа трека (и из моего опыта). После того, как вы прочитали дорожку, на экране появятся биты, а затем вы сможете подсчитать количество ведущих и конечных тактовых битов. В следующий раз, когда вы будете читать эту карту, используйте меньшее из этих двух чисел. Использование правильного количества битов синхронизации повысит вероятность успешного декодирования карт.

Программа также покажет на экране другую информацию, такую как время пролистывания, декодированные байты и некоторые данные о качестве чтения. Я обнаружил, что оптимальное время смахивания составляет от 0,2 до 0,4 секунды. Наилучшее время пролистывания для дорожек стандартного размера с низкой плотностью составляет 0,20–0,25 с, а для дорожек с высокой плотностью — 0,30–0,35 с. Свайп должен быть максимально плавным и равномерным, иначе программа ошибочно интерпретирует 0 как 1 и наоборот. Хорошее качество свайпа будет характеризоваться небольшими сигмами и порогом1 > порогом2 в информации на экране.

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

В заключение, вот вывод программы после считывания стандартного трека IATA (посадочный талон Lufthansa):

Параметр неверных тактовых битов. Использование значений по умолчанию.
Чтение трека 1.
Время прокрутки: 0,33 с.
Единица времени: 5,7е-06 с.
Начальная длительность (сигма) битов в единицах времени:
0ЛО: 96,0 (11,0), 1ЛО: 48,0 (5,5)
0HI: 116,7 (12,1), 1HI: 58,4 (6,1)
Начальные пороги LO: 73,9, 59,0, 64,0.
Начальные пороги HI: 92,5, 70,5, 77,8.
0000000000000000000000000000000000000000000000000000101000101101110110010010011
0100001110110111000011001001100110100001011000000100101011111010100001000100101
000000110110110000111100001100100111001010001101000110101000011111100100110101
010111100101011001110000001000000100000010000001000000100000010001101011001000
000010000001000000100000011111100011010000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000
Средняя длительность (сигма) битов в единицах времени:
0ЛО: 95,2 (8,9), 1ЛО: 47,9 (4,3)
0HI: 115,4 (10,4), 1HI: 59,8 (5,6)
Итоговые пороги LO: 77,4, 56,6, 63,4
Итоговые пороги HI: 94,7, 71,0, 79,3
Стартовый дозорный найден.
%VFRAMADLH 4702 МПАДИЛЬЯ/л. 8Ф ?
Конечный дозорный найден.
ЛРК ОК.

Улучшения​

Основная проблема, которую я обнаружил в этом устройстве, заключается в том, что оно вносит асимметрию в считываемые биты, т. е. на выходе не получается симметричное квадратное изделие, биты на низком уровне короче, чем биты на высоком уровне. Причина этого в том, что состояние считывателя по умолчанию — высокий уровень, когда изменение магнитного потока вызывает высокий уровень, выходной сигнал находится на высоком уровне в течение 100% продолжительности бита. Однако, когда изменение потока приводит к низкому уровню, требуется некоторое время, чтобы измениться с высокого уровня по умолчанию, скажем, 4 В, до точки, в которой порт переключается из высокого состояния в низкое, скажем, 2 В. То же самое происходит и с хвостом бита: порт переключается из низкого состояния в высокое до того, как бит закончился. Конечным результатом является то, что младшие биты становятся короче (порт фактически находится на низком уровне, составляющем лишь часть реальной длительности бита), а старшие биты длиннее, потому что время, украденное в младших битах, добавляется к старшим битам (сравните значения от 0LO и 1LO до 0HI и 1HI в приведенном выше примере, чтобы увидеть разницу). Если бы входной сигнал представлял собой идеальную прямоугольную волну с острыми вертикальными краями и усилитель имел идеальный отклик, то время перехода из высокого состояния в низкое (и наоборот) было бы незначительным, но это не так.

Сначала я думал, что этот эффект связан только с конструкцией усилителя, но потом понял, что есть и дополнительная причина. В классическом тексте Card-O-Rama: Magnetic Stripe Technology and Beyond говорится, что выходной сигнал магнитной головки при проведении магнитной дорожки представляет собой прямоугольную волну, однако это неправда. Фактический результат состоит из строки чередующихся положительных и отрицательных пиков. См. этот документ ( альтернативное расположение ) для подробного объяснения, включая графики, а также см. мою новую страницу для чтения с некоторыми реальными изображениями данных (но учтите, что эти данные получены с помощью звуковой карты и, таким образом, неявно фильтруется с узкой полосой пропускания, отсюда и разница с графиками другого документа). Следовательно, после пика низкого уровня существует время, соответствующее биту низкого уровня, в течение которого считыватель переходит в состояние по умолчанию, то есть на высокий уровень, и, таким образом, сокращается продолжительность бита низкого уровня (и увеличивается соседний бит высокого уровня). .

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

Очевидно, что одним из лучших улучшений было бы использование более совершенной схемы. Вы можете попробовать один из проектов на моей странице чтения/записи магнитных полос, если вы найдете их лучше, чем мои (вы все равно можете использовать мое программное обеспечение). Предполагая, что вы выберете мой усилитель (я полагаю, в основном из-за его простоты), есть несколько модификаций, которые, как я полагаю, исправят проблему асимметрии и дадут другие преимущества (большая простота и защита порта ПК). Конструкция была бы проще, если бы мы убрали параллельно выходу стабилитрон Z1, который является единственным экзотическим компонентом (ну не очень экзотичным :), кроме магнитной головки, которая неизбежна, и поставили последовательно обычный диод. с таким выводом:


Выход усилителя o-----|<|-----o Порт ПК
Диод Д1

Это обеспечивает идеальную защиту порта ПК, поскольку обратное напряжение пробоя обычного диода составляет несколько сотен вольт. Обратите внимание, что теперь состояние высокого уровня по умолчанию поддерживается внутренним подтягивающим резистором порта, а не коллектором транзистора Q2. Постоянный ток, который раньше протекал от коллектора Q2 к порту ПК при считывании бита высокого состояния, теперь останавливается диодом D1. Этот ток больше не нужен, поскольку порт уже находится в высоком состоянии из-за подтягивающего резистора. Однако, когда считывается бит низкого уровня, D1 позволяет току течь от порта ПК к коллектору Q2 (а оттуда к земле), изменяя таким образом состояние порта с высокого на низкое. Это было первое улучшение, которое я попробовал, но не опубликовал его, поскольку оно имеет неприятный побочный эффект: оно ухудшает асимметрию. Это происходит из-за падения напряжения на диоде (около 0,6 В для кремниевых диодов и около половины этого значения для германиевого типа), которое увеличивает зазор, который необходимо преодолеть при реверсировании потока низкого уровня, чтобы перевести порт из высокого состояния в низкое.

Теперь у меня есть идея, как убрать асимметрию, но я еще не пробовал, однако вы можете проверить. Он основан на том, что я ранее успешно реализовал в своей старой конструкции ЦАП-АЦП . Чтобы минимизировать время, необходимое для изменения направления потока низкого уровня для переключения порта из высокого состояния в низкое, мы должны уменьшить зазор, который ему приходится преодолевать. Мы можем сделать это, просто отрегулировав (не проводя карту) сопротивление R6 так, чтобы выходное напряжение схемы было установлено на минимальном уровне, при котором порт ПК остается в высоком состоянии. Лучший способ добиться этого — настроить R6 во время запуска программы, контролирующей состояние порта (это может быть модифицированная версия программы для использования считывателя). Вы доберетесь до точки, в которой небольшое изменение R6 будет изменить статус порта. Оставьте R6 на этом этапе, но там, где статус порта стабильно высокий, чтобы избежать ложных переходов на низкий уровень при чтении реальных данных. Благодаря этой настройке, когда считывается отрицательное изменение направления потока, оно почти сразу же меняет состояние порта ПК с высокого на низкое, и поэтому мы записываем реальную длительность бита низкого уровня.

Мы можем уменьшить проблему, вызванную тем, что входной сигнал (выходной сигнал магнитной головки) представляет собой не прямоугольную волну, а последовательность пиков, добавив пару RC-фильтров нижних частот (также известных как интеграторы), чтобы пики медленно спадали. Сделать это можно, добавив последовательно в схему пару резисторов (которые мы назовем R9 и R10) и увеличив номиналы конденсаторов С4 и С6. Это было бы примерно так (я рисую только затронутые части):


С3 Р9 Р10
... ---| |---\/\/\---+--- ... ... ---\/\/\---+--- ...
_|_ _|_
С4 ___ С6 ___
| |
... ...

Вам нужно выбрать R9 = R10 и C4 = C6 и так, чтобы R9(Ом) * C4(Фарады) ~ 0,001(секунды), что соответствует частоте среза 1 кГц. Этого можно добиться с помощью R9 = R10 = 1 кОм и C4 = C6 = 1 мкФ, однако я не уверен насчет оптимальных значений, поэтому вы можете взять R9 и R10 в качестве переменных резисторов и выполнить точную настройку. Вы можете протестировать каждую настройку, читая реальные дорожки и наблюдая, когда вы получите лучшие результаты: увеличение вероятности успешного считывания и лучшие цифры на выходе: 0LO ближе к 0HI и т. д. Конечно, если у вас есть осциллограф (или звуковой карта, действующая как одна) тривиально увидеть, стали ли результаты лучше или нет.

Независимо от того, пробуете ли вы эти аппаратные улучшения или нет, в принципе вы можете исправить две проблемы, о которых я упоминал выше (асимметрия и пики вместо прямоугольных волн), улучшив программное обеспечение. Обе проблемы не имеют значения, если мы измеряем расстояние между пиками (этот метод я использовал с моим новым считывателем) вместо измерения длительности пиков или псевдопрямоугольных волн (метод, используемый с этим старым считывателем). Проблема здесь в том, что порт ПК не предоставляет информацию об относительном уровне входного сигнала, а именно о том, находится ли он выше порогового значения или ниже. Если мы предположим, что центры пиков расположены на полпути между последовательными изменениями состояния порта (это несколько рискованное предположение), тогда нам просто нужно измерить время между центром прямоугольных волн, которые регистрирует порт, вместо измерения время между изменениями статуса уровня порта. Это довольно легко реализовать в моей программе, требуется лишь несколько модификаций.

Если вам удастся устранить обе проблемы, либо путем улучшения аппаратного обеспечения, либо путем улучшения программного обеспечения, вы сможете упростить программное обеспечение, поскольку различную обработку битов высокого и низкого уровня можно пропустить, и ими можно управлять как эквивалентами. Это сделает программу более надежной, поскольку увеличит статистику битов (мы примерно удваиваем ее). В конце концов, все становится излишним, чтобы получить более надежный считыватель, которому потребуется меньше движений для чтения карты без ошибок. Все эти советы, данные в этом последнем разделе, я не опробовал, и вам следует экспериментировать с ними, только если вы любите играть с электроникой. Если вы просто хотите читать карты с минимальными усилиями, забудьте об этом устройстве и попробуйте мой новый ридер.
 
Top