- PVSM.RU - https://www.pvsm.ru -

Hardware is hard: разработка визитки с микроконтроллером, светодиодами и питанием по NFC

Hardware is hard: разработка визитки с микроконтроллером, светодиодами и питанием по NFC - 1

У моей визитки, как и у большинства, собственной батареи нет. Но достаточно поднести её к телефону, как микроконтроллер запускает анимацию по 21 светодиоду, получая питание исключительно через NFC.

Этот проект я начал около трёх месяцев назад, чтобы без лишних усложнений набраться опыта в проектировании печатных плат. Вот только «без лишних усложнений» продолжалось недолго. В процессе разработки этой визитки я получил гораздо больше опыта, чем планировал, да и сам конечный результат мои ожидания тоже превзошёл. Все детали проекта можно найти в репозитории [1].

Я повидал много разных визиток, изготовленных на базе печатной платы. В большинстве [2] для нанесения контактных данных и QR-кода использовалась шелкография и медь. И это реально круто, но такие карточки больше про графический дизайн, чем про электронику. Встречались и более сложные версии [3] — с дисплеем, батареями и разъёмами для подключения внешних устройств. Как по мне — это очень крутые модели, но дорогие и слишком уж массивные.

Я же хотел получить простую и достаточно недорогую визитку, которую было бы не жалко отдавать людям. В конечном итоге мне попалась информация о визитных карточках с NFC [4]. Их принцип меня полностью устраивал: никакой батареи, минимум манипуляций с радиоэлектроникой и недорогие комплектующие. Когда я начал изучать конкретные чипы NFC, то понял, что подавать питание на другие компоненты способны лишь немногие — в частности, ими оказались NXP NTAG I2C Plus и STMicro ST25DV-KC.

Думаю, стоит пояснить общий принцип работы NFC. Ваш телефон по нескольку раз в секунду излучает небольшое магнитное поле. NFC-чип улавливает это излучение, в некотором роде превращая ваш телефон в крохотный беспроводной зарядник. Обратных сообщений телефону чип не отправляет — он лишь изменяет объём поглощаемой энергии поля, а телефон детектирует эти просадки и преобразует информацию о них в двоичные данные. Большинство NFC-меток используют собранную энергию только для питания внутренней схемы, но есть и такие, которые могут передавать избыток постоянного тока на внешние компоненты. Как раз на этом принципе и работает моя визитка.

В теории всё выглядело не сильно сложно, и я без проблем накидал схему в KiCad. В качестве микроконтроллера я выбрал ATiny412. Он компактный, имеет достаточно вводов-выводов и требует очень мало энергии.

Hardware is hard: разработка визитки с микроконтроллером, светодиодами и питанием по NFC - 2

Светодиоды я подключил по технике Чарлиплексинга [5], задействовав характерное свойство светодиодов пропускать ток только в одном направлении. В приведённой статье Wikipedia это всё прекрасно описано, но ключевой момент в том, что трёхстабильная логика позволяет управлять множеством светодиодов с помощью всего нескольких портов ввода-вывода. Конкретный расчёт можно сделать по формуле y = x⋅(x-1), где y представляет количество светодиодов, которыми можно управлять независимо, а x — количество вводов-выводов. Главный недостаток такого решения в том, что одновременно может гореть только один светодиод. Но это ограничение можно обойти с помощью ШИМ, распределив рабочие циклы между несколькими LED. В этой пилотной версии я реализовал управление 12 светодиодами с помощью 4 вводов-выводов (от GPIO_A до GPIO_D).

Архитектура системы

Изначально я выбрал ATtiny412, но быстро понял, что это не самый оптимальный выбор. У этого микроконтроллера всего 5 портов ввода-вывода, и выпускается он только в корпусах типа SOIC с ножками, а не в формате QFN, поэтому оказывается выше над печатной платой.

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

Ну а раз я всё равно планировал заказывать профессиональную сборку, то счёл разумным выбрать более компактный корпус QFN, в котором ATtiny412 не выпускается. Немного порывшись в сети, я нашёл ATtiny816. Он похож на 412-й, но уже имеет 17 портов ввода-вывода и выполнен в гораздо более тонком корпусе 3 × 3 мм. Теперь я мог выделить под светодиоды шесть портов GPIO, что позволило подключить 20 штук по схеме чарлиплексинга, а оставшийся использовать в качестве индикатора, включив его между GPIO и GND. Кроме того, я решил перейти на NXP NTAG I2C Plus, так как он поддерживает стандарт NFC с меньшим радиусом действия, но более высокой мощностью.

Hardware is hard: разработка визитки с микроконтроллером, светодиодами и питанием по NFC - 3

Читая документацию к NTAG I2C Plus, я заметил, что ёмкость на VOUT не должна превышать 220 нФ. Если взять конденсатор с большей ёмкостью, это приведёт к просадке на шине питания и создаст цикл перезагрузки, который не позволит системе запуститься. Но я всё же хотел конденсатор пожирнее, поэтому придумал такую схему:

Hardware is hard: разработка визитки с микроконтроллером, светодиодами и питанием по NFC - 4

С3 на 10 мкФ внизу помогает сгладить VCC, но при запуске он бы потреблял слишком большой ток. Чтобы это исключить, в цепь установлен R3, который ограничивает пусковой ток до нескольких мА. Однако после зарядки конденсатора этот резистор стал бы излишне его замедлять. В этом случае P-канальный MOSFET, Q1, выступает в качестве ключа. Спустя 120 мс после запуска, когда C3 полностью зарядился, микроконтроллер подтягивает GATE к нижнему уровню, создавая для конденсатора путь с низким импедансом, чтобы сгладить просадки напряжения. R2 здесь играет исключительно подтягивающую роль, чтобы удерживать GATE на высоком уровне первые 120 мс. Таким образом мне удалось собрать схему с использованием ёмкого конденсатора, не отклоняясь от основной документации.

На каждой линии чарлиплексинга я решил установить резисторы 100 Ом. Общее сопротивление при этом, по сути, удваивается, так как ток должен протекать из одного порта ввода-вывода через резистор -> светодиод -> ещё один резистор. Я также понял, что если резисторы на 100 Ом будут пропускать слишком большой ток, то можно применить к светодиодам высокочастотную ШИМ. За счёт конденсатора на 10 мкФ эти импульсы будут сглаживаться в устойчивый ток, предотвращая просадку VOUT. Если верить расчётам, то при частоте обновления 1 кГц и коэффициенте заполнения ШИМ 20% напряжение VOUT будет падать всего на 0,2 В.

Сборка антенны

Подходящие размеры и характеристики антенны я определил с помощью калькулятора индуктивности [6] от STM. Я хотел, чтобы она охватывала всю площадь карты. В итоге путём нехитрых экспериментов с количеством витков, шириной дорожки и расстоянием между её линиями, мне удалось найти удачное сочетание этих параметров. Мне нужно было обеспечить индуктивность около 2,75 мкГн, чтобы антенна резонировала с внутренним конденсатором NTAG ёмкостью 50 пФ на частоте 13,56 МГц. Добиться этого удалось при следующих характеристиках:

 

Hardware is hard: разработка визитки с микроконтроллером, светодиодами и питанием по NFC - 5

Благодаря чуть меньшей индуктивности, я могу настроить антенну точно на нужную частоту. Если сделать её ровно 2,75 мкГн, то в случае погрешности поднять частоту до нужного уровня уже никак не удастся. Поэтому я сразу параллельно включил в цепь конденсатор на 1,5 пФ, чтобы слегка опустить частоту. Если же его вдруг окажется мало, то я всегда смогу впаять более ёмкий, чтобы снизить её ещё.

Следующим делом я занялся разводкой печатной платы. Меня удивило, что в KiCad нет инструмента для генерации антенн или катушек индуктивности, а все плагины, которые я перебрал, не прямоугольную спираль создать не могли. Решением стал скрипт на KiPython. Написал я его с помощью LLM — после буквально пары минут диалога скрипт уже работал. Он генерирует простую дорожку в виде прямоугольной спирали, которая в точности соответствует параметрам, что я вводил в калькулятор от STM. Я добавил этот файл .py в репозиторий [7] — возможно, он пригодится другим. После этого я вручную скруглил углы — эта небольшая правка уменьшила площадь охвата антенны всего на несколько процентов.

Hardware is hard: разработка визитки с микроконтроллером, светодиодами и питанием по NFC - 6

Компоновка

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

Цветовая маркировка не только сделала наглядными пути отдельных дорожек, но и приукрасила схему в целом. Разводка дорожек плотным шлейфом всё же склонна создавать внутренние паразитные токи, но этот эффект уже не связан с основным контуром. Избавиться от этой проблемы удалось за счёт минимизации ширины дорожек и расстояния между ними.

Hardware is hard: разработка визитки с микроконтроллером, светодиодами и питанием по NFC - 7

Обратная сторона

Я решил вывести все дорожки на обратную сторону визитки. Ещё я набросал простую блок-схему и составил список необходимых компонентов. Чтобы продублировать рисунок дорожек на оборотной стороне платы, я экспортировал слои F.Cu и B.Cu в формате .SVG, после чего перенёс их на слой B.Silkscreen, выровняв на глаз. У меня получилась нетипичная разводка, и опытный инженер наверняка найдёт, что здесь можно улучшить. Уверен, многие зададутся вопросом: «А почему он не залил плату землёй?» Дело в том, что сплошной полигон земли экранировал бы магнитный поток через антенну, напрочь её убив.

 

Думаю, с точки зрения минимизации замкнутого тока и повышения эстетической привлекательности результат получился неплохим

Думаю, с точки зрения минимизации замкнутого тока и повышения эстетической привлекательности результат получился неплохим

Изготовление и сборка

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

Когда дело дошло до оформления заказа, мне нужно было решить — заказать несколько штук на пробу или сразу рискнуть по-крупному? После нескольких часов расчётов в калькуляторе стоимости JLCPCB я понял, что стоимость каждой дополнительной платы ничтожно мала, и разница в цене между пятью и тридцатью штуками получалась совсем небольшой. Тогда, собравшись с духом, я скрестил пальцы и заказал сразу тридцать.

Когда заказ прибыл, я первым делом решил проверить, а сможет ли моя визитка реально питаться по NFC. Я подключил между VCC и GND светодиод, и он исправно загорелся. Даже подстраивать ничего не потребовалось.

Естественно, сфотографировать визитку с телефона вблизи сложно.

Естественно, сфотографировать визитку с телефона вблизи сложно.

Программирование

На задней стороне визитки доступно три контактные площадки: GND, VCC и UPDI. Такой же порядок применяется в радиоуправляемых сервоприводах — он исключает возможное повреждение схемы, если при подключении случайно развернуть коннектор на 180 градусов. Диаметр каждой площадки 1,8 мм, а шаг между их центрами составляет 0,1”/2,54 мм. Это стандартное для макеток расстояние позволяет подключиться к плате с помощью «прищепки [8]» без использования дополнительных компонентов. С визитками обращаются довольно небрежно и обычно хранят их в подверженных статике бумажниках или карманах, поэтому я добавил между UPDI и GND супрессор. Теперь высокое напряжение будет сбрасываться в «землю» и не спалит ненароком микроконтроллер.

Hardware is hard: разработка визитки с микроконтроллером, светодиодами и питанием по NFC - 10
Hardware is hard: разработка визитки с микроконтроллером, светодиодами и питанием по NFC - 11

ATtiny816 программируется через UPDI [9] (Unified Program and Debug Interface). По сути, это UART, только в однопроводном формате. Для него существуют официальные отладчики, но можно обойтись и простым переходником USB-UART. Некоторые также используют в качестве программаторов Arduino или RPi Pico, и мне такой вариант показался самым интересным. Большинство ардуинок, которые поддерживают прошивку jtag2updi, работают с 5-вольтовой логикой, поэтому мне пришлось взять Pico. Я нашёл файл UF2, всё подключил и… тишина. Я несколько часов ковырялся в настройках IDE и пробовал разные контакты. Наконец, мне пришла «гениальная» идея подключить выход программатора к осциллографу. Сигнала не было. Я почувствовал себя крайне глупо и решил заказать Adafruit UPDI Friend [10]. С ней всё заработало сразу.

Сам код [11] отчасти похож на простейший скетч Arduino для мигания светодиодом. Но я решил написать основной цикл на C, чтобы переключение светодиодов в матрице чарлиплексинга происходило как можно быстрее, сводя мерцание к минимуму. Ещё я спрятал в коде пасхалку — попробуйте отыскать. Ну и для экономии энергии снизил тактовую частоту ATtiny до 1 МГц.

Иронично, но NTAG I2C Plus в моей схеме не подключён к микроконтроллеру через I2C. Для его программирования я изначально использовал популярное приложение NFC Tools [12] под Android. Но после нескольких ошибок понял, что для форматирования визитки и записи на неё моих контактных данных гораздо лучше подходит NXP TagWriter [13].

И QR-код, и NFC-ссылка ведут на страницу https://connect.wilsonharper.net [14]. Сейчас она просто перенаправляет на мой основной сайт https://wilsonharper.net [15], но я также могу через панель Cloudflare сделать перенаправление на любой другой URL-адрес без каких-либо изменений аппаратной части.

Список материалов

Все детали здесь. Интерактивная версия доступна в оригинале статьи

Все детали здесь [16]. Интерактивная версия доступна в оригинале статьи [17]

Усвоенные уроки

Тридцати изготовленных визиток должно хватить надолго. Но когда они закончатся, я планирую выпустить вторую версию. Напряжение VOUT остаётся достаточно высоким, чтобы запитать светодиоды абсолютно любого цвета, так что было бы интересно попробовать зелёные или жёлтые. Ещё я подумываю добавить одну-две тоненькие кнопки для интерактивности — с таким светодиодным кольцом можно реализовать несколько простеньких аркадных игр.

Мне нередко доводилось слышать фразу «Hardware is hard», и в этом проекте я прочувствовал её смысл сполна. Если брать по отдельности, то все его компоненты вполне знакомы и сложными их не назовёшь: печатные NFC-антенны, мигающие светодиоды под управлением микроконтроллера и визитки на основе печатных плат — всё это уже создавалось. Вот только, насколько мне известно, ещё никто не собирал их в единый красивый дизайн. По крайней мере найти такой пример в сети мне не удалось (есть проекты с питанием по NFC, со схемой внутри контура антенны или применением чарлиплексинга — но нигде эти фичи не собраны воедино). Моментами мне казалось, что задача реально превыше моих сил. Но трижды перепроверив все возможные проблемы, я понял, что нужно просто рискнуть и отправить плату в производство — и я безумно рад, что не сдрейфил.

Кому интересно, проект обсуждается на Hacker News [18], а также упоминался в блогах Adafruit [19], Hackaday.com [20] и Microchip Technologies [21].

Hardware is hard: разработка визитки с микроконтроллером, светодиодами и питанием по NFC - 13

Автор: Bright_Translate

Источник [22]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/raspberry-pi/457528

Ссылки в тексте:

[1] репозитории: https://github.com/WiHarper/nfc_card

[2] большинстве: https://salvagedcircuitry.com/pcb-business-card.html

[3] более сложные версии: https://mrdrprofbolt.wordpress.com/2020/04/16/an-electronic-business-card/

[4] визитных карточках с NFC: https://www.instructables.com/PCB-Business-Card-With-NFC/

[5] Чарлиплексинга: https://en.wikipedia.org/wiki/Charlieplexing

[6] калькулятора индуктивности: https://eds.st.com/antenna/#/

[7] репозиторий: https://github.com/WiHarper/nfc_card/blob/main/software/coil.py

[8] прищепки: https://www.adafruit.com/product/5434

[9] UPDI: https://onlinedocs.microchip.com/oxy/GUID-19DFE3E8-6314-4CFE-BA69-1357E28C8092-en-US-1/GUID-A2FD739F-A1D8-4C2F-9482-0B8AF9DCF435.html

[10] Adafruit UPDI Friend: https://www.adafruit.com/product/5879

[11] Сам код: https://github.com/WiHarper/nfc_card/blob/main/software/nfc_card.ino

[12] NFC Tools: https://play.google.com/store/apps/details?id=com.wakdev.wdnfc&hl=en_US

[13] NXP TagWriter: https://play.google.com/store/search?q=nxp+tagwriter&c=apps&hl=en_US

[14] https://connect.wilsonharper.net: https://connect.wilsonharper.net

[15] https://wilsonharper.net: https://wilsonharper.net

[16] здесь: https://wilsonharper.net/assets/html/ibom.html

[17] оригинале статьи: https://wilsonharper.net/projects/businesscard/

[18] Hacker News: https://news.ycombinator.com/item?id=49478426

[19] Adafruit: https://blog.adafruit.com/2026/08/31/an-nfc-energy-harvesting-pcb-business-card-with-a-microcontroller/

[20] Hackaday.com: http://Hackaday.com

[21] Microchip Technologies: https://lnkd.in/p/gH3GDPX6

[22] Источник: https://habr.com/ru/companies/ruvds/articles/1078386/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1078386