找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 992|回复: 34
打印 上一主题 下一主题
收起左侧

单片机怎么用电路实现掉电瞬间把数据存入内部eeprom

  [复制链接]
跳转到指定楼层
楼主
请教如题;52单片机,存储量7个字节
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:57657 发表于 2024-1-28 14:03 | 只看该作者
你要搞清楚EEPROM在单片机内部还是其他芯片,同时需要知道单片机是否有低压检测功能。
回复

使用道具 举报

板凳
ID:712097 发表于 2024-1-28 14:25 | 只看该作者
掉电检测+大电容。
回复

使用道具 举报

地板
ID:230500 发表于 2024-1-28 14:41 | 只看该作者
大力出奇迹的办法就是在单片机的供电端串一只二极管,二极管后端接个大滤波电容;电源掉电后,单片机还能继续工作几十毫秒保存数据即可, 另外一个办法就是外接FRAM铁电存储器,
回复

使用道具 举报

5#
ID:857072 发表于 2024-1-28 14:42 来自手机 | 只看该作者
给mcu供电单独加一个二极管一个大电容,然后用然后检测二极管前面的电压,如果电压过低说明前面断电了但是二极管后面电容里面存存的电还够mcu运行一小会儿在这段时间把要保存的内容存一下就行了
回复

使用道具 举报

6#
ID:213173 发表于 2024-1-28 15:39 | 只看该作者
可以参考此示例
掉电保存EEPROM.rar (21.77 KB, 下载次数: 38)
回复

使用道具 举报

7#
ID:883242 发表于 2024-1-28 16:23 | 只看该作者
你要先做电压监测才能知道什么是掉电瞬间。
回复

使用道具 举报

8#
ID:1110282 发表于 2024-1-28 16:33 | 只看该作者
这个只能在前端电源部分做吧,单单的程序上实现不了
回复

使用道具 举报

9#
ID:25903 发表于 2024-1-28 16:35 | 只看该作者
1.首先单片机的供电要有个大电容(容量根据你需要工作的时间来算,通常使用低内阻型的超级电容),维持单片机在外部电源掉电时,能短暂工作一段时间。同时单片机的电源还应该通过二极管,与前端电路隔开,防止外部掉电时单片机的电向外泄漏。
2.需要有一个检测电路,用来通知单片机外面电源的情况,快速的触发单片机进入掉电处理程序。
回复

使用道具 举报

10#
ID:624769 发表于 2024-1-28 16:53 | 只看该作者
如果是 标准可直接覆盖的 Eeprom,使用掉电中断,触发时写入Eeprom 即可。
如果是 用Flash模拟的Eeprom,  要事先擦除Eeprom, 触发掉电中断时 写入Eeprom。

总之,利用掉电中断触发执行写Eeprom操作。

如果是STC的单片机,可以参考这个帖子。
http://www.51hei.com/bbs/dpj-213012-1.html
回复

使用道具 举报

11#
ID:883242 发表于 2024-1-28 18:14 | 只看该作者
还有一个办法就是用铁电FRAM,可以不做掉电检测。
回复

使用道具 举报

12#
ID:879348 发表于 2024-1-29 08:20 | 只看该作者
大容量电容+二极管隔离+供电检测,但是EEPROM速度太慢了,需要很大电容,建议FRAM,我有个项目用到你说的功能就是这种存储
回复

使用道具 举报

13#
ID:883242 发表于 2024-1-29 13:42 | 只看该作者
FRAM优点不是速度而是写周期寿命近乎无限,这样只管写就行,不用考虑掉电才能写,全寿命周期都写不坏。
回复

使用道具 举报

14#
ID:828160 发表于 2024-1-29 16:34 | 只看该作者
现在很多芯片有LVDT中断,利用LVDT中断可以检测到电压上升和电压下降,在LVDT中断里面保存数据就行了
回复

使用道具 举报

15#
ID:965189 发表于 2024-1-29 17:31 | 只看该作者
使用低压中断,在中断函数里保存需要保存的数据。
回复

使用道具 举报

16#
ID:891876 发表于 2024-1-29 17:36 | 只看该作者
感谢大家解答,最后还是用中断50ms写一次,有点担心89c52内部eeprom10万次寿命不够写
回复

使用道具 举报

17#
ID:460466 发表于 2024-1-29 20:05 | 只看该作者
写一句存一句,减少损失,
回复

使用道具 举报

18#
ID:213173 发表于 2024-1-29 20:57 | 只看该作者
芙蓉焊料 发表于 2024-1-29 17:36
感谢大家解答,最后还是用中断50ms写一次,有点担心89c52内部eeprom10万次寿命不够写

50ms写一次,只在某一固定扇区操作,用不到一天就要挂了。
回复

使用道具 举报

19#
ID:460466 发表于 2024-1-30 08:00 | 只看该作者
wulin 发表于 2024-1-29 20:57
50ms写一次,只在某一固定扇区操作,用不到一天就要挂了。

顾此失彼,,,,,,,,,,,
回复

使用道具 举报

20#
ID:420836 发表于 2024-1-30 08:55 | 只看该作者
一般来说,可以使用大电解电容来进行掉电保护。 此外,对于缓慢变化的变量,您可以每 5 到 10 秒保存一次数据快照。
回复

使用道具 举报

21#
ID:1110383 发表于 2024-1-30 10:11 | 只看该作者
在单片机的供电后面串一只二极管,经过一个大滤波电容之后给E2ROM供电。单片机电源掉电后,大滤波电容能够维持几十毫秒时间给E2ROM保存数据。就是打一个时间差,单片机要有掉电判断功能,根据单片机VCC的变化判断。
回复

使用道具 举报

22#
ID:57657 发表于 2024-1-30 16:03 | 只看该作者
sumklee412 发表于 2024-1-30 10:11
在单片机的供电后面串一只二极管,经过一个大滤波电容之后给E2ROM供电。单片机电源掉电后,大滤波电容能够 ...

89C52没有检测VCC电压的功能,你应该加一个二极管、光耦、大电容以检测是否掉电。
电容只能给单片机和EEPROM供电,不能向光耦和其他无关模块供电,检测到光耦截止表示掉电已经发生。
回复

使用道具 举报

23#
ID:883242 发表于 2024-1-30 17:44 | 只看该作者
单片机研究协会 发表于 2024-1-29 16:34
现在很多芯片有LVDT中断,利用LVDT中断可以检测到电压上升和电压下降,在LVDT中断里面保存数据就行了

不可以!单片机检测自己VCC下降不可以使用!
2000年我第一次用第一代AVR单片机90S2313就发现过这个问题,如果程序里面有写EEPROM代码,则几十次掉电上电后EEPROM内容大概率会被错误改变,分析原因应该是电源电压下降过程中,单片机程序跑飞错误执行写EEPROM代码造成的,外挂一片MAX813当VCC从5V跌到4.3V输出RESET锁住单片机,问题解决!!!

Atmel显然也发现了这个问题,在Mega8这样的第二代AVR里面加了Brownout,当电源电压低于4.3V(VCC=5V)或2.7V(VCC=3.3V)锁定单片机,不让单片机乱跑。

所以,为了写入EEPROM进行的掉电检测应该检测VCC之前的电压,直接检测VCC已经来不及了。
回复

使用道具 举报

24#
ID:213173 发表于 2024-1-30 21:14 | 只看该作者
Hephaestus 发表于 2024-1-30 17:44
不可以!单片机检测自己VCC下降不可以使用!
2000年我第一次用第一代AVR单片机90S2313就发现过这个问题 ...

STC15及以后的产品都有掉电中断功能。并且可以设置低压阈值。VCC=5V 主板滤波电容10uf,3V触发掉电中断,剩余电量能可靠维持2.5ms时间写EEPROM,实验数百次,无一失败。楼主写7个字节的时间绰绰有余。
回复

使用道具 举报

25#
ID:1107377 发表于 2024-1-31 12:40 | 只看该作者
使用2只整流二极管和2片纽扣电池,就可以不怕停电造成数据损失了。

回复

使用道具 举报

26#
ID:1107377 发表于 2024-1-31 13:44 | 只看该作者
或者使用一只大容量电容。正常工作时,可以对电容充电。停电时,电容对关键部位供电。图中的隔离二极管,用来切断电容给其他不需要的地方供电。电容的容量和耐压,根据实际需要确定。


回复

使用道具 举报

27#
ID:884147 发表于 2024-1-31 16:33 | 只看该作者
wulin 发表于 2024-1-30 21:14
STC15及以后的产品都有掉电中断功能。并且可以设置低压阈值。VCC=5V 主板滤波电容10uf,3V触发掉电中断, ...

这是最简单的方法,上万应用没问题,在3V降到2V过程中完全有时间存入EEPROM
回复

使用道具 举报

28#
ID:965189 发表于 2024-1-31 23:05 | 只看该作者
本人也使用STC15和STC8G的单片机掉电保存数据,5V供电,设置3V低压中断保存数据。一直正常。
回复

使用道具 举报

29#
ID:195496 发表于 2024-2-1 12:48 | 只看该作者
楼上说的对,改硬件供电,要检测掉电,用大电容维持单片机存数据。
回复

使用道具 举报

30#
ID:149759 发表于 2024-2-1 15:57 | 只看该作者
chxelc 发表于 2024-1-28 14:25
掉电检测+大电容。

正解
回复

使用道具 举报

31#
ID:668004 发表于 2024-3-25 15:12 | 只看该作者
dandan-tcb 发表于 2024-1-28 16:35
1.首先单片机的供电要有个大电容(容量根据你需要工作的时间来算,通常使用低内阻型的超级电容),维持单片 ...


你说的是不是这个意思啊
回复

使用道具 举报

32#
ID:668004 发表于 2024-3-25 15:13 | 只看该作者
a399288395 发表于 2024-1-28 14:41
大力出奇迹的办法就是在单片机的供电端串一只二极管,二极管后端接个大滤波电容;电源掉电后,单片机还能继 ...

用铁电存储器有何玄机呢
回复

使用道具 举报

33#
ID:668004 发表于 2024-3-25 15:20 | 只看该作者
188610329 发表于 2024-1-28 16:53
如果是 标准可直接覆盖的 Eeprom,使用掉电中断,触发时写入Eeprom 即可。
如果是 用Flash模拟的Eeprom,   ...

非常感谢 意思是纯软件就就可以实现吗
回复

使用道具 举报

34#
ID:668004 发表于 2024-3-25 15:44 | 只看该作者
975336981 发表于 2024-1-31 13:44
或者使用一只大容量电容。正常工作时,可以对电容充电。停电时,电容对关键部位供电。图中的隔离二极管,用 ...

这个二极管是必须的吗
回复

使用道具 举报

35#
ID:1109793 发表于 2024-3-25 16:41 | 只看该作者
我用变压器供电,在1000uF电容前边加个二极管,脉动电压导入STC的CPU,检测过零,同时当过零丢失时保存数据,5V端在断电后可以有足够时间正常操作内部EEPROM,10几个字节没问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表