嵌入式系统设计:别拿实验室demo当量产方案,这3个坑我踩了整整两年
上周帮个做工业振动传感器的客户调板子,对方拿个跑通了demo的原型甩我脸上,说你看这性能多好,下月就能上产线。
我拿示波器一勾——常温下数据飘12%,-20℃直接死机。他愣了。
没人会为你的demo买单。那些在实验室恒温恒湿台面上跑了几百小时没出问题的原型,一旦被扔到满是粉尘、温度跨度超过80℃、随时可能被强电磁干扰覆盖的真实工业场景里,所有你当初觉得“没必要加”的设计,都会变成让你追着设备跑几百公里的麻烦。
实验室跑通的demo,90%过不了量产第一关
我至今记得第一次在油田现场踩坑的场景——大冬天在大庆的井场,设备冻得硬邦邦的,我蹲在雪地里拆了半小时外壳,手冻得连螺丝刀都握不住。那是2019年的项目,我们当时照着课程设计的思路做的监测节点,用的全是消费级元器件,实验室25℃下测出来的功耗、精度全达标,结果拉到现场,夏天井场地表温度能到65℃,设备直接连不上网,冬天零下30℃的时候,采样精度直接掉了20%。
那之后我才明白,嵌入式系统设计的第一性原理从来不是“跑通功能”,而是“在你看不见的极端场景里,系统还能按照约定的精度干活”。
现在很多高校团队、初创公司做设计,上来就选最快的主频、最灵敏的传感器,把实验室里的测试曲线拍得漂亮极了,压根没考虑过温漂、EMC辐射、长期老化的问题。之前碰到个做农业监测节点的研究生,选了某款消费级WiFi模块,常温下功耗12mA,算下来配个小太阳能板能撑3年。结果拉到山东寿光的大棚里,夏天棚内60℃,模块直接断连,换了同系列的工业级模块之后,常温功耗反而降到8mA,高温下也稳得很。
工业级嵌入式温漂测试示波器实测波形图
别觉得这是吹毛求疵。你卖的是要在现场扛个五六年的工业设备,不是卖个用两次就扔的玩具。
别迷信“高性能MCU”,很多时候你缺的根本不是算力
真的没必要啊!现在做嵌入式设计的风气有点歪,上来就得选Cortex-M7,主频200MHz起步,好像选个M4都抬不起头。我去年碰到个做智能门锁的团队,算下来整个BOM成本超了12块,原因就是选了个带DSP核的高性能MCU,结果实际跑的功能就是扫指纹、发个蓝牙广播,换个M0核都能富余出70%的算力。
我之前做过一个水表的设计迭代,之前的版本用的是32位ARM核,每次采样完就进深度停机模式,测下来待机电流15uA,算下来电池能撑6年。后来我们把整个采样电路的漏电流从10uA降到1uA,把电源芯片的静态电流从5uA换到1uA的型号,整个系统的待机电流直接砍了一半,电池寿命从6年拉到12年——MCU还是原来那个,半毛钱成本没加。
这两年RISC-V的低功耗核在嵌入式场景里渗透得很快,很多团队一上来就换RISC-V的高性能核,却没发现自己系统里藏着的漏电流、无效的电源切换逻辑,比换个核带来的提升大得多。嵌入式系统设计里最划算的优化,从来不是堆硬件参数,而是把藏在电路缝隙里的浪费抠出来。
嵌入式低功耗电流分析仪实测待机电流截图
说穿了,你用200MHz的主频跑个空转的循环,带来的功耗提升,远不如把一直开着的外设及时关了来得实在。
代码写得“优雅”,不如留够10%的冗余容错
代码写得“优雅”,不如留够10%的冗余容错
前阵子刷到个博主教大家做嵌入式,说要把代码的ROM占用压到99%,一点空间都别留,这样才是极致优化。我直接取关了。
真当这是做课程设计呢?互联网代码崩了大不了弹个错误页面,嵌入式代码崩了,可能是电梯卡在半中间,是呼吸机的报警停了,是充电桩的电流失控。我之前碰到个做车载域控制器的工程师,写CAN通信代码的时候,把所有缓存都卡着RAM的上限开,算下来刚好剩200字节的空闲。结果跑了三个月,碰到CAN总线的电磁干扰,连续发了10帧错误报文,RAM直接被占满,整个系统重启——高速上的车啊,重启一下是什么后果?
说实话,我现在看新人写的嵌入式代码,第一眼看的不是逻辑顺不顺,是出了错之后能不能自己爬起来。去年在钢厂的现场,隔壁家的振动传感器被轧机的电磁脉冲打完全歇了,我们的设备只是闪了下报错灯,转了两秒就正常工作了——原因就是我们在代码里留了15%的RAM当冗余空间,碰到强干扰的时候不会直接死机,而是把当前的错误日志存到Flash里,等干扰过去之后自动复位,把之前没传完的数据补传上去。客户看完直接续了三年的订单。
今年国内几个高校做的面向嵌入式场景的轻量化容错调度算法我也看了,把冗余代码带来的额外开销从原来的20%压到了3%以内,不用再为了可靠性付太高的性能代价。这种真东西,比那些飘在天上的论文有用多了。
上周那个拿demo给我看的客户,今天发消息说,他把原型拉去做高低温测试,30分钟就报了三个故障,现在正带着团队改电路呢。
挺好。