1. 项目概述与设计初衷最近在整理工作室的物料翻出了一个几年前做的龙珠主题PCB徽章当时用的是ATtiny84效果还行但芯片现在又贵又难买。看着手边还剩的一些ATtiny13A我琢磨着不如来个升级重制版。于是就有了这个“Goku PCB Badge V2”。它的核心很简单用一颗成本不到一杯奶茶钱的ATtiny13A微控制器驱动20颗0603封装的红色LED通过编程让它们按顺序亮灭模拟出悟空发射“龟派气功”时能量球飞出的动态效果。最终成品是一个可以别在背包或衣服上的互动徽章既是个有趣的电子玩具也是个不错的嵌入式入门练手项目。这个项目的价值在于它完整地串联了一个创意电子产品从构思到落地的全流程。你不仅会接触到原理图设计、PCB布局这些“纸上谈兵”的环节更要亲手完成焊膏涂布、贴片、回流焊这些实际的SMT表面贴装技术工艺最后还要搞定给“裸片”单片机烧录程序。整个过程就像一次微缩版的硬件产品开发对于想从Arduino等开发板过渡到更底层、更定制化硬件开发的朋友来说是个非常理想的切入点。它用最低的成本和复杂度让你体验一遍“设计-打样-焊接-编程-调试”的完整闭环。2. 核心器件选型与电路设计解析2.1 为什么是ATtiny13A在项目规划时主控芯片的选择是首要决策。市面上MCU那么多为何独独选中了这颗仅有8个引脚、1KB Flash的“小不点”ATtiny13A首要原因是“够用且划算”。这个项目的核心任务就是循环控制5个IO口输出高低电平逻辑简单到几乎不需要什么计算资源。ATtiny13A拥有5个可用的I/O引脚PB0-PB4正好对应我们需要的5路LED控制。它的1KB Flash内存对于实现一个简单的追逐灯效程序绰绰有余。相比之下如果使用常见的ATmega328PArduino Uno的核心或者更强大的ESP32无疑是“大炮打蚊子”不仅成本飙升芯片体积和外围电路复杂度也会增加完全不符合徽章这种小型化、低成本项目的需求。其次是易得性与生态。尽管全球芯片短缺的阴影尚未完全散去但ATtiny13A作为一款经典且产量巨大的8位MCU在主流元器件分销商处通常仍有库存价格也相对稳定。更重要的是得益于开源社区的努力我们现在可以通过Arduino IDE来对它进行编程大大降低了开发门槛。只需要安装一个名为“MicroCore”的第三方开发板支持包就能用熟悉的Arduino语法来写代码然后通过ISP在线串行编程方式烧录进去这对爱好者来说极其友好。最后是低功耗特性。徽章计划使用CR2032纽扣电池供电这对电路的静态功耗有严格要求。ATtiny13A在掉电模式Power-down下的电流可以低至微安级别这对于延长电池寿命至关重要。虽然在这个始终运行的灯效项目中低功耗模式可能用不上但芯片本身具备这个能力为未来增加休眠唤醒功能留出了可能性。注意ATtiny13A的工作电压范围是2.7V-5.5V这意味着它既可以用3V的纽扣电池直接驱动也可以通过USB口的5V供电。在设计电源电路时要确保电压在此范围内。2.2 驱动方案MOSFET的必要性确定了主控接下来要解决如何驱动LED。ATtiny13A的单个I/O引脚最大拉电流source current和灌电流sink current典型值为20mA。虽然直接驱动一颗普通LED没问题但我们的设计是每个引脚要驱动4颗并联的LED。如果4颗LED并联后直接接在MCU引脚上假设每颗LED工作电流为5mA那么总电流将达到20mA这已经达到了引脚的最大驱动能力极限。长期工作在极限状态下会导致芯片发热稳定性下降甚至损坏。更稳妥和专业的做法是使用一个“开关”来承担驱动电流的工作MCU只负责给这个“开关”一个控制信号。这个“开关”就是MOSFET金属-氧化物半导体场效应晶体管。我选择了8205S这款双N沟道MOSFET。它体积小巧SOT-23-6封装导通电阻Rds(on)很低意味着在导通时自身消耗的功率很小发热也小。在电路中ATtiny13A的I/O引脚连接到MOSFET的栅极G。当引脚输出高电平时MOSFET导通电流从电源VCC流经LED和MOSFET到地GNDLED点亮。MCU引脚此时只提供电压信号几乎不提供电流负载电流完全由MOSFET和电源承担从而完美保护了脆弱的MCU引脚。2.3 电路原理图详解整个电路的原理图非常清晰可以分为三个部分主控及编程接口、LED驱动阵列、电源管理。主控及编程接口部分核心是U1即ATtiny13A。为了使其稳定工作需要在VCC和GND之间就近放置一个0.1uF的退耦电容C1用于滤除电源线上的高频噪声。虽然ATtiny13A内部有复位电路但为了编程可靠我还是将RESET引脚PB5通过一个10K电阻R6上拉到VCC防止误触发。旁边预留了ISP编程接口J1包含VCC、GND、RESET、MOSI、MISO、SCK六根线这是后续烧录程序的通道。LED驱动阵列部分这是实现光效的核心。5个驱动通道结构完全一致。以第一路为例ATtiny13A的PB0引脚连接至MOSFET U2的栅极。U2的源极接地漏极连接4颗并联的LEDD1-D4的阴极。LED的阳极通过一个限流电阻R11KΩ连接到电源正极。这个1KΩ的电阻决定了LED的亮度。根据欧姆定律当电源为3V纽扣电池LED正向压降约为1.8V时电阻两端电压为1.2V流过单颗LED的电流约为1.2V / 1KΩ 1.2mA。四颗并联总电流约4.8mA这是一个非常安全且亮度适中的值。其他四路PB1-PB4分别控制U3-U6与此完全相同。电源管理部分为了增加使用的灵活性我设计了双电源输入。一是通过一个SMD贴片纽扣电池座BAT1接入一颗CR2032电池3V。二是在PCB边缘放置了一个USB Type-C接口J2。Type-C接口的VBUS引脚即5V电源经过一个二极管D21连接到系统的VCC网络。这个二极管起到了防止反向电流的作用当仅使用电池供电时防止电池电流倒灌进USB口当插入USB时USB的5V会通过二极管给系统供电同时因为二极管压降约0.3V-0.7V系统电压约为4.3V-4.7V仍在ATtiny13A的工作范围内。这里没有使用复杂的稳压芯片是为了极致简化。3. PCB设计从图像到电路的转化3.1 利用丝印层实现视觉主题对于这样一个文化主题徽章PCB的视觉效果和电路功能同等重要。我的目标是让Goku的形象成为PCB正面丝印层Silkscreen的主体图案。这里的关键是将一张普通的图片转化为EDA电子设计自动化软件能够识别并放置的矢量图形。我首先找到了一张悟空发射龟派气功的经典黑白线稿。图片处理步骤如下预处理在Photoshop或GIMP等软件中将图片调整为高对比度的黑白二值图确保线条清晰去除灰色噪点。格式转换大多数专业PCB设计软件如我用的OrCad/Allegro或者KiCadAltium Designer都支持将位图BMP文件导入到丝印层。我将处理好的图片保存为BMP格式。导入与缩放在PCB编辑器中找到导入图片到丝印层的功能在OrCad中通常通过“Place - Picture”实现。将BMP文件导入并根据PCB板框大小精确缩放图像将其放置在板子的中央区域。调整与避让导入的图片可能会覆盖元件放置区域或走线。需要仔细调整图片的位置或者对图片的非关键部分进行微调如气功波的能量区域确保所有焊盘、过孔和重要的走线不被丝印油墨覆盖以免影响焊接。实操心得丝印的精度取决于原始图片的分辨率和软件转换的质量。对于复杂图案建议先用矢量软件如Inkscape, Adobe Illustrator将位图描摹Trace成矢量路径然后导出为DXF或SVG格式再导入PCB软件。这样得到的丝印线条边缘光滑不受放大缩小影响效果远优于直接使用位图。3.2 元件布局与走线规划在炫酷的丝印之下是严谨的电路布局。我的布局原则是功能优先美观兼顾。围绕主题布局我将20颗0603封装的LED精心排列在悟空手掌前方形成一个由内向外、略微扩散的“能量球”形状。5组LED每组4颗的排列不是随机的而是为了在追逐灯效亮起时能模拟出能量聚集并发射的动态感。LED本身也成为了视觉设计的一部分。模块化分区我将电路分成几个功能区域进行布局主控区ATtiny13A和它的退耦电容、复位电阻放置在PCB中部偏上的位置这里是信号的“心脏”需要相对安静。驱动区5个8205S MOSFET紧挨着它们所控制的LED组放置。这样从MCU引脚到MOSFET栅极的驱动走线可以很短减少干扰从MOSFET漏极到LED阴极的电流路径也很短降低路径电阻。电源接口区USB Type-C接口和纽扣电池座分别放置在PCB的顶部和底部边缘方便接入。电源从接口进入后通过较宽的走线我使用了20mil约0.5mm向各个模块供电确保电流能力充足。走线策略电源线加粗所有VCC和GND走线都明显加粗并在底层Bottom Layer大面积铺铜接地形成一个稳定的电源参考平面有助于降低噪声和阻抗。信号线等长非必需对于这种低速数字电路开关频率仅几十赫兹信号线不需要做严格的等长布线但应尽量避免长的平行走线以减少串扰。走线拐角使用45度角或圆弧避免90度直角后者在高频下可能产生辐射。过孔使用为了给正面丝印图案让出空间很多走线需要通过过孔Via切换到底层。我尽量将过孔放置在元件引脚附近或非视觉中心区域。3.3 设计检查与Gerber文件生成布局布线完成后必须进行一系列设计规则检查DRC电气规则检查ERC确保所有网络连接正确没有未连接的引脚或短路。间距检查检查所有导线之间、导线与焊盘之间、焊盘与焊盘之间的间距是否满足PCB制造商的能力通常最小线宽/线距为6mil/6mil。对于手工焊接或热板回流焊间距可以适当放宽以提高良率。丝印清晰度检查丝印文字和图案是否与焊盘重叠确保组装时不会产生混淆。检查无误后就可以输出用于生产的Gerber文件了。这是一套标准格式的文件每个文件对应PCB的一层如顶层铜箔、底层铜箔、顶层丝印、阻焊层、钻孔文件等。在输出时需要特别注意层设置正确选择每层的内容和极性正片/负片。钻孔文件确保生成正确的钻孔描述文件如Excellon格式包含所有过孔和安装孔的大小和位置。文件打包将所有Gerber文件、钻孔文件、以及可能需要的板层结构说明readme.txt压缩成一个ZIP包这就是发给PCB打样厂的最终生产文件。4. PCB打样与SMT焊接实战4.1 打样厂商选择与工艺确定我将Gerber文件发给了PCBWAY进行打样。选择黄色阻焊Soldermask搭配白色丝印Silkscreen这个配色方案能很好地突出黑色的Goku线稿图案同时黄色的底色也颇有“元气”的感觉。在工艺选择上我选择了最基础的1.6mm板厚、FR-4材料、有铅喷锡HASL表面处理。对于这种低频、小电流的消费电子项目这些标准工艺完全足够且成本最优。大约一周后我收到了打样回来的PCB。质量检查是第一步用放大镜仔细查看线路是否清晰、有无断线或短路、阻焊油墨是否均匀、丝印图案是否对齐。特别是那20个0603 LED的焊盘尺寸精度至关重要直接影响后续的贴片焊接。4.2 手工SMT焊接全流程详解对于小批量或原型制作手工完成SMT焊接是完全可行的。我采用的是“焊膏热风枪/热板回流”的标准流程这比直接用烙铁逐个焊接贴片元件效率高得多效果也好。步骤一焊膏涂布这是整个手工SMT中最需要耐心和手稳的环节。我使用的是含铅的Sn63/Pb37焊膏熔点为183°C流动性和活性比较好。工具一支1ml的塑料注射器配上一个平口针头口径约0.5mm。操作将PCB固定在桌面。手持注射器针头轻轻靠近焊盘。通过轻微挤压让少量焊膏从针头渗出点到其中一个焊盘上。目标是让焊膏覆盖焊盘面积的70%-80%形成一个微凸起的小丘。切忌过多否则回流时极易造成连锡桥接。技巧可以先在不重要的焊盘上练习手感。对于0603这类小元件每个焊盘点一下即可。对于ATtiny13A的SOIC-8封装需要在两排焊盘上各画一条连续的、粗细均匀的焊膏线。步骤二元件贴装使用防静电镊子ESD Tweezers进行贴装。顺序先贴小元件再贴大元件。我通常的顺序是电阻电容 - MOSFET - ATtiny13A - USB Type-C - 最后是LED。因为LED的焊盘在图案中央先贴其他外围元件可以避免操作空间被遮挡。对准用镊子夹起元件借助放大镜或台灯将其精确放置在涂好焊膏的焊盘上。对于有极性的元件如LED、USB口、MOSFET务必确认方向正确。ATtiny13A的封装上有一个小圆点或凹槽标识1号引脚需与PCB丝印上的标识对齐。固定轻轻按压元件使其底部与焊膏接触。焊膏的粘性可以暂时固定住元件方便移动PCB。注意事项贴片时环境要保持清洁避免风吹。如果焊膏涂布后放置时间过长30分钟焊膏中的助焊剂可能会挥发变干失去粘性此时可以用烙铁头蘸取少量新鲜焊膏进行补救。步骤三回流焊接我使用了一个自制的恒温加热板进行回流。商用回流焊炉当然更好但加热板对原型制作来说性价比极高。预热将放置好元件的PCB轻轻移到已预热的加热板上。温度设定在150°C左右预热60-90秒。这个阶段使PCB和元件均匀升温蒸发焊膏中的部分溶剂避免后续急剧升温导致飞溅。回流观察焊膏当看到它开始变得光亮、流动并坍塌时说明已进入回流区。此时焊膏中的金属粉末熔化。对于Sn63/Pb37焊膏峰值温度应达到220-230°C并保持30-60秒。可以通过红外测温枪监测PCB表面的温度。冷却回流完成后用镊子将PCB从加热板上移开放在一块金属散热板或陶瓷板上自然冷却。切勿用风吹或水冷急速冷却会导致焊点结晶粗大强度变差也容易导致元件因热应力开裂。步骤四焊接后检查与补焊冷却后在强光下用放大镜检查所有焊点。良好焊点表面光滑、呈凹面弯月形焊料均匀覆盖焊盘并爬升到元件引脚侧面。常见问题立碑元件一端翘起。原因是两端焊膏量不均或回流时受热不均。用烙铁补焊翘起的一端即可。桥接相邻焊盘被焊料连接。用烙铁配合吸锡线或助焊剂将其分开。虚焊焊点灰暗、有裂纹。用烙铁添加少量新焊锡和助焊剂重新焊接。少锡焊料未完全覆盖焊盘。用烙铁补锡。步骤五通孔元件焊接本设计中只有背面的SMD纽扣电池座是计划用烙铁手工焊接的。因为它的焊盘和引脚较大且需要承受电池插拔的机械应力用焊锡丝直接焊接更牢固。焊接时注意控制温度320-350°C和时间避免烫坏塑料底座。5. 固件开发与ISP程序烧录5.1 代码逻辑剖析让5路LED依次亮灭产生追逐效果的代码非常简单但其逻辑是许多动画和状态机的基础。下面是对代码的逐行解读// 定义常量控制LED的引脚数量 int pinsCount 5; // 定义一个数组存储这5个引脚对应的实际MCU引脚编号ATtiny13A的PB0-PB4对应Arduino引脚号0-4 int pins[] {0, 1, 2, 3, 4}; void setup() { // 初始化将这5个引脚都设置为输出模式 for (int i 0; i pinsCount; i) { pinMode(pins[i], OUTPUT); } // 初始化完成后所有引脚默认为低电平LED熄灭 } void loop() { // 第一部分从左到右追逐例如从PB0到PB4控制的LED组 for (int i 0; i pinsCount; i i 1) { digitalWrite(pins[i], HIGH); // 点亮当前序号的LED组 delay(70); // 保持点亮70毫秒这个值决定了“光球”移动的速度 digitalWrite(pins[i], LOW); // 熄灭当前LED组 // 注意这里没有在熄灭后立即点亮下一个所以会有一个短暂的“暗区”跟随在亮灯后形成追逐感 } // 第二部分从右到左追逐例如从PB4到PB1控制的LED组 // 注意这里从 pinsCount-1即4开始到大于0结束所以不会再次点亮最左边的第一组i0 // 这样设计是为了让动画在折返时更流畅避免端点LED组闪烁两次。 for (int i pinsCount - 1; i 0; i i - 1) { digitalWrite(pins[i], HIGH); delay(70); digitalWrite(pins[i], LOW); } // loop()函数执行完毕从头开始形成无限循环。 }代码优化思考这段基础代码可以实现效果但还有优化空间。例如可以使用millis()函数配合状态机来替代delay()这样MCU在等待期间可以处理其他任务虽然本项目没有也为将来添加按钮交互等功能留出余地。另外可以将引脚模式和动画序列数据存放在程序存储器PROGMEM中以节省宝贵的SRAM空间不过对于这个简单程序影响微乎其微。5.2 搭建Arduino ISP编程环境ATtiny13A没有内置USB转串口功能不能像Arduino Uno那样一键上传。我们需要使用ISPIn-System Programming方式即通过另一块已编程的Arduino板作为“编程器”来给ATtiny13A烧录程序。第一步安装ATtiny13A开发板支持打开Arduino IDE进入“文件 - 首选项”。在“附加开发板管理器网址”中添加以下URLhttps://mcudude.github.io/MicroCore/package_MCUdude_index.json点击“确定”然后进入“工具 - 开发板 - 开发板管理器”。在搜索框中输入“MicroCore”找到后点击安装。这个包就包含了ATtiny13系列的支持。第二步将Arduino Nano/Uno配置为ISP编程器用USB线连接一块Arduino Nano或Uno到电脑。在Arduino IDE中选择对应的开发板和端口。打开示例代码“文件 - 示例 - 11. ArduinoISP - ArduinoISP”。将此代码上传到这块Arduino Nano上。上传成功后这块Nano就变成了一个AVR ISP编程器。第三步硬件连接这是最关键的一步需要将“编程器”Arduino Nano与“目标板”我们的徽章的SPI编程接口正确连接。连接关系如下表所示“编程器” (Arduino Nano) 引脚连接至“目标板” (ATtiny13A) 引脚功能说明D10→RESET (PB5)复位信号。编程器通过此引脚控制目标MCU复位并进入编程模式。D11→MOSI (PB0)主设备输出从设备输入。编程器通过此线向目标MCU发送指令和数据。D12→MISO (PB1)主设备输入从设备输出。目标MCU通过此线向编程器返回数据。D13→SCK (PB2)串行时钟。编程器提供时钟信号同步数据传输。5V→VCC为目标MCU提供编程电源。务必确认目标板本身没有接其他电源否则可能冲突。GND→GND共地。这是必须的确保两者电势基准一致。重要提示在连接和断开任何线缆之前务必确保编程器和目标板均未通电。接错线可能导致芯片损坏。如果PCB上没有预留ISP接口就需要像我做的那样用细导线直接焊接到ATtiny13A对应的引脚上操作时要格外小心避免短路。第四步烧录引导程序与程序在Arduino IDE中为目标板进行设置“工具 - 开发板”选择“ATtiny13/13A”“编程器”选择“Arduino as ISP”“时钟”根据实际情况选择内部1.2MHz或9.6MHz均可本项目对时钟精度要求不高。点击“工具 - 烧录引导程序”。这个过程会将正确的熔丝位Fuses配置写入ATtiny13A并烧录一个用于配合Arduino IDE的基础引导程序虽然ATtiny13A的Bootloader很小但此步骤必不可少。IDE下方状态栏会显示“正在烧录引导程序…”成功后显示“引导程序烧录完成”。现在打开我们为徽章编写的追逐灯效代码。点击“项目 - 使用编程器上传”。IDE会编译代码然后通过ISP连接将程序直接写入ATtiny13A的Flash存储器中。上传成功后断开ISP连接线。此时如果给徽章上电装上纽扣电池或插入USB就应该能看到LED开始依次亮起形成追逐动画了。6. 测试、调试与问题排查实录6.1 上电前静态检查在焊接完成并烧录程序后不要急于上电。先进行一次彻底的静态检查视觉检查再次用放大镜检查所有焊点确保无桥接、虚焊。检查元件方向特别是LED、MOSFET、USB口和ATtiny13A。电源短路测试将万用表调到蜂鸣档或电阻档。测量PCB上VCC和GND之间的电阻。在未上电、未装电池的情况下电阻值不应为零或非常小如几欧姆。如果蜂鸣器响或电阻极小说明存在电源短路必须排查常见原因是焊锡桥接或元件损坏。二极管测试检查LED将万用表调到二极管测试档。用红表笔接触LED所在列的电源正极端即1K电阻前端黑表笔接触该列LED的公共阴极即MOSFET漏极端。正常的LED会发出微弱的光并且万用表会显示一个正向压降值通常1.6V-1.8V。依次测试所有5列LED。这个方法可以在不上电、不依赖MCU的情况下快速验证LED本身和驱动通路电阻、MOSFET的D-S极是否焊接良好。6.2 上电测试与动态调试通过静态检查后可以首次上电。建议先使用可调稳压电源将电压限流在3V/100mA这样即使有短路也能限制损坏范围。电流观察接上电源观察电流读数。正常状态下整个电路的空载电流所有LED熄灭时应小于1mA。当LED逐一点亮时电流会阶梯式上升每路LED点亮时增加约5mA4颗LED * 1.2mA峰值电流应在25-30mA左右。如果电流异常大如超过50mA立即断电检查。功能测试观察LED的追逐效果是否与程序设计一致。常见问题有某一路LED常亮或不亮检查该路对应的ATtiny13A引脚输出是否正常可用万用表电压档测量应在0V和3V/5V之间跳变。如果输出正常问题可能在MOSFET或LED本身如果输出异常检查程序或MCU焊接。所有LED都不亮但MCU发热极有可能是电源接反或VCC/GND短路导致MCU损坏。需断电检查短路点并更换MCU。动画顺序错乱检查程序中pins[]数组定义的引脚顺序是否与实际PCB布线一致。可能是设计时引脚分配与编程时设想的不同。6.3 典型问题排查速查表下表汇总了制作过程中可能遇到的一些典型问题及排查思路问题现象可能原因排查步骤上电无任何反应1. 电源未接通电池没电/接触不良2. VCC/GND存在短路3. ATtiny13A损坏或未编程4. 复位引脚被意外拉低持续复位1. 测量电池电压检查电池座焊接。2. 测量VCC-GND间电阻排除短路。3. 检查MCU焊接尝试重新烧录程序。4. 检查连接RST引脚的10K电阻是否虚焊或损坏。只有部分LED列能亮1. 该列MOSFET损坏或焊接不良2. 该列LED或限流电阻损坏/虚焊3. MCU对应引脚损坏或配置错误1. 用二极管档测试该列LED通路。2. 交换测试将能亮的列的MCU控制线飞线接到不亮的列的MOSFET栅极判断是MCU问题还是驱动/LED问题。LED亮度明显偏暗或偏亮1. 限流电阻值焊错如用了10K而非1K2. 电源电压异常电池电量不足3. LED型号不一致压降不同1. 核对电阻阻值。2. 测量上电时LED两端的实际电压和电流。3. 确保所有LED为同一批次。追逐动画速度不稳定或闪烁1. 电源不稳定纽扣电池内阻增大2. 程序逻辑问题如中断干扰3. 退耦电容失效1. 换新电池或改用USB供电测试。2. 检查代码确认没有其他中断服务程序。3. 在ATtiny13A的VCC和GND引脚间并联一个10uF电解电容试试。ISP编程失败1. 接线错误或接触不良2. “编程器”Arduino的ArduinoISP程序未正确上传3. 目标板MCU型号选择错误4. 熔丝位配置被意外更改1. 逐根检查6根连接线。2. 重新对“编程器”Arduino上传ArduinoISP示例。3. 在IDE中确认选择了“ATtiny13/13A”。4. 尝试用“烧录引导程序”功能重置熔丝位。6.4 功耗实测与电池寿命估算项目完成后我实测了不同状态下的工作电流静态电流LED全灭约0.35mA。这部分主要是ATtiny13A运行简单循环程序的功耗。动态峰值电流单列LED亮约4.8mALED电流 0.35mA ≈ 5.15mA。平均工作电流由于LED是逐列点亮每列亮70ms一个完整循环约700ms。平均电流可以粗略估算为 (5.15mA * 70ms * 2 0.35mA * 560ms) / 700ms ≈ 1.2mA。一颗标准的CR2032纽扣电池容量大约在200mAh到240mAh之间。如果我们以1.2mA的平均电流计算理论续航时间约为 200mAh / 1.2mA ≈ 166小时接近7天。这只是一个理想估算实际使用中电池自放电、接触电阻等因素会缩短时间但连续点亮数天是完全可以的。对于一个小徽章来说这个续航已经非常可观。如果想进一步延长可以在代码中增加休眠模式让徽章在无人操作一段时间后自动进入深度睡眠电流可降至微安级续航可达数月。
ATtiny13A驱动LED动画:从PCB设计到SMT焊接的嵌入式实战
发布时间:2026/6/1 15:59:13
1. 项目概述与设计初衷最近在整理工作室的物料翻出了一个几年前做的龙珠主题PCB徽章当时用的是ATtiny84效果还行但芯片现在又贵又难买。看着手边还剩的一些ATtiny13A我琢磨着不如来个升级重制版。于是就有了这个“Goku PCB Badge V2”。它的核心很简单用一颗成本不到一杯奶茶钱的ATtiny13A微控制器驱动20颗0603封装的红色LED通过编程让它们按顺序亮灭模拟出悟空发射“龟派气功”时能量球飞出的动态效果。最终成品是一个可以别在背包或衣服上的互动徽章既是个有趣的电子玩具也是个不错的嵌入式入门练手项目。这个项目的价值在于它完整地串联了一个创意电子产品从构思到落地的全流程。你不仅会接触到原理图设计、PCB布局这些“纸上谈兵”的环节更要亲手完成焊膏涂布、贴片、回流焊这些实际的SMT表面贴装技术工艺最后还要搞定给“裸片”单片机烧录程序。整个过程就像一次微缩版的硬件产品开发对于想从Arduino等开发板过渡到更底层、更定制化硬件开发的朋友来说是个非常理想的切入点。它用最低的成本和复杂度让你体验一遍“设计-打样-焊接-编程-调试”的完整闭环。2. 核心器件选型与电路设计解析2.1 为什么是ATtiny13A在项目规划时主控芯片的选择是首要决策。市面上MCU那么多为何独独选中了这颗仅有8个引脚、1KB Flash的“小不点”ATtiny13A首要原因是“够用且划算”。这个项目的核心任务就是循环控制5个IO口输出高低电平逻辑简单到几乎不需要什么计算资源。ATtiny13A拥有5个可用的I/O引脚PB0-PB4正好对应我们需要的5路LED控制。它的1KB Flash内存对于实现一个简单的追逐灯效程序绰绰有余。相比之下如果使用常见的ATmega328PArduino Uno的核心或者更强大的ESP32无疑是“大炮打蚊子”不仅成本飙升芯片体积和外围电路复杂度也会增加完全不符合徽章这种小型化、低成本项目的需求。其次是易得性与生态。尽管全球芯片短缺的阴影尚未完全散去但ATtiny13A作为一款经典且产量巨大的8位MCU在主流元器件分销商处通常仍有库存价格也相对稳定。更重要的是得益于开源社区的努力我们现在可以通过Arduino IDE来对它进行编程大大降低了开发门槛。只需要安装一个名为“MicroCore”的第三方开发板支持包就能用熟悉的Arduino语法来写代码然后通过ISP在线串行编程方式烧录进去这对爱好者来说极其友好。最后是低功耗特性。徽章计划使用CR2032纽扣电池供电这对电路的静态功耗有严格要求。ATtiny13A在掉电模式Power-down下的电流可以低至微安级别这对于延长电池寿命至关重要。虽然在这个始终运行的灯效项目中低功耗模式可能用不上但芯片本身具备这个能力为未来增加休眠唤醒功能留出了可能性。注意ATtiny13A的工作电压范围是2.7V-5.5V这意味着它既可以用3V的纽扣电池直接驱动也可以通过USB口的5V供电。在设计电源电路时要确保电压在此范围内。2.2 驱动方案MOSFET的必要性确定了主控接下来要解决如何驱动LED。ATtiny13A的单个I/O引脚最大拉电流source current和灌电流sink current典型值为20mA。虽然直接驱动一颗普通LED没问题但我们的设计是每个引脚要驱动4颗并联的LED。如果4颗LED并联后直接接在MCU引脚上假设每颗LED工作电流为5mA那么总电流将达到20mA这已经达到了引脚的最大驱动能力极限。长期工作在极限状态下会导致芯片发热稳定性下降甚至损坏。更稳妥和专业的做法是使用一个“开关”来承担驱动电流的工作MCU只负责给这个“开关”一个控制信号。这个“开关”就是MOSFET金属-氧化物半导体场效应晶体管。我选择了8205S这款双N沟道MOSFET。它体积小巧SOT-23-6封装导通电阻Rds(on)很低意味着在导通时自身消耗的功率很小发热也小。在电路中ATtiny13A的I/O引脚连接到MOSFET的栅极G。当引脚输出高电平时MOSFET导通电流从电源VCC流经LED和MOSFET到地GNDLED点亮。MCU引脚此时只提供电压信号几乎不提供电流负载电流完全由MOSFET和电源承担从而完美保护了脆弱的MCU引脚。2.3 电路原理图详解整个电路的原理图非常清晰可以分为三个部分主控及编程接口、LED驱动阵列、电源管理。主控及编程接口部分核心是U1即ATtiny13A。为了使其稳定工作需要在VCC和GND之间就近放置一个0.1uF的退耦电容C1用于滤除电源线上的高频噪声。虽然ATtiny13A内部有复位电路但为了编程可靠我还是将RESET引脚PB5通过一个10K电阻R6上拉到VCC防止误触发。旁边预留了ISP编程接口J1包含VCC、GND、RESET、MOSI、MISO、SCK六根线这是后续烧录程序的通道。LED驱动阵列部分这是实现光效的核心。5个驱动通道结构完全一致。以第一路为例ATtiny13A的PB0引脚连接至MOSFET U2的栅极。U2的源极接地漏极连接4颗并联的LEDD1-D4的阴极。LED的阳极通过一个限流电阻R11KΩ连接到电源正极。这个1KΩ的电阻决定了LED的亮度。根据欧姆定律当电源为3V纽扣电池LED正向压降约为1.8V时电阻两端电压为1.2V流过单颗LED的电流约为1.2V / 1KΩ 1.2mA。四颗并联总电流约4.8mA这是一个非常安全且亮度适中的值。其他四路PB1-PB4分别控制U3-U6与此完全相同。电源管理部分为了增加使用的灵活性我设计了双电源输入。一是通过一个SMD贴片纽扣电池座BAT1接入一颗CR2032电池3V。二是在PCB边缘放置了一个USB Type-C接口J2。Type-C接口的VBUS引脚即5V电源经过一个二极管D21连接到系统的VCC网络。这个二极管起到了防止反向电流的作用当仅使用电池供电时防止电池电流倒灌进USB口当插入USB时USB的5V会通过二极管给系统供电同时因为二极管压降约0.3V-0.7V系统电压约为4.3V-4.7V仍在ATtiny13A的工作范围内。这里没有使用复杂的稳压芯片是为了极致简化。3. PCB设计从图像到电路的转化3.1 利用丝印层实现视觉主题对于这样一个文化主题徽章PCB的视觉效果和电路功能同等重要。我的目标是让Goku的形象成为PCB正面丝印层Silkscreen的主体图案。这里的关键是将一张普通的图片转化为EDA电子设计自动化软件能够识别并放置的矢量图形。我首先找到了一张悟空发射龟派气功的经典黑白线稿。图片处理步骤如下预处理在Photoshop或GIMP等软件中将图片调整为高对比度的黑白二值图确保线条清晰去除灰色噪点。格式转换大多数专业PCB设计软件如我用的OrCad/Allegro或者KiCadAltium Designer都支持将位图BMP文件导入到丝印层。我将处理好的图片保存为BMP格式。导入与缩放在PCB编辑器中找到导入图片到丝印层的功能在OrCad中通常通过“Place - Picture”实现。将BMP文件导入并根据PCB板框大小精确缩放图像将其放置在板子的中央区域。调整与避让导入的图片可能会覆盖元件放置区域或走线。需要仔细调整图片的位置或者对图片的非关键部分进行微调如气功波的能量区域确保所有焊盘、过孔和重要的走线不被丝印油墨覆盖以免影响焊接。实操心得丝印的精度取决于原始图片的分辨率和软件转换的质量。对于复杂图案建议先用矢量软件如Inkscape, Adobe Illustrator将位图描摹Trace成矢量路径然后导出为DXF或SVG格式再导入PCB软件。这样得到的丝印线条边缘光滑不受放大缩小影响效果远优于直接使用位图。3.2 元件布局与走线规划在炫酷的丝印之下是严谨的电路布局。我的布局原则是功能优先美观兼顾。围绕主题布局我将20颗0603封装的LED精心排列在悟空手掌前方形成一个由内向外、略微扩散的“能量球”形状。5组LED每组4颗的排列不是随机的而是为了在追逐灯效亮起时能模拟出能量聚集并发射的动态感。LED本身也成为了视觉设计的一部分。模块化分区我将电路分成几个功能区域进行布局主控区ATtiny13A和它的退耦电容、复位电阻放置在PCB中部偏上的位置这里是信号的“心脏”需要相对安静。驱动区5个8205S MOSFET紧挨着它们所控制的LED组放置。这样从MCU引脚到MOSFET栅极的驱动走线可以很短减少干扰从MOSFET漏极到LED阴极的电流路径也很短降低路径电阻。电源接口区USB Type-C接口和纽扣电池座分别放置在PCB的顶部和底部边缘方便接入。电源从接口进入后通过较宽的走线我使用了20mil约0.5mm向各个模块供电确保电流能力充足。走线策略电源线加粗所有VCC和GND走线都明显加粗并在底层Bottom Layer大面积铺铜接地形成一个稳定的电源参考平面有助于降低噪声和阻抗。信号线等长非必需对于这种低速数字电路开关频率仅几十赫兹信号线不需要做严格的等长布线但应尽量避免长的平行走线以减少串扰。走线拐角使用45度角或圆弧避免90度直角后者在高频下可能产生辐射。过孔使用为了给正面丝印图案让出空间很多走线需要通过过孔Via切换到底层。我尽量将过孔放置在元件引脚附近或非视觉中心区域。3.3 设计检查与Gerber文件生成布局布线完成后必须进行一系列设计规则检查DRC电气规则检查ERC确保所有网络连接正确没有未连接的引脚或短路。间距检查检查所有导线之间、导线与焊盘之间、焊盘与焊盘之间的间距是否满足PCB制造商的能力通常最小线宽/线距为6mil/6mil。对于手工焊接或热板回流焊间距可以适当放宽以提高良率。丝印清晰度检查丝印文字和图案是否与焊盘重叠确保组装时不会产生混淆。检查无误后就可以输出用于生产的Gerber文件了。这是一套标准格式的文件每个文件对应PCB的一层如顶层铜箔、底层铜箔、顶层丝印、阻焊层、钻孔文件等。在输出时需要特别注意层设置正确选择每层的内容和极性正片/负片。钻孔文件确保生成正确的钻孔描述文件如Excellon格式包含所有过孔和安装孔的大小和位置。文件打包将所有Gerber文件、钻孔文件、以及可能需要的板层结构说明readme.txt压缩成一个ZIP包这就是发给PCB打样厂的最终生产文件。4. PCB打样与SMT焊接实战4.1 打样厂商选择与工艺确定我将Gerber文件发给了PCBWAY进行打样。选择黄色阻焊Soldermask搭配白色丝印Silkscreen这个配色方案能很好地突出黑色的Goku线稿图案同时黄色的底色也颇有“元气”的感觉。在工艺选择上我选择了最基础的1.6mm板厚、FR-4材料、有铅喷锡HASL表面处理。对于这种低频、小电流的消费电子项目这些标准工艺完全足够且成本最优。大约一周后我收到了打样回来的PCB。质量检查是第一步用放大镜仔细查看线路是否清晰、有无断线或短路、阻焊油墨是否均匀、丝印图案是否对齐。特别是那20个0603 LED的焊盘尺寸精度至关重要直接影响后续的贴片焊接。4.2 手工SMT焊接全流程详解对于小批量或原型制作手工完成SMT焊接是完全可行的。我采用的是“焊膏热风枪/热板回流”的标准流程这比直接用烙铁逐个焊接贴片元件效率高得多效果也好。步骤一焊膏涂布这是整个手工SMT中最需要耐心和手稳的环节。我使用的是含铅的Sn63/Pb37焊膏熔点为183°C流动性和活性比较好。工具一支1ml的塑料注射器配上一个平口针头口径约0.5mm。操作将PCB固定在桌面。手持注射器针头轻轻靠近焊盘。通过轻微挤压让少量焊膏从针头渗出点到其中一个焊盘上。目标是让焊膏覆盖焊盘面积的70%-80%形成一个微凸起的小丘。切忌过多否则回流时极易造成连锡桥接。技巧可以先在不重要的焊盘上练习手感。对于0603这类小元件每个焊盘点一下即可。对于ATtiny13A的SOIC-8封装需要在两排焊盘上各画一条连续的、粗细均匀的焊膏线。步骤二元件贴装使用防静电镊子ESD Tweezers进行贴装。顺序先贴小元件再贴大元件。我通常的顺序是电阻电容 - MOSFET - ATtiny13A - USB Type-C - 最后是LED。因为LED的焊盘在图案中央先贴其他外围元件可以避免操作空间被遮挡。对准用镊子夹起元件借助放大镜或台灯将其精确放置在涂好焊膏的焊盘上。对于有极性的元件如LED、USB口、MOSFET务必确认方向正确。ATtiny13A的封装上有一个小圆点或凹槽标识1号引脚需与PCB丝印上的标识对齐。固定轻轻按压元件使其底部与焊膏接触。焊膏的粘性可以暂时固定住元件方便移动PCB。注意事项贴片时环境要保持清洁避免风吹。如果焊膏涂布后放置时间过长30分钟焊膏中的助焊剂可能会挥发变干失去粘性此时可以用烙铁头蘸取少量新鲜焊膏进行补救。步骤三回流焊接我使用了一个自制的恒温加热板进行回流。商用回流焊炉当然更好但加热板对原型制作来说性价比极高。预热将放置好元件的PCB轻轻移到已预热的加热板上。温度设定在150°C左右预热60-90秒。这个阶段使PCB和元件均匀升温蒸发焊膏中的部分溶剂避免后续急剧升温导致飞溅。回流观察焊膏当看到它开始变得光亮、流动并坍塌时说明已进入回流区。此时焊膏中的金属粉末熔化。对于Sn63/Pb37焊膏峰值温度应达到220-230°C并保持30-60秒。可以通过红外测温枪监测PCB表面的温度。冷却回流完成后用镊子将PCB从加热板上移开放在一块金属散热板或陶瓷板上自然冷却。切勿用风吹或水冷急速冷却会导致焊点结晶粗大强度变差也容易导致元件因热应力开裂。步骤四焊接后检查与补焊冷却后在强光下用放大镜检查所有焊点。良好焊点表面光滑、呈凹面弯月形焊料均匀覆盖焊盘并爬升到元件引脚侧面。常见问题立碑元件一端翘起。原因是两端焊膏量不均或回流时受热不均。用烙铁补焊翘起的一端即可。桥接相邻焊盘被焊料连接。用烙铁配合吸锡线或助焊剂将其分开。虚焊焊点灰暗、有裂纹。用烙铁添加少量新焊锡和助焊剂重新焊接。少锡焊料未完全覆盖焊盘。用烙铁补锡。步骤五通孔元件焊接本设计中只有背面的SMD纽扣电池座是计划用烙铁手工焊接的。因为它的焊盘和引脚较大且需要承受电池插拔的机械应力用焊锡丝直接焊接更牢固。焊接时注意控制温度320-350°C和时间避免烫坏塑料底座。5. 固件开发与ISP程序烧录5.1 代码逻辑剖析让5路LED依次亮灭产生追逐效果的代码非常简单但其逻辑是许多动画和状态机的基础。下面是对代码的逐行解读// 定义常量控制LED的引脚数量 int pinsCount 5; // 定义一个数组存储这5个引脚对应的实际MCU引脚编号ATtiny13A的PB0-PB4对应Arduino引脚号0-4 int pins[] {0, 1, 2, 3, 4}; void setup() { // 初始化将这5个引脚都设置为输出模式 for (int i 0; i pinsCount; i) { pinMode(pins[i], OUTPUT); } // 初始化完成后所有引脚默认为低电平LED熄灭 } void loop() { // 第一部分从左到右追逐例如从PB0到PB4控制的LED组 for (int i 0; i pinsCount; i i 1) { digitalWrite(pins[i], HIGH); // 点亮当前序号的LED组 delay(70); // 保持点亮70毫秒这个值决定了“光球”移动的速度 digitalWrite(pins[i], LOW); // 熄灭当前LED组 // 注意这里没有在熄灭后立即点亮下一个所以会有一个短暂的“暗区”跟随在亮灯后形成追逐感 } // 第二部分从右到左追逐例如从PB4到PB1控制的LED组 // 注意这里从 pinsCount-1即4开始到大于0结束所以不会再次点亮最左边的第一组i0 // 这样设计是为了让动画在折返时更流畅避免端点LED组闪烁两次。 for (int i pinsCount - 1; i 0; i i - 1) { digitalWrite(pins[i], HIGH); delay(70); digitalWrite(pins[i], LOW); } // loop()函数执行完毕从头开始形成无限循环。 }代码优化思考这段基础代码可以实现效果但还有优化空间。例如可以使用millis()函数配合状态机来替代delay()这样MCU在等待期间可以处理其他任务虽然本项目没有也为将来添加按钮交互等功能留出余地。另外可以将引脚模式和动画序列数据存放在程序存储器PROGMEM中以节省宝贵的SRAM空间不过对于这个简单程序影响微乎其微。5.2 搭建Arduino ISP编程环境ATtiny13A没有内置USB转串口功能不能像Arduino Uno那样一键上传。我们需要使用ISPIn-System Programming方式即通过另一块已编程的Arduino板作为“编程器”来给ATtiny13A烧录程序。第一步安装ATtiny13A开发板支持打开Arduino IDE进入“文件 - 首选项”。在“附加开发板管理器网址”中添加以下URLhttps://mcudude.github.io/MicroCore/package_MCUdude_index.json点击“确定”然后进入“工具 - 开发板 - 开发板管理器”。在搜索框中输入“MicroCore”找到后点击安装。这个包就包含了ATtiny13系列的支持。第二步将Arduino Nano/Uno配置为ISP编程器用USB线连接一块Arduino Nano或Uno到电脑。在Arduino IDE中选择对应的开发板和端口。打开示例代码“文件 - 示例 - 11. ArduinoISP - ArduinoISP”。将此代码上传到这块Arduino Nano上。上传成功后这块Nano就变成了一个AVR ISP编程器。第三步硬件连接这是最关键的一步需要将“编程器”Arduino Nano与“目标板”我们的徽章的SPI编程接口正确连接。连接关系如下表所示“编程器” (Arduino Nano) 引脚连接至“目标板” (ATtiny13A) 引脚功能说明D10→RESET (PB5)复位信号。编程器通过此引脚控制目标MCU复位并进入编程模式。D11→MOSI (PB0)主设备输出从设备输入。编程器通过此线向目标MCU发送指令和数据。D12→MISO (PB1)主设备输入从设备输出。目标MCU通过此线向编程器返回数据。D13→SCK (PB2)串行时钟。编程器提供时钟信号同步数据传输。5V→VCC为目标MCU提供编程电源。务必确认目标板本身没有接其他电源否则可能冲突。GND→GND共地。这是必须的确保两者电势基准一致。重要提示在连接和断开任何线缆之前务必确保编程器和目标板均未通电。接错线可能导致芯片损坏。如果PCB上没有预留ISP接口就需要像我做的那样用细导线直接焊接到ATtiny13A对应的引脚上操作时要格外小心避免短路。第四步烧录引导程序与程序在Arduino IDE中为目标板进行设置“工具 - 开发板”选择“ATtiny13/13A”“编程器”选择“Arduino as ISP”“时钟”根据实际情况选择内部1.2MHz或9.6MHz均可本项目对时钟精度要求不高。点击“工具 - 烧录引导程序”。这个过程会将正确的熔丝位Fuses配置写入ATtiny13A并烧录一个用于配合Arduino IDE的基础引导程序虽然ATtiny13A的Bootloader很小但此步骤必不可少。IDE下方状态栏会显示“正在烧录引导程序…”成功后显示“引导程序烧录完成”。现在打开我们为徽章编写的追逐灯效代码。点击“项目 - 使用编程器上传”。IDE会编译代码然后通过ISP连接将程序直接写入ATtiny13A的Flash存储器中。上传成功后断开ISP连接线。此时如果给徽章上电装上纽扣电池或插入USB就应该能看到LED开始依次亮起形成追逐动画了。6. 测试、调试与问题排查实录6.1 上电前静态检查在焊接完成并烧录程序后不要急于上电。先进行一次彻底的静态检查视觉检查再次用放大镜检查所有焊点确保无桥接、虚焊。检查元件方向特别是LED、MOSFET、USB口和ATtiny13A。电源短路测试将万用表调到蜂鸣档或电阻档。测量PCB上VCC和GND之间的电阻。在未上电、未装电池的情况下电阻值不应为零或非常小如几欧姆。如果蜂鸣器响或电阻极小说明存在电源短路必须排查常见原因是焊锡桥接或元件损坏。二极管测试检查LED将万用表调到二极管测试档。用红表笔接触LED所在列的电源正极端即1K电阻前端黑表笔接触该列LED的公共阴极即MOSFET漏极端。正常的LED会发出微弱的光并且万用表会显示一个正向压降值通常1.6V-1.8V。依次测试所有5列LED。这个方法可以在不上电、不依赖MCU的情况下快速验证LED本身和驱动通路电阻、MOSFET的D-S极是否焊接良好。6.2 上电测试与动态调试通过静态检查后可以首次上电。建议先使用可调稳压电源将电压限流在3V/100mA这样即使有短路也能限制损坏范围。电流观察接上电源观察电流读数。正常状态下整个电路的空载电流所有LED熄灭时应小于1mA。当LED逐一点亮时电流会阶梯式上升每路LED点亮时增加约5mA4颗LED * 1.2mA峰值电流应在25-30mA左右。如果电流异常大如超过50mA立即断电检查。功能测试观察LED的追逐效果是否与程序设计一致。常见问题有某一路LED常亮或不亮检查该路对应的ATtiny13A引脚输出是否正常可用万用表电压档测量应在0V和3V/5V之间跳变。如果输出正常问题可能在MOSFET或LED本身如果输出异常检查程序或MCU焊接。所有LED都不亮但MCU发热极有可能是电源接反或VCC/GND短路导致MCU损坏。需断电检查短路点并更换MCU。动画顺序错乱检查程序中pins[]数组定义的引脚顺序是否与实际PCB布线一致。可能是设计时引脚分配与编程时设想的不同。6.3 典型问题排查速查表下表汇总了制作过程中可能遇到的一些典型问题及排查思路问题现象可能原因排查步骤上电无任何反应1. 电源未接通电池没电/接触不良2. VCC/GND存在短路3. ATtiny13A损坏或未编程4. 复位引脚被意外拉低持续复位1. 测量电池电压检查电池座焊接。2. 测量VCC-GND间电阻排除短路。3. 检查MCU焊接尝试重新烧录程序。4. 检查连接RST引脚的10K电阻是否虚焊或损坏。只有部分LED列能亮1. 该列MOSFET损坏或焊接不良2. 该列LED或限流电阻损坏/虚焊3. MCU对应引脚损坏或配置错误1. 用二极管档测试该列LED通路。2. 交换测试将能亮的列的MCU控制线飞线接到不亮的列的MOSFET栅极判断是MCU问题还是驱动/LED问题。LED亮度明显偏暗或偏亮1. 限流电阻值焊错如用了10K而非1K2. 电源电压异常电池电量不足3. LED型号不一致压降不同1. 核对电阻阻值。2. 测量上电时LED两端的实际电压和电流。3. 确保所有LED为同一批次。追逐动画速度不稳定或闪烁1. 电源不稳定纽扣电池内阻增大2. 程序逻辑问题如中断干扰3. 退耦电容失效1. 换新电池或改用USB供电测试。2. 检查代码确认没有其他中断服务程序。3. 在ATtiny13A的VCC和GND引脚间并联一个10uF电解电容试试。ISP编程失败1. 接线错误或接触不良2. “编程器”Arduino的ArduinoISP程序未正确上传3. 目标板MCU型号选择错误4. 熔丝位配置被意外更改1. 逐根检查6根连接线。2. 重新对“编程器”Arduino上传ArduinoISP示例。3. 在IDE中确认选择了“ATtiny13/13A”。4. 尝试用“烧录引导程序”功能重置熔丝位。6.4 功耗实测与电池寿命估算项目完成后我实测了不同状态下的工作电流静态电流LED全灭约0.35mA。这部分主要是ATtiny13A运行简单循环程序的功耗。动态峰值电流单列LED亮约4.8mALED电流 0.35mA ≈ 5.15mA。平均工作电流由于LED是逐列点亮每列亮70ms一个完整循环约700ms。平均电流可以粗略估算为 (5.15mA * 70ms * 2 0.35mA * 560ms) / 700ms ≈ 1.2mA。一颗标准的CR2032纽扣电池容量大约在200mAh到240mAh之间。如果我们以1.2mA的平均电流计算理论续航时间约为 200mAh / 1.2mA ≈ 166小时接近7天。这只是一个理想估算实际使用中电池自放电、接触电阻等因素会缩短时间但连续点亮数天是完全可以的。对于一个小徽章来说这个续航已经非常可观。如果想进一步延长可以在代码中增加休眠模式让徽章在无人操作一段时间后自动进入深度睡眠电流可降至微安级续航可达数月。