这篇文章,主要讲的是跟MCU工作电压有关的复位,
其他的一些软件复位,硬件错误复位等等就不在本次的讨论范围内。
我们先来看下,一张MCU的复位逻辑图,这里就借用ATMEL的一颗相当经典的MCU——ATMEGA8系列的复位逻辑图来展示。
可以看到,图中跟工作电压有关的复位,就是上电复位(POR),掉电复位(BOR),还有就是通过外部复位管脚触发的外部复位(External RESET)
上电复位,就是电压从0开始超过或某个阈值电压的时候,芯片就会触发一个固定或者可编程的延迟后,让MCU工作。
这个图就是当外部复位管脚不接任何东西的时候,MCU复位的时序图,一般的MCU复位时序基本都像下图这样的。
这里用STM32的数据举个例子,在STM32F103中,这个复位延迟是固定,这个值为1-4.5ms之间不等。
而STM32F103的POR典型电压为1.92V左右。
也就是说,上电的时候,电压从0爬升到最高1.92V的时候,芯片就产生一个最长4.5ms的复位信号。
我们再来看一个图,
这个图是STM32F103的VDD和VDDA的工作电压。
当你的应用中要使用到ADC的时候,
VDDA要到2.4V的时候,ADC才会工作,
如果你的电压爬升比较慢,从2V到2.4V的时间超过了4.5ms,这个时候就需要使用到外置的电路来调节延长这个时间。
RC复位电路是最常见的外部延迟电路
在接了RC之后,这时候复位时序就变成了这个样子
系统会等待复位管脚上的电压超过一定的电压,在STM32中,这个值是2V
然后系统才会进行复位延迟等待,最后MCU开始工作,从电压爬升到上电复位阈值开始,到复位管脚电压达到高电平阈值的时间差,就是RC复位电路的延迟。
如果你的项目对上电时间没什么要求,只要求稳定可靠就行,
RC复位就是一个最低成本的增加复位延迟的方法。
除了上电复位,还有一个就是掉电复位,或者是说,在VCC电压波动的时候的复位,下图就是电压波动的时候的复位时序。
在应对掉电复位的时候,RC复位电路可能会没有办法完成RC延迟的作用,因为放电可能会过于缓慢,复位管脚上的电压没办法迅速跟上VCC的电压,例如电压跌落测试,VCC上电压跌落和爬升速率会非常的快,以至于RC根本就不起作用,MCU有可能就会因为复位不够充分导致异常。
这个时候通用的做法就要引入二极管,做一个RCD电路。
这个二极管可以快速给电容放电,尽量使复位管脚的电压跟上VCC的电压。
是的,这里用的是尽量这个词,因为二极管导通的前提是两端的电压差超过你的二极管压降,即使你是用的是肖特基二极管,复位管脚和VCC的电压差也至少会有0.2-0.3V,这样的也会减少实际减少RC延迟的功效,你又要被迫增大RC值。
RC复位其实还有一个问题,RC电路并没有增大MCU实际复位延迟。
在复位管脚来到2V之后,还要继续爬升到2.4V,ADC才能工作,如果你的电压爬升率实在太过于缓慢,你就只能增加RC值去拉拉大RC的延迟,如果只是加大电阻不增加电容,上拉电阻的电流过小会导致你的复位管脚特别容易被干扰,而如果增大电容,反而让本来就不快的电压爬升率更加苟延残喘了。
所以,当你需要一次性简单快捷的解决上面所说到的复位问题的时候,就是需要加钱上电压检测芯片。
电压检测芯片通常采用的是比较器的方式,精准检测VCC电压。
在需要的时候输出确定的复位延迟,无论是上电还是掉电,只要电压低过阈值,芯片就会拉住MCU复位管脚的电压,让其不能工作,只要超过阈值的时候,才会时MCU充分复位,例如国产圣邦微的SGM80系列。
SOT23的超小封装,多种固定复位电压可选,超过150ms的复位时间,可以让MCU充分复位,如果需要精确复位电压,还有SGM82系列,从2.2到6V,0.1V的1.5%精度的电压步进值,让你复位更加的准确。
如果用复位芯片来解决我上面提到的问题,就可以直接选择一个2.4V,甚至超过2.4V的复位芯片,让VCC电压完全稳定后才进行复位,让MCU可以工作在一个可靠的电压,即使上下电测试也不惧怕哦~