上电复位

在单片机应用中经常需要在掉电时(包括人为的关机和偶然的外部电源故障),对运行的数据进行保存。目前,常用的方法是单独给单片机增加一个较大的电容(一般为2000 μf以上,也有用法拉级的),外部掉电后,靠大电容存储的电量缓慢放电,提供单片机向eeprom存储数据所需要的时间。所选的电容小,提供的时间短,存储数据不可靠,所选电容大提供时间长,存储数据可靠。但是随之而来的问题是,掉电后电容放电过程中,单片机的供电电压在缓慢下降,当下将到某个值但还没有降到复位门限电压之前,如果此时再次开机,则单片机不能正常启动,导致单片机重复上电后工作混乱。

下面具体分析这一过程并给出解决的办法。

我们先了解一下AVR的上电复位特点。上表是AVR数据手册提供的上电复位参数。

AVR复位特征


从上表中可知,上电复位的典型门限电压是1.4V和1.3V,即在单片机上电时,其电源电压要低于此值,才能使单片机上电复位。单片机的正常工作电源电压范围是2.7~5.5V。当电源电压低于2.7V时,单片机已经停止工作,如果此时电压高于1.3V,并且再次上电,则单片机不能正常复位,导致工作混乱。一些场合的停电可能是瞬间的,包括人为断电可能都是瞬间的,可能几秒钟之内又再次上电,而此时单片机电容的电压恰好处于复位电压以上和正常工作电压以下,就会出现上面的现象。这是本人在实际应用当中所遇到的情况。

由此可见,虽然解决了数据保护问题,却又带来了新的麻烦。所以在解决单片机掉电数据保护时,应该注意的是既要保证充足的时间用于数据存储,又要尽快放电,保证正常重新上电。


上图是本文所用的电路,图中交流电经过CON2输入,整流滤波后到达三端稳压块7806(注意在此用7806而不是7805),7806的输出一路经dl送到单片机(cpu_v=5.3V),单独给单片机供电,单片机耗电通常小于5毫安,由于使用C4(2200μf)电容,该路电源的放电时间较长。另外一路电源经过d2送到电路负载中(VCC=5.3V),通常此路电源的电流较大,超过几十毫安。

这样,在断电后,Vcc由于放电电流大而且滤波电容小,很快放电,通常在几毫秒以内。而另外一路cpu_v,由于滤波电容大而且放电电流小,所以放电很慢,t》2200μf×10-6×5V/5ma×10-3=2.2s;Vcc经过R4、W2分压接到单片机比较器的输入端ain0,cpu_v经过R6和稳压管(3.3V)接到单片机比较器的ain‘I端。电路正常工作时,调整电位器W2,使得ain0电压大于ain1电压0.2V,当掉电(或断电)发生时,ain0下降快,ainl下降慢,当ain0低于ainl时,比较器翻转。AVR比较器的翻转可以触发中断,在中断里完成eeprom的数据保存。图中Q1及周围的电路的工作作用是:初次上电时,由于电容C1两端电压不能突变,所以三极管的b、e结电压为OV,处于截止状态,截止的时间取决于Cl和R2的时间常数,本电路中参数可以保证截止时间超过10ms,在此时间之内CPU已经进入正常工作状态,在程序中将OUT端置“1”电平,继续使三极管截止。当断电发生时,先存储数据到eep-rom,然后out端置“0”电平,三极管饱和导通,立刻给cpu_v电源放电,R3是限流电阻。这样放电时间取决于R3和C4,


出处:21ic

围观 125

MCU整体工作流程可总结如下:

上电——>主时钟起振——>启动代码——>用户程序(main函数)。

对于我们应用开发来说,大部分工作重点是在应用程序编写这块。特别是高级MCU的出现,如ARM系列的STM32、LPC等32位MCU,以及芯片原厂的完善底层代码,启动代码已经固化在芯片内部flash(称为BootLoader),或者已经提供完整的汇编启动源码。因此,启动过程这块,我们比较陌生,但基本的原理还需了解,不排除面试或者使用到实时系统(RTOS)时需要修改启动汇编代码。

MCU上电(复位)时,从固定的地址启动,一般是地址0x00000000,如ARM7;个别特殊的如STM32默认启动地址为0x8000000(flash区启动)。启动过程主要完成两部分工作,一个是硬件执行环境,如中断向量表、寄存器、看门狗等,另一个是软件环境,如C库环境、ZI(未初始化的内存变量)等。

一、硬件环境工作

1.初始时钟
初始化内核时钟,主时钟,各个外设的时钟。

2.关闭看门狗
看门狗是用来监控应用程序的异常跑飞而复位CPU,在初始化阶段,由于没有“喂狗”这一动作,有可能导致CPU不断复位,因此,首先会关闭看门狗,初始化完,再开启。

3.建立中断向量表
中断向量表,中断源的识别标志,可用来形成相应的中断服务程序的入口地址,或者中断服务程序入口地址的偏移量和段基值。CPU利用中断向量表转入中断服务程序处理相关事务。

4.初始化堆栈寄存器
堆栈的作用一个就是保存现场(上下文),如函数调用或者中断发送时,将当前执行地址压栈,调用完成再返回此处执行程序。另一个作用就是保存参数,如临时变量。因此,在启动阶段需初始化堆栈寄存器、堆栈的大小、起始地址等。

5.内存初始化
选择内部或者外部RAM。

二、软件环境工作

1.把RO,RW从它们的加载域复制到它们的运行域中去。

2.初始化(清零)ZI域。

3.初始化堆栈指针

4.初始化C库环境
包括C库所需的内存空间、程序执行所需资源、C库初始化。

三、CortexM3启动

CortexM3有3种启动方式
1、BOOT1=1BOOT0=1,中断向量表定位于SRAM区,即起始地址为0x2000000,同时复位后PC指针位于0x2000000处。
2、BOOT1=xBOOT0=0,中断向量表定位于FLASH区,即起始地址为0x8000000,同时复位后PC指针位于0x8000000处。
3、BOOT1=0BOOT0=1,中断向量表定位于内置Bootloader区,此时可通过串口下载程序的二进制文件到flash区。

而Cortex-M3内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在Cortex-M3内核复位后,会自动从起始地址的下一个32位空间取出复位中断入口向量,跳转执行复位中断服务程序。对比ARM7/ARM9内核,Cortex-M3内核则是固定了中断向量表的位置而起始地址是可变化的。即是对于flash启动来说(正常工作也是flash启动),0x8000000地址存放的是栈顶地址__initial_sp,0x8000004地址存放的是复位中断向量Reset_Handler入口地址(STM32使用32位总线,存储空间为4字节对齐);在编写多段程序时,偏移地址空间需注意,如编写一个BootLoader,从BootLoader到应用程序段的相互跳转。

参考
[1]
http://blog.csdn.net/whiteshark1991/article/details/6635296

版权声明:本文为CSDN博主「acuity_」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_20553613/article/details/79568441

围观 182

工程师们在调试各式各样的板子时,常会出现开机出现错误,系统无法正常打开,接下来我们将列举电路板上电时可能引发的一些常见系统问题,并说明了保证电路板正确初始化的基本原则。

许多IC 都包含POR电路,上电复位,即Power-on Reset),其作用是保证板子上电后,模拟和数字模块初始化至已知状态。

POR三步走:电源电压达到阈值电压——POR电路就会释放内部复位信号——状态机开始初始化器件。 

在初始化完成之前,器件忽略外部信号,包括传输的数据。唯一例外是复位引脚,它会利用POR信号内部选通。

1.1 POR电路长什么样? 

先通俗的科普一个概念,窗口比较器:常用两个比较器组成(双比较器),它有两个阈值电压VT2(高阈值电压)及VT1(低阈值电压),若VT1≤VA≤VT2,Vout输出高电平;若VA<VT1,VA>VT2,则Vout输出低电平。

图 1  双比较器

 
POR电路可以表示为窗口比较器,也就是一旦工作电压落在高低阈值之间,电路就自动复位。如图2所示。

图2  简化的POR电路

1.2 POR怎么运作? 

比较器窗口通常由数字电源电平定义。数字模块控制模拟模块,数字模块全面工作所需的电压与模拟模块工作所需的最小电压相似。 

较高的VT2阈值对模拟模块会更好,若过于接近推荐最小电源电压,当电压略微降低时,可能会意外触发复位。 

如果器件包括独立的模拟电源和数字电源,则避免故障的一种策略是增加一个POR电路,使两个模块保持复位状态,直至电源电压高到足以确保电路正常工作。
 
1.3 POR怎么对付短暂断电? 

POR 电路有时会集成一个掉电检测器(BOD),用于防止电路在电压非常短暂地意外降低时发生复位。实际上,掉电电路给POR模块所定义的阈值电压增加了迟滞,通常为300mV左右。BOD保证,当电源电压降至VT2以下时,POR不会产生复位脉冲,除非电源电压降至另一阈值VBOD(VT2-300mv)以下,如图3所示。

图 3  掉电检测 

掉电阈值电平足以保证数字电路保留信息,但不足以保证其正常工作。这样,如果电源电平只是非常短暂地降低的话,控制器可以在电源降至某一电平以下时中止活动,使整个器件都免于重新初始化。 

1.4 正确上电要掌握的三种情况 

一、 单调性电源有震荡时 

实际的POR电路比图2所示的简化版本要复杂得多, POR电路需要一个启动模块来产生启动脉冲,这种情况下必须使用单调性电源(单调上升或下降而没有震荡的电源)。因为若使用非单调性电源,当偏差接近任何阈值电平时,非单调性斜坡可能会引起问题。 较高的阈值偏差会引起同样的非单调性序列对某一个元件有效,而对其他元件无效,如图4所示。

图4  非单调性电源斜坡 

图 5  单调性电源斜坡

 
解决方法:使用单调性电源,避免斜坡引起问题。 

二、 系统无法启动?可能是残压 

某些时候,即使断开电源(禁用LDO),储能电容也会保留一定的残余电压,POR将无法正确复位,器件将无法正确初始化。如图6所示。

图6  残压 

解决方法:此电压应尽可能小,以便保证残压能降至VT1 以下。  

三、 上电时序该如何安排? 

某些数据手册给出了应当应用于具有一个以上电源引脚的器件的推荐供电“时序”。遵守这个序列是很重要的。例如,想想一个具有两个独立电源的器件。

图 7  推荐上电时序 

解决方法:推荐供电序列要求数字电源先于模拟电源供电(这是常规,因为数字模块控制模拟模块,所以必须首先为数字模块供电),该模块必须首先初始化。哪个电源首先开始上升不重要,但数字电源必须先于模拟电源跨过阈值,如图7所示。如果电源之间的延迟为100 μs左右,则影响应当很小,器件应能正确初始化。

四、 其他小结 

由于内部三极管寄生效应,数百ms 的慢速电源斜坡可能会引起问题。POR 电路要在各种压摆率下进行评估,以保证其在正常电源条件下能正确工作。数据手册会说明是否需要快速电源斜坡(100 μs或更短)。 
  
例如,对于用细电缆连接电源的电路板,不良的接地连接会具有高阻抗,它可能会在上电期间产生毛刺。另外,在某些电磁环境(EME)下,MOS晶体管的寄生栅极电容可能会充电,导致晶体管不能正常工作,除非让该电容放电。这可能引起POR初始化失败。 
  
漂移和容差也需要考虑。某些情况下,电容等分立元件具有高容差(高达40%)和高漂移(随温度、电压和时间的漂移)。此外,阈值电压具有负温度系数。例如,VT1 在室温下为0.8V,在-40°C下为0.9 V,在+105°C 为0.7V。

文章来源:百度文库

围观 1006

许多IC 都包含上电复位(POR)电路,其作用是保证在施加电源后,模拟和数字模块初始化至已知状态。基本POR功能会产生一个内部复位脉冲以避免"竞争"现象,并使器件保持静态,直至电源电压达到一个能保证正常工作的阈值。注意,此阈值电压不同于数据手册中给出的最小电源电压。一旦电源电压达到阈值电压,POR电路就会释放内部复位信号,状态机开始初始化器件。在初始化完成之前,器件应当忽略外部信号,包括传输的数据。唯一例外是复位引脚(如有),它会利用POR信号内部选通。

本文讨论了电路板上电时可能引发系统问题的一些常见问题,并说明了保证电路板正确初始化的基本原则。

POR电路可以表示为窗口比较器,如图1 所示。比较器电平VT2在电路设计期间定义,取决于器件的工作电压和制程尺寸。

图1.简化的POR电路

POR策略

比较器窗口通常由数字电源电平定义。数字模块控制模拟模块,数字模块全面工作所需的电压与模拟模块工作所需的最小电压相似,如图2所示。

图2.POR阈值电压

较高的VT2阈值对模拟模块会更好,但若过于接近推荐最小电源电压,当电压略微降低时,可能会意外触发复位。如果器件包括独立的模拟电源和数字电源,则避免故障的一种策略是增加一个POR电路,使两个模块保持复位状态,直至电源电压高到足以确保电路正常工作。例如,在一种3V IC工艺中,VT1 ≈ 0.8 V,VT2 ≈ 1.6 V。

这些电压会随着制程以及其他设计偏移而变化,但它们是合理的近似值。阈值容差可以是20%或更大,某些旧式设计的容差高达40%。高容差与功耗相关。POR必须一直使能,因此精度与功耗之间始终存在的取舍关系很重要;较高的精度会提高电路在待机模式下的功耗,而对功能性并无实际意义。

掉电检测器

POR 电路有时会集成一个掉电检测器(BOD),用于防止电路在电压非常短暂地意外降低时发生复位,从而避免故障。实际上,掉电电路给POR模块所定义的阈值电压增加了迟滞,通常为300mV左右。BOD保证,当电源电压降至VT2以下时,POR不会产生复位脉冲,除非电源电压降至另一阈值VBOD以下,如图3 所示。

图3.掉电检测器

掉电阈值电平足以保证数字电路保留信息,但不足以保证其正常工作。这样,控制器可以在电源降至某一电平以下时中止活动而不会让整个器件都重新初始化,如果电源电平只是非常短暂地降低的话。

器件正确上电

实际的POR电路比图1 所示的简化版本要复杂得多,例如用MOS晶体管代替电阻。因此,必须考虑寄生模型。另外,POR电路需要一个启动模块来产生启动脉冲,这在某些情况下可能会失效。其他重要考虑在以下内容中说明。

必须使用单调性电源,因为若使用非单调性电源,当偏差接近任何阈值电平时,非单调性斜坡可能会引起问题。较高的阈值偏差会引起同样的非单调性序列对某一个元件有效,而对其他元件无效,如图4 所示。

图4.非单调性电源斜坡

某些时候,即使断开电源(禁用LDO),储能电容也会保留一定的残余电压,如图5 所示。此电压应尽可能小,以便保证电源能降至VT1 以下,否则POR将无法正确复位,器件将无法正确初始化。

图5.残余电压

某些数据手册给出了应当应用于具有一个以上电源引脚的器件的推荐供电序列。遵守这个序列是很重要的。例如,想想一个具有两个独立电源的器件。推荐供电序列要求数字电源先于模拟电源供电(这是常规,因为数字模块控制模拟模块,所以必须首先为数字模块供电),该模块必须首先初始化。哪个电源首先开始上升不重要,但数字电源必须先于模拟电源跨过阈值,如图6 所示。如果电源之间的延迟为100 μs左右,则影响应当很小,器件应能正确初始化。

图6.推荐供电序列

由于内部三极管寄生效应,数百ms 的慢速电源斜坡可能会引起问题。POR 电路要在各种压摆率下进行评估,以保证其在正常电源条件下能正确工作。数据手册会说明是否需要快速电源斜坡(100 μs或更短)。

例如,对于用细电缆连接电源的电路板,不良的接地连接会具有高阻抗,它可能会在上电期间产生毛刺。另外,在某些电磁环境(EME)下,MOS晶体管的寄生栅极电容可能会充电,导致晶体管不能正常工作,除非让该电容放电。这可能引起POR初始化失败。

漂移和容差也需要考虑。某些情况下,电容等分立元件具有高容差(高达40%)和高漂移(随温度、电压和时间的漂移)。此外,阈值电压具有负温度系数。例如,VT1 在室温下为0.8V,在-40°C下为0.9 V,在+105°C 为0.7V。

电源常常被忽视,但其最终电压精度和过渡行为均很重要。

本文摘自模拟对话《IC 上电和关断》。

围观 429
订阅 RSS - 上电复位