搞嵌入式这些年,被电压问题折腾的次数多得我自己都数不清。你可能遇到过这种情况:电路板明明接好了,一上电芯片就是不工作,换个芯片又能跑一会儿;或者设备用着用着突然死机,重启又好了;再或者ADC采到的数值莫名其妙地乱跳,怎么查都查不出原因。最终用示波器一抓电源轨,真相大白了——电压在某个瞬间掉到了芯片的“生死线”以下,或者过冲打到芯片的绝对最大额定值附近。电压失控,绝大多数情况下芯片都不会当场爆炸,而是以各种“薛定谔的故障”折磨你:死机、复位、数据写坏、IO口锁死。这篇文章就专门讲讲,电压失控时,到底是哪些电路在和这个失控对抗,以及我们在设计里应该怎么把这套“安保系统”搭完整。
无论你是做硬件、写嵌入式软件,还是刚入门电子设计的爱好者,搞懂了这条电源保护链路,都能少踩很多坑、少烧很多芯片。
1. 第一道防线:供电链路里的稳压器
电压失控的第一波攻击,发生在电源进入芯片之前。芯片要求的供电电压通常是固定的,比如3.3V、1.8V、0.9V,但输入源可能是锂电池(3.0V~4.2V之间波动)、适配器(12V甚至24V)、USB口(4.75V~5.25V),这些源电压本身就一直在变。如果直接把输入怼到芯片电源引脚,芯片的运气基本取决于输入源的心情。所以第一道防线就是稳压器,把不可控的输入变成可控的、稳定的输出电压。
1.1 LDO:小功率场景下的“老实人”
LDO全称低压差线性稳压器,原理说穿了很简单:内部有一个调整管,相当于一个动态可调的可变电阻,配合反馈环路把输出电压稳定在设定值。输出电压由反馈电阻决定,公式是 Vout = Vref × (1 + R1/R2)。反馈环路不停地调整调整管导通程度,输入电压升高就增大压降,输入电压降低就减小压降,从而保证输出稳定。
LDO的优点很突出:电路简单、外围元器件少、输出纹波小、响应快,一颗芯片加两个电容就能跑。但缺点同样明显——效率取决于输入输出电压差。举例说明更直观:输入12V,输出3.3V,压差8.7V,就算负载电流只有100mA,调整管上耗散的功率也是 0.87W。0.87W的发热是什么概念?一个小封装SOT-23的LDO会烫到不敢摸。这种情况下芯片内部通常会启动过热保护,输出开始往下掉,这时候电压失控就出现了——不是输入的锅,是你硬让LDO扛了不该扛的活。
所以选LDO要记住三个原则:输出电流别太大(一般200mA以内),压差别太大(最好低于1V),纹波要求高的时候优先考虑它。我之前做过一个手持设备,电池3.7V降压到3.3V给传感器供电,压差只有0.4V,电流才几十mA,这种情况下LDO几乎是完美选择,纹波小效率也说得过去。但你让它从12V往3.3V拉大电流,就是另一种故事了。
使用LDO时还有一个常被忽略的细节:输出电容的选型和LDO的稳定性强相关。很多老款LDO对输出电容的ESR有要求,有些允许低ESR陶瓷电容,有些不允许。如果你不看数据手册,顺手抓了一个大容量MLCC接上去,有些LDO会直接进入振荡状态。
1.2 DCDC:大电流场景的“效率担当”
如果电流需求大、压差大,还硬用LDO就很不理智了。比如一个WiFi模块瞬时电流300mA,输入5V输出3.3V,压差1.7V、300mA时LDO功耗0.51W,长时间工作就会发热严重。这种场合应该用DCDC降压转换器。
BUCK型DCDC的原理可以这样理解:一个开关以一定频率高频导通和关断,把输入电压切成方波,再经过电感和电容组成低通滤波器,平均下来得到想要的直流电压。开关的占空比决定了输出电压和输入电压的比例关系(理想情况下 Vout = D × Vin)。因为开关管工作在高频开关状态,要么完全导通、要么完全关断,损耗远比线性调整小,效率通常可以做到85%~95%。
但高效率换来了两个新问题:纹波和瞬态响应。开关动作本身就是一种噪声源,电感的纹波电流、电容的ESR共同决定了输出纹波大小;负载电流突然变化时,环路需要时间响应,这就造成了电压的瞬时跌落或过冲。我做WiFi模块供电时实测过,模块从待机进入发射模式的瞬间,电流可以从几十毫安跳到300mA以上,如果反馈环路优化得不好,输出3.3V可能会跌到2.8V以下,MCU直接BOR复位。这种情况不是DCDC“坏”了,而是环路响应能力跟不上负载的突变。
DCDC的设计关键参数有三个:电感饱和电流要留足余量,至少是最大负载电流的1.2~1.5倍,否则电感饱和后电感量骤降,输出电流极剧增大,芯片容易烧;输出电容的容值要从瞬态响应角度考虑,ΔV ≈ ΔI × Δt / C,你要容忍多大的跌落幅度,就得配多大容值的电容;反馈电阻的采样点一定要接到负载端,而不是电源输出端附近,因为PCB铜箔有电阻,负载端的实际电压可能比电源输出端低不少,反馈采到电源端会让负载端欠压。
1.3 反馈采样与基准:稳压精度背后的“小人物”
稳压器的输出精度,其实直接取决于内部基准源和外部反馈电阻的精度。你用了1%精度的分压电阻,输出精度就比用5%电阻好一个数量级;基准源的温度漂移也很关键,常规基准约几十ppm/°C,精度高的能到几个ppm/°C。
反馈走线本身也有讲究,弱信号采样线不能紧挨着开关节点和高频电流路径走,否则耦合噪声会让输出电压变得毛躁。如果没有把握,可以用一个小技巧:在地平面完整的地方,把反馈走线短而直地引到负载端,两边铺地隔离,这样能减少很多串扰问题。我还见过有人把反馈分压电阻放在DCDC电感下面,结果输出纹波大得像心电图,改个位置就正常了——就是典型的采样点被磁耦合污染。
2. 第二道防线:电压监控、复位与看门狗
稳压器再怎么努力,也挡不住所有意外。输入电源瞬间断开又恢复,稳压器来不及调整,输出就会掉下去;系统里的某个强干扰导致灌入电流异常,也可能让电压在几个毫秒内跌到危险区域。这时候就需要第二道防线:检测到电压异常,直接把芯片拉回一个确定状态,或者至少留个记录,别让芯片以不正常的电压半死不活地运行。
2.1 芯片内部的POR与BOR
现代MCU内部基本都集成了两类电源复位电路:POR(上电复位)和BOR(掉电复位)。
POR解决的是上电过程中电压慢慢爬升的问题。电源从0V往上爬的时候,在某个中间电压区间芯片内部逻辑可能处于不确定状态,POR电路会在电压真正稳定之前一直保持复位输出,直到电压超过复位阈值且持续一段时间,才释放复位信号让芯片开始跑。有了POR,即使上电过程很慢或者有毛刺,芯片也不会在半电压状态下乱执行指令。
BOR解决的是运行中电压跌落的问题。比如3.3V供电的MCU,内部BOR阈值设在2.7V左右,一旦检测到VDD跌到2.7V以下,芯片立刻进入复位状态;等电压恢复稳定后,再正常启动。这比让芯片在2.5V的“危险电压”下将就运行要安全得多。关键是,BOR还能帮你记录复位原因:大多数STM32通过RCC->CSR寄存器里的复位标志,可以区分是外部复位、看门狗复位还是掉电复位。代码里可以这样处理:
if (RCC->CSR & RCC_CSR_BORRSTF) { // 这次启动是因为掉电复位引起的 app_record_unsafe_power_cycle(); // 做一些数据恢复操作,比如检查缓存参数是否有效 }这个功能在排查故障时非常有用。别人拿着板子说“死机了”,你问他复位原因,他说不出来,你自己的板子如果做了复位原因记录,一看日志就知道是掉电复位还是看门狗复位,省事太多。
内部BOR虽然方便,但也有局限:阈值固定、响应时间由芯片内部决定。有些高可靠性场景要求更精准的电压阈值或者更快的响应时间,这时候就该请出第二道防线的第二层——外部复位IC。
2.2 外部复位IC和看门狗芯片
外部复位IC,也叫电压监控芯片/复位发生器,基本原理是内部有一个精密基准比较器,持续监控电源电压,当电压跌到阈值以下时,输出拉低(或拉高)复位信号。常见的有MAX809/MAX803、TPS3823、CAT706等,封装小,外围只需一两个电容。选型时最关键的是阈值电压:你得选一个比芯片最小工作电压高、又比正常输出电压低的阈值。比如3.3V系统,MCU最低工作电压可能2.7V,复位IC阈值可以选2.93V,这样电压一旦跌到2.93V以下就提前复位,不等MCU进入危险区。
如果你手头有给设备做“硬件看门狗”的需求,很多外部看门狗芯片本身就是带电压监控的复合功能芯片,像TPS3823、MAX823之类,除了复位输出,还带看门狗输入。微控制器必须在设定时间内给WDI引脚喂一个脉冲(翻转电平),否则看门狗芯片就认为系统卡死了,强制拉复位。这套方案和MCU内部IWDG相比,好处在于即使MCU整个时钟系统挂着,只要喂狗信号没来,芯片照样复位。我做过一个工业控制板,对外部看门狗芯片的评测结论是:稳定性很可靠,但那要求你软件里喂狗的位置必须设计对——不能放在中断里喂,要放在主循环的合适位置喂。为什么?因为如果你的系统占了中断还能继续跑,主循环已经死透了,喂狗喂在中断里会掩盖系统卡死的故障。
2.3 多路供电与上电时序
到了SoC级别的芯片(比如RK3588、Jetson Orin Nano这类),情况又复杂了一些。它们往往需要多路不同电压的电源轨:内核电压0.8V~1.0V、IO电压1.8V/3.3V、DDR专用电压,各路之间还有严格的上电时序要求。顺序错了,哪怕每一路电压单独看都是对的,芯片也可能启动不了,甚至发生闩锁损坏。
我遇到过现象是,某块RK3588板子上电后偶尔能启动,偶尔不能,排查到最后发现是VDD_IO和核心电源之间时序不固定:IO电源先于核心电源到达,外部器件通过IO口给SoC灌入了电流,导致SoC内部的ESD二极管导通,形成闩锁条件。解决办法就是用电源芯片的EN引脚做级联:上一路电源正常输出后,用分压电阻把它的输出电压接到下一路DCDC的EN引脚,等上一路稳定了下一路再启动。也可以用专门的电源时序控制芯片或复位IC输出延时控制。
检查上电时序的办法,最可靠的是多通道示波器同时抓取几路电源波形,手动把触发设为第一路上升沿,看后面每一路的延迟时间。单位毫秒级的先后关系就能满足大多数SoC的要求,但前提是它们之间没有“交叉”“反转”这些不规范动作。
3. 第三道防线:瞬态过压、过流与硬件保护器件
稳压器和复位IC扛的是“电压高高低低”这种慢变的问题,但现实世界还有更粗暴的对手:静电放电(ESD)、雷击浪涌、开关电源的浪涌电流、电池反接、输出短路。这些瞬态事件的能量可以在微秒甚至纳秒级内冲到几十伏上百伏,正确处理它们要靠专门的硬件保护器件。
3.1 TVS与ESD保护
TVS(瞬态电压抑制二极管)很像一个“电压泄压阀”。正常情况下它不导通,对电路毫无影响;当电压超过它的击穿电压时,它迅速导通,把多余的能量以电流形式泄放掉,并把电压钳位在一个安全范围内。它和保险丝的区别在于:保险丝是“断”,TVS是“泄”,保险丝熔断就没了,TVS扛完一次浪涌还能用(当然太大能量也可能烧坏)。
选TVS主要看三个参数:工作电压(必须大于电路正常工作的最高电压,否则正常工作时就漏电)、钳位电压(必须小于后端芯片的绝对最大额定值,否则芯片还是会挂)、峰值脉冲功率(要能扛住预期最大浪涌的能量,太小的TVS扛不过一次浪涌就自己击穿短路了)。生活化理解:你请保安来看门,保安个子得比门高(工作电压),但也不能太高到遇到坏人还放人进来(钳位电压必须够低)。
ESD保护器件则专门对付静电放电。USB数据线、按键、外壳接口这些容易被人体触摸的部位,都应该加ESD保护。专门的ESD二极管残压低、结电容小,不会把高速信号弄坏。如果你做USB 2.0以上的高速接口,选ESD器件时还要看结电容参数,结电容太大会直接干掉信号眼图。保护器件一定要放在接口最外侧,靠近连接器的位置,这样电荷路径最短,对芯片的保护才最有效。
3.2 防反接与过流保护
电池供电的设备,最怕用户把电池正负接反。输出端的保护最常用的方案是PMOS防反接电路:一个PMOS管和一个电阻组合,接反时PMOS不导通,电路断开;接正时PMOS导通,压降非常小,只有几毫伏到几十毫伏。另一种简单粗暴的办法是串一个肖特基二极管,压降0.3V左右,代价是整机耗电增加,对电池设备来说不划算。
过流保护常见的有两类。自恢复保险丝(PPTC):电流大了发热,电阻剧增,限制电流,断电冷却后自动恢复。优点便宜简单,缺点是响应慢、精度差,适合做粗保护。eFuse(电子熔断器):一种集成负载开关芯片,内部集成过流检测、过压保护、短路保护甚至软启动功能,响应速度快、精度高、可以自动恢复或锁存,适合精密电源轨。很多高端设备主板,电源输入口前面就摆一颗eFuse,相当于一个非常聪明的智能保险丝。
这里必须提一下电池保护领域的老熟人——8205。它其实是两颗N沟道MOSFET的合封芯片,专门用于锂电池保护板,和充电管理芯片配合工作:充电管理芯片控制充电电流和电压(比如TP4056、4056A这种),8205负责在过充、过放、过流、短路时切断电池与外界的通路。做电池供电产品时,不要以为有了充电芯片就万事大吉,充电芯片管“怎么充”,保护芯片管“什么时候该断”,两个缺一不可。市面上很多廉价的4056充电板,板载电流保护已经有了,但如果电池直接引出到负载,就该确认负载端是否也有一个8205级别的保护,否则电池过放一次,寿命就大减。
3.3 输入电容与去耦电容:被当“边角料”的防线细节
第三道防线里,最容易被忽视但又极其重要的其实是电容。电容在电源保护链里的角色至少有三个:能量缓冲、高频噪声旁路、帮助稳压环路稳定。你可以这样理解:稳压器像一个供水水塔,水塔到你家水龙头之间有一段水管,水管里存的水就是电容——突然大量用水时,水塔来不及供水,水管里存的水顶着,龙头出水不至于立刻断流。
输入电容选择要点是耐压和纹波电流能力。耐压要留足降额,比如12V输入的电源,电容耐压要选25V甚至更高,20%降额是基本操作;电解电容或MLCC能承受的纹波电流有限,靠近DCDC的开关节点,纹波电流可能很大,电容过流发热就会加速老化。
输出电容和去耦电容讲究“就近原则”:芯片电源引脚旁边的0.1μF高频去耦电容,必须紧贴引脚放置,中间不能穿过过孔、不能绕远路,否则高频噪声根本滤不掉。很多电源不稳导致的“怪病”,其实是去耦电容放远了导致的高频噪声灌进芯片。
还要特别注意MLCC的直流偏压效应:同样是10μF的MLCC,额定耐压16V,如果你工作在10V左右,实际容值可能只剩标称值的50%甚至更低。选电容时最好选耐压为工作电压2倍以上的规格,并且在关键电源轨上实测纹波,不要只看标称容值拍脑袋。
4. 第四道防线:系统级软硬协同
硬件保护器件再全,如果软件不和它们配合,保护效果大打折扣。比如BOR复位中断产生了,软件里却没有任何处理,掉电瞬间正在写Flash,数据照样损坏。电压失控的最终兜底,往往是在系统层面把安全策略做完整。
4.1 看门狗的正确用法:不是喂了就完事
前面提到硬件看门狗芯片,这里说说软件侧喂狗策略。很多人把看门狗当成一个“定时炸弹”——反正超时不喂就复位,那就随便找个地方定期喂一下。这个思路是有问题的。一个合理的设计应该是:喂狗动作发生在主循环的关键路径,也就是程序“活着”的证明。如果你在定时器中断里喂狗,主循环死掉了但中断还能触发,看门狗失去意义。
更进阶一点的做法是用窗口看门狗。窗口看门狗要求你必须在规定的时间窗口内喂狗:喂得太晚不行(超时),喂得太早也不行(提前)。通过这种双向约束,能有效防止程序跑飞后碰巧又去喂狗的情况。STM32的IWDG和WWDG很好地演示了这两类看门狗的区别:IWDG是独立看门狗,喂晚了复位;WWDG是窗口看门狗,喂晚了或太早都复位。
调试期关看门狗当然方便,但要小心发布前忘记打开。我的习惯是:调试期间用一个宏控制,发布版本强制启用,并且发布前专门做一次“卡死模拟测试”(比如在代码里故意死循环几秒钟),确认复位和日志记录都正常。
4.2 掉电检测与数据保存:电快没了,做什么最紧急?
如果电压正在跌,系统恢复无望,那么软件就要执行两个关键任务:保存关键数据、把系统带入安全状态。
利用BOR中断或外部电压监控芯片的中断输出,可以触发一个掉电处理程序。这个程序要尽量短小精悍:能做的就是保存少量关键参数到非易失存储,把电机、继电器、加热器等执行机构切到安全状态,然后等死。为什么说不能做太多?因为电压可能随时彻底消失,做太多的事情可能写到一半断电,数据反而更糟。
写Flash或EEPROM要特别注意掉电安全。一个通用做法是双备份加校验和:写数据时先写A区,再写B区,下次上电读的时候,哪个有效、校验通过就用哪个;如果两个都写了但校验都不对,就用默认值。还可以配合上一节说的复位原因检查,凡是检测到掉电复位标志,下次上电就主动检查一遍关键配置数据是否完整。
对掉电保存要求更高的场合,可以外挂铁电存储器(FRAM)或者带备份域的RTC芯片。FRAM写寿命高达10亿次、写入不需要等待,掉电写到一半也无所谓,成本略高但确实是省心。备份域则靠一个纽扣电池或超级电容维持——反正掉电检测到之后,主供电已经没了,备份域靠备用电源维持RAM数据。
4.3 怎么把“电压失控”逼出来:测试方法论
产品做完了、保护电路都搭好了,怎么验证这套系统真的扛得住?我最推荐的手段有三种:
第一种是负载瞬态测试。用电子负载给电源轨叠加一个快速变化的负载:比如10%额定负载稳定几十毫秒,然后瞬间切到90%额定负载,看输出电压跌了多少、多久恢复。这个过程能真实模拟WiFi模块发射、电机启动这类突发电流。没有电子负载的话,也可以用一个大功率MOSFET和一个大功率电阻做简易开关负载:MOSFET栅极接信号发生器,快速开断,电阻做功率负载,用示波器抓电源轨的跌落波形。
第二种是电源跌落测试。给整板供电的可编程电源设置输出从正常电压跌到设定值(比如3.3V跌到2.5V再恢复),看系统的行为是否符合设计预期:该复位的要复位、该保存的数据要保存、恢复后要正常启动。
第三种是EFT/ESD测试。用电快速瞬变脉冲群测试仪往电源线、信号线上打几百伏到几千伏的干扰,或用静电枪打外壳和接口,看系统会不会死机、复位、损坏。这个测试在实验室做最规范,但即使没有专业设备,日常开发中反复上电、拔插电源、开关大功率电器来“折腾”一下系统,也能暴露不少电源保护薄弱点。关键是:发现问题不要急着改软件,先看波形再下结论。
5. 实测排查案例:那些电压失控坑过的瞬间
理论讲了这么多,最后放几个我实际踩过的坑。每一个坑背后都是一次半夜加班的辛酸史,但你从里面学到的东西比看十遍教程都管用。
5.1 案例一:3.3V跌落导致MCU随机死机
现象:一块控制板,MCU(STM32)和WiFi模块共用一个3.3V LDO供电。程序跑着跑着就会死机,有时候是几分钟,有时候是几小时,而且复位后看门狗日志里经常出现“掉电复位标志”。
排查过程:一开始怀疑软件问题,把主循环里能关的功能全关了,还是死机。后来用示波器抓3.3V电源轨,把时间轴拉长到几十秒,终于看到WiFi模块每次发射瞬间,3.3V会掉到2.5V左右,持续几十毫秒。这个跌落足够触发BOR复位。根源是LDO输出能力不够,WiFi发射瞬间需要300mA左右的突发电流,LDO动态响应跟不上。
解决:把WiFi模块供电单独用一颗DCDC降压芯片供给,MCU和其他外设继续用LDO,两路电源彻底分开。同时在不怎么做大电流突变的MCU电源轨上加了两颗大容量钽电容做缓冲。改完后再抓波形,工作电压稳定,问题消失。
经验:怀疑一切之前,先把电源轨波形挂起来看。随机死机、复位、数据错乱这类问题,排查顺序优先级最高的永远是电源。
5.2 案例二:LDO振荡,ADC采样值乱跳
现象:一块采集板,用的某款LDO输出3.3V给ADC供电,ADC采样值在输入电压不变时,依然存在几十mV的跳动,怎么校准都没用。时域里看信号很干净,但ADC读数就是不稳。
排查:用示波器AC耦合看3.3V输出,发现上面叠加了一个几十kHz的正弦波,幅度约30mV。原来LDO输出端被我接了一个22μF的陶瓷电容,而这款LDO的规格书推荐的输出电容范围是1μF~10μF。陶瓷电容的ESR非常低,输出电容过大导致LDO反馈环路相位裕度不足,产生了振荡。
解决:把输出电容换成10μF钽电容(ESR稍高),或者加一个串联小电阻(也给环路增加一点ESR)。换上后振荡消失,ADC采样值稳定了。
经验:电容不是越大越稳,环路的稳定性有自己的一套规矩。改电源滤波电容前,先看数据手册的Recommended Output Capacitor,不要随意加大几十倍。
5.3 案例三:上电时序不对,IO口闩锁“锁死”SoC
现象:某块多路供电的核心板,上电后偶发性无法启动,测量各路电源电压又都正常。最后是用示波器同时抓四路电源波形,发现VDD_IO有时比核心电压先起来,两路之间还存在约几毫秒的“谁先谁后不确定”。
根源:IO电平先建立,导致外部外设或板上其他IC通过IO口向SoC注入电流,SoC内部的寄生二极管导通,形成闩锁路径,芯片进入锁死状态。
解决:把每路DC-DC的EN引脚按顺序级联,同时增加一个电源监控IC对全局做上电复位控制,确保核心电压轨稳定后,再释放IO使能信号。修改后反复上下电数百次正常。
经验:多路供电的系统,不能只测每路电压“有没有”,还必须抓“先后顺序”。对SoC这类高集成器件,时序错误带来的后果往往是玄学级别的损坏,很难逆推原因。
5.4 常见问题速查表
为了让你排查问题时能快速定位方向,我把工程里最常遇到的几类“电压失控”问题整理成了速查表。注意这张表只负责给思路,最终判断还是需要你手里的示波器。
| 症状 | 可能原因 | 检查手段 | 排障思路 |
|---|---|---|---|
| 上电后芯片完全无反应 | 电源轨没起来/复位引脚被拉死 | 万用表测各路电压、示波器看复位脚 | 查EN引脚是否使能、复位IC阈值设置是否过高 |
| 程序随机死机、看门狗复位 | 电源瞬态跌落/DCDC环路响应慢 | 示波器抓电源轨波动,关注负载突变瞬间 | 加大输出电容、换更高速环路DCDC、分离大电流负载供电 |
| ADC采样值乱跳 | LDO/DCDC纹波大、振荡或去耦电容不足 | 示波器AC耦合测输出,带宽限制打开 | 看规格书电容范围、增加高频去耦、检查反馈采样点位置 |
| 电压正常但设备反复重启 | 瞬时跌落,万用表测不到 | 用示波器触发模式抓跌落 | 找瞬态电流来源(无线发射、电机、继电器吸合)并缓冲 |
| Flash/EEPROM数据丢失 | 掉电瞬间正在写入,电压不稳导致写到一半 | 检查复位原因标志 | 增加掉电检测中断、双备份存储、校验恢复 |
| 芯片莫名发热 | LDO压差过大、DCDC效率低或散热不足 | 测量压差和电流、用热像仪看发热点 | 换拓扑、加散热铜箔/铺铜面积、降低工作电流预期 |
6. 最后聊几点我自己的实操习惯
文章写到这里,没有更高深的道理了,就说说我这些年积累下来的几条习惯。你当成一个老工程师的私房笔记就好,不一定每条都适合所有人,但在很多场合能让你少走弯路。
第一个习惯:开工画板子之前,先在原理图里把电源保护区域圈出来。哪怕产品要求不高,我至少会在电源输入口预留TVS、输入电容、防反接电路的位置,在MCU电源引脚旁边预留滤波电容和去耦电容的位置,在有电机/继电器的系统里预留续流二极管和RC吸收。这些元器件单个成本几毛钱,但对整板可靠性的贡献非常大。等板子出问题再想补焊,往往为时已晚。
第二个习惯:电源轨的设计冗余,不要卡着极限值算。比如芯片最大工作电流是200mA,我不会选一个额定输出刚好200mA的DCDC,而是至少选300mA以上规格,并留出电感饱和电流余量。绝对最大额定值附近更是禁区中的禁区:任何设计都尽量不要让电压跑到芯片的绝对最大额定值附近,哪怕只是瞬态过冲。降额使用是硬件工程师最基本的素养,尤其在车规、工控这类高可靠性场景,所有参数都建议按70%~80%降额设计。
第三个习惯:调试时手里随时准备一个能抓电源轨的示波器。很多时候你以为的问题是信号干扰、程序时序、驱动芯片选型不对,其实一抓电源轨,真相瞬间清晰。我常跟别人说:逻辑问题会骗人,但电源轨波形不会。波形摆在那里,爱你或者伤害你,都是明白的。
第四个习惯:芯片选型不要一味追求“便宜”或“高端”,而要看保护功能是否完整。很多DCDC芯片本身就集成过流保护(OCP)、过压保护(OVP)、过热保护(OTP)、欠压锁定(UVLO),这些保护机制如果齐全,你在外围就少搭很多东西。之前做过一个步进电机驱动项目,国产驱动芯片里有一个系列自带完善的OCP和OTP,用起来安心得多——嵌入式设计的稳定,很多时候靠的就是这些“隐藏技能”。
做系统应用越久,我越能理解芯片设计者的良苦用心。芯片内部为什么要做那么多保护电路?因为电源永远不可能是理想电源,负载永远是任性的负载,而芯片作为精密器件,天然就处在整个系统里最“娇贵”的位置。保护设计不是锦上添花,而是芯片正常运行的必要条件。
我个人现在画板子的习惯是:先给电源保护留出足够位置,再操心信号怎么走。毕竟电压失控不可怕,可怕的是失控了之后,你根本不知道谁在保护你的芯片——甚至压根没有人保护它。