![](https://habrastorage.org/storage2/aad/914/752/aad9147520dddaf0a0bddb3d0be01809.jpg)
У меня было несколько расплывчатых идей, но их было недостаточно, чтобы вызвать реакцию «Ух ты!» или «Ты маньяк!». Нужно серьезно потрудиться, чтобы оставаться на уровне моей предыдущей разработки — емкостного сканера.
Я устроил мозговой штурм с моими товарищами: Педерсеном (Pedersen), Асбьёрном (Asbjørn) и Флеммингом (Flemming), которые тут же придумали множество смешных идей. И вот Флемминг упомянул RFID (он разработчик системы управления доступом, которая основана на RFID). А вот это уже мысль. Конечно, первые мысли были об RFID-считывателе, но мы уже собрали их довольно много, и это было скучно. Однако, появилась идея сделать RFID-метку. Я не знаю, кто упомянул это первым, и, как обычно в мозговом штурме, идеи рождаются коллективным разумом. Итак, решено сделать RFID-метку, собранную исключительно на 7400-ой логике.
Содержание
Принцип работы метки
RFID-метка посылает уникальный код путем модулирования несущей частоты. Большинство меток являются пассивными: они не содержат собственных источников питания и только передают идентификатор в ответ на запрос. Обычные метки используют протокол EM4100. Многие EM4100-совместимые метки используют одну и ту же микросхему-транспондер и существуют в нескольких конфигурациях, которые отличаются протоколами кодирования и скоростью передачи данных. Транспондер обычной метки имеет следующие характеристики:
- Несущая частота: 125 кГц, 13,56 МГц, 433 МГц, обычно с амплитудной модуляцией
- Кодирование: манчестерский код, двухфазная (Biphase) или фазовая манипуляция (PSK)
- Скорость передачи: 1, 2, 4 кбит/с или более
- Вшитый неперезаписываемый идентификатор, опционально — перезаписываемая память
- Подсчет контрольных сумм с помощью четности и CRC
Транспондер EM4100 работает на частоте 125 кГц с амплитудной модуляцией. Встречаются все виды кодирования, но чаще используется манчестерское на скорости 2 кбит/с. Транспондер шлет 64 бита данных, которые включают в себя: 32-битный идентификатор, 8-битный код изготовителя/версии, 9-битный заголовок, 14-битную контрольную сумму и 1 стоп-бит. Данные в метке кодируются так, что в них содержится уникальный паттерн для синхронизации. EM4100 отправляет последовательность из девяти единиц, которая не может встретиться нигде, кроме как в начале пакета данных.
Вы можете купить такие метки где угодно, например, на Itead, Seeed или Sparkfun. Там же можно найти RFID-считыватель, который будет с ними работать.
![](https://habrastorage.org/storage2/fdf/e99/f49/fdfe99f495f3756b73cec637e4fdc4f6.jpg)
Техзадание на разработку легко следует из спецификации распространенных RFID-меток:
- Несущая 125 кГц
- Амплитудная модуляция и, как минимум, манчестерское кодирование
- Скорость 2 кбит/с или настраиваемая
- Настраиваемые биты данных
- Добавление заголовка и стоп-бита
- Автоматический подсчет контрольных сумм
- Желательно, пассивное питание
Питание
Главной особенностью транспондера является то, что он получает энергию из электромагнитного поля считывателя. Было бы замечательным достижением питать метку на 7400-ых микросхемах исключительно от электромагнитного поля. Для имеющегося RFID-считывателя были проведены измерения с помощью простой установки. Берем катушку, подбираем параллельно включенный конденсатор для резонансной частоты 125 кГц и смотрим, как много энергии можно снять.
![](https://habrastorage.org/storage2/f9f/9c1/afe/f9f9c1afe7bc2c00d3821a251dbef9d3.jpg)
К резонансному контуру (3,3 мГн и 470 пФ) подключен мостовой выпрямитель (на диодах Шоттки), а после него — конденсатор 10 мкФ и нагрузка: резисторы 4,7 кОм, 12 кОм или 47 кОм. Получается, что передача максимальной мощности происходит при токе нагрузки около 700 мкА, когда напряжение достигает 19 В. Другими словами, из электромагнитного поля можно извлечь более 13 мВт мощности. При напряжении 3,3 В максимальный ток нагрузки будет около 2 мА. Этого должно хватить для питания множества микросхем серии 74HCxx. (Отечественный аналог — серия КР1564. — Прим. перев.)
Микросхемы 74HCxx — полностью КМОП и имеют почти нулевой статический ток потребления. Они рассеивают мощность только при переключениях, перезаряжая входные и выходные емкости. Принимая напряжение питания равным 3,3 В, ток — 700 мкА и тактовую частоту — 125 кГц, получаем, что резонансный контур может питать схему с суммарной емкостью 1700 пФ (U * C = I * T). Это означает, что мощности должно хватить на множество микросхем и линий ввода-вывода.
Использование метки на более высоких частотах, например, 13,56 МГц, намного проблематичнее. На два порядка более высокая частота означает на два порядка большее энергопотребление. Отсюда следует, что практически невозможно использовать данную метку на высоких частотах.
Что касается серии микросхем HCT (Отечественный аналог — серия КР5564. — Прим. перев.), их нельзя использовать в данной конструкции. Серия HCT имеет в среднем более высокий ток покоя, и, что важнее, дополнительный вытекающий ток через каждый вход, из-за совместимости с уровнями TTL. Вход элемента серии HCT будет источником тока, если он не подтянут к шине питания. Этот ток обозначен в документации как ΔIcc (добавочный ток покоя) на каждый вход. Его значение составляет 10-1000 мкА, в зависимости от подключенной нагрузки. Это означает, что много энергии уходит впустую, что совсем нежелательно.
Некоторые соображения касательно аналоговой части. Важным фактором является добротность резонансного контура. Более высокая добротность при неизменной резонансной частоте означает, что с контура будет сниматься меньше энергии. С другой стороны, высокая добротность облегчает модуляцию. Модуляция есть не что иное, как изменение параллельного сопротивления, что влечет за собой изменение добротности: Q = R * sqrt (C/L). Все переменные, R, C и L, должны быть подобраны для оптимальной производительности в пределах рабочего диапазона. Баланс должен быть определен экспериментальным путем.
Конструкция метки
Метка EM4100 включает в себя регистр данных, схемы питания, тактирования, модуляции и управления. Все компоненты реализованы энергосберегающими и обеспечивают максимальную гибкость.
Принципиальная схема
Следует отметить, что окончательный проект включает в себя все исправления ошибок и некоторые дополнения, которые были сделаны на стадии создания прототипа. Ниже будет подробная информация о внесенных изменениях. Чтобы уберечь читателя от возгласа «многабукв, ниасилил!», сразу приведу окончательный вариант.
Страница 1, 64-битный регистр данных и схема вычисления четности:
![](https://habrastorage.org/storage2/4ea/b82/14b/4eab8214b344fc3cd15c2f596b86a8e8.png)
Страница 2, схемы питания, тактирования, управления, ввода идентификатора метки, а также временные диаграммы:
![](https://habrastorage.org/storage2/246/b05/0d6/246b050d66896cb68f78a7a35d385aac.png)
Вся схема в PDF.
Схема в формате gschem.
Регистр данных
Метка EM4100 хранит 64 бита данных, значит, конструкция должна содержать 64-битный сдвиговый регистр, составленный из восьми 8-битных регистров 74HC165. Регистр перезагружается после каждых 64 сдвигов, чтобы сбросить данные и начать сначала. Данные на входах регистра следующие:
- Паттерн синхронизации: девять единиц
- Идентификатор производителя/версии: 2 блока по 5 бит, из которых 4 бита — данные, а пятый — четность
- Уникальный идентификатор: 8 блоков по 5 бит, из которых 4 бита — данные, а пятый — четность
- Контрольная сумма: 4 бита четности, подсчитанные по столбцам
- Стоп-бит: «0»
Смотрите описание протокола, там красивая табличка. Данные передаются старшим битом вперед. Всего есть 40 бит (8+32), которые пользователь устанавливает переключателями. Многие RFID-считыватели будут игнорировать поле «ID производителя/версии» и выдавать только 32-битный уникальный идентификатор (в десятичной системе, аррррр!).
Четность по строкам считается среди 4-битных групп (полубайт). Бит четности вычисляется при помощи 4-входового XOR (исключающее ИЛИ) следующим образом:
RPx = D0⊕D1⊕D2⊕D3 = (D0⊕D1)⊕(D2⊕D3),
что реализуется на трех элементах 74HC86. Четность по столбцам вычисляется аналогично, но по 10 битам, используя элемент 74HC280 для первых девяти бит и 74HC86 — для десятого.
Значительная часть меток имеют неизменяемые идентификаторы. Данная конструкция может выдавать все возможные идентификаторы, требуется только задать номер с помощью переключателей, а расчет четности остается прежним. Несмотря на то, что схема вычисления четности содержит много микросхем, она почти не потребляет энергии, так как находится в статическом состоянии. Таким образом, гибкость может быть достигнута только ценой добавления микросхем, без ущерба другим характеристикам.
Резонансный контур
Сердцем схемы питания является резонансный контур из конденсатора и катушки. Напряжение выпрямляется мостом на диодах Шоттки и поступает на накопительный конденсатор. Резонанс в контуре в сочетании с высокой добротностью будет обеспечивать достаточно высокое напряжение. Входное напряжение ограничено цепочкой светодиод+стабилитрон. Светодиод загорается, когда накопитель заряжен, а затем сжигает излишки энергии, защищая схему от перенапряжения.
Накопительный конденсатор вмещает достаточно энергии, чтобы питать метку некоторое время. Стабилитрон ограничивает максимальное напряжение на уровне примерно 12 В, а стоящий после него LDO-стабилизатор требует всего 0,4 вольта сверх рабочего напряжения 3,3 В. При емкости конденсатора 2 мкФ и расчетной нагрузке 800 мкА время работы составит (12В - 3,7В) * 2мкФ/800мкА ≈ 20 мс. Полный цикл передачи 64 бит на скорости 2 кбит/с занимает 32 мс. Накопитель будет заряжаться, по крайней мере, при отключенном модуляторе (около 50% времени), поэтому энергии должно быть достаточно.
Схема разработана так, что можно подключить дополнительный источник питания (3 или 4 батарейки AAA), а также включать/выключать LDO-стабилизатор. Батарея необязательна, но я не могу гарантировать, что все RFID-считыватели будут давать достаточную мощность.
Любопытный читатель может спросить меня, почему блок питания обеспечивает 3,3 В, в то время как семейство 74HC может работать и при 2 вольтах. Причина тому — схема ФАПЧ (см. ниже, «Восстановление тактового сигнала»). ГУН микросхемы 74HC4046 может работать лишь при напряжении питания выше 3 В. Если ФАПЧ не используется, напряжение питания можно уменьшить до 2 вольт. Все микросхемы семейства HC достаточно быстры, чтобы даже при 2 В справляться с тактовой частотой 125 кГц.
Восстановление тактового сигнала
Резонансный контур работает на частоте 125 кГц, которая используется для тактирования всей схемы. Сигнал с катушки через разделительный конденсатор подается на триггер Шмитта 74HC14 и преобразуется в сигнал RAWCLK (таким же образом обычно снимается сигнал 50 Гц с силового трансформатора). Гистерезис триггера Шмитта необходим по причине того, что сигнал имеет пологие фронты и может нести в себе много шума. Главной проблемой являются индуктивные наводки на катушку от электросети 50 Гц, которые приводят к возникновению фазового шума в тактовом сигнале. Триггер Шмитта обеспечивает устойчивость к шумам и убирает большую часть 50-герцовых наводок.
Опциональная схема ФАПЧ (PLL), выполненная на микросхеме 74HC4046, синхронизирует тактовый генератор с несущей частотой резонансного контура. ФАПЧ нужна только в том случае, если несущая частота прерывается. Такие разрывы могут возникать у RFID-считывателей, которые периодически подстраивают амплитуду электромагнитного поля, так, что сигнал оказывается ниже порога срабатывания триггера Шмитта. Тем не менее, считыватель остается способен принимать данные и при низких амплитудах поля. ФАПЧ поддерживает тактовый сигнал во время таких периодов. Схема имеет переключатель, позволяющий разрешить или запретить использование ФАПЧ. С отключенной ФАПЧ ниже потребление энергии, но ее включение может быть полезно для работы с некоторыми считывателями.
Проблемы с ФАПЧ могут возникнуть с дешевыми считывателями, которые генерируют несущий сигнал со значительным фазовым шумом (джиттером). Это заставляет ФАПЧ непрерывно работать, подстраивая фазу, что повышает энергопотребление. Другая проблема с ФАПЧ может возникнуть с очень плохими RFID-ридерами, которые восстанавливают принятые данные исключительно по своему внутреннему генератору 125 кГц. Если метка пропустит период, считыватель запутается, и случится Неприятная Штука™.
Делитель частоты
Некоторые тактовые сигналы являются производными (не в математическом значении слова «производная». — Прим. перев.) от главного сигнала MCLK. Метки EM4100 обычно выпускают под скорости передачи данных MCLK/16, MCLK/32 и MCLK/64, хотя значение MCLK/64 (2 кбит/с) наиболее распространено. Переключаемый делитель частоты для настройки скорости передачи собран на половинке счетчика 74HC393. Делитель формирует сигнал DCLK. Набор переключателей задает коэффициент деления для тактового сигнала.
Вторая половина счетчика 74HC393 формирует все внутренние тактовые сигналы (CCLK, PCLK и SCLK). Регистр данных сдвигается по сигналу SCLK, который задает скорость передачи данных.
Полная временая диаграмма приведена на схеме устройства (страница 2).
Счетчик по модулю 128
Регистр данных содержит 64 бита, но проблема в том, что перезагрузка данных занимает еще один такт. Если считать только до 64, то сигнал окончания счета перекроет один сигнал сдвига, что означает пропуск бита в следующем 64-разрядном цикле и приведет к неправильному началу цикла передачи данных. Проще говоря, полный цикл передачи 64 бит и перезагрузки регистра занимает 65 тактов. — Прим. перев.
Микросхема 74HC40103 работает как счетчик по модулю 128, ведя обратный отсчет от 127 до 0 на двойной скорости передачи данных, а затем перезагружаясь. Сигнал конца счета (MOD128) немного сдвинут по времени за счет синхронизации с CCLK для того, чтобы избежать перекрывания фронта с фронтом SCLK. Это выполняется при помощи триггера 74HC74, который формирует сигнал параллельной загрузки регистра ~PLOAD.
Манчестерское кодирование
Схема кодирования, используемая в большинстве меток, как упоминалось ранее, манчестерская. Основное преимущество манчестерского кода — в простоте его генерации. Исключающее ИЛИ между тактовым сигналом и потоком данных дает манчестерский код. Элемент 74HC86 складывает сигналы SCLK и SDELAY для кодирования потока данных.
Фактический поток данных из регистра, SOUT, задерживается на один такт для формирования SDELAY. Когда регистр данных перезагружается, то SOUT сразу же изменяется с «0» на «1» (переход от стоп-бита к старт-биту). Тем не менее, параллельная загрузка регистра, как было сказано выше, не привязана к фронту сигнала сдвига, а генерация манчестерского сигнала должна оставаться синхронной с SCLK, чтобы не было ложных переходов. Задержка на один такт делает все биты в потоке данных синхронными с SCLK.
Манчестерский сигнал, по прогнозам, должен иметь выбросы (глитчи) при переходах 0→1 и 1→0. В этих местах сигнал SCLK инвертируется, но SDELAY и SOUT не синхронны на 100%. Выброс вызывается гонкой сигналов SDELAY и SCLK из-за задержки срабатывания триггера 74HC74. Однако, этот выброс настолько узкий (10-30 нс), что модулятор не успевает на него среагировать, не говоря уже о приемнике, в котором сигнал сильно фильтруется. Так что выброс оставили как есть.
Двухфазное кодирование
Другая разумно легко реализующаяся схема кодирования — это двухфазная. Она идентична дифференциальному манчестерскому кодированию с фазовой задержкой и представляет собой частотно-манипулированный (FSK) сигнал, наложенный на несущую с помощью амплитудной манипуляции (ASK). Сложность двухфазного кодирования в том, что уровень выходного сигнала всегда переменный, в то время как частота изменяется в соответствии с передаваемыми данными. Эту трудность можно преодолеть, используя двойную скорость генератора, а затем разделив полученный результат на два.
На первом этапе происходит мультиплексирование сигналов PCLK и SCLK на основе потока передаваемых данных при помощи набора элементов 74HC00 (И-НЕ). На выходе мультиплексора наблюдаются выбросы, по тем же причинам, что описаны выше (гонка SDELAY и SCLK), а также потому, что PCLK и SCLK не синхронны. (Приветствую тех, кто дочитал до этого места и не уснул. Дальше будет веселее. — Прим. перев.) Счетчик 74HC393 является асинхронным, и это вызывает проблемы. Сигнал с выбросами не может быть безболезненно пропущен через делитель на два, ведь выбросы тоже могут быть интерпретированы счетчиком как импульсы. Мультиплексированный сигнал очищается от выбросов путем квантования сигналом CCLK, который гарантированно держится на высоком уровне значительно дольше, чем длительность выброса. Наконец, деление частоты на два с помощью триггера 74HC74 завершает формирование двухфазного сигнала.
Предусмотрены переключатели для выбора типа кодирования: манчестерское или двухфазное.
Модулятор
Наконец, закодированный сигнал должен быть направлен обратно в катушку, чтобы его принял RFID-считыватель. На обоих выводах катушки напряжение может быть как положительным, так и отрицательным, поскольку в ней индуцируется переменный ток.
Амплитудная модуляция осуществляется созданием контролируемого замыкания на землю обоих концов обмотки с помощью пары МОП-транзисторов, каждый из которых работает на своем полупериоде сигнала. Выпрямительный мост образует замкнутый путь на землю для каждого из выводов. Несмотря на то, что МОП-транзисторы способны реагировать на вышеупомянутые выбросы сигнала, резонансный контур не может, так как он настроен на частоту, на 2-3 порядка более низкую, чем частота выбросов.
Большинство картинок и диаграмм, которые вы найдете в сети, не показывают эту часть или показывают ее неверно. Замыкание является контролируемым по времени, в соответствии с закодированными данными, и ограниченным по сопротивлению, за счет резисторов. Пассивные RFID-метки, как правило, малы, и оперируют на порядок меньшей мощностью, чем эта. Метки обычно имеют маленькие катушки, и таким образом, могут достичь только очень небольшой глубины модуляции. Если большую катушку в нашей конструкции замкнуть накоротко, посланный сигнал, скорее всего, будет настолько сильным, что собьет с толку большинство считывателей. Также, короткое замыкание катушки требует использования ФАПЧ для поддержания тактовой частоты на то время, пока катушка замкнута.
Сборка прототипа
Теперь, если теория и схема верны, все должно работать как задумано. Тем не менее, практика и теория не всегда соответствуют друг другу, и мое серое вещество тоже подводит меня время от времени.
![](https://habrastorage.org/storage2/77a/519/0af/77a5190afe064875317f94c8fd124f24.jpg)
Прототип имеет 40 красных переключателей для установки идентификаторов метки и 4 синих — для делителя. Верхний ряд из 8 микросхем — это элементы «Исключающее ИЛИ» 74HC86 для вычисления четности по строкам. Средний ряд — восемь сдвиговых регистров 74HC165, которые образуют 64-битный регистр данных. В нижнем ряду левые пять микросхем подсчитывают четность по столбцам — четыре 74HC280 и одна 74HC86. Остальное — это счетчики, ФАПЧ и триггера Шмитта.
Пайка заняла около 6 часов в общей сложности. Основная задача прототипа — показать работоспособность основных функций и возможность работы всего устройства от электромагнитного поля. Прототип содержит только элементы для манчестерского кодирования, включая схему ФАПЧ.
![](https://habrastorage.org/storage2/97c/fcb/b56/97cfcbb56793ef0d23ef9cb27070429f.jpg)
Отладка
Разработка основной схемы была несложной задачей. Это заняло всего несколько часов. Тем не менее, некоторые вещи не были запланированы достаточно тщательно и некоторая функциональность должна была быть проверена экспериментально.
Первоначальные мысли, родившиеся после поиска материалов в сети, говорили о том, что модуляция должна быть глубокой, очень глубокой, и что катушка должна полностью замыкаться при этом. Это заставило меня потратить много времени на отладку ФАПЧ, что не всегда так просто, как кажется.
Проблемы с ФАПЧ
Проблема с ФАПЧ в том, что нужно сбалансировать несколько параметров для обеспечения стабильной работы. С одной стороны, необходимо обеспечить быстрый и стабильный захват фазы, в то же время пытаясь сократить как диапазон захвата, так и дрейф восстановленного тактового сигнала при прерывании несущей. Использование документации на 74HC4046 оказалось сложне, чем я думал. Там нет готовых формул для всех компонентов, а некоторые нужно находить по графикам (для меня осталось загадкой, почему значения графиков расходились с реальностью в два раза, ну да ладно). Потребовалось некоторое время, чтобы найти подходящие номиналы для всех компонентов, и убедиться, что частота 125 кГц пришлась на середину диапазона ГУН, и в то же время дрейф был несущественно мал.
![](https://habrastorage.org/storage2/105/abf/dc0/105abfdc02da88a2ff6cbfc3d3d33a5e.jpg)
Во время анализа дрейфа я также обнаружил значительную порцию 50-герцовых наводок, дающих частотную модуляцию сигналу ФАПЧ. Сильное сжатие катушки в руке убирало наводки. Проблема была в том, что фазовый компаратор на входе ФАПЧ имеет переменный порог срабатывания, из-за того, что входной сигнал не является двоичным. Устройство восстановления тактового сигнала с емкостной связью давало фронты, неподходящие для логических схем. Было установлено, что триггер Шмитта решает эту проблему.
Важным свойством триггера Шмитта является то, что он потребляет большую мощность во время фронтов сигнала. Причиной этого является то, что входной каскад работает в линейном режиме в сочетании с обратной связью для обеспечения гистерезиса. К счастью, время, проводимое в режиме большой мощности, невелико, и общее энергопотребление ограничено. Но все же использование триггера Шмитта приводит к утечке в системе.
Дешевые считыватели и мусорный сигнал
Когда я начинал проект, я понятия не имел, насколько чувствительным к модулированному сигналу будет RFID-считыватель. Поэтому модуляция была реализована в виде полного замыкания катушки, как было найдено в сети. Вскоре оказалось, что модуляция была слишком глубока, и RFID-считыватель не мог выделить из сигнала стартовые и стоповые биты. Электроника ридера была просто ошеломлена такой модуляцией и выдавала всякий мусор.
![](https://habrastorage.org/storage2/337/975/992/33797599215ee3368d5622860dbb3ee4.jpg)
Единственный доступный считыватель пришлось вскрыть и припаять несколько проводов к его плате, чтобы посмотреть, какие на самом деле данные он принимает. Оказывается, что RFID-ридер может принять данные с катушки, закороченной источником тока порядка 50-100 мкА. Это несколько далековато от тех 2,5 мА, которые дает полное замыкание катушки. Дополнительным преимуществом является то, что ФАПЧ теперь необязательна. Восстановление тактового сигнала будет идти даже в то время, когда модулятор замыкает обмотку. Остаточной индукции катушки оказалось достаточно, чтобы поддерживать тактирование.
![](https://habrastorage.org/storage2/664/ed0/27d/664ed027df9961789646cd1f7c65b7ff.jpg)
Модулятор был изначально собран на биполярных транзисторах. Это привело к пологим фронтам сигнала, потому что транзисторы работали в режиме низкого энергопотребления, а значит, весьма медленно. Замена их на МОП-транзисторы сделала модулятор быстрее и сэкономила очередные 27 мкА потребляемого тока. У меня были только транзисторы в корпусах SOT-23 (Маленькие тараканчики для SMD-монтажа. — Прим. перев.), и их пришлось ставить на печатную плату при помощи штырьков. 3,3-вольтовый LDO-стабилизатор, имевшийся под рукой, был в корпусе SO-8, он смонтирован проволочками на куске штыревого разъема.
Единственный RFID-считыватель был неизвестного производства и соответствующего качества. Он оправдал самые худшие ожидания. Если вы отправляете на считыватель некорректные данные, вы можете: а) подвесить считыватель, б) получить мусор на вводе в компьютер и в) проклясть все на свете, пытаясь понять, почему что-то не работает как ожидалось. Единственное, что выяснилось, это то, что нужно было собрать свой собственный считыватель в первую очередь. Оказалось, что считыватели на входных дверях здания были гораздо надежнее и смогли переварить все, что я на них передавал.
Поиск логических ошибок
После получения на считывателе нормально декодируемого сигнала он по-прежнему не работал как надо. В схеме обнаружились две ошибки.
Первая была в счетчике по модулю 128, который тактировался по переднему фронту сигнала PCLK. Однако должен был — по заднему. Прототип посылал 10 стартовых бит вместо девяти, потому что сигнал PLOAD перекрывал передний фронт тактового сигнала сдвига. Простой инвертор на PCLK решил эту проблему. Окончательный дизайн, с двухфазным энкодером, формирует правильный сигнал PCLK как часть работы энкодера.
Вторая ошибка заключалась в полярности манчестерского кода. Единственное упоминание в сети гласило: «низкий уровень означает высокий ток» и содержало диаграмму перехода «низкий → высокий уровень» для логической «1». Описание допускает множество интерпретаций. Оказывается, это означает: «низкий уровень означает включенный модулятор (закороченную катушку)». К счастью, задержка потока данных для формирования SDELAY давала и прямой, и инвертированный потоки данных. Переделка манчестерского энкодера для использования инвертированного сигнала была тривиальной.
Тест пассивного питания
Было измерено энергопотребление всего прототипа, чтобы понять, возможно ли пассивное питание. Потребляемый ток при 3,3 В колебался около 780 мкА, это достаточно мало, чтобы замкнуть контур и перевести прототип на пассивное питание.
А затем… ничего не произошло с дешевым считывателем.
Все работало как ожидалось, питание поступало, данные отправлялись, и вдруг, внезапно, «БИП!». Код был корректно распознан и высветился на экране компьютера, к которому подключен ридер. Успех! Теперь можно открывать дверь самодельной RFID-меткой.
![](https://habrastorage.org/storage2/c9a/cc7/09a/c9acc709aeb18e6758ff883c39dda79e.jpg)
В погоне за резонансным питанием
Питание от резонансного контура должно быть настроено таким образом, чтобы считыватель не сбивался слишком часто, и в то же время извлекалось достаточно энергии для работы метки. Это оказалось сложнее, чем я думал. Как говорилось ранее, добротность играет значительную роль. На самом деле, нужна небольшая катушка, достаточно крупная для получения энергии, но достаточно маленькая, чтобы не нагружать передатчик слишком сильно и обеспечивать легкую модуляцию.
Обратите внимание, что резонансная LC-цепь работает не точно на резонансной частоте, рассчитанной для выбранных компонентов. Причина в том, что схема метки создает (слегка емкостную) нагрузку для контура. Таким образом, катушка должна быть немного меньше, чем рассчитано. Это имеет то преимущество, что вы можете сделать катушку в соответствии с теорией, а затем удалять витки до достижения правильной частоты.
Оказалось, что дешевый считыватель был очень чувствителен к высокой нагрузке, и чем ниже была нагрузка, тем лучше он работал. Изначальная катушка, 3,3 мГн была уменьшена вдвое несколько раз, пока некий стабильный компромисс не был найден при индуктивности около 680 мкГн. Вторым изменением было снижение емкости накопительного конденсатора с 10 до 2 мкФ. Считыватель по-прежнему сбоит то и дело, но по крайней мере, работает чаще, чем раньше.
Во всяком случае, контроллер на двери, кажется, был рад всему, что я посылал, и не подводил меня ни разу (даже если я забывал свой настоящий ключ во время тестирования).
![](https://habrastorage.org/storage2/ff6/1f2/905/ff61f2905d80b558b37eb06b5ce89d17.jpg)
Безымянный RFID-ридер прекрасно работает, когда метка имеет внешнее питание. При использовании внешнего источника, по-видимому, лучше включить ФАПЧ. Я думаю, они слишком сэкономили на развязывающих конденсаторах ;)
После обсуждения с Марком (парень, который использует этот фиговый ридер) он сказал мне, что видел проблемы с этим считывателем, даже используя нормальные метки. Мы решили устроить ему небольшой сеанс отладки. В цепях питания ридера присутствовали 200 мВ пульсации (на частоте 125 кГц) и некоторые неприятные импульсы здесь и там. Пайка дополнительных конденсаторов 1 мкФ + 100 нФ в места на плате, отмеченные шелкографией, но не использованные, значительно улучшила работу считывателя. Теперь он спотыкается еще реже и может считывать данные с прототипа даже при пассивном питании.
Замечание для всех: не покупайте такие говносчитыватели. Или купите хороший, или соберите его самостоятельно.
Если вы думаете, что история на этом заканчивается, то вы ошибаетесь. Еще есть куда совершенствовать модулятор, и значительные изменения позволили ему работать гораздо лучше. Даже дешевый безымянный считыватель можно заставить работать хорошо.
Печатная плата
Посмотрев на оригинальную конструкцию и обдумав варианты, было решено, что этот гаджет слишком прикольный, чтобы оставить его в покое в качестве прототипа. Он просто напрашивается на несколько большее внимание и доведения разработки до абсурдного конца. Была разработана печатная плата, и, с некоторой осторожностью, все детали поместились на площади 50x100 мм в два слоя, не выдавая ошибок трассировщика «Недостаточно места». Размер 50x100 означает доступность массового производства на ITead или Seeed (Сервисы изготовления заказных печатных плат. — Прим. перев.). Однако, создание платы размером с кредитную карту оказалось слишком трудным.
![](https://habrastorage.org/storage2/168/a91/533/168a91533d755617c51750ad2f407544.png)
Плата разработана под SMD-компоненты, чтобы все уместилось. На ней 412 переходных отверстий диаметром 0,3 мм и дорожки/зазоры минимальной ширины 7 mil. Реализованы все возможности, включая идентификатор, полностью настраиваемый при помощи переключателей, возможность внешнего и пассивного питания, переключение между прямым тактированием и ФАПЧ, манчестерское и двухфазное кодирование и настраиваемую скорость передачи: 1, 2, 4 или 8 кбит/с.
Прототип преподал нам несколько уроков, которые были учтены в окончательной версии схемы и печатной платы.
- Счетчик по модулю 128 в прототипе был собран на двух микросхемах 74HC163, которые заменили одной 74HC40103 для экономии места
- Входная защита состояла из двух встречно-последовательно включенных стабилитронов (2x24 В). Их заменили на цепочку стабилитрон+светодиод, которая обеспечивает защиту и индикацию
- В прототипе использована микросхема 74HC14, содержащая шесть триггеров Шмитта. Однако, из них нужен только один, и микросхема была заменена на 74HC1G14, у которой только один элемент в корпусе
- На свободном месте платы было решено собрать двухфазный энкодер и сделать возможность выбора кодирования при помощи переключателей
- LDO-стабилизатор заменен на модель с возможностью включения-выключения (и добавлена кнопка «ВКЛ») и с более низким током потребления
- Теперь можно разрешить/запретить использование ФАПЧ при помощи переключателя. Для снижения энергопотребления схема ФАПЧ отключается, когда она не нужна
Cпецификация
Стоимость деталей составляет меньше 30$ без учета платы и катушки. Катушку вам придется сделать самостоятельно (см. ниже). На самом деле, DIP-переключатели и печатная плата являются самыми дорогими компонентами.
Вы можете заменить большинство компонентов на те, что есть у вас. Тем не менее, входные конденсаторы должны быть в состоянии выдержать не менее 16 В. Кроме того, вы должны использовать резисторы точностью 1% и конденсаторы 5% для резонатора и ФАПЧ, чтобы параметры соответствовали расчетным.
Следует отметить, что развязывающие конденсаторы все по 10 нФ (вместо обычных 100 нФ). Это нужно для снижения нагрузки на резонансный контур. Схема работает на низкой частоте и может выдержать слегка увеличенный уровень шума на шине питания, так как напряжение питания выше минимально допустимого.
Согласно расчетам, катушка должна содержать 89 витков провода диаметром 0,4 мм и иметь средний диаметр (измеренный по средней линии обмотки) 50 мм. Катушка была намотана на оправке диаметром 48 мм (картридж от силиконового герметика), а затем с помощью вощеного шнура ей придали красивую тороидальную форму и плотно уложили витки. Нужная частота резонанса, вероятно, достигается с 88 или 87 витками, в зависимости допусков.
Вы можете сделать катушку любой формы, какая вам нравится (например, квадратную или прямоугольную), если вы правильно настроите контур в резонанс. Тем не менее, изменение формы потребует некоторых экспериментов, так как от размеров зависит индуктивность и сила электромагнитной связи (см. ниже для прямоугольной катушки).
Если вы измеряете индуктивность катушки, делайте это на частоте 125 кГц. Индуктивность зависит от частоты из-за паразитной емкости витков и электромагнитной связи между ними (например, катушка 3,3 мГн показывает индуктивность меньше 100 мкГн на частоте 1 кГц). Паразитные параметры будут также влиять на резонансную частоту и достигаемую добротность.
Замечания по безопасности
Как вы можете видеть, эмуляция RFID-меток тривиальна. Все системы, где для доступа требуется только ключ, уязвимы к атакам эмуляции метки. RFID в системах управления доступом должен использоваться только как один из факторов аутентификации, в связке «то, что у вас есть + то, что вы знаете» (хотя, и это может быть неэффективным).
Даже метки с шифрованием уязвимы для множества атак. Кроме того, становится все легче эмулировать метки на смартфонах с поддержкой NFC (которые обычно работают на 13,56 МГц). Просто правильно напишите приложение для модуляции поля, и вы сможете делать все, что хотите.
В качестве стандартной отмазки напомню, что автор (И переводчик! — Прим. перев.) не несет никакой ответствености за последствия использования информации из данной статьи. Читатель должен сам отвечать за все свои действия.
Корпус
Иногда очень везет. Красивый корпус не помешал бы именно сейчас, когда прототип закончен, а печатная плата заказана. И именно в это время Флеминг закончил собирать и запустил станок лазерной резки OSAA PhotonSaw. После года работы над проектом лазер готов вырезать свои первые детали. Флемминг и Рун делают последние юстировки и ставят на место алюминиевую крышку лазерного шкафа. Вы можете себе представить, как все мы были рады видеть, что эта штука работает.
С работающим станком мы получили возможность протестировать наш проект в реальной жизни. Корпус для нашей RFID-метки сделали из 2-миллиметрового огрстекла. Этот корпус — первый объект, сделанный на PhotonSaw, да!
![](https://habrastorage.org/storage2/792/da5/c64/792da5c64e845750f6818a21d8351a19.jpg)
Родилась идея расположить катушку на внешней стороне корпуса. Сперва было решено использовать половину высоты корпуса, но это не работало на практике (дополнительные отверстия в длинных сторонах, таким образом, не используются). Катушка просто великолепно разместилась по периметру всего корпуса, хотя у меня были сомнения, не будет ли прямоугольная обмотка (105x55 мм) слишком большой для нормальной электромагнитной связи.
Тестовая катушка была намотана, без всяких расчетов, проводом 0,4 мм в 66 витков. И, очевидно, нам опять повезло, потому что катушка получилась точно такой как надо, индуктивностью 645 мкГн, с подключенной меткой давая резонансную частоту 125,2 кГц. Тест на дверном считывателе показал, что прототип работает просто прекрасно с этой катушкой.
С катушкой снаружи корпуса толщину последнего можно уменьшить. Внутренняя толщина теперь зависит только от высоты деталей на плате, и с учетом толщины платы должна составлять около 6 мм. Кроме того, было бы хорошо добавить гравировку. Флемминг предложил скруглить боковые стороны корпуса из эстетических и эргономических соображений. Изогнутый корпус также будет лучше защищать боковые стороны катушки, потому что там, где нет сильного натяжения, витки провода любят вылезать наружу.
![](https://habrastorage.org/storage2/e8b/ec2/1db/e8bec21dbdcdba5bfd60582c628db5e3.jpg)
Станок PhotonSaw еще не совсем в нормальном состоянии: гравировка на верхней крышке значительно съехала. Необходимо его окончательно отладить перед изготовлением финальной версии корпуса. Изогнутые контуры также подверглись ошибке расчета в программном обеспечении, так как луч не вернулся в начальное положение после прохода замкнутой траектории. Но во всяком случае, кривые выглядят действительно гладкими.
Сборка печатной платы
Прибыла заказанная плата:
![](https://habrastorage.org/storage2/0b9/d35/8d1/0b9d358d18255d04611a247ff33bb937.jpg)
Сборка была не очень сложной. На плату по трафарету нанесли паяльную пасту, разместили все детали, а затем запаяли в самодельной печи.
![](https://habrastorage.org/storage2/b1c/5d6/dc1/b1c5d6dc189f20662975d24ab4295e91.jpg)
Тестирование печатной платы, однако, снова преподнесло ряд сюрпризов. Ошибки, найденные на первой версии платы:
- Площадки для DIP-переключателей расположены слишком близко друг к другу. Пришлось слегка сошлифовать корпуса переключателей с боков, чтобы они встали на место. В следующей версии зазоры увеличили на 10 mil.
- Шелкография с обозначением скоростей передачи сделана неправильно. Значения должны идти в порядке «1 2 4 8», а не «8 4 2 1». Исправим в следующей версии.
- Изменения, внесенные в прототип, видимо, работают слишком хорошо в энергетическом отношении, что привело к целому ряду неожиданных проблем. Было обнаружено паразитное питание схемы в выключенном состоянии.
- Модуляция работает тяжело и неустойчиво. Основная причина заключается в различных уровнях входного напряжения в сочетании с модулятором, который работает в режиме модуляции напряжением.
Паразитное питание
Новый отключаемый стабилизатор (MCP1804) позволяет сэкономить много энергии. Смысл его в том, что подключенного аккумулятора хватит надолго, если метка будет находиться в состоянии сверхнизкого потребления. Но когда катушка находится вблизи считывателя, появляется обходной путь для питания через схему восстановления тактового сигнала.
![](https://habrastorage.org/storage2/1c3/05a/95b/1c305a95bc7fd1e23b0fb51bc2a5fe15.png)
Через разделительную емкость (47 пФ имеют сопротивление примерно 27 кОм на частоте 125 кГц) и защитные диоды ток поступает на шины питания. Энергии, поступающей с катушки, хватает на поддержание напряжения питания около 1 В. Ток может достигать 250-500 мкА. Удивительно, но микросхемы 74HC, похоже, работают при таком питании. К сожалению, при таком напряжении происходят довольно странные вещи. Микросхемы 74HC имеют внутреннюю схему сброса, и нужно убедиться, что она срабатывает. Обратите внимание, что отключение защитных диодов не помогает. На входах микросхем есть внутренние защитные диоды, которые в этом случае открываются и выполняют ту же работу.
Сброс по питанию срабатывает только если напряжение питания падает ниже определенного уровня в течение некоторого периода времени. Если напряжение остается слишком высоким, то внутренняя логика может запутаться, потому что некоторые ее части могут быть в неопределенном состоянии, в то время как другие работают должным образом. Необходим внутренний сброс для установки всех микросхем в согласованное состояние. Таким образом, схема будет неустойчиво работать при очень низком напряжении питания.
Симптомы наблюдались следующие: метка работает некоторое время, при этом посылая корректные данные. Если катушку убрать от считывателя, а затем вернуть обратно, можете делать ставки, выключится ли при этом метка. Иногда срабатывает, иногда — нет. Отключение ФАПЧ ухудшает ситуацию. Низкое энергопотребление приводит к тому, что ридер время от времени будет принимать данные от выключенной метки. Вот что значит «энергоэффективная система».
Существует два решения: 1) уменьшить конденсатор в цепи восстановления тактового сигнала до 15 пФ, и 2) включить между питанием и землей резистор 22-100 кОм для сброса лишней энергии. Второй метод приводит к росту утечек во время работы и на самом деле не требуется при уменьшении емкости конденсатора. Тем не менее, он предусмотрен как опция, и это все равно лучше, чем неопределенное состояние микросхем.
Модуляция током или напряжением
Модулятор принес свежую порцию головной боли. Модуляция полностью исчезала при помещении катушки на определенном расстоянии от считывателя. Также это могло случиться при перемещении катушки к ридеру или от него.
Причина оказалась в схеме модулятора. МОП-транзисторы замыкают катушку на резистор определенного сопротивления. Однако, если потребление энергии из контура велико, сопротивление модулятора значительно выше, чем сопротивление цепей питания. Это приводит к тому, что глубина модуляции зависит от потребляемого тока, а это не очень хорошо. Ситуацию ухудшил выбор ограничительного стабилитрона на более низкое напряжение, чем в прототипе.
![](https://habrastorage.org/storage2/5d5/2c7/943/5d52c7943f307a6edea80a26ea4e9537.png)
Было принято решение перевести модулятор из режима модуляции напряжением в режим модуляции током. Для первого режима резистор находился в цепи стока, а теперь он включен между истоком и землей. На этом резисторе будет падать напряжение затвор-исток, пока не останется значение чуть выше порога открывания транзистора (0,9-1,1 В), которое переведет транзистор в линейный режим. Теперь ток через транзистор будет стабильным, независимо от напряжения на стоке.
Тестирование на прототипе показало, что модуляция током работает очень хорошо. Дешевый безымянный считыватель больше не сбоит (ну ладно, может быть один раз на сотню или около того). Можно предположить, что это изменение будет работать чудесно и на других ридерах, и метка теперь, вероятно, сможет работать на большинстве из них.
Законченная версия 1
Можно заметить внесенные изменения на печатной плате. У меня не было 15 пФ SMD-конденсатора, пришлось впаять обычный, с ногами. Модулятор оброс дополнительными резисторами на истоках транзисторов. В целом приемлемо для первой версии.
(картинки кликабельны)
![](https://habrastorage.org/storage2/a8d/d07/f14/a8dd07f14c4c00e641cb92aa873d68d1.jpg)
![](https://habrastorage.org/storage2/914/6f8/612/9146f8612d3eac95bab7c04c7367a5a1.jpg)
![](https://habrastorage.org/storage2/0aa/7b1/21c/0aa7b121c404d8354b8d7f94bc8b7d37.jpg)
![](https://habrastorage.org/storage2/53b/de2/fdb/53bde2fdbbc35dd7c7447571b65e4f1f.jpg)
Видео-демонстрация
Заключение
Вы можете подумать, что этот проект, собранный на логике 7400, можно отнести к ретро-схемотехнике, но это не совсем так. Во-первых, современное семейство 74HC не такое уж и старое. Во-вторых, низкопотребляющие схемы всегда актуальны. В-третьих, микросхемы одиночных логических элементов (такие, как использованный триггер Шмитта) часто используются в современных разработках. Часто забывают, что развитие технологий не прекращается и для старых семейств микросхем. Они просто стали менее заметны на фоне общего разнообразия.
Аналоговая часть оказалась сложнее в разработке, чем цифровая. Частично из-за отсутствия спецификаций, но в основном, за счет множества компромиссов, необходимых для соответствия параметрам, и непредвиденных побочных эффектов. Цифровые конструкции имеют относительно мало вариантов, в то время как аналоговые обычно требуют баланса между различными (и часто противоположными) критериями.
Я должен признаться, что микросхемы 74HC сделаны очень, очень хорошо. Разработчики знали, что они делают, и достигли очень низкого энергопотребления. Сперва у меня были некоторые сомнения, сможет ли метка работать от пассивного питания, но после прочтения спецификаций это осталось лишь вопросом правильной схемотехники. Хотя, есть еще возможности для оптимизации различных частей метки.
Теперь посмотрим, как этот проект покажет себя на конкурсе 7400 2012 года. Подача заявок на конкурс заканчивается 31 ноября. Пожелаем автору удачи! — Прим. перев.