本文主要介绍硬件电路设计中的复位,硬件相关的复位主要包括上电复位、手动按键复位、专用芯片复位、看门狗复位等类型。本文就针对这几种复位进行介绍,以便对复位电路的选择和设计有一个全面的了解。
1、手动按键复位
手动按键复位需要人为在控制器的复位输入端RST上加入高电平(或低电平)。一般采用的办法是在RST端和正电源VCC之间接一个按键。当按下按键时,则VCC就会直接加到RST端。由于人的动作再快也会使按键保持接通达数十毫秒,所以,完全能够满足控制器对复位时间的要求。

上述电路可同时支持高低电平复位,焊接R1(10K)、R2(0)、R4(0)时支持低电平复位,焊接R1(0)、R3(0)、R4(10K)时支持高电平复位。
☆ 手动按键复位一定要增加硬件去抖电容!!!
2、上电RC复位
最简单的上电复位在RST复位输入引脚上接一个电容至VCC端,下接一个电阻到地即可。对于CMOS型CPU(复位引脚为CMOS输入),由于在RST端内部有一个下拉电阻(一般datasheet中会注明是否带上下拉电阻),故可将外部电阻去掉,而将外接电容减至1µF(一般芯片内部上下拉电阻都比较大)。
上电复位的工作过程是在VCC加电时,复位电路通过电容给RST端一个短暂的高电平信号,此高电平信号随着VCC对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。当VCC掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序。
为了避免上述现象出现,有以下几种变种类型的上电复位。

二极管的作用:当电源断开以后,能迅速提供放电回路将电容上的电能放掉(低电平复位的情况下,稳态时电容是充满电的,VCC短暂掉电时,电容正极上的电通过二极管(如果没有二极管,则只能通过电阻R释放到负载,这是很缓慢的,因为二极管导通速度很快,且压降固定)释放到负载消耗掉;高电平复位的情况,电容正极的电释放到负载后,通过二极管形成放电回路消耗掉!!!(电阻回路放电较慢));当再次上电时能进入复位。对于瞬时断电,再上电的情况尤其重要。如果断电后,电容电能没放掉,再上电,不能进入复位状态;所以必须加这个二极管,作为断电后的迅速放电措施(设计中必须加二极管!!!)。
并接二极管的优点在于降低复位引脚的对地阻抗,可以显著增强CPU复位电路的抗干扰能力。二级管可以实现快速释放电容电量的功能,满足短时间复位的要求。同时电容Ch还可以避免高频谐波对电路的干扰。
几种电路的具体波形如下:


☆RC复位一定要增加二极管进行短暂掉电保护!!!
3、专用芯片复位
采用专用复位芯片,主要可以大大提高MCU的复位性能,其原理是通过确定的电压值(阈值)启动复位操作,同时排除瞬间干扰的影响,又有防止CPU在电源启动和关闭期间的误操作,保证数据安全。一般的阻容复位稳定性较差,常常有按了复位没反应,要按一段时间才能复位。而且如果使用上电复位时,容易产生复位不成功。电容的温度性比较敏感,在特殊环境中,复位的电平宽度变化十分大,造成芯片不动作,或者在强干扰下误动作。所以要使用复位芯片来设计产品,同时很多复位芯片带有E2PROM、看门狗等。
专用复位芯片的原理是产生一个一定宽度的复位脉冲信号去复位整个电路,使其工作于预设的状态,保证整个电路从一个预先设定好的状态开始后续的工作。
专用芯片复位主要包括几种方式:上电复位、外部复位、低电压检测和复位、看门狗定时器复位。使用带低电压检测和复位的芯片,可以最大程度提高CPU的复位性能,其原理是通过预先设定好确定的电压值(阈值)启动复位操作,同时排除瞬间干扰的影响,又有防止CPU在电源启动和关闭期间的误操作,充分保证数据的安全。因此使用复位芯片来设计产品,目前有很多电压检测、电压复位芯片,主要包括如下一些种类:
低电压检测复位:分为CMOS输出和NMOS开漏输出。
高电平检测复位。
延时复位检测,具备延时复位的功能(保证复位时数据的安全)。
另外还有些复位芯片带有I2C的E2PROM看门狗之类。

专用复位芯片支持多种功能:电源监测、上电复位、手动复位、看门狗复位等。通过三种引脚输出产生复位信号:RESET#、PFO#、WDO#。
使用中要特别注意复位信号的脉宽(一般的CPU对外部复位信号脉宽均有要求)、复位信号的电平、输入引脚的配置(当有功能不用时,对应引脚的处理需注意,有些是需要悬空的,有些是需要上下拉的,详细的一定要参看datasheet)、看门狗输入输出信号的应用。

看门狗的应用主要注意以下几点:
喂狗信号的脉宽。一般芯片对喂狗信号的脉宽有要求,需要大于某一值,这就要求喂狗信号的频率要低于某一值。
看门狗溢出周期。程序需要在看门狗溢出周期内喂狗,如果看门狗溢出周期较长,应尽量避免在中断处理中喂狗。
WDO#信号作为复位信号时脉宽是否满足被复位器件的要求。在看门狗溢出周期内没有喂狗,WDO#会马上有效,如果在短时间内喂狗事件发生,则WDO#立即恢复无效,此时WDO#的脉宽很窄,无法满足大部分器件对复位信号脉宽的要求。在实际应用中,可以将WDO#信号接到MR#引脚(手动复位按钮和WDO#通过或门连接到MR#,只要有一个输入有效即可触发MR#,进而进行复位),即用看门狗溢出事件触发手动复位事件,MR#检测到有效的电平后,进而触发RESET#信号有效,此时输出的RESET#信号脉宽即可满足器件对复位脉宽的要求。
上电启动过程中长时间不喂狗导致系统反复复位。如果系统上电复位完成后CPU从外部FLASH中引导程序等,这个过程时间较长,CPU无法及时喂狗,复位芯片会不断地发出复位信号,可能导致CPU的引导过程无法顺利完成。在实际应用中,可以采用其他器件协助CPU完成启动过程的喂狗工作,等CPU正常工作后再把喂狗工作转交给CPU。
4、双向复位
有的处理器(CPU)的复位管脚是双向(Bidirectional)的,上电时会发出开机复位信号(PowerOn Reset),软件复位(Software Reset)也会发出复位信号,将其它复位信号(Reset)接在一起的外设一起做复位。
其它时间这个复位管脚就变成一个输入,接受外部的手动复位(Manual Reset),或是其它设备来的复位信号。意思就是说,你可以复位別人,别人也可以来复位你。
问题发生在当处理器(CPU)的复位管脚发出复位信号时,可能会将信号拉到地。这样复位芯片(Reset Supervisor)的输出等于直接接地,有可能会烧掉芯片内部线路,所以需要串接一个限流电阻。
如果处理器(CPU)的复位管脚不是双向的(Bidirectional),是可以不用串这个电阻。

5、看门狗复位(WatchDog)
看门狗电路实际上是一个监视定时器,它的定时时间是固定不变的,一旦定时时间到,电路就产生复位信号或中断信号。当程序正常运行时,在小于定时时间间隔内,CPU输出一信号刷新定时器(对看门狗计数器清零(俗称“喂狗”)),定时器处于不断的重新定时过程,因此看门狗电路就不会产生复位信号或中断信号,反之,当程序因出现干扰而“跑飞”时,CPU不能刷新定时器,就会产生复位信号或产生中断信号使CPU复位或中断(俗称“被狗咬”),在中断程序中使其返回到起始程序,恢复正常。系统正常运行时,需要在看门狗允许的时间间隔内对看门狗计数器清零(俗称“喂狗”),不让复位信号产生。如果系统不出问题,程序保证按时“喂狗”,一旦程序跑飞,没有“喂狗”,系统“被咬”复位。
很多CPU内部都有看门狗电路,通过软件写入相应控制命令来启动或关闭看门狗功能。由于是通过软件来写入控制命令,在有干扰的情况下,有可能无法写人正确的控制命令,造成CPU内看门狗电路“失灵”,起不到看门狗的作用,因此很多CPU采用外部硬件看门狗来确保程序因出现干扰而“跑飞”时能正常运行。
在嵌入式系统中,主要可以分为以下几种类型的看门狗:
CPU内部自带的看门狗:此类看门狗一般是将芯片中的定时器用作看门狗,通过程序的初始化,写入初值,设定溢出时间,并启动定时器。程序按时对定时器赋初值(或复位),以免被咬。这种看门狗是可以被禁用的(只要停止这个定时器即可)。大部分CPU都内置看门狗。
优点:可以通过程序改变溢出时间;可以随时禁用
缺点:需要初始化;如果程序在初始化、启动完成前跑飞或在禁用后跑飞,看门狗就无法复位系统,这样看门狗的作用就没有了,系统恢复能力降低。
独立的看门狗芯片:这种看门狗主要有一个用于喂狗的引脚(一般与CPU的GPIO相连)和一个复位引脚(与系统的RESET引脚相连),如果没有在一定时间内改变喂狗引脚的电平,复位引脚就会改变状态复位CPU。此类看门狗一上电就开始工作,无法禁用。现在常用的芯片有:CAT705/CAT706、IMP706等等。
优点:无须配置,上电即用。无法禁用,系统必须按时喂狗,系统恢复能力高。
缺点:无法灵活配置溢出时间,无法禁用,灵活性降低。
软件看门狗:一些重要的程序,必须让它一直跑着;而且还要时时关心它的状态——不能让它出现死锁现象。这种监控软件定时判断目标进程是否运行在当前系统中,如果没有则启动目标进程;判断目标进程是否“无响应”,如果是则终止目标进程;如果目标进程“无响应”的次数超过一定的数量,则重启整个系统。它的目的也是复位,但是它主要是复位进程,实在不行才复位CPU。
以上就是针对上电复位、手动按键复位、专用芯片复位等进行的简单介绍,在实际应用中,受限于系统复杂程度、系统可靠性要求高低、成本是否敏感等等因素,根据实际情况可以有不同的选择。