1. 看门狗基础概念:什么是硬件看门狗?为什么医疗制氧机必须用?

大家好,我是老李。做嵌入式这行快十五年了,从消费电子一路做到医疗设备。今天咱们聊的话题,说白了就是——怎么让你的单片机在关键时刻不掉链子。

先问个问题:你遇到过单片机死机吗?我猜肯定遇到过。跑着跑着程序卡住了,灯不闪了,按键没反应了。消费电子嘛,重启一下就好。但医疗制氧机呢?病人正吸着氧,机器突然死机了……这可不是闹着玩的。

1.1 硬件看门狗到底是什么?

硬件看门狗,英文叫 Hardware Watchdog Timer。你可以把它想象成一个「监工」。

这个监工有个特点:它每隔一段时间就会问主控芯片一句——「嘿,你还活着吗?」

如果主控芯片在规定时间内回答了(也就是喂狗),监工就继续等下一轮。如果主控芯片没回答,监工就判定——「坏了,这哥们死机了!」然后直接给芯片一个硬件复位信号。

说白了,就是一个独立于CPU之外的硬件定时器。它不依赖CPU的时钟,也不依赖软件的状态。哪怕CPU内部乱成一锅粥,看门狗照样能工作。

核心要点:硬件看门狗是独立于主控芯片的「最后一道防线」。它不靠软件运行,只靠硬件逻辑。

1.2 软件看门狗 vs 硬件看门狗

有人会问:那软件看门狗行不行?我写个定时器中断,在中断里做复位判断,不也一样吗?

嗯,这个问题我当年也想过。但后来在项目里吃过亏,才明白两者的区别。

对比项 硬件看门狗 软件看门狗
独立性 完全独立于CPU 依赖CPU和中断系统
可靠性 极高,CPU死机也能工作 CPU死机时可能失效
响应速度 硬件直接复位,微秒级 依赖中断响应,毫秒级
适用场景 医疗、工业、汽车等安全关键系统 消费电子、非关键系统

你看,软件看门狗有个致命问题:如果CPU死机导致中断系统也瘫痪了,那软件看门狗就形同虚设。而硬件看门狗是独立芯片或独立模块,CPU死不死跟它没关系。

警告:在医疗设备中,绝对不能用软件看门狗替代硬件看门狗。这不是技术选择问题,是安全底线问题。

1.3 为什么医疗制氧机必须用硬件看门狗?

这个问题,我分三点来说。

第一,人命关天。制氧机是生命支持设备。病人可能正处在缺氧状态,机器一旦死机,几分钟内就可能造成不可逆的伤害。你想想看,这种场景下,你敢赌CPU不会死机吗?

第二,电磁干扰。医疗环境里,各种设备同时运行——CT机、监护仪、呼吸机……电磁环境非常复杂。我曾在医院做过现场测试,一个病房里同时开着七八台设备,示波器上全是毛刺。这种环境下,单片机死机的概率比实验室高得多。

第三,法规要求。医疗器械有严格的认证标准,比如ISO 13485、IEC 60601。这些标准里明确要求:对于可能导致患者伤害的故障,必须有硬件级别的安全保护机制。硬件看门狗就是最直接的实现方式。

个人经验:我曾经参与过一个制氧机项目,初期为了省成本,用了软件看门狗。结果在EMC测试阶段,连续三次出现死机后无法自动恢复的情况。后来换成硬件看门狗,一次问题都没出过。从那以后,我所有医疗项目都强制要求硬件看门狗。

1.4 硬件看门狗的工作原理

来,咱们看看硬件看门狗到底是怎么工作的。以最常见的独立看门狗芯片为例,比如MAX6369或者TPS3823。

// 伪代码:硬件看门狗的基本工作流程

// 1. 初始化看门狗
void Watchdog_Init(void) {
    // 设置超时时间为1.6秒
    // 配置喂狗引脚为输出
    WDT_CTRL = 0x01;  // 使能看门狗
    WDT_TIMEOUT = 1600;  // 单位ms
}

// 2. 喂狗函数
void Watchdog_Feed(void) {
    // 给看门狗芯片一个脉冲
    // 注意:必须是精确的脉冲宽度
    WDT_PIN = 1;
    delay_us(10);  // 10微秒脉冲
    WDT_PIN = 0;
}

// 3. 主循环中的喂狗策略
void main_loop(void) {
    while(1) {
        // 执行关键任务
        read_sensor();
        control_valve();
        display_update();
        
        // 在任务完成后喂狗
        // 注意:不要在中断里喂狗!
        Watchdog_Feed();
        
        // 其他非关键任务
        log_data();
        check_communication();
    }
}

这里有个关键点:喂狗的位置很重要。我见过很多新手把喂狗放在定时器中断里,结果CPU主循环卡死了,中断还在跑,看门狗永远不触发。这叫什么?这叫「掩耳盗铃」。

正确做法:喂狗必须放在主循环的关键路径上。确保只有所有关键任务都执行完毕后,才去喂狗。这样一旦某个任务卡住,看门狗就会触发复位。

1.5 医疗制氧机的特殊要求

医疗制氧机跟普通设备不一样,它对看门狗有几个特殊要求:

  • 超时时间要合理:不能太短(频繁误复位),也不能太长(死机后恢复慢)。一般建议1-3秒。
  • 必须可配置:不同工作模式下,看门狗的超时时间可能不同。比如启动阶段可以长一些,正常运行阶段短一些。
  • 要有状态指示:看门狗复位后,系统要能记录复位原因。是正常复位还是看门狗复位?这个信息对故障排查至关重要。
  • 双重看门狗:在一些高端制氧机中,会使用两个看门狗——一个监控主控芯片,一个监控氧气浓度传感器。这叫「冗余设计」。

避坑指南:我曾经遇到过一个案例,看门狗超时时间设成了500ms,结果制氧机在启动阶段因为传感器初始化时间较长,频繁触发看门狗复位。后来改成启动阶段2秒、正常运行1秒的动态配置,问题就解决了。

1.6 总结一下

硬件看门狗不是什么高深的技术,但它是一个「平时用不上,用上就救命」的东西。对于医疗制氧机来说,它不是可选项,而是必选项。

记住三点:

  1. 硬件看门狗是独立于CPU的硬件定时器,CPU死机它照样工作
  2. 医疗设备必须用硬件看门狗,软件看门狗靠不住
  3. 喂狗策略要合理,别在中断里喂狗,别把超时时间设得太短

下一章,咱们聊聊具体的硬件选型——市面上那么多看门狗芯片,到底该怎么选?