TinyML硬件设计:从现成开发板到自研PCB的工程实践

发布时间:2026/10/13 1:03:01
TinyML硬件设计:从现成开发板到自研PCB的工程实践 1. 从一块“多余”的开发板说起前阵子在一个嵌入式技术交流群里有人甩了张照片出来是一块巴掌大的PCB上面焊着一颗指甲盖大小的MCU旁边挤着麦克风、六轴传感器、一块小得可怜的锂电池还有一颗WS2812灯珠。配文是“有那么多现成的开发板我为什么还要为TinyML费劲巴拉的重新做一款”底下评论分两派。一派说“确实ESP32-S3开发板几十块钱就能跑TinyML何必呢”另一派说“你跑过就知道了现成板子做原型可以真往产品里塞的时候全是坑”。我属于第二派。过去两年多我陆陆续续用TinyML做过几个小东西——关键词唤醒、振动异常检测、手势识别——从最开始拿现成开发板跑Demo到后来自己画板子、打样、写固件中间踩的坑足够写一本小册子。这篇文章不打算劝你也去画板子而是想把“为什么现成开发板不够用”这件事拆开讲清楚顺带把从选型到打样到部署的完整思路捋一遍。如果你正在做TinyML相关的原型验证或者正准备把Demo往产品方向推这些经验应该能帮你少走一些弯路。先说清楚一件事TinyML不是“把深度学习模型塞进单片机”这么简单。它是一整套约束条件下的工程取舍——算力、内存、功耗、成本、开发周期五个变量互相拉扯。现成开发板解决的是“让你快速看到效果”的问题但它默认你不在乎功耗、不在乎体积、不在乎BOM成本、不在乎量产一致性。一旦这些“不在乎”变成“必须在乎”重新做一块板子就从“折腾”变成了“必要”。2. 现成开发板到底哪里不够用2.1 功耗这道坎Demo阶段根本看不见拿最常见的几款支持TinyML的开发板来说它们在跑推理时的电流通常在几十毫安级别。做Demo的时候你插着USB线根本不会注意这个数字。但如果你要做一块电池供电、需要连续工作几个月的小设备这个数字就是致命的。我做过一个振动异常检测的小模块最开始用某款现成开发板验证算法模型跑通了准确率也不错。然后我把它拔下来接电池算了一下续航一块500mAh的锂电池按平均工作电流35mA算满打满算能撑14个小时。这还没算传感器和外围电路的消耗。而我的目标场景要求至少三个月不换电池。问题出在哪现成开发板为了通用性板载了一堆你用不上的东西USB转串口芯片、LDO稳压器、电平转换芯片、多余的LED指示灯、排针座。这些东西每一个都在偷偷吃电。USB转串口芯片待机功耗可能就有几毫安LDO的静态电流又是几十微安LED指示灯亮着就是几个毫安。你辛辛苦苦在固件里把MCU降到低功耗模式结果外围器件把省下来的电全吃回去了。自己画板子的时候你可以做几个关键取舍去掉USB转串口用SWD直接烧录换用静态电流更低的LDO或者DC-DCLED只保留一个且用MOS管控制通断传感器用I2C接不用的时候直接断电。这些操作在现成开发板上要么做不了要么得飞线改电路非常别扭。2.2 体积和形态决定了你能不能把它塞进产品里现成开发板的尺寸通常在50mm×25mm以上加上排针和接口实际占用的空间更大。如果你要做的是耳戴设备、戒指、贴片式传感器、微型追踪器这个尺寸根本塞不进去。我见过一个做宠物行为识别的项目开发者用现成开发板搭了原型算法跑得挺好但最后卡在“怎么把它固定在猫脖子上”这一步。开发板加电池加外壳重量超过40克猫戴着不舒服很快就挠掉了。后来他重新设计了一块直径22mm的圆形板重量压到8克问题才解决。体积这件事还有一个隐性影响PCB面积直接关联BOM成本和布线难度。现成开发板为了兼容各种扩展模块走线又长又绕信号完整性在高速场景下会出问题。自己做板子可以把MCU和传感器放得很近I2C走线短、干扰小麦克风的模拟走线也能更好地隔离数字噪声。2.3 传感器选型被绑架算法跟着受罪现成开发板板载的传感器是固定的。你想做关键词唤醒板子上可能只有个模拟麦克风信噪比一般你想做手势识别板子上可能只有加速度计没有陀螺仪你想做环境监测板子上可能只有温湿度没有气压。更麻烦的是板载传感器的性能参数往往不是为TinyML优化的。比如麦克风的灵敏度、频响曲线、本底噪声这些参数直接决定了你采集到的数据质量。数据质量不行再好的模型也白搭。我试过用某款开发板板载麦克风做关键词唤醒安静环境下还行稍微有点背景噪声就频繁误触发。后来换了一颗信噪比高6dB的MEMS麦克风同样的模型误触发率直接降了一个数量级。自己画板子的时候你可以根据算法需求反推传感器规格。做关键词唤醒就选低噪声、高信噪比的数字麦克风做振动检测就选带宽合适、量程匹配的加速度计做手势识别就选低功耗、高ODR的六轴IMU。传感器选对了后面算法调参能省一半力气。2.4 成本账量产后才看得清现成开发板单块几十到几百块不等做原型的时候不觉得贵。但如果你要做1000台设备每台光开发板成本就几十块再加上外围模块、连接线、外壳BOM成本很容易失控。自己画板子把MCU、传感器、电源管理、必要的外围电路集成到一块PCB上批量采购元器件单板成本可以压到现成方案的几分之一甚至更低。我做过一个对比某现成开发板方案单台物料成本约85元自己设计的集成板单台物料成本约22元差距主要来自去掉了USB转串口、多余的接口和排针、以及批量采购带来的元器件降价。当然自己画板子有一次性成本PCB打样费、钢网费、SMT贴片费、调试时间。这些成本在产量低的时候摊不下来所以小批量比如几十台自己做板子可能反而更贵。但一旦产量上去成本优势就非常明显了。3. 自己画板子之前先把这几个问题想清楚3.1 你到底需不需要自己画不是所有TinyML项目都需要自己画板子。如果你只是做算法验证、写论文、参加比赛、做概念演示现成开发板完全够用而且效率高得多。把时间花在模型调优上比花在画板子上回报率高。判断标准很简单如果你的项目满足以下任意一条就应该考虑自己画板子——需要电池供电且续航要求超过一周对体积有硬性限制需要特定型号或性能的传感器预计产量超过500台现成开发板的功耗或尺寸已经成为瓶颈。如果这些条件都不满足先用现成开发板把算法跑通别急着画板子。我见过太多人算法还没调明白就开始画板子结果板子回来了发现模型跑不动又得改硬件来回折腾浪费时间和钱。3.2 选MCU还是选模组自己画板子的时候你可以选裸片MCU自己搭外围电路也可以选已经封装好的模组。两者各有优劣。裸片MCU方案灵活性最高成本最低但你需要自己处理晶振、电源、射频匹配如果带无线功能、天线设计。射频部分尤其麻烦没有相关经验的话很容易翻车。模组方案把射频和认证都做好了你只需要把模组焊到板子上开发难度低很多但成本会高一些尺寸也可能受限。我的建议是如果你的项目带无线功能且你对射频设计不熟悉优先选模组。如果是不带无线的纯边缘推理场景裸片MCU更合适。我做过一个不带无线的振动检测板用的就是裸片MCU外围电路很简单一次打样就成功了。3.3 开发工具链的延续性自己画板子意味着你要重新建立一套开发环境。如果你之前用现成开发板是在Arduino或MicroPython上跑换到自己画的板子后可能需要回到厂商的SDK用C/C开发。这个切换成本要提前考虑。选MCU的时候优先选你熟悉的厂商和系列。比如你之前用某款MCU做过项目对它家的HAL库、低功耗模式、外设配置比较熟那就继续用同系列或同厂商的芯片。换新平台的学习成本往往被低估我见过有人为了省几块钱换了个不熟悉的MCU结果在低功耗调试上卡了两周。4. 从需求到原理图我的实际设计流程4.1 先写一份“约束清单”画原理图之前我会先写一份约束清单把所有硬性要求列出来。这份清单通常包括工作电压范围、最大工作电流、平均工作电流、休眠电流、目标续航时间、电池容量、PCB最大尺寸、必须支持的传感器型号和接口、是否需要无线、工作温度范围、目标BOM成本。这份清单是后续所有设计决策的依据。比如平均工作电流这个指标直接决定了你能不能选LDO、能不能常开传感器、MCU能不能一直跑推理。我一般会按目标续航时间和电池容量反推允许的平均电流假设电池容量500mAh目标续航90天那么平均电流必须控制在500mAh÷(90×24h)≈0.23mA以内。这个数字会逼着你把每一个耗电器件的功耗都算清楚。4.2 功耗预算表怎么算功耗预算表是约束清单的细化。我会把板子上每一个器件列出来标注它的工作电压、工作电流、休眠电流、占空比然后算出它对平均电流的贡献。举个例子一个典型的TinyML振动检测节点可能包含这些器件MCU工作电流8mA休眠电流2μA占空比1%、加速度计工作电流150μA休眠电流0.5μA占空比5%、LDO静态电流1μA、LED指示灯工作电流2mA占空比0.1%。算下来平均电流大约是8mA×1% 150μA×5% 1μA 2mA×0.1% ≈ 80μA 7.5μA 1μA 2μA ≈ 90.5μA。按500mAh电池算理论续航约5500小时约230天。这个计算看起来很美好但实际续航往往只有理论值的一半甚至更低。原因包括电池自放电、温度影响、MCU唤醒时的瞬态电流、传感器启动时间、LDO效率随负载变化等。我一般会在理论值上打五折作为实际预期然后再留20%余量。4.3 原理图设计中的几个关键决策电源部分是最容易出问题的地方。如果平均电流在毫安级别LDO就够了简单便宜。如果平均电流在微安级别就要考虑DC-DC或者LDO加负载开关的方案。DC-DC效率高但静态电流通常也大需要选低静态电流的型号。我一般会选静态电流在1μA以下的LDO配合MOS管做负载开关把不用的传感器和外围电路彻底断电。MCU的晶振选择也有讲究。如果对时间精度要求不高可以用内部RC振荡器省掉外部晶振和两个负载电容既省空间又省成本。但内部RC的精度和温漂通常不如外部晶振如果应用涉及精确的时间窗口或频率计算还是得用外部晶振。调试接口我一般只留SWD四根线VCC、GND、SWDIO、SWCLK。有些MCU支持更少的引脚但SWD是最通用的调试工具也最好找。烧录口不一定要做成排针可以留测试点用探针烧录省空间。传感器接口优先选I2C两根线能挂多个器件走线简单。SPI速度快但占引脚多除非传感器只支持SPI或者数据率要求很高否则I2C够用。I2C的上拉电阻别忘了一般4.7kΩ或10kΩ根据总线电容和速度调整。5. PCB布局布线的实战要点5.1 模拟和数字要分开如果板子上有模拟麦克风或者模拟传感器模拟部分和数字部分一定要分开布局。模拟走线尽量短远离时钟线和高速数字线。地平面处理上我一般用单点接地或者分割地平面把模拟地和数字地在电源入口处汇合。麦克风的偏置电压要干净最好用RC滤波。我试过用MCU的GPIO直接给麦克风供电结果数字噪声串到模拟输出上采集到的音频里全是高频干扰。后来加了一级LDO专门给麦克风供电问题才解决。5.2 天线净空不能省如果板子带无线功能天线区域的净空必须严格遵守模组或芯片厂商的推荐值。净空区域内不能铺铜、不能走线、不能放元器件。我见过有人为了省空间把电池放在天线正下方结果无线距离直接砍半。天线匹配电路也要留出来即使你打算用默认匹配。PCB打样回来之后用网分测一下天线阻抗根据实际情况调整匹配元件。这一步在实验室里很容易被忽略但量产一致性全靠它。5.3 去耦电容要放对位置每个电源引脚旁边都要放去耦电容容值根据厂商推荐来。关键是位置去耦电容要尽量靠近引脚回路面积越小越好。我一般会在MCU的每个电源引脚旁边放一个100nF再在电源入口放一个10μF。如果板子空间紧张可以共用去耦电容但前提是引脚离得足够近。5.4 测试点要留够调试阶段最怕的就是信号测不到。关键信号线——电源、地、SWD、UART、I2C——都要留测试点。测试点可以是焊盘也可以是过孔直径至少1mm方便探针接触。我习惯在板子边缘留一排测试点用排针焊上去就能接逻辑分析仪。电池连接器也要选可靠的。我踩过坑用了某款便宜的电池座振动测试的时候电池接触不良设备频繁重启。后来换成带卡扣的连接器问题解决。电池座的正负极标识要清晰反接烧板子的事故我见过不止一次。6. 固件层面的低功耗优化6.1 时钟配置决定基础功耗MCU的工作频率越高功耗越大。TinyML推理通常不需要很高的主频很多模型在几十MHz下就能跑。我一般会把主频设到能满足推理实时性的最低值然后在推理间隙切换到低功耗模式。低功耗模式的选择要看MCU支持哪些。常见的有关闭CPU时钟但保留外设的Sleep模式、关闭更多时钟的Deep Sleep模式、只保留RTC和备份寄存器的Standby模式。推理间隙用Deep Sleep定时唤醒用RTC这样平均电流可以压到微安级别。6.2 外设用完就关传感器、LED、无线模块不用的时候统统关掉。I2C传感器可以通过写寄存器进入低功耗模式也可以直接用MOS管切断电源。LED用PWM调光亮度够用就行别一直全亮。我做过一个对比同样一块板子固件里把不用的外设都关掉平均电流从1.2mA降到180μA续航从两周延长到三个多月。这个优化不需要改硬件纯粹是软件层面的操作但效果非常明显。6.3 推理调度要合理TinyML推理本身是计算密集型任务跑推理的时候电流会飙上去。如果推理频率很高平均电流就下不来。我的做法是根据应用场景调整推理频率振动检测可以每秒钟推理一次关键词唤醒可以每100毫秒推理一次手势识别可以每50毫秒推理一次。在满足响应速度的前提下尽量降低推理频率。还有一个技巧是“两级触发”先用一个极低功耗的阈值检测或简单算法做粗筛只有粗筛通过后才唤醒MCU跑完整推理。比如关键词唤醒可以先用能量阈值判断有没有人说话有声音才启动模型推理。这样大部分时间MCU都在休眠平均电流可以做得非常低。7. 常见问题与排查技巧实录7.1 板子回来不工作先查什么新板子第一次上电不工作按这个顺序排查电源电压是否正常、MCU是否复位、晶振是否起振、SWD能否连接、BOOT引脚状态是否正确。我遇到过好几次是BOOT引脚悬空导致MCU进入错误启动模式加个下拉电阻就好了。如果电源电压正常但电流异常大先检查有没有短路。用万用表测电源和地之间的电阻正常应该在几百欧姆以上。如果接近零说明有短路重点查去耦电容有没有焊反、芯片有没有焊错方向。7.2 推理结果不稳定硬件还是软件的问题推理结果时好时坏先排除硬件问题。用示波器看传感器供电是否干净、I2C波形是否完整、MCU时钟是否稳定。如果硬件没问题再查软件数据预处理是否一致、模型输入是否归一化、推理频率是否稳定。我遇到过一次推理结果漂移查了半天发现是传感器供电电压随电池电量下降而降低导致传感器输出刻度变化。后来在固件里加了电池电压补偿问题解决。这个坑在Demo阶段根本不会遇到因为Demo都是插着USB供电。7.3 续航不达标怎么定位实际续航远低于理论值按这个思路排查先测休眠电流如果休眠电流比预期高很多说明有器件没关干净或者漏电再测工作电流如果工作电流偏高检查MCU主频、外设状态、传感器配置最后测唤醒频率如果唤醒太频繁优化调度逻辑。我习惯在电源路径上串一个电流表用数据记录仪长时间记录电流曲线。这样能清楚看到设备什么时候在休眠、什么时候在工作、有没有异常的电流尖峰。这个手段比万用表靠谱得多因为万用表的采样率太低看不到瞬态电流。7.4 常见问题速查表现象可能原因排查方法解决思路上电无反应电源短路、MCU未复位、BOOT引脚错误测电源对地电阻、测复位引脚电压、查BOOT引脚修复短路、加复位电路、修正BOOT配置电流偏大外设未关、LDO静态电流高、LED常亮逐个断开外设测电流、查LDO规格书加负载开关、换低静态电流LDO、LED用PWM推理结果漂移传感器供电不稳、温度影响、数据预处理不一致测传感器供电、对比不同温度下输出加电压补偿、温度补偿、统一预处理流程无线距离短天线净空不足、匹配电路未调、电池遮挡检查净空区域、用网分测天线阻抗调整布局、重新匹配、移开电池续航不达标休眠电流高、唤醒频繁、电池容量虚标记录长时间电流曲线、测实际电池容量优化休眠配置、降低唤醒频率、换电池8. 打样和焊接的实操经验8.1 打样参数怎么选PCB打样我一般选四层板顶层和底层走信号中间两层走电源和地。四层板比两层板贵一些但信号完整性和电源质量好很多尤其是带无线功能或者有模拟信号的板子。板厚选1.6mm太薄容易变形太厚占空间。表面处理选沉金焊接性好存放时间也长。阻焊颜色不影响性能但会影响调试时看走线的难易程度。我习惯用绿色或蓝色红色和黑色看走线比较费劲。丝印要清晰元器件位号、极性标识、版本号都要印上。版本号很重要改版的时候能区分。8.2 手工焊接还是SMT元器件少于50个且都是0603以上封装手工焊接可行。但如果板子上有QFN、BGA、0201封装的器件建议走SMT。手工焊QFN很容易虚焊尤其是中间的地焊盘没有热风枪和锡膏很难焊好。SMT打样现在很便宜小批量的话比自己焊划算。但SMT需要提供坐标文件和BOM元器件要提前备好。我一般会在立创商城或者类似平台配齐元器件直接寄到SMT厂省事。8.3 首板调试的检查清单首板回来之后不要急着上电。先目视检查有没有明显的焊接不良、元器件方向是否正确、极性电容有没有焊反。然后用万用表测电源和地之间的电阻确认没有短路。再上电测各路电压是否正常。最后接调试器看MCU能否识别。固件先烧一个最简单的点灯程序确认MCU基本功能正常。然后再逐步测试各个外设I2C扫描、传感器读ID、无线连接。每步都确认无误后再进行下一步不要一次把所有功能都打开。9. 一些个人体会自己画板子这件事门槛没有想象中那么高但也没有低到可以随便搞。我的建议是先用现成开发板把算法和固件逻辑跑通确认方案可行之后再根据实际约束决定要不要自己画板子。如果决定画第一版不要追求完美把核心功能跑通就行功耗和体积可以后续优化。我第一块自己画的TinyML板子犯了三个错误LDO选型没注意静态电流、天线净空留少了、去耦电容放太远。板子回来之后功耗超标、无线距离短、推理偶尔出错。第二版改了这三处一次成功。这些经验在文档里看不到只有自己踩过才知道。还有一点自己画板子意味着你要对整块板子的性能负责。现成开发板出问题你可以找厂商自己画的板子出问题只能自己查。所以调试工具要备齐示波器、逻辑分析仪、万用表、可调电源、电流探头。这些工具在排查问题时能帮你省下大量时间。最后说一个容易被忽略的点自己画板子之后固件和硬件的耦合会更紧密。你需要同时理解硬件设计和软件逻辑才能把功耗和性能优化到极致。这种全栈视角是现成开发板给不了的也是自己做板子最大的收获。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询