硬件看门狗:独立看门狗(IWDG)原理、窗口看门狗(WWDG)原理、硬件电路设计要点

看门狗这东西,说白了就是系统最后的救命稻草。我做了十几年运动控制,见过太多因为程序跑飞导致电机撞限位、丝杠卡死的惨案。嗯,硬件看门狗就是那个在关键时刻帮你拉闸的人。

今天咱们聊聊两种最常用的硬件看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG)。别看它们都叫看门狗,脾气秉性完全不同。

独立看门狗(IWDG)原理

独立看门狗,我习惯叫它「倔驴」。为什么?因为它只认一个死理:在规定时间内,你必须喂它一次。不喂?直接复位。

它的核心结构其实很简单:

  • 独立的时钟源:通常是内部低速RC振荡器(LSI),大约40kHz。这个时钟不受主系统时钟影响,即使主时钟挂了,它照样跑。
  • 12位递减计数器:从预设值开始往下减,减到0就触发复位。
  • 键寄存器(KR):专门用来喂狗的寄存器,必须写入特定值才能重装载计数器。

我在项目中遇到过一件事:有次调试伺服驱动器,主晶振莫名其妙停振了,整个系统死在那。但IWDG还在跑,因为它用的是独立的LSI时钟。最后是看门狗把系统拉回来的。你想想看,如果没有这个独立时钟源,那台设备可能就彻底废了。

关键参数计算:

超时时间 = (预分频系数 × 重装载值) / LSI频率

举个例子:预分频系数=64,重装载值=1000,LSI=40kHz

超时时间 = (64 × 1000) / 40000 = 1.6秒

喂狗的代码其实就几行:

// 喂狗操作
IWDG->KR = 0xAAAA;  // 重装载计数器
IWDG->KR = 0xCCCC;  // 启动看门狗

注意,喂狗必须在主循环的固定位置,不能放在中断里。我曾经见过有人把喂狗放定时器中断里,结果主程序死循环了,中断还在跑,看门狗永远喂不饱。这叫什么?这叫掩耳盗铃。

窗口看门狗(WWDG)原理

窗口看门狗就聪明多了。它不光要求你喂,还要求你在一个特定的时间窗口内喂。喂早了不行,喂晚了也不行。

我刚开始接触WWDG时觉得这玩意儿有点矫情,后来才明白它的精妙之处。

WWDG的核心特点:

  • 时钟来自APB1总线:和系统时钟同源,主时钟挂了它也跟着挂。但这不是缺点,而是设计意图。
  • 7位递减计数器:从0x7F往下减,减到0x3F触发复位。
  • 窗口值(CFR寄存器):定义了喂狗的上限时间。计数器值大于窗口值时喂狗,直接复位。

为什么要有窗口?我举个例子你就明白了。假设你的运动控制程序正常运行时,每500微秒执行一次主循环。如果程序跑飞了,但碰巧还在循环里乱转,可能每50微秒就「碰巧」喂一次狗。IWDG对这种高频误喂狗毫无办法,但WWDG能识别——因为喂早了。

个人经验:我一般把WWDG的窗口值设在正常喂狗时间的1.2倍左右。比如正常喂狗周期是100μs,窗口值就设120μs。这样既给了正常运行的余量,又能快速检测异常。

WWDG的配置代码:

// 配置WWDG
WWDG->CFR = 0x60;      // 窗口值设为0x60
WWDG->CR = 0x7F;       // 计数器初始值0x7F,使能看门狗

// 喂狗操作
WWDG->CR = 0x7F;       // 必须在窗口值到0x60之间执行

硬件电路设计要点

软件写得再好,硬件设计有坑照样白搭。这部分我踩过的坑比较多,你仔细听。

1. 复位电路设计

看门狗复位信号通常接到MCU的NRST引脚。这里有个容易忽略的点:复位信号宽度。有些看门狗芯片输出的复位脉冲很窄,只有几微秒,MCU可能来不及响应。

我建议在复位引脚上加一个RC延时电路,确保复位脉冲宽度大于MCU要求的最小值。一般100ms比较稳妥。

2. 独立看门狗的外部实现

如果MCU内部没有IWDG,或者你觉得内部的不够可靠,可以用外部看门狗芯片。常用的有MAX706、TPS3823等。

芯片型号 超时时间 特点
MAX706 1.6s 带手动复位输入
TPS3823 1.6s/200ms可选 超低功耗
ADM706 1.6s 带看门狗使能引脚

避坑指南:我曾经在一个项目中用了外部看门狗,但喂狗信号线走线太长,受到电机驱动的大电流干扰,导致看门狗误复位。后来把喂狗信号线改成差分走线,问题解决。记住:看门狗相关的信号线一定要远离大电流回路。

3. 喂狗信号的电平匹配

外部看门狗的喂狗引脚通常是电平触发或边沿触发。如果是电平触发,要注意MCU上电初始化期间IO口的状态。有些MCU的IO口默认是浮空输入,可能被外部干扰拉到无效电平,导致看门狗误动作。

我的做法是:在MCU初始化代码的最前面,先把喂狗引脚配置为推挽输出,输出有效电平。然后再初始化其他外设。

4. 看门狗使能开关

调试阶段看门狗很烦人,动不动就复位。我习惯在硬件上留一个跳线帽,可以临时禁用看门狗。但量产时必须去掉这个跳线,或者用软件锁定。

硬件看门狗知识体系 硬件看门狗 独立看门狗 (IWDG) 窗口看门狗 (WWDG) 硬件电路设计 独立时钟源 (LSI) 12位递减计数器 键寄存器 (KR) APB1总线时钟 7位递减计数器 窗口值 (CFR) 复位电路设计 外部看门狗芯片 电平匹配与走线 调试使能开关 IWDG:独立时钟,超时复位 | WWDG:窗口限制,提前/延迟均复位

最后说一句,看门狗不是万能的。它只能检测到程序跑飞,但检测不到逻辑错误。比如你的运动控制算法算错了位置,程序还在正常跑,看门狗照样喂得饱饱的。所以,该做的软件保护、限位开关、急停按钮,一个都不能少。

我的习惯:在运动控制项目中,我通常同时使用IWDG和WWDG。IWDG作为最后一道防线,超时时间设长一点(比如2秒)。WWDG作为快速检测,窗口设在正常循环时间的1.5倍。这样既有快速响应,又有兜底保障。

嗯,硬件看门狗就聊这么多。记住一句话:看门狗是保命的,不是治病的。别指望它解决所有问题,但关键时刻它能救你一命。


公众号:蓝海资料掘金营,微信deep3321