在产品化的嵌入式系统中,为了使系统在异常情况下能自动复位,一般都需要引入看门狗。看门狗对于没有底层开发经验的开发人员来说,可能比较陌生。但是他在系统起到非常重要的作用,相当于系统警察,当系统发生严重错误不能恢复时,看门狗能够让系统重启。最近的单片机项目中要使用看门狗,现有以下疑问:
“我使用的是内置看门狗,单片机正常工作的电压为3.3V,此时开启看门狗,在定时器里喂狗。如果此时单片机的电压变为1V,或者是其他不能使单片机正常工作的电压后,看门狗还有效吗? 能使单片机复位吗?我就是想让程序进入死循环,然后复位。但是不用定时器做的话,我的主循环可能都有400MS时间,内部看门狗是200MS没喂狗就会复位。我一直认为,如果电源电压很低,那么即使看门狗复位了单片机也不能正常工作,所以想知道这个复位是一直存在的吗?”
部分网友给出的看法:
HWM:"看门狗"是"死机"后才起作用,电源电压降低通常用电源监控或管理芯片。
tianxj01:定时器是硬件,在定时器里面喂狗,已经失去了看门狗本身意义了。喂狗一般需要在主循环且最好就是在主循环,那么一旦程序挂起,看门狗就会动作复位。理论上,现代单片机,都有低电压复位功能。不需要通过看门狗来解决。当然,如果非要考察看门狗是不是能够解决。那么只要你把喂狗放在正常主循环位置,一旦单片机因为失电导致挂起,肯定能够给你一个复位的。这个,不是发生在低电压时候,而是发生在低电压过去后,由于机器进入非正常地址,主循环破坏,那么理论上看门狗就会叫了............
yanwen217:如果是外部独立的看门狗芯片,基本都是集成了电压检测功能和看门狗计数器功能,电压低于所选的检测阈值电压或者看门狗计数器计数溢出都会给出指示信号。
wukaka2016:电压低于单片机工作电压,单片机都不工作了,看门狗也不工作了。
菩提菩提提:在我看来,普通窗口看门口,也就是是个定时器,这个定时器在中断源会触发复位罢了。你说低压的情况,需要判断你的MCU是否内部带BUCK或者LDO,内核电压究竟是多少V失效,在电压逐渐降低的过程,如果你的外设电压关闭,内核还在工作,这种情况较少,但还是有可能的。现在的MCU很多都带有BOD,低压报警和复位源可用的。
gx-huang:我不相信有什么程序,主程序运行一次要400ms的。这个要看你自己优化了。在定时器中断里喂狗,绝对不是好的设计,其它程序死了,定时器也不一定会死,这个看门狗就失去意义了。如果主程序无法优化,可以在中间多次喂狗,或者把WDT溢出时间设置长一些。绝对不可以定时器喂狗。
提问者追问:还有就是看门狗在中断关闭的情况下能生效吗?就说说我的中断关闭,然后看门狗打开,在喂狗,这个喂狗的动作有效吗?
答:看门狗和中断没什么关系。而且建议是在config选项里面打开硬件看门狗,而不是到软件里面去打开,也就是单片机只要上电到能正常运行,不管内部是不是跑飞,那么这时候,看门狗的意义就体现了。一般芯片看门狗有烧写时候选择打开看门狗,也有软件里面启动看门狗,这在对付某些像你因为失电造成跑飞效果应该不一样。
问:单片机电压如果正常是3.3V,其中因为一些原因持续了10分钟的2v,10分钟后恢复3.3V,那么单片机能够正常复位吗?如果不能,硬件上应该加个什么比较合适,能让单片机恢复后复位?还有一点就是板子的供电由一个开关电源提供,如果电网波动的很厉害的话,是否有可能出现电源输出异常,比如正常输出5V的,最后变到2V,有没有这个可能?
答:这种情况,最安全的是外挂一个专用电压复位芯片到芯片RESET脚。max809s,复位电2.93V。专门设计用来在要求高的3.3V供电系统可靠复位用。关键是这货便宜到没边,没有成本压力。
看到上述网友激烈的讨论,我也搜索了一下快包里面跟看门狗相关的任务,还着实不少。不知道承接这些项目的工程师也是否会有上述网友的疑问,如果有,希望这些回答能够帮到您。如果您还有其他技术疑问,欢迎来我们的
技术问答提问,我们会齐集力量帮您解答。