news 2026/10/13 1:03:00

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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-DC;LED只保留一个且用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选型没注意静态电流、天线净空留少了、去耦电容放太远。板子回来之后功耗超标、无线距离短、推理偶尔出错。第二版改了这三处,一次成功。这些经验在文档里看不到,只有自己踩过才知道。

还有一点:自己画板子意味着你要对整块板子的性能负责。现成开发板出问题你可以找厂商,自己画的板子出问题只能自己查。所以调试工具要备齐:示波器、逻辑分析仪、万用表、可调电源、电流探头。这些工具在排查问题时能帮你省下大量时间。

最后说一个容易被忽略的点:自己画板子之后,固件和硬件的耦合会更紧密。你需要同时理解硬件设计和软件逻辑,才能把功耗和性能优化到极致。这种全栈视角是现成开发板给不了的,也是自己做板子最大的收获。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/13 1:02:58

多曝光融合技术详解:从动态范围原理到Mertens算法与实操避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/13 1:02:11

全国五级行政区划数据导入MySQL:表结构设计与批量导入实战

简介:这份资源面向从事地理信息、数据开发、政务信息化及统计分析的技术人员,提供一套覆盖全国行政区划层级的结构化数据集合,可用于地址库搭建、区域级联选择、数据可视化与业务系统底表建设。压缩包共4个文件,包含sql数据库脚本…

作者头像 李华
网站建设 2026/10/13 1:01:17

MySQL 5.7 + Java Swing 构建离线学生健康档案系统

简介:这是一套基于MySQL与Java Swing开发的学生健康档案管理系统源码,面向计算机相关专业在校生、教师及初级开发者,解决高校学生健康数据(体检病历)的结构化录入、查询、统计与导出需求,适用于课程设计、毕…

作者头像 李华
网站建设 2026/10/13 0:53:29

FlashAttention-3 前瞻:Hopper 架构异步 TMA 与 WGMMA 硬件流水线并发解密

当我们将基于 FlashAttention-2 架构调优到极致的注意力算子,移植到新一代 NVIDIA Hopper 架构旗舰显卡(H100 / H800 / H200)上时,很多工程师遭遇了一次前所未有的心理落差:在 A100 上能够跑出 73% 硬件理论峰值的代码…

作者头像 李华
网站建设 2026/10/13 0:53:11

U1981中继配置实战:SS7与SIP对接步骤与避坑指南

简介:《U1981语音网关中继配置指南.docx》是一份面向华为U1981语音网关运维与调试人员的操作手册,完整演示了统一网关与对端设备对接的中继配置过程。文档从组网场景入手,用通俗语言解释了局向、子路由、路由、局向选择码等核心概念&#xff…

作者头像 李华