所谓断电影象也便是数据在断电重启之后保持断电前的数值。
MCU的存储器分为两类:RAM和ROM。
两者的最大差异是RAM在断电往后保存在上面的数据会自动消逝,而ROM不会自动消逝,可以永劫光断电保存。

为了实现断电影象,须要把数据写入到ROM,即FLASH中。
不幸的是,FLASH有两个致命的缺陷:
1)擦写次数有限,一样平常仅有10万次的擦写次数,超过擦写次数,FLASH将被破坏。
2) FLASH的存储位只能由1改为0,如果须要将0改为1,则须要将数据擦除,最小擦除的单位为1个page。对付STM32F103为2KB,对付STM32F051为1KB。
通过BACKUP寄存器实现断电影象Cortex系列的处理器还有一种backup寄存器供断电影象数据利用,比如给RTC时钟利用。
该寄存器的数据可以由VBAT的电压来坚持,而一样平常VBAT电压由纽扣电池供电。
比如,我们选择CR1220的电池,其容量为40mAh, VBAT的事情电流低到2uA。
CR1220的电池可以担保backup寄存器的数据在断电之后一年内不丢失。
通过FLASH实现断电影象美中不敷的是,STM32F103仅有84个字节的backup寄存器。
当须要断电影象的数据比较多时,还是须要将其存入到FLASH中。
可以分为两种数据:
1)不会常常改变的数据,比如用户设置的运行参数(比如密码、温控器的温度阈值等)。
对付这种数据,只须要做几分钟的缓存,在数据改变过后几分钟再写入FLASH即可。
纵然数据未存入FLASH,用户重新设置即可。由于发生概率低,也不会有什么问题。
2)改变频率非常高的数据,比如计数器,有一个客户将我们的掌握器用于流水线上的计件。
基本上1s数据加一次,而且哀求绝对准确。
担保任何不能错计任何数据。
对付这种运用,如果还是采取1分钟缓存的方法,10万次的擦写次数大概可以利用66天,不能知足哀求。
而且如果在这1分钟内发生了断电,数据没能写入FLASH,将会导致这段韶光的数据丢失。
当时,由于backup 寄存器数据有限,不得以须要采取FLASH来存储。
技能方案断电延时电路
如上的电路图所示,二极管D1用于电源反接的保护,V+经由R1、R2的分压以及C5的滤波之后送入MCU的A/D口,用于检测电源电压。
补充:有网友留言,把检测电压的电路接到反向保护二极管的负极没有办法检测到掉电,放在正极是否更好?
我们的考虑是,放在D1的正极,当有负电压输入时(比如脉冲群),负电压经由R1,R2会直接到IO口,会形成所谓的潜通路。瞬间几千V的高压,是否会造成R1、R2以及IO口破坏,值得研究。
为了担保可靠,就放在了负极,避免了形成潜通路,同时对高频正脉冲可以通过E1,C1的可靠过滤。
当掉电时,E1开始放电,此时并不能立即检测到掉电,当放电至22V时,MCU认为掉电了,开始实行相应动作。
摧残浪费蹂躏了从23.2V到22V旁边的能量,由于负载电流小,摧残浪费蹂躏这点能量并不导至C1无法取值。以是还是值得的。
小小的细节,却能表示我们设计电路时的寻思熟虑,这得益于我们的团队之前从事汽车电子所形成的可靠性设计的思维。
E1用于储能,用于当电源断电时,给MCU供电,担保存储在RAM中的数据可靠存入FLASH。
采取大电容给掌握器供电,MCU实时检测输入电压。
做了几下的设计改进:
1)MCU的供电和其它负载(比如继电器、WiFI模块等)的供电分开,MCU专门由一起电源供电。
2)让用户采取掌握器所支持的最高事情电压为24V的电源供电。
3)在100us的定时中断时,启动A/D转换并读上次转换数据,如果读到的转换数据所对应的电压低于22V,则解释发生电源断电,立即割断所有输出,以及一些内设模块。从而在100us内就将功耗降到最低。
4) 在主程序中,判断由定时中断置位的断电标志,如果判断有检测到断电,降落主频,
立即将须要断电存储却暂存在RAM保存的数据写入FLASH。
电容容量的打算DC-DC最低输入电压为5.0V旁边。
STM32F103在禁用外设时,其事情电流大概为8mA@16MHz。
算上DC-DC的效率80%,以及DC-DC和LM1117的事情电流,以8/80%+2mA=12mA打算。
FLASH擦除韶光为40ms/page, 写入速率为70us/1bit。
假设须要存入的数据总量为1024Byte即512Word。
由擦写+写入须要花费的韶光为80ms,实际可以在运行过程中先擦写一个page备用,从而可以省去擦写的韶光,在这里,仍以80ms来考虑。
哀求断电之后,电容E1上的电压以12mA 的电流放电,从22V放电至 5V的韶光须要大于80ms。
根据电容流过电容的电流I=Cdu/dt,将电流、电压降、韶光等代入,得到:
C=12mA 80ms /(22-5)=56uF,可选择100uF的电容。
另一种打算方法可以从能量的角度考虑,打算更准确:
电容从22V放电至5V,所开释的能量为1/2C(2222-55),考虑到DC-DC的效率0.8,到5V的能量为:
1/2C4590.8=5V12mAt=60mW80ms。
解得C=26uF。
文中有任何缺点,欢迎留言示正!