拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

监控器芯片选型与设计指南:从复位阈值到看门狗电路

监控器芯片选型与设计指南:从复位阈值到看门狗电路 1. 从一块莫名其妙重启的板子说起搞硬件的人大概都遇到过这种场景一块板子白天跑得好好的晚上放在那里老化测试第二天早上过来一看串口打印停在某个位置不动了或者干脆从头开始跑——明显是复位了。更诡异的是你拿万用表量电源纹波正常拿示波器抓时钟频率稳定代码逻辑翻来覆去审了三遍也没找到数组越界或者死循环。最后折腾一星期发现是上电时序里某个电源轨爬升太慢MCU在电压还没稳的时候就跑起来了跑飞之后又没人管它就一直卡死在那里。这类问题就是监控器芯片也常被叫做复位芯片、看门狗芯片、电源监控器要解决的核心场景。它不是什么高精尖的器件一颗SOT-23封装的小芯片成本可能就几毛钱但它在系统里的角色相当于一个全天候值班的保安——平时你感觉不到它存在一旦系统出现异常它负责把整个系统拉回正轨。我写这篇东西是想把监控器芯片这件事从头到尾讲透。包括它到底监控什么、内部是怎么工作的、选型时哪些参数是坑、和MCU内部看门狗到底怎么配合、实际布板和调试时要注意什么。不管你是刚入行的硬件工程师还是做FPGA/嵌入式软件、需要理解复位行为的开发者这篇内容应该都能给你一些可以直接用的东西。先明确一下范围这里说的监控器芯片主要指三类功能的组合——电源电压监控复位IC、看门狗定时器Watchdog、以及部分器件集成的手动复位和电源故障早期预警。它们服务的对象可以是MCU、FPGA、DSP、SoC甚至是整个板级的多个芯片。2. 监控器芯片到底在监控什么四类异常与对应机制很多人对监控器的理解停留在看门狗三个字上其实它管的事情比想象中多。我把它拆成四类异常来看每一类对应不同的监控机制理解了这个分类选型时就不会抓瞎。2.1 上电/掉电过程中的电压异常系统上电时电源电压不是瞬间到位的它有一个爬升过程。如果MCU的供电电压还没达到它的最低工作电压比如1.8V器件在1.2V时MCU内部逻辑处于不确定状态可能执行随机指令、可能锁死IO、可能误写Flash。同样掉电时电压缓慢下降也会经过这个危险区间。监控器芯片的**复位阈值VTH**就是干这个的。它持续监测电源电压一旦低于设定阈值就拉低复位引脚RESET强制MCU保持复位状态等电压稳定高于阈值并维持一段时间复位超时时间才释放复位让MCU开始跑。这里有个关键点复位阈值必须高于MCU的最低工作电压但要低于正常供电电压。比如3.3V系统MCU最低工作电压2.7V那阈值选2.9V左右比较合适。选太高正常电压波动就会误触发复位选太低MCU已经在危险区了还没被复位。2.2 运行过程中的程序跑飞程序跑飞的原因太多了电磁干扰导致PC指针跳变、堆栈溢出、野指针、时钟失锁、Flash位翻转。跑飞之后程序可能进入一个死循环也可能执行一些无害但无意义的指令但关键是——它不再正常喂狗了。**看门狗Watchdog**就是针对这个的。它的逻辑很简单MCU必须周期性地给看门狗一个喂狗信号通常是翻转某个IO或者写某个寄存器如果在设定的超时时间内没有收到喂狗信号看门狗就认为MCU挂了输出复位信号。这里要区分硬件看门狗和软件看门狗。软件看门狗是MCU内部定时器实现的靠中断喂狗。问题是如果中断被关闭了、或者系统时钟挂了软件看门狗自己也挂了根本救不了。硬件看门狗是独立芯片有自己的振荡器不依赖MCU的任何资源这才是真正可靠的最后一道防线。2.3 电源瞬态跌落与毛刺除了上电掉电运行过程中电源也可能出现短暂的跌落——比如大功率负载突然启动、电机换向、继电器吸合都会在电源上产生几十到几百毫秒的跌落。如果跌落幅度超过MCU的工作下限MCU就可能出错。监控器芯片的瞬态响应能力在这里很关键。好的监控器能在微秒级检测到电压跌落并触发复位而有些反应慢的器件等它反应过来MCU已经跑飞了。选型时要看数据手册里的复位响应时间Propagation Delay通常在几微秒到几十微秒之间。2.4 电源故障早期预警有些高端监控器还带电源故障比较器PFI/PFO可以设置一个比复位阈值更高的预警阈值。当电压开始下降但还没到复位阈值时先给MCU一个中断让MCU有时间保存关键数据、关闭外设、进入安全状态。这个功能在工业控制、医疗设备、数据记录仪里非常有用。下面这张表把四类异常和对应机制整理一下异常类型监控机制关键参数典型响应时间上电/掉电电压异常电压监控复位输出复位阈值VTH、复位超时毫秒级程序跑飞硬件看门狗看门狗超时时间毫秒到秒级电源瞬态跌落快速电压检测复位响应时间微秒级电源故障预警电源故障比较器PFI阈值、PFO输出微秒级理解了这四类你就知道为什么有些监控器芯片引脚那么多、有些就三个脚——功能组合不同而已。3. 拆开一颗监控器芯片内部框图与工作原理监控器芯片看着简单内部其实有几个关键模块在协同工作。我以一颗典型的带看门狗的复位IC为例把内部结构拆开讲。3.1 电压基准与比较器阈值的来源芯片内部有一个带隙基准电压源Bandgap Reference产生一个高精度、低温度漂移的参考电压通常在1.2V左右。这个基准经过电阻分压网络得到你需要的复位阈值。外部电源电压经过另一个分压网络和基准比较比较器的输出就代表了电压是否正常。这里有个细节阈值精度。数据手册里会写±1%、±2%之类的指标。这个精度直接影响你的设计余量。比如标称2.93V的阈值±2%就是2.87V到2.99V。如果你MCU最低工作电压是2.7V那最坏情况下2.87V才复位还有170mV余量可以接受。但如果精度是±5%最坏2.78V余量就只有80mV了电源纹波一大就可能误触发。3.2 复位延时电路为什么需要等一等电压超过阈值之后监控器不会立刻释放复位而是会再等一段时间这叫复位超时时间Reset Timeout Period。为什么要等因为电源电压刚过阈值时可能还不稳定MCU内部的振荡器也需要时间起振。如果立刻释放复位MCU可能在电源还没完全稳的时候就跑起来。这个时间通常由内部电容或者外部电容决定。固定版本的芯片超时时间是固定的常见的有1ms、10ms、100ms、200ms几档。可调版本通过外部电容设置公式一般是t C × V / I其中C是外部电容V是内部充电阈值I是充电电流。具体数值看数据手册。我一般建议至少选100ms以上给电源和晶振充分的稳定时间。有些老工程师喜欢用200ms更保险。3.3 看门狗定时器独立时钟的意义看门狗的核心是一个独立的振荡器通常是内部RC振荡器频率在几十kHz量级。它不依赖MCU的时钟所以MCU时钟挂了它照样工作。看门狗计数器不断累加每次收到喂狗信号就清零。如果计数器溢出就触发复位。喂狗方式有两种窗口式Windowed和非窗口式。非窗口式就是你随时喂都行只要别超时。窗口式要求喂狗信号必须落在特定时间窗口内——太早喂也不行太晚喂也不行。窗口式的好处是能检测到程序跑得太快这种异常比如程序跳过了某些关键步骤直接跑到喂狗点。看门狗超时时间的选择是个经验活。太短正常程序稍微卡一下就被复位太长系统挂了半天才恢复。我的经验是超时时间设为正常喂狗周期的3到5倍。比如你程序每10ms喂一次狗超时设50ms左右比较合适。3.4 输出级复位信号的电平与驱动复位输出分**推挽Push-Pull和开漏Open-Drain**两种。推挽输出高低电平都主动驱动适合单电源系统。开漏输出只能拉低需要外部上拉电阻但好处是可以和不同电压域的信号线线与适合多电源系统。还有一个容易忽略的参数输出驱动能力。复位信号可能要驱动多个芯片的复位引脚每个引脚有输入电容走线也有寄生电容。如果驱动能力不够复位信号的上升沿会变缓可能导致某些芯片识别不到。一般监控器的输出电流在几mA到十几mA驱动几个CMOS输入没问题但如果要驱动很多负载就要考虑加缓冲器。另外复位信号的极性也要注意。大部分MCU是低电平复位RESET引脚低有效但有些器件是高电平复位。选型时看清楚是Active-Low还是Active-High或者选带两种输出的型号。4. 选型时最容易踩的五个坑监控器芯片选型看着简单实际上有几个参数特别容易忽略等到板子出问题才发现就晚了。我把这些年踩过的坑整理一下。4.1 只看阈值不看阈值精度和温度漂移前面提过阈值精度这里重点说温度漂移。有些便宜芯片的阈值在25°C时很准但到了-40°C或者85°C就偏了几十毫伏。如果你的设备要在宽温下工作一定要看数据手册里的阈值温度系数单位通常是mV/°C或者ppm/°C。我遇到过一个案例某工业设备在常温测试一切正常到了北方冬天户外就频繁复位。后来查出来是监控器阈值在低温下偏高接近了正常供电电压的下限电源稍微一波动就触发复位。换了低温漂的型号就好了。4.2 看门狗超时时间选得太紧新手容易把看门狗超时设得很短觉得反应快。但实际上程序里可能有各种耗时操作——Flash擦写、EEPROM写入、通信等待、ADC转换。这些操作期间如果没喂狗就会被复位。我的做法是先统计程序里最长的不喂狗时间然后乘以3作为超时时间。比如Flash擦除要20ms那超时至少60ms。如果实在有很长的操作可以在操作前临时关闭看门狗操作完再打开——但要注意关闭看门狗本身有风险万一在关闭期间跑飞就没人管了。更好的做法是在长操作里插入喂狗点。4.3 忽略复位输出的驱动能力和极性这个坑我在4.4节提过这里再强调一下多芯片复位的场景。一块板子上有MCU、FPGA、以太网PHY、Flash它们的复位引脚可能都要接监控器输出。这时候要算总负载电容C_total C_in1 C_in2 ... C_trace如果总电容太大复位信号的上升时间会超过芯片要求。一般监控器数据手册会给出最大负载电容超过就要加缓冲。4.4 没考虑手动复位和复位按钮的抖动很多监控器带手动复位MR引脚接一个按钮就能手动复位系统。但按钮有机械抖动按下和松开时会产生几十毫秒的毛刺。如果监控器内部没有去抖电路这些毛刺会被当成多次复位信号。选型时要看MR引脚的输入去抖时间好的器件内部有去抖一般几十毫秒。如果没有就要在外部加RC滤波。另外MR引脚通常是低有效不用的时候要上拉到VCC不能悬空。4.5 把监控器和MCU内部看门狗当成二选一这是个认知误区。MCU内部看门狗和外部硬件看门狗不是替代关系而是互补关系。内部看门狗响应快、配置灵活适合检测软件层面的异常外部看门狗独立可靠适合检测系统级故障。我一般建议两个都用内部看门狗超时设短一点比如10ms外部设长一点比如100ms。这样软件小卡顿内部看门狗能处理系统级死机外部看门狗兜底。下面这个表总结了选型时的关键参数和推荐值参数说明推荐做法复位阈值触发复位的电压点高于MCU最低工作电压10%以上阈值精度阈值的误差范围宽温应用选±2%以内复位超时电压正常后等待时间100ms以上看门狗超时喂狗超时时间正常喂狗周期的3-5倍输出类型推挽/开漏多电源系统选开漏输出极性高有效/低有效匹配MCU复位引脚手动复位是否带MR引脚需要手动复位就选带MR的封装SOT-23/SC70等根据板子空间选5. 硬件看门狗电路怎么搭从原理图到布板选好芯片之后怎么把它正确地接到系统里这里面也有不少讲究。我按原理图设计和PCB布板两个阶段来说。5.1 典型应用电路与外围元件计算一颗典型的监控器芯片外围元件很少电源引脚加一个0.1uF去耦电容复位输出上拉电阻如果是开漏输出手动复位按钮如果用到可能还有看门狗超时设置电容。去耦电容必须紧靠芯片电源引脚放置这是老生常谈但真的重要。监控器芯片对电源噪声敏感去耦不好可能导致误复位。0.1uF是标配如果电源纹波大可以再加一个1uF。上拉电阻的计算开漏输出的复位线需要上拉。上拉电阻太大上升沿慢太小功耗大。一般选4.7k到10k之间。计算公式R_pullup t_rise / (0.8 × C_load)比如负载电容100pF要求上升时间1us那R 1us / (0.8 × 100pF) 12.5k。选10k比较合适。看门狗超时电容如果是可调版本根据数据手册的公式算。比如某芯片I1uAV1.2V要100ms超时那C I × t / V 1uA × 100ms / 1.2V ≈ 83nF选100nF标准值。5.2 喂狗信号的产生IO翻转还是SPI写喂狗信号怎么产生取决于监控器芯片的接口。常见的有两种IO翻转型MCU用一个GPIO定时翻转电平。监控器检测到电平变化就认为喂狗了。这种方式最简单但要注意如果程序跑飞后恰好停在翻转IO的指令附近可能误喂狗。所以有些监控器要求特定频率范围的翻转太快太慢都不行。SPI/I2C写型MCU通过串行接口写特定寄存器来喂狗。这种方式更可靠因为需要正确的时序和地址跑飞的程序很难恰好完成这个操作。但占用一个通信接口成本略高。我一般推荐IO翻转型够用且简单。但要注意喂狗IO不要和其他功能复用避免被意外翻转。5.3 布板时的地平面与走线隔离PCB布板时监控器芯片的位置和走线有几个要点靠近被监控的电源监控器的电压检测引脚要尽量靠近MCU的电源引脚这样检测到的电压才真实反映MCU看到的电压。如果走线太长线上的压降会导致检测偏差。地平面完整监控器的地要接到干净的地平面不要和功率地混在一起。如果板子上有电机驱动、继电器等大电流负载监控器的地要单独走最后单点接地。复位线远离噪声源复位线是高阻抗信号线容易受干扰。走线要短远离时钟线、开关电源电感、电机驱动线。如果实在避不开可以在复位线上串一个小电阻比如100欧并加一个对地电容比如100pF做滤波。5.4 复位线的滤波与抗干扰复位线受干扰会导致误复位这在工业现场很常见。除了上面说的走线隔离还可以加RC滤波RESET ---[100Ω]------ 到MCU复位引脚 | [100pF] | GND这个RC的时间常数是10ns对复位信号本身的延迟可以忽略但能滤掉高频毛刺。注意电阻不要太大否则会影响复位信号的下降沿。如果环境特别恶劣还可以用施密特触发器对复位信号整形或者用光耦隔离。但这些都是成本要根据实际场景权衡。6. 软件怎么配合喂狗策略与复位后的状态恢复硬件搭好了软件这边也有不少事情要做。喂狗策略设计不好要么频繁误复位要么真死机了没人管。6.1 喂狗点的放置原则喂狗点不能随便放要放在能证明系统正常工作的关键路径上。什么意思如果程序跑飞了它不应该能到达喂狗点。所以喂狗点应该放在主循环的末尾且主循环里包含了所有关键任务关键任务执行成功之后状态机处于正常状态时反面教材把喂狗放在定时器中断里。这样即使主循环挂了只要中断还在跑看门狗就不会复位。但主循环挂了系统其实已经不正常了。所以喂狗点要放在主循环不要放在中断。6.2 窗口看门狗的喂狗时机窗口看门狗要求喂狗信号落在特定窗口内。比如超时时间100ms窗口是50ms到100ms之间。如果你在30ms就喂狗会被认为是程序跑太快也触发复位。这种看门狗适合检测程序跳过关键步骤的异常。比如正常流程是读传感器→计算→输出→喂狗。如果程序跑飞后直接跳到喂狗窗口看门狗就会发现怎么这么快就喂狗了然后复位。用窗口看门狗时喂狗点的位置要仔细设计确保正常流程下喂狗时间落在窗口内。这需要实际测量和调试。6.3 复位后的自检与状态恢复系统被复位后重新启动时要做几件事读取复位原因很多MCU有复位状态寄存器能区分上电复位、看门狗复位、外部复位。如果是看门狗复位说明系统之前挂了要记录这个事件。保存故障信息把复位原因、复位次数、关键变量写到非易失存储器EEPROM/Flash方便事后分析。安全状态恢复如果是看门狗复位系统重启后应该进入一个安全状态——关闭输出、回到初始位置、等待人工确认而不是直接继续之前的操作。这在工业控制里特别重要避免设备在异常状态下继续动作。我一般会在代码里加一个复位计数器存在EEPROM里。如果短时间内连续复位多次比如1分钟内超过5次就进入一个故障锁定状态不再自动恢复而是等待人工干预。这样可以避免系统陷入复位-跑飞-复位的死循环。6.4 和RTOS看门狗任务的配合如果用RTOS比如RT-Thread、FreeRTOS看门狗喂狗通常放在一个独立任务里。这个任务要检查其他关键任务是否正常运行——比如每个任务维护一个计数器喂狗任务检查所有计数器都在增长才去喂狗。这种设计叫任务级看门狗比单纯的主循环喂狗更可靠。因为即使主循环在跑某个关键任务挂了也能检测出来。代码大概长这样// 每个任务定期调用 void task_heartbeat(int task_id) { heartbeat[task_id]; } // 看门狗任务 void watchdog_task(void) { static int last_heartbeat[NUM_TASKS]; for (int i 0; i NUM_TASKS; i) { if (heartbeat[i] last_heartbeat[i]) { // 任务i没在跑不喂狗让看门狗复位 return; } last_heartbeat[i] heartbeat[i]; } feed_watchdog(); // 所有任务正常喂狗 }这个模式我在多个项目里用过很稳。7. 几个真实案例从现象到根因的排查过程理论讲完了说几个我实际遇到的案例都是监控器相关的问题看看排查思路。7.1 案例一老化测试中随机复位某批次板子在做72小时老化测试时大约有5%的板子会出现随机复位时间不固定有的几小时一次有的一天才一次。排查过程先查电源用示波器长时间监测发现电源上有偶发的几十毫伏的跌落持续时间很短大概几微秒。再查监控器阈值发现这批板子用的监控器阈值是2.93V而电源正常是3.3V跌落时最低到2.88V——刚好在阈值附近。根因电源瞬态跌落触发了监控器复位。但为什么只有5%的板子因为监控器阈值有±2%的分散性有些板子的监控器阈值偏低就更容易触发。解决方案换用阈值更低的监控器2.7V同时在电源上加了大容量电容100uF吸收瞬态跌落。改版后老化测试通过率100%。7.2 案例二看门狗频繁误复位某设备在现场运行时每隔几小时就复位一次但实验室测试正常。排查过程先怀疑看门狗超时太短查代码发现超时设的是100ms喂狗周期是20ms余量很大。再查现场环境发现设备附近有大功率变频器。用示波器抓喂狗IO发现偶尔有毛刺导致监控器误认为收到了喂狗信号——等等毛刺应该是多喂狗不会导致复位。再仔细看发现是喂狗IO被干扰后MCU检测到IO状态异常进入了错误处理流程暂停了喂狗。根因是喂狗IO没有做滤波干扰导致MCU误判。解决方案喂狗IO加RC滤波1k100nF同时在软件里对喂狗IO做多次采样确认。改后问题消失。7.3 案例三上电偶尔不启动某产品小批量试产时发现大约1%的板子上电后不启动重新上电又好了。排查过程用示波器抓上电时序发现复位信号的释放时间偶尔会晚于MCU开始运行的时间。仔细看监控器数据手册发现复位超时时间是固定的1ms而MCU的晶振起振时间在极端情况下可能超过1ms。根因复位超时太短MCU还没准备好就释放了复位。解决方案换用复位超时200ms的监控器型号。问题解决。这三个案例的共同点是问题都很隐蔽靠常规测试发现不了需要长时间监测和仔细分析。监控器相关的问题往往是这样平时不出事一出事就是随机性的很难复现。所以设计和选型时多留余量比事后排查划算得多。8. 监控器与MCU/FPGA的配合一些容易忽略的细节最后说几个和MCU、FPGA配合时的细节这些在数据手册里往往不会明说但实际项目中很重要。8.1 FPGA的多电源域复位FPGA通常有多个电源域核心电压VCCINT、IO电压VCCO、辅助电压VCCAUX。这些电源的上电顺序有要求如果顺序不对可能导致FPGA内部闩锁或者IO冲突。监控器在这里的作用是监控最关键的那个电源域通常是VCCINT等它稳定后再释放复位。但FPGA还要求所有电源域都稳定后才能开始配置。所以实际设计中可能需要多个监控器或者用一个监控器加电源顺序控制芯片。另外FPGA的复位释放后还需要一段时间加载配置数据从Flash或外部控制器。这段时间FPGA的IO处于高阻态外部电路要能容忍这个状态。8.2 MCU低功耗模式下的看门狗很多MCU在低功耗模式下会关闭内部看门狗以省电但外部硬件看门狗还在跑。如果低功耗模式持续时间超过看门狗超时就会被复位。解决方案有两种一是低功耗期间定期唤醒喂狗二是选带看门狗禁用引脚的监控器进入低功耗前禁用看门狗。但第二种有风险——万一忘了重新启用系统就失去保护了。我一般推荐第一种虽然麻烦点但更可靠。如果低功耗时间很长比如几小时可以选超时时间很长的监控器比如几秒到几十秒然后每隔几秒唤醒一次喂狗。8.3 多芯片系统的复位同步一块板子上有多个需要复位的芯片时要确保它们同时复位、同时释放。如果释放时间不一致可能出现一个芯片已经开始运行另一个还在复位状态导致通信失败或者IO冲突。解决办法是用一个监控器驱动所有芯片的复位引脚或者用复位分配器Reset Distributor。如果负载太重可以加缓冲器。关键是所有复位线的走线长度尽量一致保证信号到达时间相同。8.4 调试阶段的复位行为观察调试时怎么确认监控器工作正常我一般做这几件事用示波器同时抓电源电压和复位信号看复位释放时间是否和电源稳定时间匹配手动拉低复位引脚确认系统能正常复位故意不喂狗确认看门狗能触发复位用可调电源慢慢降低电压确认复位阈值和标称值一致这些测试在样机阶段花不了多少时间但能提前发现很多问题。9. 写在最后一些个人经验监控器芯片这个事说大不大说小不小。一颗几毛钱的芯片设计好了默默无闻设计不好就是随机复位的噩梦。我这些年最大的体会是不要在这上面省成本也不要在这上面省设计时间。选型时多花半小时看数据手册的温度曲线和精度指标可能就避免了后期几个月的排查。布板时多留一个去耦电容的位置可能就解决了现场干扰问题。软件上多写几行复位原因记录可能就省了一次现场出差。还有一点监控器不是万能的。它只能处理它设计要处理的异常。如果系统本身设计有缺陷——比如电源余量不足、时钟质量差、信号完整性糟糕——监控器只能频繁复位治标不治本。所以根本还是要把系统设计做好监控器是最后一道防线不是第一道。最后分享一个我常用的调试技巧在样机阶段把监控器的复位输出接到一个LED上同时用MCU的一个IO记录复位次数。这样一眼就能看出系统有没有被复位过、复位了几次。等产品成熟了再去掉LED保留复位计数功能。这个习惯帮我发现过好几次偶发复位问题。
返回列表