在嵌入式系统设计中,复位电路作为与电源供应、晶振电路共同构建单片机最小系统的关键组成部分,其重要性往往被忽视。尽管复位电路的结构相对简单,但其功能对整个系统的稳定性和可靠性有着不可忽视的影响,许多产品在研发过程中因忽视复位电路的设计而导致最终失败。
复位电路的核心功能在于将单片机置于初始状态,确保程序能够从头开始执行。复位电路设计的优劣,直接关系到整个系统是否能够稳定可靠地运行。
复位电路的作用对象是单片机的RESET引脚。以89C51系列单片机为例,当系统正常运行时,如果RESET引脚出现高电平并持续两个机器周期以上,单片机将响应复位指令。
单片机的复位方式主要分为低电平复位和高电平复位两种,具体采用哪种方式由生产厂家决定。通常可以通过查阅数据手册来判断,如果复位引脚的RESET字母上方有上划线,则表示该单片机采用低电平复位;反之,则采用高电平复位。
单片机的复位类型主要包括三种:上电复位、手动复位以及程序自动复位。
上电复位是指单片机每次上电时都会向RESET引脚发送复位信号,使单片机从一个固定的初始状态开始工作;手动复位可以通过一个复位按钮使死机或异常运行的程序重新启动;程序自动复位则是在程序在一定时间内失去响应时,通过内置看门狗模块或外部看门狗模块向单片机发送复位指令。
下面将详细说明这三种复位电路的工作原理。
图1 上电复位电路
图1展示了一种常见的低电平上电复位电路。我们来分析其工作过程:上电前,电容C1两端的电压为零。上电后,电流从5V电源经电阻R1流向电容C1再接地。由于电容两端的电压不能瞬间变化,因此上电瞬间RESET引脚上的电压也为零,并维持一小段时间的低电平,这段时间足以触发单片机复位;随着时间推移,电容C1两端的电压逐渐上升至5V高电平,复位过程完成。
然而,电阻和电容的取值并非可以随意选择。如果取值过小,电容C1会迅速充满电,导致低电平的持续时间不足,例如对于51单片机,其复位所需的低电平持续时间至少为两个机器周期,此时复位可能会失效。
我们得出一个结论:t≈R1*C1,这个时间常数必须大于数据手册规定的持续时间即可。以我们的例子为例,计算得出t=1ms,远远大于数据手册要求的持续时间。
图2 手动按键复位电路
手动按键复位电路在GND和RESET引脚之间连接一个按钮。当人为按下按钮时,RESET引脚会被GND拉低。由于人的动作速度有限,按钮保持接通的时间通常能够达到数十毫秒,因此完全满足复位的时间要求。
程序自动复位也分为两种类型:一种是单片机内置看门狗,通过对看门狗寄存器进行初始化来启动看门狗,并在主循环程序中不断刷新看门狗,即所谓的“喂狗”。每个单片机都有一个专用的看门狗寄存器,其启动方法和刷新方式因单片机型号而异。内置看门狗也称为窗口看门狗,其时钟源来自系统时钟,只能解决由软件程序引起的系统跑飞问题。一旦外部晶振停止工作,内置看门狗也无法计时,系统将无法运行。
另一种是外部看门狗,它可以解决内置看门狗无法解决的问题,因为外部看门狗拥有独立的时钟源,一旦单片机因各种原因停止“喂狗”,外部看门狗将自动复位单片机。
图3 基于某型号看门狗芯片的复位电路
除了上述几种常见的复位电路,还有许多其他类型的复位电路,例如低电压复位电路(LVR)。某些单片机内置了低电压复位模块,但当内置模块的复位电压与实际应用需求不符时,就需要采用外部低电压复位电路。如图所示,在供电电压正常时,RESET引脚为高电平;当供电电压下降到低于稳压二极管的稳压电压(Vz+0.7V)时,三极管导通,RESET引脚被拉低,从而触发单片机复位。
图4 分立元件搭建的低电压复位电路
低电压复位电路还可以采用如图5所示的集成电路方案,当供电电压低于2.9V时,电路将触发复位。
图5
目前,市场上还有许多将外部看门狗电路和低电压复位电路集成在一起的方案,例如SP706等。最后需要强调的是,RESET引脚的走线应尽可能短,复位电路应尽可能靠近MCU,避免因MCU出线多或周边器件过多而将复位电路放置在远离MCU的位置,这会大大增加系统的稳定性风险。