复位电路的作用是什么
扫描二维码
随时随地手机看文章
什么是复位
单片机复位电路的作用是:使单片机恢复到起始状态,让单片机的程序从头开始执行,运行时钟处于稳定状态、各种寄存器、端口处于初始化状态等等。目的是让单片机能够稳定、正确的从头开始执行程序。
为什么要加复位?
数字电路中寄存器和 RAM 在上电之后默认的状态和数据是不确定的,如果有复位,我们可以把寄存器复位到初始状态,RAM 的数据可以通过复位来触发 RAM 初始化
程序逻辑如果进入了错误的状态,通过复位可以把所有的逻辑状态恢复到初始值,如果没有复位,那么逻辑可能永远运行在错误的状态。(一些简单的IC芯片没有看门狗电路,就需要外部复位)
好的,通过上面两段话,你了解了复位电路的作用以及为什么要加复位电路
正常单片机和IC芯片复位都是有一个Reset引脚,给复位引脚通一定时间的高/低电平就可以实现复位
典型的51单片机当RST复位脚持续两个机器周期以上高电平就将复位
像我们常用的STM32F1系列 ,查阅手册得知复位引脚需要持续20us以上的低电平,就可完成复位
复位电路的简单与复杂
复位电路,所有的数字电路系统中都存在,但是以笔者二十年经验看,不管是芯片原厂的工程师,还是电路系统厂家的工程师,鲜有人理解电路系统的复位作用,能真正理解,并恰当设计复位电路的,难得一见。
很多人,觉得这个复位电路的作用太明确了,复位电路不就是对芯片复位吗,哪有什么复杂的呢?
作用1:也是最简单的一个,就是复位系统上的芯片。
对芯片来说,复位的需求很简单,就是几ns或者几ms的低电平即可,如下图,某芯片的复位要求,上电完成后32个clock,这是多么简单的要求,一个RC复位即可。甚至很多芯片无需复位要求,内部都有POR电路,无须外部复位,就可以正常工作。
所以,很多人在设计复位电路时,就简单的在系统上电时,输出一个复位信号,将整个系统里面有复位要求的芯片复位一遍,就算完成了。也许这样设计也没有什么问题,但是在一些复杂。
作用2,复位可以用于修复系统,实现故障自愈。
我们在系统遇到问题时,经常会按复位按钮,来重启系统,从而达到修复系统的目的。
一些偶发性的故障,如软件出现异常挂死或者电源受到异常干扰,会导致系统进入故障状态,这时,通过复位就可以消除,这类复位有很多种。
1、看门狗复位
通过硬件心跳信号,或消息心跳信号,来监控某个系统,当系统挂死时,对其进行复位;
2、低电压复位
当电压异常低落时,对系统进行复位,很多复位芯片都具有电压监控功能,也有部分MCU有LVR功能,可以配置电压跌落到多少时,输出复位信号。
下面是某款MCU的POR和LVD功能描述,用于实现LVR。
3、时钟异常复位
通过时间检测芯片,或者FPGA来对关键时钟进行检测,当出现异常时,对系统进行复位;
4、软件复位模块
通过软件对某些通信通道,或者功能模块进行故障检测,当检测到通信通道异常,或者模块异常时,对系统进行复位。如IIC通道读写检测,存储空间某些算法的读写检测。
熟练理解上述复位功能,并实施相应的复位电路的设计,会让你的电子系统更加稳定可靠。
作用3,也是系统中复位电路的真正作用,就是在整个系统(注意是系统,而不是芯片)处于不稳定状态时,通过复位使整个系统处于一种可控状态。
这里以几个具体产品来说明复位的这个真正作用。
一个由外部插拔电源适配器供电的产品,内部有法拉电容作为掉电保护电源,当插入外部电源时,开机,当拔掉外部电源时,关机。电路设计,电源由PMIC给出,所有电源输出后,PMIC又输出复位信号,给整个系统复位。
这个电路系统复位,看似没有问题,但是实际上,就是没有考虑到电源入口插入时电源接触上造成电源抖动的这种不可控状态,所以会导致严重的问题。
问题分析如下:
当用户插入电源时,由于电源抖动,时而连接,时而断开,造成PMIC输出电源跌落,CPU挂死,但这个电源跌落并不会导致复位输出为低,所以CPU挂死无法解除。
用户保持一段时间后,看到无法启动,拔出适配器,法拉电容被充电,可以维持PMIC输出,CPU继续保持挂死状态;
用户拔出1~2秒后,又插入电源适配器,供电又被维持,不会触发系统复位,CPU继续挂死;
就这样,一旦出现问题,用户反复这样插拔,系统始终处于挂死状态无法解除。其根本原因,就是系统复位没有考虑到插拔电源这种异常状态,并使系统处于复位状态。
其实这种类似的产品非常常见,我们的手机就是这种情况,不过不是法拉电容,而是电池,当手机没有电,插拔USB充电时,以前的手机,也许就遇见过这种故障。当然现在可能采用多种方式规避了,比如充电时电池电量低于10%,都控制不能开机。
不过在工业控制类产品,没有使用锂电池,而是大量使用法拉电容(用于掉电时保持某些配置),基本都是这种供电架构,而且要求插电必须开机,这样复位电路就是有问题的。大家可以想想怎么去修改这个复位设计。
无独有偶,在车载类产品,方案如下:
MCU采用RC复位,MCU输出复位给SOC,也有法拉电容,由于MCU电源在启动时,出现振荡,导致MCU挂死,系统无法启动,更严重的是由于启动时,没有对MCU复位,导致MCU内部程序损耗,产品需要返厂才能维修。
这类产品,之所以出现这种故障,都是因为对系统复位电路的设计,缺乏深入的理解而导致的,这些设计即存在芯片原厂的demo设计,也存在系统厂商的设计中。