看门狗概述:工业设备为什么需要看门狗?

说实话,我做了十几年嵌入式,最怕听到的一句话就是:「设备死机了,但灯还亮着。」

工业现场不比实验室。你想想看,一台PLC在流水线上跑着,突然卡住了。工人按复位没用,得断电重启。生产线一停,每分钟都是钱。这种场景,我见过太多次了。

看门狗,就是专门对付这种「假死」状态的。它不是什么高大上的技术,但少了它,工业设备根本不敢出厂。

为什么工业设备离不开看门狗?

工业环境和消费电子不一样。温度、湿度、振动、电磁干扰,随便一个都能让芯片「抽风」。我遇到过一台变频器,在实验室跑一个月没问题,一上产线,三天两头死机。后来发现是电源纹波太大,把MCU的PC指针冲飞了。

这种故障,你靠人工去盯,盯不过来。看门狗的作用就是:当系统失去响应时,自动把它拉回来

核心要点:看门狗不是防止故障,而是缩短故障恢复时间。从「人工断电重启」变成「自动复位恢复」,时间从几分钟降到几百毫秒。

具体来说,工业设备需要看门狗的原因有三点:

  • 环境恶劣:电磁干扰、电源波动、温度漂移,随时可能让程序跑飞
  • 无人值守:很多设备装在偏远站点,没人天天盯着按复位
  • 安全要求:设备死机后如果输出保持错误状态,可能造成安全事故

我记得有一次给一个油田项目做控制器。设备放在野外,零下30度。客户说:「你们这板子要是死机了,我们得开车两小时过去重启。」就冲这句话,我把看门狗电路改了三版。

看门狗的工作原理

说白了,看门狗就是一个倒计时器。正常工作时,程序每隔一段时间去「喂狗」——也就是重置这个计时器。如果程序卡住了,没人喂狗,计时器归零,看门狗就触发复位。

流程很简单:

  1. 系统启动,看门狗开始计时
  2. 主循环里定期喂狗(比如每100ms喂一次)
  3. 如果喂狗超时(比如超过500ms没喂),看门狗输出复位信号
  4. 芯片重启,从头开始跑

嗯,这里要注意:喂狗的时间间隔不是随便定的。你想想看,如果主循环要处理一个耗时操作,比如写Flash,可能要200ms。这时候喂狗周期就得大于200ms,否则会被误复位。

个人经验:我一般把喂狗周期设为最大任务执行时间的2-3倍。比如最长的任务跑300ms,我就设800ms的喂狗周期。留点余量,别把自己逼太紧。

硬件看门狗 vs 软件看门狗

很多人觉得看门狗就是芯片内部那个定时器。其实不然。看门狗分两种,各有各的脾气。

对比项 硬件看门狗 软件看门狗
实现方式 独立芯片或MCU内部外设 定时器中断+软件计数
可靠性 高,独立于CPU运行 低,CPU挂了它也挂
成本 高(需要额外芯片或引脚) 低(零成本)
适用场景 工业控制、汽车电子、医疗设备 消费电子、低风险应用
复位可靠性 CPU完全死机也能复位 CPU死机时可能失效

硬件看门狗

硬件看门狗是一个独立的计时器电路。它不依赖CPU内核,即使CPU的时钟停了、程序跑飞了,它照样计时。我最早用的是一个叫MAX706的芯片,专门干这个的。

它的工作方式是这样的:

  • 芯片有一个WDI引脚,程序通过这个引脚喂狗(一般就是拉高拉低)
  • 如果超过1.6秒没喂,WDO引脚输出低电平,直接复位MCU
  • 有些型号还能输出一个「早期警告」,让你在复位前做点善后工作

我曾经在一个项目中吃过亏。用的是MCU内部自带的硬件看门狗,结果芯片本身因为电源问题挂了,看门狗也跟着罢工。从那以后,但凡可靠性要求高的项目,我都用独立看门狗芯片。

避坑指南:MCU内部看门狗虽然方便,但有个致命问题——如果MCU的时钟系统崩溃了,内部看门狗也可能失效。独立看门狗芯片有自己的时钟源,这才是真正的「独立」。

软件看门狗

软件看门狗,说白了就是用定时器中断模拟的。主程序里有个计数器,定时器中断里给它加1。主程序每次循环把计数器清零。如果计数器超过某个阈值,说明主程序没来得及清零,那就执行复位。

代码实现大概长这样:

// 软件看门狗示例
volatile uint16_t wdg_counter = 0;

// 定时器中断,每1ms触发一次
void TIM_IRQHandler(void) {
    wdg_counter++;
    if (wdg_counter > 1000) {  // 超过1秒没喂狗
        NVIC_SystemReset();     // 软件复位
    }
}

// 主循环中喂狗
void main_loop(void) {
    while(1) {
        wdg_counter = 0;  // 清零计数器
        // 执行任务...
        delay(10);        // 模拟任务耗时
    }
}

软件看门狗的好处是灵活。你可以设置多个看门狗,监控不同的任务。比如一个监控主循环,一个监控通信任务,一个监控传感器采集。哪个任务卡住了,对应的看门狗就超时。

但它的缺点也很明显:如果CPU彻底死机,定时器中断也跑不了,软件看门狗就废了。所以真正可靠的系统,都是硬件看门狗+软件看门狗配合使用。

两种看门狗怎么选?

我个人的习惯是这样的:

  • 消费级产品:软件看门狗就够了,成本敏感,死机了用户自己拔电
  • 工业级产品:MCU内部硬件看门狗+软件看门狗,双重保险
  • 高可靠性产品:独立看门狗芯片+软件看门狗,甚至双看门狗互锁

你可能会问:「用两个看门狗不麻烦吗?」其实习惯了就好。我做过一个铁路信号系统,用了三路看门狗:一路独立芯片,一路MCU内部,一路软件。三路互相监控,任何一个出问题都能恢复。虽然成本高了点,但客户要求MTBF(平均无故障时间)10万小时,不这么搞不行。

总结一下:看门狗不是什么黑科技,但它是一个「兜底」机制。工业设备在恶劣环境下运行,没有看门狗就像开车没有安全带——平时用不上,出事的时候能救命。

看门狗知识体系

下面这张图,是我自己整理的知识框架。你看一眼,心里就有数了:

看门狗知识体系 看门狗 Watchdog 硬件看门狗 软件看门狗 独立看门狗芯片 MCU内部外设 定时器中断实现 多任务监控 应用场景与选型建议 消费级:软件看门狗 工业级:硬件+软件 高可靠:双看门狗

这张图把看门狗的核心脉络理清楚了。从硬件和软件两条线展开,再到不同场景的选型建议。你把它存下来,以后做方案设计时对照着看,不会选错。


好了,看门狗的基本概念就聊到这儿。下一节我们深入讲讲喂狗策略——什么时候喂、怎么喂、喂错了会怎样。这些都是实战中容易踩坑的地方。

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