用法拉电容从容实现单片机掉电数据保存
公式
Q = I*t;
Q = C*U;
今天,因为MCU内部一般都带FLASH ROM和伴随着法拉级电容的出现,事实上已经宣布背掉电电池或者用达拉斯DS存储器实现掉电数据保存的传统的思维和电路已经成为历史!
以下的电路,是一个可靠的简单的掉电检测、法拉电容能量储存等完整硬件电路和相应的软件细节,是笔者在产品上一个成熟的可靠的自诩经典电路和心血,在这里完全公开地提供给二姨爱社(21IC)下的全体表兄表弟表姐表妹们以供大家一起来批判赏析借鉴和改进.
首先提请老表们别一看电路繁琐就不想继续看下去,事实是:大电容储存实现掉电保护并非人们想象的那么容易做.
我们往往突然萌发一个跳跃灵感闪烁一丝思想火花,但最终都没幻化为现实结果而最终不了了之,在我们遗憾叹息之于我们是否思考过常常并不是我们思维"太过创新"需求和愿望大大超越了现实(我们能超越我国的现实的器件工业和材料工业水平吗)最后我们总不得不以理论不完全等同于实践来为自己无奈和熄灭的灵感作排解!其真正原因我们作过真正思考吗?!
事实上一个理论成立,现实上完全具备可实现性的一个电路单元,到最后我们并未达到预想效果,甚至以失败了告终,原因何在??----细节..细节..还是细节...永远的细节!!!!细节为王!!!!!
所以敬请大家耐心地静静地留意这里的每个电路技巧和对细节,事实上你会发现这里每个细节都充满着技巧智慧体贴人性和柔情.每处都让我们感悟了一种做事就是做人和精益求精的思想和行动境界,即使你是表弟表兄级男性电子工程师对你的设计和实现都应具备女性的细腻周到和柔情.
电路见下:这里首先用6V供电(如7806),为什么用6V不用5V是显而易见的.这里的二极管们一般都起两个作用,一是利用单向导电性保证向储能电容0.47F/5.5V单向冲电;二是起钳位作用,钳去0.6V,保证使大多数51系列的单片机都能在4.5V--5.5V之间的标称工作电压下工作.而4.5-5.5间这1V电压在0.47F电容的电荷流失时间就是我们将来在掉电报警后我们可以规划的预警回旋时间.
两只47欧电阻也有两个作用:
1:和47UF和0.01UF电容一起用于加强电源滤波.
2.对单片机供电限流
一般电子工程师都喜欢把单片机电源直接接7805上,这是个非常不好的习惯,为什么?7805可提供高达2A的供电电流,异常时足够把单片机芯片内部烧毁.有这个电阻47欧姆电阻挡即使把芯片插反或者电源极性颠倒也不会烧单片机和三端稳压器,但这限流电阻也不能太大,上限不要超过220欧为益,否则对单片机内部编程时,计算机会告警提示"编程失败"(其实是电源不足).
3.对0.47F/5.5V储能电容,串入的47欧电阻还消除了"巨量法拉电容"的上电浪涌.实现冲电电流削峰。
大家算一算要充满0.47F电容到5.5V,即使用5.5A恒流对0.47F电容冲电,也需要0.47秒才能冲到5.5V,既然知道了这个问题,大家就清楚:
I*t = UC 5.5*t=(5.5)*0.47 t=0.47S
1.如果没有47欧姆电阻限流,上电瞬间三端稳压器必然因强大过电流而进入自保.
2.长达0.47秒(如果真有5.5A恒流充电的话)缓慢上电,如此缓慢的上电速率,将使得以微分(RC电路)为复位电路的51单片机因为上电太慢无法实现上电复位.(其实要充满0.47UF电容常常需要几分钟).
3.正因为上电时间太慢,将无法和今天大多数主流型以在线写入(ISP)类单片机写片上位计算机软件上预留的等待应答时间严重不匹配(一般都不大于500MS),从而造成应答失步,故写片时总是提示"通信失败".
知道这个道理我们就不难理解这个电路最上面的二极管和电阻串联起来就是必须要加上的“上电加速电路”.这里还用了一只(内部空心不带蓝色的)肖特基二极管(1N5819)来从法拉电容向单片机VCC的单向放电,和同时阻断法拉电容对上电加速电路的旁路作用;用肖特基二极管是基于其在小电流下,导通压降只有0.2V左右考虑的,目的是尽量减少法拉电容在掉电时的电压损失.力争获得最留掉点维持时间.
三极管9014和钳位二极管分压电阻垫位电阻(即470欧姆)等一道构成基极发射极双端输入比较器,实现掉电检测和发出最高优先级的掉电中断,这部分电路相当于半只比较器LM393,但电路更简单耗电更省(掉电时耗电小于0.15MA).
47K电阻和470欧姆二极管1N4148一道构成嵌位电路,保证基极电位大约在0.65V左右 (可这样来非常近似地计算0.6(二极管导通电压)+5*0.47/47),这样如果9014发射极电压为0(此时就是外部掉电),三极管9014正好导通,而且因为51单片机P3.2高电平为弱上拉(大约50UA),此时9014一定是导通且在弱电流下是饱和导通的,这样就向单片机内部发出一次最高硬件优先级的INX0掉电中断.
而在平时正常供电时,因发射极上也有大约6*0.22/2.2=0.6V垫位电压在上顶,容易理解三极管9014在此刻一定处于截止状态,而使P3.2维持高电平.
下面还有两个重要软硬件要点和建议提请注意:
1.硬件要点:凡是单片机外部以输出高电平驱动的口线,其电流都不能到单片机的供电电压VCC上去争抢(例如上拉电阻供电不取自单片机VCC而应直接接在电源前方),图中4.7K电阻和口线PX.Y就是一个典型示例,接其它口线PX.Y'和负载也雷同.这里与上拉4.7K电阻相串联二极管也有两个作用:
1.钳去0.6V电压以便与单片机工作电压相匹配,从而防止口线向单片机内部反推电.带来单片机口线功能紊乱.
2.利用二极管单向供电特性,防止掉电后单片机通过口线向电源和外部设备反供电造成电荷泄露.
上面的硬件设计,还要与软件结合起来(见下面叙述)才能保证在掉电期间,不会因法拉电容上的积累电荷向已经掉电的外部电路无谓供电和向电源内部反向供电造成法拉电容上能量泄放从而缩短掉电维持时间.
2.软件要点:首先INX0在硬件上(硬件设计已经保证)是处于最高优先级的,这里还必须要在软件上再次保证INX0是最高优级别的中断.从而确保掉电时外部中断0能打断其他任何进程,最高地优先地被检测和执行到.其次在INX0的中断程序入口,还要用:
MOV P1,#00H
MOV P2,#00H
MOV P3,#00H
MOV P0,#00H
SJMP 掉电保存
来阻断法拉电容的电荷通过单片机口线外泄和随后立即跳转到掉电写入子程序模块.(见硬件要点)
有了上面的预备和细节处理,下面我们完全有理由信心百倍地一道来计算0.47UF的电容从5.5V跌落到4.5V(甚至可以下到3.6V)所能维持的单片机掉电工作时间.
这里设单片机工作电流为20MA(外设驱动电流已经被屏蔽)不难算出:
I*T= UC
T=UC/I=(5.5-4.5)*0.47/0.02= 23.5S
T=1V*0.47*1000(1000是因为工作电流为豪安)/20=23.5秒!!!!!
天!这个时间对单片机而言简直相当于从原始社会到共产主义社会的历史慢长.休说是从容写入内部FLASH ROM掉电保护数据,就是把芯片从新写入新程序都可以写5次!!!!!!!!!!
单片机存储器结构
单片机内部存储结构分析 我们来思考一个问题,当我们在编程器中把一条指令写进单片要内部,然后取下单片机,单片机就可以执行这条指令,那么这条指令一定保存在单片机的某个地方,并且这个地方在单片机掉电后依然可以保持这条指令不会丢失,这是个什么地方呢?这个地方就是单片机内部的只读存储器即ROM(READ ONLY MEMORY)。为什么称它为只读存储器呢?刚才我们不是明明把两个数字写进去了吗?原来在89C51中的ROM是一种电可擦除的ROM,称为FLASH ROM,刚才我们是用的编程器,在特殊的条件下由外部设备对ROM进行写的操作,在单片机正常工作条件下,只能从那面读,不能把数据写进去,所以我们还是把它称为ROM。
数的本质和物理现象:我们知道,计算机能进行数学运算,这可令我们非常的难以理解,计算机吗,我们虽不了解它的组成,但它总只是一些电子元器件,怎么能进行数学运算呢?我们做数学题如37+45是这样做的,先在纸上写37,然后在下面写45,然后大脑运算,最后写出结果,运算的原材料:37、45和结果:82都是写在纸上的,计算机中又是放在什么地方呢?为了解决这个问题,先让我们做一个实验:这里有一盏灯,我们知道灯要么亮,要么不亮,就有两种状态,我们能用’0’和’1’来代替这两种状态,规定亮为’1’,不亮为’0’。现在放上两盏灯,一共有几种状态呢?我们列表来看一下:
请大家自已写上3盏灯的情况000 001 010 011 100 101 110 111
我们来看,这个000,001,101 不就是我们学过的的二进制数吗?本来,灯的亮和灭只是一种物理现象,可当我们把它们按一按的次序排更好后,灯的亮和灭就代表了数字了。让我们再抽象一步,灯为什么会亮呢?看电路1,是因为输出电路输出高电平,给灯通了电。因此,灯亮和灭就能用电路的输出是高电平还是低电平来替代了。这样,数字就和电平的高、低联系上了。(请想一下,我们还看到过什么样的类似的例程呢?(海军之)灯语、旗语,电报,甚至红、绿灯)
什么是位: 通过上面的实验我们已经知道:一盏灯亮或者说一根线的电平的高低,能代表两种状态:0和1。实际上这就是一个二进制位,因此我们就把一根线称之为一“位”,用BIT表示。
什么是字节: 一根线能表于0和1,两根线能表达00,01,10,11四种状态,也就是能表于0到3,而三根能表达0-7,计算机中常常用8根线放在一起,同时计数,就能表过到0-255一共256种状态。这8根线或者8位就称之为一个字节(BYTE)。不要问我为什么是8根而不是其它数,因为我也不知道。(计算机世界是一本人造的世界,不是自然界,很多事情你无法问为什么,只能说:它是一种规定,大家在以后的学习过程中也要注意这个问题)
存储器的工作原理:
1、存储器构造
存储器就是用来存放数据的地方。它是利用电平的高低来存放数据的,也就是说,它存放的实际上是电平的高、低,而不是我们所习惯认为的1234这样的数字,这样,我们的一个谜团就解开了,计算机也没什么神秘的吗。
图2
图3
让我们看图2。单片机里面都有这样的存储器,这是一个存储器的示意图:一个存储器就象一个个的小抽屉,一个小抽屉里有八个小格子,每个小格子就是用来存放“电荷”的,电荷通过与它相连的电线传进来或释放掉,至于电荷在小格子里是怎样存的,就不用我们操心了,你能把电线想象成水管,小格子里的电荷就象是水,那就好理解了。存储器中的每个小抽屉就是一个放数据的地方,我们称之为一个“单元”。
有了这么一个构造,我们就能开始存放数据了,想要放进一个数据12,也就是00001100,我们只要把第二号和第三号小格子里存满电荷,而其它小格子里的电荷给放掉就行了(看图3)。可是问题出来了,看图2,一个存储器有好多单元,线是并联的,在放入电荷的时候,会将电荷放入所有的单元中,而释放电荷的时候,会把每个单元中的电荷都放掉,这样的话,不管存储器有多少个单元,都只能放同一个数,这当然不是我们所希望的,因此,要在结构上稍作变化,看图2,在每个单元上有个控制线,我想要把数据放进哪个单元,就给一个信号这个单元的控制线,这个控制线就把开关打开,这样电荷就能自由流动了,而其它单元控制线上没有信号,所以开关不打开,不会受到影响,这样,只要控制不一样单元的控制线,就能向各单元写入不一样的数据了,同样,如果要某个单元中取数据,也只要打开对应的控制开关就行了。
2、存储器译码那么,我们怎样来控制各个单元的控制线呢?这个还不简单,把每个单元元的控制线都引到集成电路的外面不就行了吗?事情可没那么简单,一片27512存储器中有65536个单元,把每根线都引出来,这个集成电路就得有6万多个脚?不行,怎么办?要想法减少线的数量。我们有一种办法称这为译码,简单介绍一下:一根线能代表2种状态,2根线能代表4种状态,3根线能代表几种,256种状态又需要几根线代表?8种,8根线,所以65536种状态我们只需要16根线就能代表了。
(图4)3、存储器的选片及总线的概念至此,译码的问题解决了,让我们再来关注另外一个问题。送入每个单元的八根线是用从什么地方来的呢?它就是从计算机上接过来的,一般地,这八根线除了接一个存储器之外,还要接其它的器件,如图4所示。这样问题就出来了,这八根线既然不是存储器和计算机之间专用的,如果总是将某个单元接在这八根线上,就不好了,比如这个存储器单元中的数值是0FFH另一个存储器的单元是00H,那么这根线到底是处于高电平,还是低电平?岂非要打架看谁历害了?所以我们要让它们分离。办法当然很简单,当外面的线接到集成电路的管脚进来后,不直接接到各单元去,中间再加一组开关(参考图4 )就行了。平时我们让开关关闭着,如果确实是要向这个存储器中写入数据,或要从存储器中读出数据,再让开关接通就行了。这组开关由三根引线选择:读控制端、写控制端和片选端。要将数据写入片中,先选中该片,然后发出写信号,开关就合上了,并将传过来的数据(电荷)写入片中。如果要读,先选中该片,然后发出读信号,开关合上,数据就被送出去了。注意图4,读和写信号同时还接入到另一个存储器,但是由于片选端不一样,所以虽有读或写信号,但没有片选信号,所以另一个存储器不会“误会”而开门,造成冲突。那么会不一样时选中两片芯片呢?只要是设计好的系统就不会,因为它是由计算控制的,而不是我们人来控制的,如果真的出现同时出现选中两片的情况,那就是电路出了故障了,这不在我们的讨论之列。
从上面的介绍中我们已经看到,用来传递数据的八根线并不是专用的,而是很多器件大家共用的,所以我们称之为数据总线,总线英文名为BUS,总即公交车道,谁者能走。而十六根地址线也是连在一起的,称之为地址总线。
半导体存储器的分类
按功能能分为只读和随机存取存储器两大类。所谓只读,从字面上理解就是只能从里面读,不能写进去,它类似于我们的书本,发到我们手回之后,我们只能读里面的内容,不能随意更改书本上的内容。只读存储器的英文缩写为ROM(READ ONLY MEMORY)
所谓随机存取存储器,即随时能改写,也能读出里面的数据,它类似于我们的黑板,我能随时写东西上去,也能用黑板擦擦掉重写。随机存储器的英文缩写为RAM(Random Access Memory)这两种存储器的英文缩写一定要记牢。
注意:所谓的只读和随机存取都是指在正常工作情况下而言,也就是在使用这块存储器的时候,而不是指制造这块芯片的时候。不然,只读存储器中的数据是怎么来的呢?其实这个道理也很好理解,书本拿到我们手里是不能改了,能当它还是原材料——白纸的时候,当然能由印刷厂印上去了。
顺便解释一下其它几个常见的概念 。
PROM,称之为可编程存储器。这就象我们的练习本,买来的时候是空白的,能写东西上去,可一旦写上去,就擦不掉了,所以它只能用写一次,要是写错了,就报销了。(现在已经被淘汰)
EPROM,称之为紫外线擦除的可编程只读存储器。它里面的内容写上去之后,如果觉得不满意,能用一种特殊的办法去掉后重写,这就是用紫外线照射,紫外线就象“消字灵”,能把字去掉,然后再重写。当然消的次数多了,也就不灵光了,所以这种芯片能擦除的次数也是有限的——几百次吧。(现在已经被淘汰)
EEPROM,也叫 E2PROM称之为电可擦可编程只读存储器,它和EEPROM类似,写上去的东西也能擦掉重写,但它要方便一些,不需要光照了,只要用电就能擦除或者重新改写数据,所以就方便许多,而且寿命也很长(几万到几十万次不等)。
FLASH,称之为闪速存储器,属于EEPROM的改进产品,它的最大特点是必须按块(Block)擦除(每个区块的大小不定,不同厂家的产品有不同的规格), 而EEPROM则可以一次只擦除一个字节(Byte)。FLASH现在常用于大容量存储,比如u盘
再次强调,这里的所有的写都不是指在正常工作条件下。不管是PROM还是EPROM,它们的写都要有特殊的条件,一般我们用一种称之为“编程器”的设备来做这项工作,一旦把它装到它的工作位置,就不能随便改写了。
相关问答
请教 单片机掉电 后,如何快速的 保存 数据问题?MCU供电的LDO或者DC-DC的前级并联足够的电容,以确保电容的供电能保证MCU将数据写入。可以通过以下的步骤确认电容的大小:评估由掉电时前级电压供电的工作...
单片机 存储器主要是存储什么?程序存储器是用于存放是系统工作的应用程序及一些不需改变的数据常数的,程序写入程序存储器后,单片机系统只能读取程序指令使系统运行,而不能再进行改写,且系...
单片机 程序烧录之后,断电之后,程序是否还在 单片机 里面?是的。单片机里和优盘一样,存入数据后一直保存着。断电不会影响里面的内容。是的。单片机里和优盘一样,存入数据后一直保存着。断电不会影响里面的内容。
存储器中存储的信息断电会丢失吗?存储器分为RAM和ROMRAM象计算机的内存条,断电会丢失ROM数据修改不方便,但断电后不会丢失,象U盘中的数据,计算机硬盘上的数据单片机的程序等为了方便修改同时...
单片机 C语言设置变量存储在什么地方?变量在RAM。RAM是数据存储器,用来保存运行中的数据,掉电后数据消失。EEPROM跟FLASH都是程序存储器,保存程序代码跟不分配内存的常量,两者的区别在于写入方式...
单片机 复位与 单片机掉电 是一样吗?单片机复位是指单片机的程序计数器被重新设置到一个已知的值,通常是程序的起始地址,导致程序从头开始执行。单片机掉电是指...单片机复位与单片机掉电不是一...
PIC 单片机 没法休眠-ZOL问答STC89c51的睡眠模式功耗并不低,掉电状态功耗最低,但只有复位能唤醒,所以你得外加RTC实时时钟,每天定时唤醒就可以了,单片机完成当天工作再次进入掉电状态,周而复...
rom在 单片机 里面什么意思?ROM(ReadOnlyMemory):即是只读存储器,单片机的二进制可执行文件(hex/s19/,elf)等等各类单片机二进制文件。此类ROM只有在下载程序时方可写入,单片机运行时...
单片机 带的是flash还是eeprom?都有。通常,单片机里的Flash都用于存放运行代码,在运行过程中不能改;EEPROM是用来保存用户数据,运行过程中可以改变,比如一个时钟的闹铃时间初始化设定为12...
51 单片机 怎么休眠 - Starry高级婚纱定制 的回答 - 懂得呵呵,最近刚好研究了一下这个问题51单片机空闲和掉电模式应用我们知道单片机内部有一个电源管理寄存器PCON,这个寄存器的最低两位,IDL和PD这两位分...