STM32复位电路的设计与实现

在此之前我是个只会抄写原理图的工程师,每当遇到一个问题时,确需要解决很久,最根本的原因在于不明白其中的原理,这次补充一下单片机复位电路设计

1. 为什么要设计复位电路?

在做一件事情之前需要明白为什么要这么做,我们为什么要设计复位电路呢?一下几点原因是我总结出来的。

  • 当你的电脑出现卡死等问题的时候,大部分人会直接重启(攻城狮除外),目前市面上很多电子产品都会用复位按键,所以一个成熟的产品是大概率需要复位的
  • 在产品调试阶段,尤其在调试软件的时候需要经常复位软件, 有些工程师也会采用软件复位, 不过软件复位没有硬件复位来的快捷。
  • 以上两个理由足以说明为什么要复位电路了。

    2. 复位时是具体做了哪些工作?

    主要做的就是初始化每个寄存器,包括最重要的 PC 指针,不包括 RAM,然后单片机从复位地址开始执行程序。(欢迎补充)

    3. 复位的前提需要什么?

    3.1 复位信号

    每种方式对应一种复位信号,比如硬件复位需要低电平,软件复位需要设置寄存器,看门狗复位需要配置寄存器,下面我们着重讲硬件复位,由STM32的数据手册可知,复位管脚低电平电压需要小于0.8V,输入脉冲时间为100ns。所以只需要在NRST管脚给小于0.8V的电压,持续时间为100ns就可以实现复位了。

    3.2 CPU正常工作

    为什么CPU需要正常工作?因为复位操作需要设计PC寄存器, 这涉及到软件层面, 故所以需要CPU能正常功能才能进行复位

    3.3 晶振正常工作

    为什么晶振需要正常工作?由3.2可知CPU需要正常功能, 那么CPU是靠什么正常工作的呢?显而易见CPU是靠晶振提供时钟频率的,所以晶振需要正常工作

    3.4 电源正常工作

    试想一下,如果电源不稳定,电压波动范围很大, 是不是会影响CPU的运行?的确是这样子的,电源一定要稳定。

    3.5 复位信号是不是只要满足低电平时间大于100ns就可以呢?

    100ns时间是很短的,很容易达到, 但是有没有试想一下如果只给100nS,那么此时是由复位信号了, 但是电源还没到VCC,晶振还没起振? 这一定存在的,因为上电时,Vcc 的上升时间约为 10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为 10MHz,起振时间为 1ms;晶振频率为 1MHz,起振时间则为 10ms。目前STM32单片机大部分采用8M高速晶振,那么主要问题出在电源的上升时间,为了保证系统的稳定性, 这里我们去2倍吧,20ms的低电平时间。

    4. 怎么设计复位电路?

    目前市面上的复位电路大部分采用RC复位,这种方式成本低廉,稳定性好,被用于大部分的设计中。

    4.1 RC充电原理

    4.1.1 什么是电容充电?

    电荷在电容器极板上聚集的过程叫做充电过程,这个过程不是瞬间完成的,而是需要一段时间,时间取决于电路的组成元件。

    4.1.2 基本RC充电电路


    如图1所示,开关闭合的瞬间,电子在电源的作用下从位于电容顶部的极板沿电路移动并聚集到位于底部的极板上,导致在顶部极板聚集了正电荷,在底部极板聚集了负电荷。
    开始时,电子的转移非常迅速,随后由于两个极板间产生的电压逐渐接近于所加的电源电压,移动速度减慢。最终,当电容两个极板间的电压达到所加的电源电压时,电子移动过程停止,这时候,极板上的净电荷是:

    电荷在极板上聚集的过程叫做瞬态过程 —— 电压或者电流从一个稳态到另一个稳态的过程。电压-时间变化过程曲线如图2所示:

    注意:vc 和 Vc 是有区别的。vc是变量,Vc是常量。

    从图2中可以看出, t=0s时,电容器两端电压是 0V;一开始,电荷聚集的速度很快,导致电压急剧增加。随着时间的推移,电荷聚集的速度减慢,导致电压变化的速率也减缓,即电压继续增加,但速率变慢。最终,由于极板间电压接近外加电压,充电速率极低,直到极板间电压等于外加电压 —— 瞬态过程结束。

    可以用数学中的指数函数来描述上述过程,图2的过程曲线可以用

    式中:

  • vc用小写斜体来表示,因为它是随时间变化的,不是常数;
  • 指数写为时间(t)除以常数涛,涛称作时间常数,定义为:
    涛=RC (S)
  • t=0S 时, vc=0;
  • t=涛S 时, vc=0.632E;
  • t=2涛S 时, vc=0.865E;
  • t=3涛S 时, vc=0.993E;
  • 可以得出:在直流电源作用的电路中,电容器两端的电压在经过5个时间常数后基本等于外部电压,即充电过程基本结束。
    或者:一个电容的瞬态或充电过程在经历5个时间常数后便基本结束。

    电流-时间变化过程如图3所示:

    下图为涛=1,E=1 的充电(上升曲线)和放电(下降曲线)的电压时序图

    4.1.3 关于时间常数涛

    时间常数涛不可能为0,因为在容性电路中总会存在一定的电阻。在有些情况下,涛的值可能很小,但是无论多小,5倍涛的值一定存在,不可能为0。因此可以得出:电容两端的电压不能瞬间改变。

    更进一步的说,电容的大小反映了电容电压变化的程度。电容越大,时间常数越大,电容两端的电压达到所加电压的时间就会越长。这在避雷针和浪涌抑制器的设计上非常有帮助,避雷针和浪涌抑制器是用来保护电路以免电路受到不可预知的过电压的损害。

    4.2 STM32单片机复位电路设计

    4.2.1 复位原理

    我们可以根据上述的RC充电原理,采用一个电阻和一个电容串联,中间段连接至STM32的复位管脚。为了保证复位的时间很短,由上述曲线可知,当在一个时间常数时,电压为电源电压的0.632倍,若VCC=3.3V,那么一个时间常数时电压为:3.3-3.30.632=1.21V >0.8V 不满足我们的需求, 2个时间常数的时候电压为3.3(1-0.86)=0.462 < 0.8V. 满足需求,时间为100ms,2RC=20ms, RC=10mS, 可选择R=10K,C=10uF。

    4.2.2 原理图设计

    按照我们上面说的理论,其实有两种方式,如下图所示,那么哪种才是我们想要的呢?下图两者的区别在于电容的电阻的位置不同, 由于电容两端的电压不能突变,当刚上电时,A电路为低电平,此时单片机复位,直到保持到1个时间常数后,NRST为高电平,而B电路,一上电为高电平,1个时间常数后NRST管脚为低电平, 并且一直保持低电平, 这样会导致MCU一直复位,所以正确的电路应该A电路,而B电路适合用于高电平复位的MCU。

    上图为上电自动复位电路, 如果需要加手动复位的话也和简单,只需要在AB电路的电容两端并联一个按键,当按键按下时,A图中的NRST为低电平,MCU复位,B电路为高电平。

    参考资料

  • lRC电路的瞬态响应-充电过程.
  • 单片机在复位的时候,都进行了哪些操作?如何进行复位电路的设计?.
  • 物联沃分享整理
    物联沃-IOTWORD物联网 » STM32复位电路的设计与实现

    发表评论