PCB圣诞树贺卡:从查理复用、低功耗设计到嵌入式LED焊接全解析
1. 项目概述当PCB成为一棵会发光的圣诞树几年前我在一个创客社区第一次看到用PCB印刷电路板制作的圣诞树那种将冰冷的工业技术与温暖的节日氛围结合起来的创意瞬间击中了我。它不仅仅是一个电路更是一件融合了电气、机械和美学设计的工艺品。但当时的设计多为立体组装邮寄是个麻烦事。于是一个念头冒了出来能不能做一棵可以平邮寄出的PCB圣诞树贺卡让这份科技感十足的礼物能像传统贺卡一样塞进信封穿越千里在亲友打开时绽放光彩这个想法驱动我完成了眼前这个项目一棵完全由PCB构成的、可折叠的、带有触摸控制多彩LED动画的圣诞树贺卡。它看似简单但为了达到“易于邮寄”和“非技术用户友好”这两个核心目标背后涉及了从电路架构、机械结构、低功耗编程到手工装配的一系列挑战。整个设计过程就是一场在毫米尺度上的工程权衡。如果你对硬件开发、嵌入式编程或仅仅是制作一份独一无二的电子礼物感兴趣那么这次从零到一的完整经历或许能给你带来不少启发。2. 核心设计思路与方案选型做一个能放进信封的电子贺卡听起来简单实则需要对每一个环节进行重新思考。传统的立体PCB树显然不行我们必须让它能“躺平”。同时收礼人可能完全不懂电子所以组装必须直观到“傻瓜式”使用也必须简单到“按一下就行”。这些用户场景直接决定了技术方案的走向。2.1 机械连接寻找最优雅的“卡扣”最大的挑战在于如何连接构成树冠的两片主要PCB。它们需要可靠的电气连接至少3个触点电源正负极和一根信号线和稳固的机械结构。原设计用的直角排针太厚会破坏平整性。我考虑过几个方案用软排线连接但会增加组装复杂度在PCB边缘做插针和插座又会增加厚度。最终灵感来自立体贺卡的拼插结构。我在两块PCB的中央各设计了一个贯穿一半板长的狭缝让它们可以像两片拼图一样互相滑入卡紧。机械问题解决了电气连接呢这时我想到了PCB上常用的弹簧触点pogo pin的一种变体。这种触点通常垂直安装用于连接外壳内的天线或马达。我尝试将它们侧向焊接在PCB边缘使其变成滑动触点。当两块板子拼插时这些弹簧被压缩依靠弹力与对面PCB上的镀金焊盘形成稳定接触。经过小样测试这个方案在电气性能和机械可靠性上都达到了预期完美实现了“滑动连接”的需求。注意弹簧触点的选型至关重要。需要选择弹力适中、行程合适且可焊端尺寸与PCB焊盘匹配的型号。弹力太小接触不良太大则拼插费力。我最终选用的型号其尺寸和弹力经过了多次打样验证。2.2 电子系统极简主义的低功耗哲学电子部分的目标是在最小空间和最低成本下实现绚丽灯光和触摸控制。我遵循了“如无必要勿增实体”的原则。电源选型首先抛弃了常见的AA电池。AA电池体积大电压高1.5V*23V且需要额外的稳压电路。我选择了CR2032纽扣电池。它的优势非常明显扁平适合贺卡标称电压3V放电曲线平坦可以直接为系统供电省去稳压芯片更重要的是它几乎不漏液存放寿命长达十年非常适合作为贺卡礼物。LED驱动方案3V的电压无法驱动常见的WS2812B这类集成IC的RGB LED。如果采用传统的多路复用又需要太多PCB间的连接线。因此我再次选择了查理复用Charlieplexing技术。利用单片机IO口的内阻约30Ω来限流省去了每个LED所需的限流电阻。在查理复用下N个IO口可以驱动N*(N-1)个LED。我们用的ATTiny44A有12个可用IO理论上能驱动132个LED而树上只有10个LED绰绰有余还能保持刷新率。触摸控制为了实现一个优雅的、无机械磨损的开关我放弃了用单片机引脚检测电容变化的方案因为那需要单片机持续运行检测代码功耗太高。我选用了TTP223专用触摸感应芯片。这颗芯片本身功耗极低典型值1.5uA可以常开直接检测触摸事件并输出高低电平。我将其输出连接到单片机的唤醒引脚这样整个系统在待机时只有TTP223和单片机深度睡眠模式在耗电整机待机电流可以控制在5uA以内一颗CR2032用上几个月都没问题。2.3 美学与结构让电路隐形让光绽放我不希望贺卡看起来像一块“裸露的电路板”。我的目标是让电路成为树的“枝干”和“装饰”本身。布线艺术所有连接LED的走线都被精心布置在PCB中央区域模拟“树干”。外部的“树枝”部分则尽量保持干净只留下作为“积雪”的白色丝印和作为“圣诞球”的裸露金属焊盘可选择沉金或沉银工艺呈现金色或银色。LED的魔法最让我满意的设计是将LED嵌入到PCB板内部。我在PCB上为每个LED开了窗cutout并在窗口的上下两侧都设计了焊盘。选用的LED尺寸是1.6mm宽而PCB厚度是1.2mm。将LED垂直插入窗口后两侧各有0.2mm的余量然后从PCB正反两面将LED焊牢。这样LED的光线可以从PCB的侧面透出无论从哪个角度观看都能看到均匀柔和的光晕而不是一个刺眼的光点。这个设计极大地提升了视觉效果但也对焊接工艺提出了极高要求。卡片结构贺卡采用三折页设计。第一折是传统的祝福语页面和简易图文组装说明第二折背后隐藏着PCB和电池。中间还夹了一层从快递箱上剪下的瓦楞纸板它有两个作用一是找平弥补电池座和USB口的高度差二是提供纵向支撑防止卡片在邮寄过程中被弯折。所有部件用可移除的“胶点”固定既牢固又方便取出组装。3. 核心元器件解析与焊接实战这个项目的硬件部分是对细心和手艺的双重考验。尤其是SMD表面贴装元件的焊接和LED的嵌入安装需要一些特别的技巧和耐心。3.1 物料清单BOM关键点解读除了常规的电阻电容有几个元件需要特别关注微控制器ATTiny44A。选择它是因为其引脚数量14个刚好够用支持我们需要的低功耗睡眠模式且价格便宜。它的内存4KB Flash, 256B EEPROM也足够存储我们的动画程序。触摸芯片TTP223-BA6低功耗版本。务必确认型号后缀确保是低功耗款。它的输出在无触摸时为低电平触摸时为高电平这个逻辑正好用于唤醒单片机。LED0603尺寸的侧发光RGB LED。这是整个项目的视觉核心。需要确认是共阳还是共阴极我们的电路设计是基于共阳的。我使用的型号是Lite-On LTST-C195KGJRKT你也可以选择其他类似规格的扩散型DiffusedLED光线会更柔和。弹簧触点这是实现滑动连接的关键。我选用的是Amphenol 10104321系列其小巧的尺寸和良好的弹力非常适合本项目。焊接时需要格外小心。电池座用于CR2032的贴片电池座。选择时要注意其高度尽量选择超薄款以减少贺卡的厚度。3.2 SMD焊接热风枪与烙铁的协奏曲对于小批量制作你可以全部用烙铁手工焊接。但对于MCU、TTP223这类多引脚芯片使用焊膏和热风枪进行回流焊会高效且美观得多。回流焊接流程定位将PCB固定在耐热硅胶垫上。涂焊膏用刮刀或注射器将少量焊膏精确涂在每个焊盘上。对于弹簧触点的焊盘焊膏要尤其少否则多余的焊料冷却后会阻碍弹簧的伸缩运动。贴片用镊子将元件轻轻放在对应焊盘上。焊膏的粘性可以暂时固定它们。回流用热风枪从PCB上方均匀加热。建议从低温如150°C开始缓慢绕圈加热使焊膏中的助焊剂活化然后逐渐升温至焊膏熔点以上约220-230°C。看到焊锡瞬间熔化形成光亮圆润的焊点后移开热风枪让其自然冷却。检查与修补冷却后用放大镜检查是否有虚焊、连锡。连锡可用吸锡带处理虚焊则用烙铁补焊。手工焊接要点弹簧触点这是手工焊的难点。先将弹簧触点摆放到位用镊子压住然后用烙铁尖快速点焊一个固定点。确认位置无误后再焊接另一个引脚。务必确保焊锡没有流到弹簧的伸缩部位。电池座建议最后焊接因为它会遮挡周围的空间。焊接时温度不要过高时间不宜过长防止塑料部分熔化变形。3.3 地狱难度嵌入式LED的焊接技巧将LED嵌入1.2mm厚的PCB并实现两面可靠焊接是本项目手工部分最大的挑战。经过无数次失败我总结出以下相对可靠的方法准备工作首先必须用锉刀或小电磨如Dremel仔细修整PCB上LED开窗的内边缘去除生产时可能留下的毛刺和阻焊层确保LED能顺畅放入且焊盘暴露充分。务必佩戴口罩玻璃纤维粉尘对人体有害。方法一垂直固定法将PCB垂直夹在台钳上需要焊接的一侧朝上。用烙铁在一个焊盘上堆上足量的焊锡“慷慨地”上锡。用尖头镊子夹住LED使电极朝上利用重力让LED自然靠向已上锡的焊盘。用烙铁熔化焊锡将LED的一个电极焊上。此时先不要追求焊点美观重点是固定位置和极性。将镊子尖伸进LED旁边的孔中轻轻向外拨动LED使其主体紧贴PCB板边。再次加热第一个焊点此时LED应在重力作用下与PCB贴合。翻转PCB焊接另一面的电极。因为位置已对准这一步会容易很多。最后再回来修饰第一个焊点并检查是否有短路。方法二胶带垫高法来自社区高手nopnopnop的改进 这个方法的核心是让PCB“悬浮”使LED开窗的中间线正好与工作台面平齐。在PCB背面无元件面贴上几层美纹纸胶带胶带要避开LED窗口。通过叠加胶带使“PCB厚度胶带总厚度”恰好等于LED的宽度例如1.2mm PCB 0.4mm胶带 1.6mm LED。将PCB贴胶带面朝下放在绝对平整的表面上并用蓝丁胶固定。同样先给一面的焊盘上锡。此时将LED垂直放入窗口它会因为胶带的支撑完美地居中于PCB边缘。进行焊接。这个方法的好处是LED不会掉进孔里而且更容易保持垂直。无论哪种方法焊接时使用适量的助焊剂助焊笔都能让焊锡流动更顺利。完成后务必用放大镜或显微镜仔细检查每个LED的正负极是否焊对以及是否存在焊盘间的短路。4. 固件开发在ATTiny44A上编排光之舞硬件是躯体固件Firmware则是灵魂。如何在资源极其有限的ATTiny44A上实现流畅的动画、低功耗的待机以及简单的用户交互是软件部分要解决的核心问题。4.1 系统逻辑与状态机整个系统围绕一个状态机运行以响应唯一的输入——触摸事件。短按在开机状态下短按用于切换不同的灯光动画模式。长按核心开关机逻辑。在关机状态下长按开机并播放动画。在开机状态下长按进入颜色选择模式此时按钮旁的LED会闪烁指示当前颜色。在颜色选择模式下短按切换颜色长按保存颜色设置到EEPROM并退出。长按关机状态下将当前动画模式和颜色设置保存到EEPROM实现断电记忆。这种“一键多用”的设计在最大限度简化硬件的同时提供了足够的功能性。状态机的实现避免了复杂的菜单所有交互直观且符合直觉。4.2 Charlieplexing驱动与色彩管理驱动10个RGB LED需要30个独立的PWM通道而ATTiny44A显然没有这么多硬件PWM。查理复用技术结合软件PWM成为了唯一选择。查理复用扫描我们使用了6个IO口PA0-PA5来驱动LED。在任意时刻我们将其中的一个IO设置为输出高电平VCC一个设置为输出低电平GND其余设置为高阻输入INPUT。这样电流就会从高电平IO流向低电平IO点亮连接在这两个IO之间的那个LED。通过高速轮询扫描不同的IO口组合利用人眼的视觉暂留就能实现所有LED的单独控制。色彩与亮度为了节省宝贵的CPU周期和Flash空间我没有使用浮点数运算进行HSL到RGB的转换。而是预先计算好了一个颜色查找表LUT。我将色调Hue分为若干份例如每8度一个间隔将每个色调对应的RGB值经过伽马校正后直接存储在程序的Flash中。程序运行时只需根据选择的颜色索引从表中读取RGB值极大地提高了效率。软件PWM的占空比决定了LED的亮度。通过调整每个LED在每个扫描周期内的点亮时间就能实现256级的灰度控制从而混合出丰富的色彩。4.3 低功耗优化实战功耗控制是电池供电设备的生命线。我们的优化策略是“让CPU尽可能多地睡觉”。睡眠模式AVR单片机提供了多种睡眠模式。当树灯关闭时程序将单片机置于Power-Down模式此时几乎所有时钟和外设都关闭功耗降至最低约3μA。只有外部中断连接TTP223的引脚能唤醒它。动画帧间休眠即使在播放动画时CPU也并非一直忙碌。在完成一帧所有LED的扫描计算和输出后到下一帧开始前会有毫秒级的空闲时间。我们将CPU置于Idle模式此时CPU暂停但定时器等外设仍在运行功耗比全速运行低得多。外设管理关闭所有未使用的功能模块如ADC、看门狗等。IO口状态在睡眠前将所有未使用的IO口设置为输出低电平或带上拉电阻的输入状态防止引脚悬空产生漏电流。通过这些措施整棵树的平均工作电流可以控制在10mA以下亮度最高时而待机电流仅为个位数微安级别一颗CR2032理论续航可达数百小时。4.4 编程与测试技巧由于板子空间极其紧张我没有放置标准的6Pin ISP编程接口而是设计了一个1.27mm间距的焊盘阵列。你需要一个对应的pogo pin弹簧针编程夹具来连接。编程步骤在组装成树之前对主板进行编程。切勿安装电池。通过编程器如USBasp、AVR Dragon的接口为PCB供电。将编程夹具对准焊盘注意1脚方向标记压紧并保持稳定。使用Arduino IDE配合ATTinyCore或Atmel Studio进行程序烧录。我建议将熔丝位设置也写在代码里实现真正的“一键编程”这在批量生产时能节省大量时间。烧录完成后程序会自动运行一个LED测试序列所有LED会按顺序以红、绿、蓝三色闪烁一遍。这个功能至关重要可以立即帮你发现LED焊反、短路、开路或损坏等问题。颜色校准不同批次、不同品牌的LED其红、绿、蓝三色的发光效率可能有差异导致混合出的白色偏色。在源代码的color_rg.h文件中我预留了颜色校准系数。如果你发现白色光偏红或偏绿可以微调这些系数直到得到纯净的白色。5. 贺卡制作与总装从电路板到温情礼物电子部分完成后我们需要给它一个合适的“家”。贺卡的制作工艺直接决定了最终产品的手感和品质。5.1 卡片打印与加工纸张选择建议使用200g/m²以上的卡纸。太薄容易软塌太厚可能超出打印机负荷。务必先测试你的打印机能否顺畅进纸。打印调整由于需要精确折叠打印的裁切线位置必须准确。不同打印机有不同程度的偏移。你需要先用普通纸打印测试页测量偏差然后回到设计文件如提供的Word模板中调整页边距直到折叠线位置正确。裁切与压痕用裁纸刀或钢尺配合美工刀沿边线精确裁切。对于卡纸直接折叠会产生难看的裂纹必须先用压痕笔或没有刃口的钝刀背沿着折叠线用力划出一道凹痕压痕。这样折叠出来的边角才会锋利平整。本卡片需要压五条痕对应不同的折叠部分。书写与装饰在折叠前用你喜欢的笔写下祝福语。如果你使用钢笔或需要用力书写的笔建议此时书写以免折叠后纸面不平。你也可以用金色或银色的笔勾勒边线增加节日气氛。5.2 内部支撑结构与PCB固定制作瓦楞纸内衬从废旧快递箱上剪下约16cm x 9cm的瓦楞纸板。注意让瓦楞的波纹方向与卡片高度方向一致这样能提供最好的抗弯曲强度。用美工刀在对应电池座和Micro-USB口的位置挖出孔洞。粘贴内衬在瓦楞纸板的长边贴上双面胶将其固定在卡片内页的指定位置。注意让纸板边缘与卡片折痕对齐并稍微突出左侧边缘约2mm用于粘贴一个隐藏的小纸片让内部看起来更整洁。固定PCB使用可移除胶点。这种胶点粘性足够强能牢牢固定PCB但又可以无损取下。在卡片上印有PCB轮廓的位置贴上三个胶点先撕下胶点按压在卡片上再撕掉背纸最后将PCB粘上去。这样PCB就被安全地封装在卡片的内夹层中了。5.3 最终组装与邮寄功能测试装入电池触摸按钮测试所有功能正常后再合上贺卡。封装将合上的贺卡放入B6尺寸的标准信封。理论上它的厚度和重量符合平邮信件标准。邮寄须知这是一个非常重要的提醒。我最初尝试直接当平信寄出虽然收到了但卡片边缘有机器分拣造成的压痕。因为卡片不能弯曲而自动分拣机可能会尝试弯曲它。因此为了确保万无一失我建议将装有贺卡的信封再放入一个稍大的、有气泡衬垫的邮寄袋中作为“小包裹”寄出。虽然邮费可能略高但能保证这份精心制作的礼物完好无损地抵达。6. 常见问题与排查指南在制作和调试过程中你可能会遇到以下问题。这里是我踩过坑后总结的排查思路。问题现象可能原因排查与解决方法触摸无反应树灯不亮1. 电池没电或装反。2. TTP223触摸芯片故障或焊接不良。3. 主控ATTiny44A未正确编程或损坏。4. 电源路径有断路。1. 用万用表测量电池电压应≥2.8V。2. 检查TTP223的焊接测量其输出引脚触摸时是否从低变高。3. 重新连接编程器尝试读取单片机ID确认编程器连接和芯片正常。4. 沿着电池正极-开关-主控VCC的路径用万用表蜂鸣档检查连通性。部分LED不亮或颜色异常1. LED焊反、损坏或虚焊。2. 用于查理复用的IO口焊接不良。3. 程序中的LED映射表错误。4. 两个PCB之间的弹簧触点接触不良。1. 进入测试模式观察特定LED是否完全不亮可能损坏或焊反或颜色错乱可能RGB通道焊错。2. 用万用表测试连接该LED的两个IO口到主控是否通路。3. 检查源代码中led_matrix.h等文件确认IO口与LED的对应关系。4. 拆开两块PCB用酒精清洁弹簧触点和对应焊盘重新拼插确保接触紧密。所有LED微弱发光或闪烁不正常1. 电池电量严重不足。2. 存在电源短路导致电压被拉低。3. 软件PWM时序或查理复用扫描代码有误造成鬼影。1. 更换新电池。2. 用万用表测量工作时的电源电压如果远低于3V用热成像仪或手摸查找发热元件重点检查LED周围是否有焊锡短路。3. 检查固件中扫描间隔和延时函数确保有足够的消隐时间。待机耗电过大电池很快没电1. 单片机未进入深度睡眠模式。2. TTP223芯片型号非低功耗版。3. PCB存在漏电如焊锡渣导致轻微短路。1. 在代码中检查睡眠模式设置是否正确唤醒中断是否配置。2. 确认TTP223型号为TTP223-BA6低功耗型。3. 在断电状态下用万用表微安档串联进电池回路测量待机电流。若远大于5uA用洗板水彻底清洁PCB尤其是芯片底部和细密走线间。两块PCB拼插后松动或接触不稳定1. 弹簧触点焊锡过多阻碍其伸缩。2. PCB的狭缝尺寸公差过大导致过松或过紧。3. 弹簧触点本身弹力不足或损坏。1. 用放大镜检查弹簧根部用烙铁和吸锡带移除多余焊锡。2. 用细锉刀小心修整PCB狭缝直到拼插手感顺滑且紧密。3. 更换新的弹簧触点。编程器无法连接单片机1. 编程器与PCB的pogo pin接触不良。2. 单片机熔丝位被错误设置如禁用了SPI。3. 单片机损坏。1. 确保编程夹具压紧且对准用万用表检查每个编程引脚与主控对应引脚的连通性。2. 尝试使用高压编程器恢复熔丝位。3. 更换一片新的ATTiny44A。最后一点心得焊接嵌入式LED时心态一定要好。这可能是整个项目中最磨人的步骤失败几次很正常。准备好充足的LED和一块备用PCB作为练习板。当你最终看到所有LED在精心编写的动画程序驱动下在自制的贺卡中温柔闪烁时那一刻的成就感足以抵消之前所有的繁琐与焦虑。这份融合了技术、工艺与心意的礼物它所传递的远不止是一句“圣诞快乐”。