多年来,围绕着单片机应用系统的抗干扰技术以及其受干扰后的自我恢复,在硬件和软件等方面积累了多种方法,这些方法相互结合,配合使用,有效地提高了系统的可靠性与抗干扰性。
看门狗(Watch Dog Timer,简称为WDT)技术就是常见的抗干扰技术。看门狗WDT有硬件看门狗和软件看门狗之分,无论是硬件看门狗还是软件看门狗实际上都是一个可清零的定时计数器。如果该定时计数器用MCU芯片外部电路实现,则为硬件看门狗,如果该定时计数器用MCU芯片内部定时器/计数器实现,则称为软件看门狗。
本文介绍硬件看门狗技术,并给出了实用的基于CD4060的硬件看门狗电路。
1 硬件看门狗电路及其工作原理
它是针对工程项目所设计的一个实用电路,并且该电路实际使用情况良好。下面介绍电路的组成及其工作原理。
看门狗电路由14位二进制计数器CD4060和三极管VT1、VT2等组成。
单片机AT89C51的P1.7口设计成输出口,由AT89C51的CPU向看门狗电路发送喂狗信号——正脉冲,在两个正脉冲间隔内,P1.7保持为低电平(此功能要结合软件才能实现,相应的软件设计在下面介绍)。我们知道,单片机AT89C51的I/O口带灌电流负载的能力比较大,每个引脚低电平时的吸入电流为20 mA,带拉电流负载的能力却很小,实测情况是,每个引脚高电平时的输出电流仅25μA,现在P1.7口被设计成带拉电流负载的方式,为了提高P1.7口带拉电流负载的能力,所以,电路中设置了上拉电阻R3。
14位二进制计数器CD4060的计数脉冲由其内部振荡器和外接阻容元件R1、R2、C1组成的电路产生,振荡周期为
T0SC=2.2×R1×C1=0.22 ms
振荡器产生的计数脉冲(矩形波)可以直接引出,同时还可以从CD4060的10个输出端Q4~Q10和Q12~Q14得到不同分频系数的方波输出,各方波输出信号的周期如表1所示。这样,如果CD4060得不到CPU通过P1.7口发送来的喂狗信号——正脉冲,则CD4060的输出端Q14在1.8S内将产生一个完整周期的方波信号,而且低电平在前,高电平在后,其高电平经三极管VT1、VT2处理后形成单片机AT89C51的复位信号,使单片机AT89C51复位。由此可见,单片机AT89C51正常工作时,只要在0.9S内从P1.7口送出一个正脉冲,便可及时清零看门狗,输出端Q14就不会产生定时溢出信号,从而使看门狗电路对单片机系统不起作用。并且,从CD4060的10个输出端Q4~Q10和Q12~Q14可以得到不同周期的方波信号,经三极管VT1、VT2处理后形成单片机系统的复位信号,可以适应不同用户应用程序,从而该硬件看门狗电路可以适应不同的单片机应用系统。
对MCS-51系列的单片机而言,它所需要的复位信号是高电平宽度大于2个机器周期的正脉冲,例如,单片机的时钟脉冲频率为12 MHz时,则所需要的复位信号高电平宽度为2μs以上就可以了,而由上面的分析可知,CD4060的Q14输出的是高电平宽度为0.9 s的方波,如果让它直接作为单片机的复位信号,则单片机的复位时间势必在0.9 s以上,这样尽管可以使程序跑飞的单片机复位,但是显然没有做到尽快地引导跑飞的程序到正确的轨道来,如果这样做的话,对于某些单片机应用系统而言可能带来非常严重的后果。图1中的三极管VT1、VT2及其周围阻容元件构成波形转换电路,把较宽的正脉冲变换为较窄的正脉冲,从而较好地解决了上述的问题。三极管VT1、VT2构成的2级直接耦合放大器作为缓冲器使用,它是CD4060的输出端Q14的灌电流负载,C2、R8是微分电路。
经分析后不难看出,电路中的R7、R8、C2还具有单片机上电复位的功能。
2 上电复位与看门狗信号复位的不同处理过程
由于程序跑飞很可能会造成一些随机破坏事件,对某些系统而言,希望尽可能从断点处恢复运行,因此,有必要妥善解决跑飞的程序回复后的处理。
单片机应用系统上电时,上电复位电路会使得单片机处于复位状态,这一般称为冷启动,这种情况下,单片机处于复位状态表现为:
(1) 程序计数器PC的值为0000H。
(2) I/O口(P0、P1、P2、P3(1))为FFH状态,即准双向I/O口的输入状态。
(3) 堆栈指示器SP=07H,即堆栈底为片内RAM的07H单元。
(4) 除上述状态外,所有特殊功能寄存器SFR的有效位均为0。
(5) 上电复位时,由于是重新供电,RAM在断电时数据丢失,上电复位后为随机数。
单片机应用系统的程序跑飞时,看门狗产生复位信号,也会使得单片机处于复位状态,这一般称为热启动,这种情况下,单片机处于复位状态表现为:
(1) 程序计数器PC的值为0000H。
(2)I/O口(P0、P1、P2、P3)为FFH状态,即准双向I/O口的输入状态。
(3)堆栈指示器SP=07H,即堆栈底为片内RAM的07H单元。
(4)除上述状态外,所有特殊功能寄存器SFR的有效位均为0。
(5)复位信号使得单片机处于复位状态时,片内RAM中的数据不受影响。
比较上面两种单片机复位方式可知,上电复位与信号复位不同之处是第(5)点,这正是我们区分两种单片机复位方式的根据。具体方法是设置上电复位标志,例如,片内RAM的7EH单元和7FH单元分别为(7EH)=18H且(7FH)=81H时表示已完成上电复位。上面两种单片机复位方式都使得程序从0000H入口。然而,上电复位后要进行系统的完全初始化,而程序跑飞回复后往往要求保留一些过程参数,不允许重新初始化,而且还要对一些关键参数进行检查与修复。因此,要根据不同情况进行不同的初始化处理。图2是上电复位与程序跑飞回复初始化处理框图。0000H是MCU的复位人口,程序启动后,首先判断是上电复位(冷启动),还是程序跑飞回复(热启动)。上电复位是开机操作,要建立上电标志,并进行系统的完全初始化。程序跑飞回复应进行相关资源的检查与修复,以防止系统运行出错。另外,根据系统特点,需要保留一些过程数据,不得进行完全初始化。
3 喂狗指令插入原理与位置
单片机应用系统运行正常时,单片机的CPU应在0.9 s内从P1.7口送出一个正脉冲,使看门狗及时清零,也就是说,CPU要在0.9 s以内执行下面的喂狗程序段(喂狗指令):
SETBP1.7
NOP
NOP
CLRP1.7
喂狗程序段插入到用户应用程序之中。单片机系统的用户应用程序一般由循环结构的主程序和中断服务子程序组成。首先,应尽可能准确地估算各应用功能模块的运行时间,估算运行时间的时候,应考虑程序可能被中断,应把中断程序的运行时间也计算在内。然后,在若干个应用功能模块的运行时间小于0.9 s的两个应用功能模块之间插入上面的喂狗程序段。
为了防止看门狗非正常失效(即:已发生程序跑飞但看门狗不“叫”——不产生单片机所需要的复位信号),在用户应用程序中插入喂狗程序段时应注意下面3点。
(1)避免在中断服务子程序中插入喂狗程序段。
当MCU受干扰而发生程序跑飞,只要MCU片内中断允许控制寄存器不遭破坏,则不论程序飞到什么地方,CPU仍能像程序正常运行时一样响应和执行中断服务子程序。因此,在各中断服务子程序中都不应该插入喂狗程序段。
(2)避免在用户应用程序中的局部循环圈内插入喂狗程序段。
这样的话,即使程序跑飞后非正常进入该循环圈内,并且跑飞后的程序在该循环圈内“死循环”,也会因为看门狗接收不到喂狗信号,发生看门狗定时计数溢出,进而使系统恢复正常运行。
(3)对P1口的其它7根I/O线的输入和输出操作全部采用位操作指令,这样的话,对P1口的所有操作都是采用的位操作指令。因为如果对P1.0~P1.6的输入和输出操作采用直接寻址的方式完成,则势必会有可能影响到P1.7的输出操作,从而可能导致看门狗非正常失效。
4 结 论
在用户应用程序中插入喂狗程序段后,相当于启动了看门狗,就无法再使用各类单片机开发系统或单片机仿真器对该应用系统进行仿真调试。所以,单片机应用系统在开始设计和调试用户应用程序时,通常不连接看门狗电路,也不在用户应用程序中插入喂狗程序段,而是在用户应用程序研发成功后,再将看门狗电路连接到硬件系统中,并在用户应用程序中插入喂狗程序段,并且进行系统的现场试验,以检验系统的抗干扰能力是否满足系统的设计要求。
将采用了CD4060的硬件看门狗技术的单片机应用系统放置在具有较强电磁干扰的环境中工作,如果能长时间连续正常地工作,则说明系统具有较强的抗干扰能力。作者曾在采用了基于CD4060的硬件看门狗技术的单片机应用系统的交流电源插座处,较频繁地插拨其它用电设备的交流电源插头,没有发现系统程序跑飞的现象。相反地,把系统中的硬件看门狗电路拆掉,则系统在多次插拨其它用电设备的交流电源插头的情况下,有时会出现系统程序跑飞的现象。由此可见,基于CD4060的硬件看门狗技术确实提高了单片机应用系统的抗干扰能力。本文所介绍的看门狗技术,已成功地使用在多个实际的MCU应用系统中,保证了系统的可靠运行。
[1]. CD4060 datasheet https://www.dzsc.com/datasheet/CD4060_1865314.html.
[2]. AT89C51 datasheet https://www.dzsc.com/datasheet/AT89C51_810155.html.
[3]. MCS-51 datasheet https://www.dzsc.com/datasheet/MCS-51_477840.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。