用电解电容做STM32掉电数据保存功能

[复制链接]
11210|21
手机看帖
扫描二维码
随时随地手机跟帖
秉烛良宵|  楼主 | 2017-11-8 14:20 | 显示全部楼层 |阅读模式
在做的一个项目需要用到外部Flash保存采集的数据,Flash的写次数是有限的,所以先在RAM中存储256个字节(一页)的数据再一次写入Flash中。但是这么做得考虑突然外部掉电的情况发生,有用法拉电容来提供掉电保存数据的方案,可是法拉电容一个不便宜,而且还要一个恒流充电电流(一个三极管可以实现)。看到Flash手册中说明写一页不到1mS,这么短的时间应该没必要用法拉电容,用普通电解电容应该就可以达到目的。外部是12V供电,理论计算一个2200uF电容从12V降到3V,假设输出电流为30mA,则可持续0.66S的时间。器件方面需要使用低压差的3.3V稳压管,且输入电压至少能承受15V以上,我选用的是SPX5205。为了保险起见还是动手做了下实验证明方案是可行的。

实验方案:使用的是STM8L单片机,外设加在一起测量电流30mA左右。编写一个程序,当检测到掉电发生时则立刻保存数据到EEPROM中,写出开机从EEROM中读取数据,对比保存的数据是否是正确的(保存的数据是1,2,3....)。

wx_camera_1510040512580.jpg
这是已经准备使用的电路图方案

20171105_142936.jpg
保存255个字节到EEPROM未能成功,使用了2个470uF电容,单片机板上面已有1117-3.3V,由于有外设用到5V,所以敷铜板上焊的是1117-5V,这两个稳压芯片都不是低压差的,压差至少在1V左右,两个则有2V。STM8L的EEPROM写时间还是比较长的,写一个字节估计要1mS左右。

20171105_143232.jpg
再增加两个470uF的电容还是未能成功

20171105_145136.jpg
把数据改成50字节则可以保存成功,用万用表电流档测量电流为33.3mA

20171105_142925.jpg
即使用2个470uF也可以成功

20171105_144655.jpg
两个470uF电容的电压下降情况

20171105_144951.jpg
4个470uF电容的电压下降情况

从以上实验来看使用电解电容也是可以到达保存数据的目的的。

相关帖子

dirtwillfly| | 2017-11-8 14:29 | 显示全部楼层
感谢分享

使用特权

评论回复
datouyuan| | 2017-11-8 15:57 | 显示全部楼层
我也做过类似的应用。

mcu的电流一般小于5mA,保存一页数据5mS应该够了。mcu单独供电,100uF绰绰有余。

使用特权

评论回复
caoenq| | 2017-11-8 21:05 | 显示全部楼层
骚年,在3.3v出来后,串一只肖特基二极管,效果更好

使用特权

评论回复
秉烛良宵|  楼主 | 2017-11-8 21:18 | 显示全部楼层
caoenq 发表于 2017-11-8 21:05
骚年,在3.3v出来后,串一只肖特基二极管,效果更好

我特地要选用低压差的3.3V稳压,加二极管不是又多了那么点压差吗?2200uF电容是在稳压管前面,不是后面。

使用特权

评论回复
chunyang| | 2017-11-8 22:40 | 显示全部楼层
LDO(低压差串联稳压器)可不能叫什么“稳压管”,稳压管是二极管的一种,也叫“齐纳管”。
仅仅做掉电前的数据保存,储能电容应该接在低压侧,尤其是系统功耗较大时,储能电容的供电仅提供给MCU和存储器,同时需要一个电源监视电路。只有在系统功耗比较低,即除了MCU、存储器外,其它电路的功率足够小,这时储能电容可以接在高压侧和滤波电容合并,但依然需要电源监测电路。
另外,12V输入不是所有LDO可以承受的,需要注意LDO的选型,如果电容容量够,用常规串联稳压电路即可,比如LM317等。低压差在此仅是提高储能利用率而已,效率敏感时应该用开关电源。

使用特权

评论回复
jyzhzn| | 2017-11-9 08:41 | 显示全部楼层
本帖最后由 jyzhzn 于 2017-11-9 08:43 编辑

你这个问题的关键是电容储存的电量被外设消耗

解决办法:

12V电源进来后,先串一个肖特基二极管,后面再接大电容,给MCU和外部Flash供电

5V外设另外设计供电电路


使用特权

评论回复
hcn001| | 2017-11-9 11:08 | 显示全部楼层
为什么不用FRAM来做数据保存呢。这样最多丢几个字节。所有写的数据过一遍fram。比上面的方案靠谱点吧

使用特权

评论回复
秉烛良宵|  楼主 | 2017-11-10 11:23 | 显示全部楼层
hcn001 发表于 2017-11-9 11:08
为什么不用FRAM来做数据保存呢。这样最多丢几个字节。所有写的数据过一遍fram。比上面的方案靠谱点吧 ...

有想过用铁电或EEROM作为缓冲,写满2K再一次性写到FLASH中,EEROM的寿命达不到,铁电也不便宜。

使用特权

评论回复
hcn001| | 2017-11-10 15:25 | 显示全部楼层
FRAM价格在几块钱吧

使用特权

评论回复
caoenq| | 2017-11-12 19:59 | 显示全部楼层
秉烛良宵 发表于 2017-11-8 21:18
我特地要选用低压差的3.3V稳压,加二极管不是又多了那么点压差吗?2200uF电容是在稳压管前面,不是后面。 ...

一般标称工作电压3.3V的片子,电压高于2.4V可以正常工作,而且肖特吉二极管在电流小的时候,压差也很小

使用特权

评论回复
秉烛良宵|  楼主 | 2017-11-14 19:57 | 显示全部楼层
caoenq 发表于 2017-11-12 19:59
一般标称工作电压3.3V的片子,电压高于2.4V可以正常工作,而且肖特吉二极管在电流小的时候,压差也很小 ...

3.3V稳压管后面加二极管没有任何意义的

使用特权

评论回复
ipman| | 2017-11-14 23:31 | 显示全部楼层
我怎么感觉掉电时操作flash是危险动作

使用特权

评论回复
秉烛良宵|  楼主 | 2017-11-14 23:47 | 显示全部楼层
ipman 发表于 2017-11-14 23:31
我怎么感觉掉电时操作flash是危险动作

在掉电情况是尽量不要对单片机的flash进行写操作,可能会造成程序丢失。但是现在很多flash芯片是在电压低于最小工作电压时自动不允许写操作。

使用特权

评论回复
zwmasdf| | 2017-11-15 08:30 | 显示全部楼层
秉烛良宵 发表于 2017-11-10 11:23
有想过用铁电或EEROM作为缓冲,写满2K再一次性写到FLASH中,EEROM的寿命达不到,铁电也不便宜。 ...

通过循环保存的方式可以解决寿命的问题,即空间换时间,N倍的空间换来1/N的时间,可以算一下的。

使用特权

评论回复
jjeemm77| | 2017-11-17 16:30 | 显示全部楼层

使用特权

评论回复
dsyq| | 2017-11-17 22:50 | 显示全部楼层

使用特权

评论回复
caijie001| | 2017-11-20 19:31 | 显示全部楼层
膜拜大神啊。。。。。这些我都没考虑过

使用特权

评论回复
SHWXZW| | 2017-11-27 23:13 | 显示全部楼层
新手路过学习

使用特权

评论回复
computer00| | 2017-11-28 08:54 | 显示全部楼层
你要确认一下PWR_DOWN信号有没有及时给出来。在三极管的BE结并一个合适的电阻效果可能会更好。
掉电检测信号要尽可能早发出。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

163

帖子

7

粉丝