采用MCU的NFC能量收集PCB名片

Hacker News Top 新闻

摘要

本文介绍了一款DIY名片设计,采用PCB板和NFC能量收集技术,无需电池即可驱动LED动画,涉及MCU实现和Charlieplexing等技术。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/30 21:46

# 带有MCU的NFC能量采集PCB名片 来源:https://wilsonharper.net/projects/businesscard/ 和大多数名片一样,我的名片没有电池。但当它与手机触碰时,21颗LED会启动一场动画,仅靠NFC供电。 这个项目始于约三个月前,作为学习KiCad的简单入门,以便日后应对更复杂的设计。“简单”的状态并未持续太久。最终成品让我对PCB流程的方方面面有了超乎预期的认识,成果也远比想象中出色。完整代码库在此(https://github.com/WiHarper/nfc_card)。 (您的浏览器不支持视频标签。) 我见过各种各样的PCB名片。大多数我见过的(https://salvagedcircuitry.com/pcb-business-card.html)都利用丝印层甚至裸露的铜层来展示联系方式和二维码。这些非常酷——但它们更偏向平面设计而非电气工程。另一些(https://mrdrprofbolt.wordpress.com/2020/04/16/an-electronic-business-card/)则包含更复杂的功能,如显示屏、电池和输入设备——超级酷,但既昂贵又厚重。 我想制作一些简单且足够廉价的名片,可以分发给人们。最终,我偶然发现了NFC名片(https://www.instructables.com/PCB-Business-Card-With-NFC/)。这个概念很完美:无需电池,涉及一些基础的射频工程,且物料清单成本低廉。当我开始研究具体的NFC芯片时,发现其中一些甚至能够为其他组件采集NFC能量——最引人注目的是恩智浦NTAG I2C Plus和意法半导体ST25DV-KC。 我应该解释一下NFC的工作原理:你的手机会持续发射一个小型磁场。NFC卡片会接收该磁场,使你的手机充当一个微型无线充电器。卡片实际上从不向手机发回消息,而是改变它从磁场中吸收的能量多少,手机则检测这些功率下降并将其转换为二进制数据。大多数NFC标签仅利用采集到的能量运行其内部电路,但某些NFC芯片能够取出多余的直流电压并将其输送至外部硬件。这张名片正是利用了后一项功能。 理论上似乎并不复杂。我迅速在KiCad中绘制了原理图。ATtiny412微控制器是一个简单选择,它尺寸紧凑、GPIO数量充足且功耗极低。 LED的连接采用了一种名为Charlieplexing(查理复用)(https://en.wikipedia.org/wiki/Charlieplexing)的技术,它利用了二极管固有的单向导电性。那篇维基百科文章是一个很好的指南,但其关键是使用三态逻辑可以用几个GPIO控制多个LED。具体公式是:y = x⋅(x-1),其中y表示可独立控制的LED数量,x表示GPIO数量。主要缺点是同一时间只能点亮一个LED,但这可以通过使用PWM(脉冲宽度调制)并将占空比分散到多个LED上来缓解。在这个初稿中,我使用了4个GPIO(`GPIO_A`到`GPIO_D`)来控制12颗LED。 --- ## 系统架构 虽然我最初选择了ATtiny412 MCU,但我意识到它不太理想,有几个原因。它只有5个GPIO,而且仅提供直插式/带引脚封装,而非QFN封装,这导致它从PCB板上凸起的高度更高。 由于这个夏天我不在学校,没有条件自行组装PCB,所以我需要让JLCPCB为我组装。另外,如果我打算把这些名片送人,我不想在其中含铅,即便在学校我也无权使用无铅电子工作区。JLCPCB支持完全符合RoHS标准,因此很容易做出选择。 既然已经交给专业组装,我何不选用小得多的QFN封装呢,而ATtiny412没有这种封装。经过一些研究,我找到了ATtiny816。它与ATtiny412类似,但拥有17个GPIO和更薄的3mm × 3mm封装。现在,我可以分配6个GPIO用于LED,从而能够拥有20个Charlieplexed LED和一个简单的指示灯LED(直接从一个GPIO连接到`GND`)。我还换用了恩智浦NTAG I2C Plus NFC芯片,因为它支持更近距离、更高功率的NFC标准。 在阅读NTAG I2C Plus数据手册时,我注意到它规定`VOUT`上的电容不应超过220nF,因为更大的电容会导致电压轨下降,产生永远无法上电的振荡环路。然而,我想要超过220nF的电容,因此我设计了这个电路: 底部的大容量10μF电容有助于平滑`VCC`,但它在启动时会吸取过大电流。`R3`将浪涌电流限制在几毫安。然而,一旦电容充满电,`R3`也会使电容充电速度过慢。MOSFET `Q1`充当开关。120毫秒后,`C3`完全充电。MCU将`GATE`拉低,为电容提供了一条低阻抗路径以平滑电压下降。`R2`只是一个上拉电阻,用于在最初的120毫秒内保持`GATE`为高电平。这样既获得了大电容的好处,又没有忽视数据手册的规定。 我决定在Charlieplexed走线上使用100Ω电阻。由于电流必须从一个GPIO流出,经过电阻、LED,再经过另一个电阻,因此总电阻实际上翻倍了。我还意识到,如果100Ω电阻允许的电流过大,我可以以高频PWM驱动LED。配合10μF电容,这些脉冲会平滑成稳定电流,防止`VOUT`崩溃。在1kHz刷新率和20%占空比下,计算表明`VOUT`下降约0.2V。 --- ## 制作天线 我使用意法半导体的天线电感计算工具(https://eds.st.com/antenna/#/)确定了天线的尺寸和特性。我希望天线占据整张名片的空间,因此我尝试了不同的匝数、走线宽度和走线间距,直到找到一组效果良好的组合。我需要电感接近2.75μH,以便它与NTAG内部50pF电容在13.56MHz下谐振。结果如下: 由于这个电感值略低,它给了我将其调谐到精确频率的能力。如果它已经是精确的2.75μF,我可以并联一个电容来降低谐振频率——但无法提高它。我焊接了一个1.5pF的电容,以便在需要时将其调低。 我接着进行了PCB布线。令我惊讶的是,KiCad没有提供内置的天线或线圈生成工具,而我尝试的所有插件都无法生成矩形螺旋。KiPython脚本成为了答案。一个LLM(大语言模型)帮助创建了脚本,经过几分钟对话后就能工作了。它生成了一个简单的矩形螺旋走线,与我在SMT计算器中输入的数值相符。我已经将`.py`文件包含在代码库中(https://github.com/WiHarper/nfc_card/blob/main/coil.py),我认为它对其他人可能也确实有用。之后,我手工将角落修圆——这个改动只改变了包围面积的百分之几。 --- ## 布局 我认为将所有IC和无源元件保持在PCB的左侧四分之一区域在美学上会很赏心悦目。我为LED走线布线、删除并重新布线了大约六次,最终确定了这个设计。虽然有可能以一种使平均走线长度更短的方式布线,但我希望避免形成完整的回路——同时我也想最小化回路面积。形成完整回路时,走线会与NFC磁场耦合并产生破坏性的涡电流。通过在回路顶部中间留出缺口,无法形成任何电流,因此天线不受宏观尺度射频干扰的影响。 网络颜色使得理解走线走向更容易(也更有趣)。带状拓扑结构仍然会在每条走线之间产生闭合电流,这是一种与主回路不同的效应。保持最小的走线间距和宽度有所帮助。 --- ## 背面设计 我决定在名片背面展示所有走线。我还绘制了一个简单的框图和IC物料清单。为了将走线复制到`B.Silkscreen`层,我将`F.Cu`和`B.Cu`导出为`.SVG`文件,并导入到`B.Silkscreen`层,通过目测对齐。这种布线方式在许多方面都很特别,我确信经验丰富的电气工程师会注意到值得改进的地方。我确信不止一个人在阅读时会想:*他为什么不用接地平面?*接地平面会阻止所有穿过天线的磁通量,从而杀死它。 考虑到我最小化闭合电流并创造有趣且美观的美学目标,我认为最终结果是可靠的。 --- ## 制造与组装 这些名片的尺寸与信用卡相同,我额外支付了一些费用使它们同样薄。我还选择了高精度丝印和ENIG(化学镍金)表面处理。通过最后这个选择,名片完全符合RoHS标准——不含铅或其他有害物质。 在购买时,我必须做一个决定:是只订购几张看看能否工作,还是直接全力投入?在JLCPCB的报价工具里花了几个小时后,我意识到每增加一张名片的边际成本很低,购买五张和三十张之间的差异并不大。我下定决心,祈祷好运,订购了三十张。 刚收到时,我首先测试它是否能采集到能量。我在`VCC`和`GND`之间接了一个LED,它工作了,无需调谐。 当然,很难在名片贴着手机背面时拍照。 --- ## 编程 在背面我有三个小的裸露焊盘:`GND`、`VCC`和`UPDI`。这种焊盘顺序——类似于RC舵机——可以防止连接反转180度时造成任何损坏。每个焊盘直径为1.8mm,中心间距为0.1英寸/0.254mm。这种标准的面包板间距允许我使用Pogo Pin弹簧针夹(https://www.adafruit.com/product/5434)连接它,而无需添加额外的元件。名片会被粗暴对待并扔进静电多的钱包和口袋,因此我在`UPDI`和`GND`之间加了一个TVS二极管,这样任何高压都会直接流入地线,而不是烧毁MCU。 ATtiny816通过UPDI(https://onlinedocs.microchip.com/oxy/GUID-19DFE3E8-6314-4CFE-BA69-1357E28C8092-en-US-1/GUID-A2FD739F-A1D8-4C2F-9482-0B8AF9DCF435.html)——统一编程和调试接口进行编程。它基本上就是单线格式的UART。有官方调试器,USB转串口适配器也可以使用。人们也使用过Arduino和树莓派Pico作为编程器,最后一种选择听起来最有趣。大多数支持jtag2updi固件的Arduino使用5V逻辑电平,所以我不得不选择Pico。我找到了一个`UF2`文件,连接好一切,然后……毫无反应。我花了几个小时研究IDE设置并尝试不同的引脚。最后,我灵机一动,将它的输出接到示波器上。仍然毫无反应。我感到非常傻,于是决定购买Adafruit UPDI Friend(https://www.adafruit.com/product/5879)。它立即就能工作了。 代码本身(https://github.com/WiHarper/nfc_card/blob/main/nfc_card.ino)在某些方面类似于一个基础的Arduino闪烁草图。然而,我用裸机C编写了主循环,以便Charlieplexed矩阵能尽可能快速地循环,将闪烁降至最低。代码中还有一个彩蛋——看看你能否找到它。我将ATtiny降频至1MHz以节省功耗。 具有讽刺意味的是,NTAG I2C Plus并未通过I2C连接到ATtiny。为了编程它,我最初使用了著名的NFC Tools(https://play.google.com/store/apps/details?id=com.wakdev.wdnfc&hl=en_US)Android应用。出现一些错误后,我意识到NXP TagWriter(https://play.google.com/store/search?q=nxp+tagwriter&c=apps&hl=en_US)应用在格式化和写入我的联系信息到卡片方面效果更好。 二维码和NFC链接都将设备引导至https://connect.wilsonharper.net/。目前,它只是重定向到https://wilsonharper.net/,但我可以在Cloudflare中配置它,无需任何硬件更改就能路由到任何URL。 --- ## 物料清单 在此查看完整BOM详情(https://wilsonharper.net/assets/html/ibom.html)。 --- ## 经验教训 我现在拥有的这三十张名片应该能用很久。不过一旦用完,我计划制作V2版本。`VOUT`将保持足够高的电压以驱动任何颜色的LED,绿色或黄色可能会很有趣。我还考虑添加一两个薄型按钮以增加互动性,并且可以用一圈LED制作几个街机风格的游戏。 “硬件很难”是我经常听到的一句话,这个项目让我意识到它有多么正确。单独来看,这个项目中的任何事物都不是新颖甚至特别复杂的:NFC PCB天线、带MCU的闪烁LED和PCB名片都已有先例。但据我所知,还没有人将它们组合成一个美观的包——或者至少,我在网上找不到任何例子(有几个具备NFC能量采集、天线中的电路或Charlieplexing,但没有同时具备这三者)。有些时刻我确实觉得这超出了我的能力。在反复检查了所有可能的问题之后,我意识到我只需要把它发出去,而我非常庆幸我这么做了。

相似文章

Muxcard:一款信用卡大小的DIY计算机

Hacker News Top

Muxcard是一款功能齐全的DIY计算机,大小如同信用卡,基于ESP32-C3、电子纸显示屏和NFC构建,潜在应用包括钱包、渗透测试、智能家居控制等。