
MCU 出厂前几乎都内置了上电复位(POR)电路,但实际项目里"偶尔启动不了""上电卡死""复位脚波形诡异"这类问题依然高频出现。原因很简单:POR 只保证芯片内部逻辑的初始化,管不住外围电路的供电节奏,更管不住那些电源爬坡慢、多电源域互相牵制的板子。今天把 RC 复位电路这笔账算清楚,顺便聊聊上电时序里容易被忽略的细节。
MCU 内部逻辑的最低可靠工作电压通常低于数据手册标称的 VDD 范围下限。比如一颗标称 1.71V~3.6V 的 MCU,内部 Flash 读写和时钟起振可能在 1.5V 左右就开始"半死不活"地尝试工作——晶振起振失败、Flash 写入出错、寄存器状态随机。POR 电路会盯住 VDD,在电压爬到内部阈值(通常是 0.6~1.2V 这个量级)之前把复位保持有效。
问题在于:POR 的释放阈值和释放后到时钟稳定之间的延时,是芯片厂商按"电源快速爬坡"的假设设计的。如果板子上大电容多、电源模块软启动时间长,VDD 爬坡要几十毫秒,POR 在电压还没爬稳时就释放了复位,MCU 就会在欠压状态下跑起来,各种灵异现象随之而来。
外部 RC 复位电路的本质,就是给复位释放时间"再加一道保险":让 NRST 引脚上的电平在 VDD 达到安全值之后,再延迟一段时间才变成高电平。
最常见的上电复位电路是一只电阻从 VDD 拉到 NRST,一只电容从 NRST 接地。上电瞬间电容两端电压不能突变,NRST 被拉到地,保持复位;随后电容通过 R 充电,NRST 电压按指数曲线爬升,超过复位阈值(高电平判据,通常是 0.7×VDD 左右)后复位释放。
充电到阈值所需时间用下式计算(普通段落书写,不用公式环境):
t = R × C × ln(VDD / (VDD − Vth))
举个具体例子:VDD = 3.3V,R = 10kΩ,C = 100nF,复位阈值取 0.7×VDD = 2.31V。代入计算:VDD / (VDD − Vth) = 3.3 / 0.99 ≈ 3.33,ln(3.33) ≈ 1.204,所以 t ≈ 10kΩ × 100nF × 1.204 ≈ 1.2ms。
也就是说这颗 RC 只给出了约 1.2ms 的复位保持时间。对电源爬坡在微秒到亚毫秒级的 LDO 供电系统够用了,但如果你的电源是大电容慢启动(比如带电解电容的热插拔系统、电池直接上电带大负载),1.2ms 远远不够,需要把 C 加大到 µF 级,或者干脆上复位监控芯片。
再算一个慢启动系统的例子:电源爬坡需要 10ms,希望复位在 VDD 达到 3.3V 后再保持 5ms。取 R = 47kΩ,C = 2.2µF,则 t ≈ 47kΩ × 2.2µF × 1.204 ≈ 124ms,覆盖爬坡加裕量绰绰有余。注意 R 不能选太小,它同时在复位释放后承担上拉职责,太小会增加 MCU 在复位期间 NRST 被内部结构拉低时的静态电流;C 也不能太大,否则掉电时电容来不及放电,快速掉电重启(比如电源保护动作后自恢复)时复位可能不干净。
掉电场景也要算:VDD 掉了,NRST 电容上的电荷要通过 R 往 VDD 轨和芯片内部泄放,放电到低于低电平判据的时间同样是 RC 量级。如果掉电重启间隔小于这个放电时间,第二次上电时复位电容还没放完,复位保持时间被"吃掉"一截。经验做法是给 NRST 到地并一只反向二极管(阴极接 NRST),掉电时电荷通过二极管快速向 VDD 放电,缩短复位电容的放电时间。
方案 | 复位保持时间 | 成本 | 适用场景 | 典型坑 |
|---|---|---|---|---|
芯片内部 POR | 0~几 ms,不可调 | 0 | 单一 3.3V/5V 电源、爬坡快的板子 | 欠压临界点行为不保证 |
RC 复位 | RC 决定,可调 | 几分钱 | 电源爬坡慢、需要确定性复位时序 | 掉电重启时放电不干净 |
复位监控芯片(如 TPS3823、IMP811) | 固定 200ms 左右 | 0.5~2 元 | 多电源域、工业现场、可靠性要求高 | 要核对阈值电压档位 |
看门狗+复位二合一(如 TPS3823 带 WDI) | 同上 | 略高 | 长期无人值守设备 | 喂狗时序不对会误复位 |
复位监控芯片的优点不只是延时长:它在 VDD 跌落到阈值以下时会把复位重新拉起来(欠压锁定),这是 RC 电路做不到的——RC 只管上电那一次,电源中途跌落它没有判据。工业产品里花这几毛钱很值。
选监控芯片时重点核对两个参数:复位阈值(要高于 MCU 最低可靠工作电压、低于电源正常输出下限,比如 3.3V 系统选 2.9V 档)和复位脉宽(要大于晶振起振时间,一般 200ms 档对绝大多数 MCU 都够)。
现在的 MCU/SoC 大多是多电源域:核心 1.1V、DDR 1.35V、IO 3.3V 之类。数据手册会给出一组约束:哪些电源必须先上、哪些可以同时上、各电源间允许的最大时间差是多少。
两条铁律:
第一,复位释放必须晚于所有电源达到目标值的 90%。如果核心电源还没稳,IO 电源先来、复位先释放,芯片内部逻辑就处于"半上电"状态,轻则启动失败,重则锁存导致闩锁效应(latch-up),电流激增烧芯片。
第二,注意 IO 电源与核心电源的相对时序。有些芯片要求 IO 电源先于核心电源上电(保证 ESD 二极管钳位路径不反向),有些相反。弄反了不一定立刻坏,但长期可靠性会打折。设计时用一颗 PMIC 或者用电源使能引脚 + RC 延时把顺序定死,别赌电源模块的上电一致性。
上电时序的验证方法很直接:四通道示波器分别挂各路电源和 NRST,单次触发抓上电全过程,逐项核对约束。这一步花十分钟,比后面修闩锁烧板便宜得多。
复位按键并联在 RC 电容两端(按下拉低 NRST),机械抖动会产生一连串短脉冲。多数 MCU 的复位输入有内部消抖或最短脉宽要求,问题不大,但如果复位信号还接了其他芯片(比如外部 RTC、CPLD),每个芯片对复位脉宽的要求都要核一遍,取最严的那个。
NRST 走线长且靠近开关电源或时钟线,会耦合噪声导致误复位。复位信号要当成敏感信号处理:短走线、远离干扰源、必要时靠近芯片放一只 100pF 高频滤波电容(与主复位电容并联不影响时序账太多,但会改变充电曲线,改了就要重新核算)。
有些 MCU 的 NRST 内部带弱上拉且支持内部 POR,外部 RC 反而会和内部结构打架,这类芯片的外部复位电路要严格按数据手册的推荐电路来,别把别的芯片的参考设计照搬过来。
最后区分一下复位类型:上电复位、欠压复位、看门狗复位在多数芯片里可以通过复位状态寄存器区分。固件里读这个寄存器再决定是否做数据恢复,是排查"偶发重启"问题的第一步——很多被怀疑是硬件复位问题的现场,最后发现是看门狗喂狗超时。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。