用法拉电容从容实现单片机掉电数据保存.703
基于法拉电容的智能仪器仪表掉电保护方案探讨
基于法拉电容的智能仪器仪表掉电保护方案探讨[摘要]:仪器仪表在工业设备发展中有重要作用,其不仅有自动控制、信号传播和数据处理功能,同时也有测量、检查和观察功能,其在工业生产中应用,在一定程度上能提高其效率。
然而在实际运行过程中其常会出现掉电问题,这就使得其不能更好发挥其作用,甚至影响企业生产顺利进行。
在这种情况下,就应该对影响其顺利进行因素进行分析,并将法拉电容和嵌入式系统融合在一起,以便为智能仪器仪表掉电保护提供有效依据。
[关键词]:法拉电容智能仪器仪表掉电保护方案中图分类号:tm934.25 文献标识码:tm 文章编号:1009-914x(2012)29- 0017 -01智能仪器仪表在使用过程中常会因电网波动而使电网数据丢失,以致于给系统造成重大损失。
法拉电容凭借其较大的功率、高速的充放电、充电寿命长及控制电路简单等特点与嵌入式操作系统结合在一起,为智能仪器仪表顺利运行,提供便捷的掉电保护方案。
如何在法拉电容基础上制定出智能仪器仪表掉电保护方案,已经成为相关部门值得思索的事情。
一、法拉电容概念及特点法拉电容也可称之为超级电容,双电层电容,其优势是体积小、容量大、电压记忆性好、可靠性高。
其余一般电池相比,不仅具有充电时间短、功率密度高、使用寿命长等特点,同时也具有耐低温、环境污染少等优势。
其一般在在现电路中使用,其能替代传统的电池作后备电池使用,其在使用过程中,不仅能提高电路寿命和可靠性,同时也能降低设备成本和维修成本,其在智能仪器仪表中使用也能避免其掉电,而给相关企业带来必要的经济损失。
二、对机遇法拉电容的智能仪器仪表掉电保护方案进行分析在仪器仪表使用过程中,常会出现突然掉电现象,一旦出现这些现象,会因不能及时保护重要数据而使其丢失。
出现这种现象与充电电池是有一定关系的。
一些保护操作在几秒或是几十秒就能完成,然而因充电电池容量小、可靠性低、功率低等原因而不能及时完成保存,而造成一定浪费。
法拉电容的成本和性能比一般电池要优越。
单片机掉电数据保存共5页
用法拉电容从容实现单片机掉电数据保存电路见下:这里首先用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,既然知道了这个问题,大家就清楚: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在硬件上(设计)是处于最高优先级的,这里还必须要在软件保证最高级别的优先.从而确保掉电时外部中断0能打断其他任何进程,最高优先地被检测和执行.其次在INX0的中断程序入口,还要用: MOV P1,#00HMOV P2,#00HMOV P3,#00HMOV P0,#00HSJMP 掉电保存来阻断法拉电容的电荷通过单片机口线外泄和随后跳转掉电写入子程序模块.(见硬件要点)有了上面的预备和细节处理,下面我们信心百倍地一道来计算0.47UF的电容从5.5V跌落到4.5V(甚至可以下到3.6V)所能维持的单片机掉电工作时间.这里设单片机工作电流为20MA(外设驱动电流已经被屏蔽)不难算出:T=1V*0.47*1000(1000是因为工作电流为豪安)/20=23.5秒!!!!!天!这个对单片机而言相当于从原始社会到共产主义社会的历史慢长.休说是写内部FLASH ROM,就是从新写片子本身都能写5希望以上资料对你有所帮助,附励志名言3条::1、世事忙忙如水流,休将名利挂心头。
掉电保存方案
掉电保存方案
掉电保存方案主要通过在系统中加入掉电检测电路和掉电数据保存功能来实现。
下面是一种常见的单片机掉电检测电路和掉电数据保存方案:
单片机掉电检测电路通常由法拉电容实现。
法拉电容具有大容量、高储能的特性,能够储存足够多的电能。
在电源断电的情况下,法拉电容可以通过电荷泵电路等将电力输送给单片机,使其保持工作状态,并将数据保存在存储器中。
当电源恢复供电时,单片机将继续执行任务,并且可以从存储器中恢复掉电前保存的数据。
掉电数据保存方案通常采用数据备份和恢复机制。
在系统运行过程中,单片机可以定期将重要的数据备份到非易失性存储器中,如EEPROM、Flash等。
当电源断电时,单片机可以立即将剩余的数据写入存储器中,确保数据不会丢失。
当电源恢复供电时,单片机可以从存储器中恢复数据,确保数据的完整性。
另外,为了避免电源断电时对单片机的干扰,可以采用低功耗技术来降低单片机的工作电流,使其在断电时能够快速进入休眠状态。
同时,可以在单片机外部添加去抖动电路、滤波电路等抗干扰措施,以确保数据的准确性。
总的来说,掉电保存方案需要在硬件和软件方面进行全面设计和实现。
硬件方面需要选择合适的法拉电容、非易失性存储器等器件,软件方面需要编写相应的掉电检测和数据备份程序,以确保系统在掉电时能够正确地保存数据并恢复工作状态。
单片机中的掉电存储管理
单片机中的掉电存储管理各位单片机程序猿们,在单片机程序设计的时候,经常碰到一些数据的掉电存储问题。
往往这些数据量又不是很大,但是操作起来特别麻烦。
每次变更数据都得调用存储函数进行读写操作。
今天总结一下近几天的思路,对普通单片机的的NV变量的管理给出一个较为方便的操作方法。
一般,我们的数据都由8,16,32位组成,因此,在此例中,我给出16长度数据的接口函数,旨在表明这种方法的思路。
具体读者可以根据自己的使用环境,自己改进。
首先,说明下笔者的编程习惯,笔者在编写单片机C程序的过程中,往往喜欢把程序中涉及的东西封装成类似于面向对象思想中的类。
把数据结构假想成类的属性,把对相应数据结构操作的函数,假想成类的方法。
这种方法在实际编程过程中,往往给自己带来很大的便利。
不仅思路清晰,而且便于模块化管理自己的程序。
现在,我们创建两个文件,分别为NV.h和NV.C,h文件作为NV管理的模块。
NV.h中我们来定义NV变量的数据结构(即笔者所认为的类的属性)和声明对NV操作的函数。
#ifndef_NV_#define _NV_//NV操作的状态定义#define NV_Succeed1#defineNV_Failed//定义16位长度的NV变量数据结构structNV_Struct16{u16 Val;//NV16变量的值u16 NVAddr;//NV16变量在存储器中的首地址};//声明外部调用函数extern void NV16_Get(struct NV_Struct16 *temp);u8 NV16_Set(struct NV_Struct16 *temp,u16 val);#endif在NV_Struct16中,我们封装了一个叫做NV16的变量,其成员中有变量的值和在存储器中的首地址。
在这里,只是给它定义了一个数据的结构,并没有定义实体变量,在C++或C#等面向对象程序设计方法中,这叫类的定义,并没有创建类的实体。
法拉电容工作原理
法拉电容工作原理嘿,朋友们!今天咱来聊聊法拉电容这玩意儿的工作原理,可有意思啦!你说这法拉电容啊,就像是一个超级大胃王,能把电都给“吃”进去存起来。
它里面有两个电极,就像两个好兄弟一样,一个带正电,一个带负电。
这两个电极中间隔着一层薄薄的电介质,就好像是他们之间的一道小篱笆。
当我们给法拉电容充电的时候,就好像是给这个大胃王喂食物一样。
电流就像食物一样流进去,正电荷跑到一个电极上,负电荷跑到另一个电极上。
这两个电极就开心地把这些电荷都收留啦,存起来以备不时之需。
然后呢,等我们需要用电的时候,嘿,这法拉电容就开始发挥作用啦!它就像那个大胃王把储存的电都吐出来一样,让电流又跑出来为我们服务。
你想想看,这法拉电容多厉害呀!它能快速地充放电,就像一个短跑健将,嗖的一下就完成了。
而且它的寿命还特别长,比那些普通的电容可耐用多了。
这就好比是我们生活中的一些朋友,平时不声不响的,关键时刻总能帮上大忙!你说是不是?法拉电容在很多地方都大显身手呢!比如说在一些需要瞬间大电流的设备里,它就能发挥出自己的优势。
还有在一些新能源汽车里,它能帮忙储存能量,让汽车跑得更稳更远。
它就像是一个默默奉献的小英雄,虽然不那么起眼,但是却有着大大的作用。
咱再打个比方,法拉电容就像是一个水库,平时把水储存起来,等需要用水的时候就可以开闸放水。
只不过这里面储存的不是水,而是电!是不是很神奇?哎呀,这法拉电容的工作原理真的是很有趣呢!它让我们的生活变得更加便利,更加丰富多彩。
我们真应该好好感谢这个小小的电容呀!它虽然不大,但是却有着无穷的力量。
所以说啊,科技的力量真是不容小觑!这小小的法拉电容都能有这么大的能耐,那以后还不知道会有多少更厉害的发明呢!让我们一起期待吧!原创不易,请尊重原创,谢谢!。
单片机掉电检测电路与单片机掉电数据保存
单片机掉电检测电路与单片机掉电数据保存
摘要: 单片机在正常工作时,因某种原因造成突然掉电,将会丢失数据存储器(RAM)里的数据。
在某些应用场合如测量、控制等领域,单片机正常工作中采集和运算出一些重要数据,待下次上电后需要恢复这些重要数据。
因此,在一些没有后备供电系统的单片机应用系统中,有必要在系统完全断电之前,把这些采集到的或计算出的重要数据存在在EEPROM 中。
为此,...
单片机在正常工作时,因某种原因造成突然掉电,将会丢失数据存储器(RAM)里的数据。
在某些应用场合如测量、控制等领域,单片机正常工作中采集和运算出一些重要数据,待下次上电后需要恢复这些重要数据。
因此,在一些没有后备供电系统的单片机应用系统中,有必要在系统完全断电之前,把这些采集到的或计算出的重要数据存在在EEPROM 中。
为此,通常做法是在这些系统中加入单片机掉电检测电路与单片机掉电数据保存。
用法拉电容可从容实现单片机掉电检测与数据掉电保存。
电路见下图。
这里首先用6V 供电(如7806),为什幺用6V 不用5V 是显而易见的.电路中的二极管们一般都起两个作用,一是起钳位作用,钳去0.6V,保证使大多数51 系列的单片机都能在4.5V--5.5V 之间的标称工作电压下工作.而4.5-5.5 间这1V 电压在0.47F 电容的电荷流失时间就是我们将来在单片机掉电检测报警后我们可以规划的预警回旋时间。
二是利用单向导电性保证向储能电容0.47F/5.5V 单向冲电。
两只47 欧电阻作用:第一,对单片机供电限流。
一般地单片机电源直接接。
单片机掉电保护总结完整版
单片机掉电保护总结Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】单片机应用系统断电时的数据保护方法在测量、控制等领域的应用中,常要求单片机内部和外部RAM中的数据在电源掉电时不丢失,重新加电时,RAM中的数据能够保存完好,这就要求对单片机系统加接掉电保护电路。
掉电保护通常可采用以下三种方法:一是加接不间断电源,让整个系统在掉电时继续工作,二是采用备份电源,掉电后保护系统中全部或部分数据存储单元的内容;三是采用EEPROM来保存数据。
由于第一种方法体积大、成本高,对单片机系统来说,不宜采用。
第二种方法是根据实际需要,掉电时保存一些必要的数据,使系统在电源恢复后,能够继续执行程序,因而经济实用,故大量采用[1]。
EEPROM既具有ROM掉电不丢失数据的特点,又有RAM随机读写的特点。
但由于其读写速度与读写次数的限制,使得EEPROM 不能完全代替RAM。
下面将介绍最常用的一些掉电保护的处理方法,希望能对相关设计人员在实际工作中有所帮助。
1简单的RAM数据掉电保护电路在具有掉电保护功能的单片机系统中,一般采用CMOS单片机和CMOSRAM。
CMOS 型RAM存储器静态电源小,在正常工作状态下一般由电源向片外RAM供电,而在断电状态下由小型蓄电池向片外RAM供电,以保存有用数据,采用这种方法保存数据,时间一般在3-5个月[2]。
然而,系统在上电及断电过程中,总线状态的不确定性往往导致RAM内某些数据的变化,即数据受到冲失。
因此对于断电保护数据用的RAM存储器,除了配置供电切换电路外,还要采取数据防冲失措施,当电源突然断电时,电压下降有个过程,CPU在此过程中会失控,可能会误发出写信而冲失RAM中的数据,仅有电池是不能有效完成数据保护的,还需要对片选信号加以控制,保证整个切换过程中CS引脚的信号一直保持接近VCC。
通常,采用在RAM的CS和VCC引脚之间接一个电阻来实现COMSRAM的电源切换,然而,如果在掉电时,译码器的输出出现低电平,就可能出现问题,图1给出一种简单的电路设计,它能够避免上述问题的产生。
STC单片机掉电断电失电瞬间EEPROM数据保存处理办法
STC单片机掉电断电失电瞬间EEPROM数据保存处理办法写作:欧阳autooy871公司:荣致电子科技有限公司(专业电子、程序开发承接商)Q Q:417179642淘宝:由于客户在请人设计开发一设备,但是设备用户处总停电,造成设备及其周边耗材损耗严重,因此请我司在现有STC为主要芯片的基础上做掉电瞬间EEPROM里的20个参数保存,上电后通过读取EEPROM中的参数回到掉电的状态,基于此,荣致电子科技做了大量的工作,并选用了很多种方案:1、通过1法拉大电容做掉电临时备份电池。
2、通过备份电池或者DS1302里的31个字节ram+电池方案。
3、通过MAX813L检测掉电,然后通过普通STC10某个引脚读取MAX813L的第五脚高低电平状态。
4、购买铁电芯片来不停的存储用户数据。
基于以上4种方案,荣致电子科技做了大量的试验与验证工作,最后敲定方案3经济、安全、可靠,并且存储20个参数无任何问题,具体实施细节如下:一、割掉单片机单独供电VCC线路.二、外部进电源VCC接IN5819二极管后单独给单片机供电.三、VCC5V通过4.7K与2K电阻分压给MAX813L第四脚,高于1.25V即可。
四、MAX813L第五脚连接至STC10单片机某个引脚,如:P2.0。
五、通过软件来检测P2.0引脚的电平状态,如果为低,立刻关闭所有的外部输出,然后进行EEPROM的写操作,通过延时约100ms后即可很好的保存在掉电时的动态参数。
通过各类验证,在断电几十次的情况下,所有的参数及执行程序未发生丢失及错误的情况,说明可用。
具体图纸如下:我的PCB图纸:还可以借用MAX813L的复位等功能来实现。
20121212。
关于断电延时和EEPROM数据保存STC掉电保存数据程序
关于断电延时和EEPROM数据保存(申酷!!)EEPROM, 申酷, 数据, 延时, 断电原来想用AD检测断电的,做出来测试几遍不行,听了各位的意见。
就花了一个下午完成用一个I/O断电检测电路。
把法拉电容改小了,节约开支,一个2200uf的普通电容就足够了。
经测试能正常保存数据到EEPROM。
电路见下面的图片链接。
该解决方案的程序:#include <stc12c2052ad.H>#include <intrins.h> //汇编头文件#define uchar unsigned char#define uint unsigned intsbit p12 = P1^2;uchar i;void delay(uint z) //延时ms{uint x,y;for(x=112;x>0;x--)for(y=z;y>0;y--);}void init_232(void) //串口初始化{SCON = 0x50;TMOD |= 0x20;TH1 = 0xfa; //波特率 9600TL1 = 0xfa;PCON |= 0x80;EA = 1;ES = 1;TR1 = 1;}void send_char(uchar w) //串口发送一个字符{SBUF = w;while(TI == 0);TI = 0;}void send_string(uchar *s,uint string_length) //串口发送一个字符串{uint i = 0;do{send_char(*(s + i));i++;}while(i < string_length);}/*EEPROM字符读取*/uchar eeprom_read(uchar x,y){ISP_ADDRH = x;ISP_ADDRL = y;ISP_CONTR = 0x9b;ISP_CMD = 0x01;ISP_TRIG = 0x46;ISP_TRIG = 0xb9;_nop_();ISP_CONTR=0;ISP_CMD=0;ISP_TRIG=0;return(ISP_DATA);}/*EEPROM字符写入*/void eeprom_write(uchar x,y,z){ISP_DATA = z;ISP_ADDRH = x;ISP_ADDRL = y;ISP_CONTR = 0x9b;ISP_CMD = 0x02;ISP_TRIG = 0x46;ISP_TRIG = 0xb9;_nop_();ISP_CONTR=0;ISP_CMD=0;ISP_TRIG=0;/*EEPROM扇区擦除*/void eeprom_erase(uchar x,y){ISP_ADDRH = x;ISP_ADDRL = y;ISP_CONTR = 0x9b;ISP_CMD = 0x03;ISP_TRIG = 0x46;ISP_TRIG = 0xb9;_nop_();ISP_CONTR=0;ISP_CMD=0;ISP_TRIG=0;}void main(){init_232();i = 0;delay(10);while(1){if((p12 == 0) && (i == 0)){eeprom_erase(0x10,0x00); //擦除第一扇区delay(1);eeprom_write(0x10,0x00,0x88); //在第一扇区写入88 delay(1);i = 1;}}}/*串口接收中断函数*/void RS232() interrupt 4uchar ch = 0;if(RI){ch = SBUF;RI = 0;send_char(ch);}switch(ch){case 1: send_char(eeprom_read(0x10,0x00)); //串口助手输入16进制1,读EEPROM第一扇区break;case 2: send_char(eeprom_read(0x12,0x00)); //串口助手输入16进制2,读EEPROM第2扇区break;case 3: eeprom_write(0x10,0x00,0x55); //串口助手输入16进制3,写EEPROM第一扇区55break;case 4: eeprom_write(0x12,0x00,0x66); //串口助手输入16进制4,写EEPROM第2扇区66break;case 5: eeprom_erase(0x10,0x00); //串口助手输入16进制5,擦除EEPROM第一扇区break;case 6: eeprom_erase(0x12,0x00); //串口助手输入16进制6,擦除EEPROM第2扇区break;default: break;}}这是一段stc单片机EEPROM掉电存储程序,麻烦大家帮我看看哈,怎么调用时输出有问题啊,希望给个调用的例子悬赏分:0 - 提问时间2010-8-21 19:32#include < reg52.h >#include < absacc.h >#include < intrins.h >#include " ..\h_files\eeprom.h "/**************************************************************************************************/ void isp_iap_enable ( void ){EA = 0 ; /*关中断*/ISP_CONTR = ISP_CONTR & 0x18 ;ISP_CONTR = ISP_CONTR | WAIT_TIME ;ISP_CONTR = ISP_CONTR | 0x80 ; /*ISPEN = 1*/}/**************************************************************************************************/ void isp_iap_disable ( void ){ISP_CONTR = ISP_CONTR & 0x7f ; /*ISPEN = 0*/ISP_TRIG = 0x00 ;EA = 1 ; /*开中断*/}/**************************************************************************************************/ void isp_iap_goon ( void ){isp_iap_enable ( ) ; /*打开ISP,IAP功能*/ISP_TRIG = 0x46 ; /*触发ISP,IAP命令字节1*/ISP_TRIG = 0xb9 ; /*触发ISP,IAP命令字节2*/_nop_ ( ) ;}/**************************************************************************************************/ UINT8 byte_read ( UINT16 byte_addr ){ISP_ADDRH = ( UINT8 ) ( byte_addr >> 8 ) ; /*地址赋值*/ISP_ADDRL = ( UINT8 ) ( byte_addr & 0x00ff ) ;ISP_COMD = ISP_COMD & 0xf8 ; /*清除低3位*/ISP_COMD = ISP_COMD | RE_COMMAND ; /*写入读命令*/isp_iap_goon ( ) ; /*触发执行*/isp_iap_disable ( ) ; /*关闭ISP,IAP功能*/return ( ISP_DATA ) ; /*返回读到的数据*/}/**************************************************************************************************/ void sector_erase ( UINT16 sector_addr ){UINT16 i_sector_addr ;i_sector_addr = ( sector_addr & 0xfe00 ) ; /*取扇区地址*/ISP_ADDRH = ( UINT8 ) ( i_sector_addr >> 8 ) ;ISP_ADDRL = 0x00 ;ISP_COMD = ISP_COMD & 0xf8 ; /*清空低3位*/ISP_COMD = ISP_COMD | ER_COMMAND ; /*擦除命令3*/isp_iap_goon ( ) ; /*触发执行*/isp_iap_disable ( ) ; /*关闭ISP,IAP功能*/}/**************************************************************************************************/ void byte_write ( UINT16 byte_addr , UINT8 original_data ){ISP_ADDRH = ( UINT8 ) ( byte_addr >> 8 ) ; /*取地址*/ISP_ADDRL = ( UINT8 ) ( byte_addr & 0x00ff ) ;ISP_COMD = ISP_COMD & 0xf8 ; /*清空低3位*/ISP_COMD = ISP_COMD | PR_COMMAND ; /*写命令2*/ISP_DATA = original_data ; /*写入数据准备*/isp_iap_goon ( ) ; /*触发执行*/isp_iap_disable ( ) ; /*关闭ISP,IAP功能*/}提问者:smu_east - 一级网友推荐答案/**************************************************************************************************** ********************************/#include <reg52.h>#include <stdio.h>#include <string.h>#include <intrins.h>/**************************************************************************************************** ********************************/#define Uchar unsigned char#define Uint unsigned int#define Ulong unsigned long//定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数#define ENABLE_ISP 0x83 //系统工作时钟<12MHz 时,对IAP_CONTR 寄存器设置此值/**************************************************************************************************** ********************************/sfr IAP_DATA = 0xE2;sfr IAP_ADDRH = 0xE3;sfr IAP_ADDRL = 0xE4;sfr IAP_CMD = 0xE5;sfr IAP_TRIG = 0xE6;sfr IAP_CONTR = 0xE7;/**************************************************************************************************** ********************************///全局变量及共用体变量/**************************************************************************************************** ********************************/Uchar buff[8];Uchar buff1[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};union union_temp16{ Uint un_temp16;Uchar un_temp8[2];}my_unTemp16;//定义共用体,给存储eeprom使用/**************************************************************************************************** ********************************///函数声明区/**************************************************************************************************** ********************************/void Read_8byte(Uchar *buf,Uint add,Uchar bitt); //读多个字节,调用前需打开IAP 功能void Program_8byte(Uchar *buf,Uint add,Uchar bitt);//写多个字节,调用前需打开IAP 功能void Sector_Erase(Uint add); //擦除扇区void IAP_Disable(); //关闭IAP 功能void Delay(); //延时函数void mcu_ini(void);//mcu初始化函数/**************************************************************************************************** ********************************///主函数区/**************************************************************************************************** ********************************/void main (void){Uchar i;P1 = 0xF0; //演示程序开始,让P1[3:0] 控制的灯亮Delay(); //延时P1 = 0x0F; //演示程序开始,让P1[7:4] 控制的灯亮Delay() ; //延时Sector_Erase(0x4000); //擦除整个扇区Program_8byte(buff1,0x4000,8);P2 = 0x55;//P2.7亮Read_8byte(buff,0x4000,8);while (1)//CPU 在此无限循环执行此句{P0 = ~buff[i];Delay(); //延时i++;if(i==8){i=0;P2 ^= 0xff;Delay();}//延时}}/**************************************************************************************************** ****************************///读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节/**************************************************************************************************** ****************************/Uchar Byte_Read(Uint add){IAP_DATA = 0x00;IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间IAP_CMD = 0x01; //IAP/ISP/EEPROM 字节读命令my_unTemp16.un_temp16 = add;IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址//EA = 0;IAP_TRIG = 0x46; //先送5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xB9; //送完A5h 后,ISP/IAP 命令立即被触发起动_nop_();//EA = 1;return (IAP_DATA);}/**************************************************************************************************** ****************************///读多个字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节/**************************************************************************************************** ****************************/void Read_8byte(Uchar *buf,Uint add,Uchar bitt){ Uchar i;for (i=0;i<bitt;i++){buf[i]= Byte_Read(add+i);}IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关}/**************************************************************************************************** ****************************///字节编程,调用前需打开IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据/**************************************************************************************************** ****************************/void Byte_Program(Uint add, Uchar ch){IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间IAP_CMD = 0x02; //IAP/ISP/EEPROM 字节编程命令my_unTemp16.un_temp16 = add;IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址IAP_DATA = ch; //要编程的数据先送进IAP_DATA 寄存器//EA = 0;IAP_TRIG = 0x46; //先送5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xB9; //送完A5h 后,ISP/IAP 命令立即被触发起动_nop_();//EA = 1;}/**************************************************************************************************** ****************************///多字节写入函数/**************************************************************************************************** ****************************/void Program_8byte(Uchar *buf,Uint add,Uchar bitt){ Uchar i;for (i=0;i<bitt;i++){Byte_Program(add+i, buf[i]);}IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关}/**************************************************************************************************** ***********************************///扇区擦除, 入口:DPTR = 扇区地址/**************************************************************************************************** ***********************************/void Sector_Erase(Uint add){IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间IAP_CMD = 0x03; //IAP/ISP/EEPROM 扇区擦除命令my_unTemp16.un_temp16 = add;IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址//EA = 0;IAP_TRIG = 0x46; //先送5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xB9; //送完A5h 后,ISP/IAP 命令立即被触发起动_nop_();//EA = 1;IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关}/**************************************************************************************************** ***********************************///关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关/**************************************************************************************************** ***********************************/void IAP_Disable(){IAP_CONTR = 0; //关闭IAP 功能IAP_CMD = 0; //清命令寄存器,使命令寄存器无命令,此句可不用IAP_TRIG = 0; //清命令触发寄存器,使命令触发寄存器无触发,此句可不用IAP_ADDRH = 0;IAP_ADDRL = 0;}/**************************************************************************************************** ***********************************///延时函数/**************************************************************************************************** ***********************************/void Delay(){Uchar i;Uint d=100;while (d--){i=255;while (i--);}}你这个是STC89系列的EPROM代码要是STC12C系列就不一样了回答者:yoya0303 - 八级2010-8-24 20:06这个是连续读写8个字节的程序我调试过了,直接ctrl+c,ctrl+v,主程序调用就可以了#define IAP_BYTE_READ 1#define IAP_BYTE_WRITE 2#define IAP_BYTE_ERASE 3#define ENABLE_IAP 0x84#define EEPROM_DATA_ADDR 0x00UCHAR EEPROM_data[8];UCHAR EEPROM_num;UCHAR EEPROM_addr;void read_EEPROM_DATA(){EEPROM_addr=25;for(EEPROM_num=0;EEPROM_num<8;EEPROM_num++){IAP_ADDRH=0x00;IAP_ADDRL=EEPROM_addr;IAP_CONTR=ENABLE_IAP;IAP_CMD=IAP_BYTE_READ;IAP_TRIG=0x5a;IAP_TRIG=0xa5;nop();EEPROM_data[EEPROM_num]=IAP_DATA;IAP_CONTR=0x00;IAP_CMD=0x00;EEPROM_addr++;}IAP_TRIG=0xff;IAP_ADDRH=0xff;IAP_ADDRL=0xff;}void write_EEPROM_DATA(){EEPROM_addr=25;for(EEPROM_num=0;EEPROM_num<8;EEPROM_num++) {IAP_DATA=EEPROM_data[EEPROM_num];IAP_ADDRH=0x00;IAP_ADDRL=EEPROM_addr;IAP_CONTR=ENABLE_IAP;IAP_CMD=IAP_BYTE_WRITE;IAP_TRIG=0x5a;IAP_TRIG=0xa5;nop();nop();nop();nop();IAP_CONTR=0x00;IAP_CMD=0x00;EEPROM_addr++;Delay_10ms();}IAP_TRIG=0x00;IAP_ADDRH=0xff;IAP_ADDRL=0xff;}。
单片机系统中的掉电检测与数据存储问题
单片机系统中的掉电检测与数据存储问题
1)总体思路由于电能表的计量是要求持续性的,而主供电系统不可能是持续的,注意这里需要一个掉电检测与数据存储的问题。
首先检测出供电系统已经断电,然后启用备用电源存储数据,而且数据必须存储在掉电不易失的存储器(如EEPROM,FLASH 等)中。
本应用中,需要检测出掉电后备用电源能提供足够的电能供单片机进行数
据存储。
总体思路,本应用中单片机采用的是STC89C58RD+,单片机内部已经集成了16K 的EEPROM,所以不需要另外外接存储器。
ADE7755 已经自带了电源监控功能,前面的ADE7755 的介绍中已经有所描述,所以亦无须担心。
这里只需要解决好单片机的掉电问题即可。
在系统的稳压前端设置监测点,当监测点的电压下降到另一个基准比较电压时产生单片机外部中断。
当单片机接收到外部中断后启动数据存储程序,将数据存储到片内EEPROM 内。
当主供电系统恢复供电后,单片机首先读取EEPROM 数据,然后再恢复计数。
2)掉电检测
有电压采集转换、电压比较等方案。
经过综合考虑,这里采用LM393 比较
器来对比监测点与参考点电压,一旦监测点电压降到某种程度,比较器就会有高电平输出,由此产生单片机外部中断。
另外有一种反其道而行之的方案。
在降压后的交流端加一个光耦产生中断,一旦中断消失程序转向数据存储。
3)备用电源
虽然备用电源可以采用可充电电池,大电容等方案,但由于这里所需要的电量并不是很大,持续时间也不需要很长,只需要能完成数据存储即可。
所以这里选择了大电容作为备用电源这一方案。
选择了在稳压后端与单片机电源端直。
一种具有掉电数据保持功能的触发器设计
一种具有掉电数据保持功能的触发器设计
张怡云;陈后鹏;王倩;许伟义;金荣;宋志棠
【期刊名称】《微电子学与计算机》
【年(卷),期】2012(29)7
【摘要】提出了一种用相变器件作为可擦写存储单元的具有掉电数据保持功能的触发器电路.该触发器由四部分组成:具有恢复掉电时数据的双置位端触发器DFF、上电掉电监测置位电路(Power On/Off Reset)、相变存储单元的读写电路(Read Write)和Reset/Set信号产生电路,使之在掉电时能够保存数据,并在上电时完成数据恢复.基于0.13μm SMIC标准CMOS工艺,采用Candence软件对触发器进行仿真,掉电速度达到0.15μs/V的情况下,上电时可以在30ns内恢复掉电时的数据状态.
【总页数】4页(P4-7)
【关键词】相变存储器;掉电数据保持;触发器;双置位
【作者】张怡云;陈后鹏;王倩;许伟义;金荣;宋志棠
【作者单位】中国科学院上海微系统与信息技术研究所,信息功能材料国家重点实验室,纳米技术研究室
【正文语种】中文
【中图分类】TN433
【相关文献】
1.具有掉电保护功能的生产线智能监控系统的设计 [J], 杨其锋;李雪
2.如何用数据库触发器的功能来保持数据的完整性和一致性 [J], 朱新涛
3.一种具有自动唤醒功能的掉电接口电路 [J], 陈敦珙
4.一种新型低漏功耗数据保持触发器设计 [J], 邬杨波;董恒锋;雷师节
5.一种实用的具有自动检测掉电并实施数据保护功能的技术 [J], 许志强
因版权原因,仅展示原文概要,查看原文内容请购买。
利用电容实现掉电存储
用法拉电容从容实现单片机掉电数据保存公式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欧电阻还消除了"巨量法拉电容"的上电浪涌.实现冲电电流削峰。
单片机接法拉电容
单片机接法拉电容单片机接法拉电容一、引言数字电子技术的发展,使得单片机得到了广泛的应用。
而在单片机的各种应用中,接法拉电容是一项常见而重要的任务。
接法拉电容可以用来检测电容或者用来实现电容的控制,既可以用于模拟电路,也可以用于数字电路。
在本文中,将会详细介绍单片机接法拉电容的原理、方法和应用。
二、原理法拉电容是指通过两个电极之间的电介质存储电荷的能力。
电容器的电容C与两个电极之间的电位差U和电荷量Q之间有如下关系:C=Q/U。
根据这个关系,我们可以通过测量电容C 来得到电容器中的电荷量。
而单片机可以通过外部引脚与电容器相连,以获取电容器中的电荷量。
三、方法1. 串联法串联法是将电容器的一端与单片机的输入引脚相连,另一端与地相连。
单片机通过计算输入引脚上的电压变化,来间接获得电容器的电荷量。
这种方法适用于小容值电容器。
2. 并联法并联法是将电容器的一端与单片机的输出引脚相连,另一端与地相连。
通过单片机输出高低电平信号的变化,来改变电容器的充电和放电过程,从而达到测量电容的目的。
这种方法适用于中大容值电容器。
四、具体实现接法拉电容的实现有很多细节问题,下面将以串联法为例,对其中的一些关键问题进行详细讨论。
1. 引脚选择输入引脚的选择要尽量避免使用带有特殊功能的引脚,以免影响其他功能的正常使用。
同时,选择的引脚要有足够的输入电流和输入电压范围。
2. 滤波电路对于串联法,要尽可能保证输入引脚上的电压的稳定性,避免电容器的电荷量的改变对电压的干扰。
这可以通过添加适当的滤波电路来实现,例如使用一个低通滤波器。
3. 单片机内部输入电阻单片机内部引脚的输入电阻影响了电容器充电和放电的过程。
为了提高测量精度,通常会选择有较高输入电阻的单片机。
4. 电容器的放电在使用串联法时,要确保电容器放电完成后再进行下一次测量,否则会引入误差。
可以通过添加一个放电电路来实现,例如在一个引脚上连接一个电阻,通过单片机控制该引脚的输出电平来实现电容器的放电。
单片机接法拉电容
单片机接法拉电容
摘要:
1.单片机和电容的基本概念
2.法拉电容的特点
3.单片机接法拉电容的接法
4.注意事项
正文:
一、单片机和电容的基本概念
单片机,又称微控制器(Microcontroller Unit, MCU),是一种集成了CPU、存储器、外设接口等多种功能于一体的微型计算机。
电容是一种电子元件,其主要作用是储存电荷、滤波、耦合等。
二、法拉电容的特点
法拉电容,又称超级电容,是一种大容量电容器。
它具有以下特点:
1.容量大:法拉电容的容量可以达到数千至数万微法拉,甚至更大。
2.额定电压低:法拉电容的额定电压通常在2.5V 至5V 之间,因此需要串联使用以满足高电压需求。
3.充放电速度快:法拉电容的充放电速度相对较快,可以实现快速充放电。
4.循环寿命长:法拉电容具有较长的循环寿命,可以进行多次充放电。
三、单片机接法拉电容的接法
在单片机系统中,法拉电容通常用于电源滤波、备份电源等场景。
以下是
单片机接法拉电容的一种常见接法:
1.首先,将法拉电容的两个引脚分别连接到单片机的电源输入端和地(GND)。
2.其次,为了限制电流,可以在电容的负极(地)串联一个适当的电阻。
3.最后,为了防止电容电压过高损坏单片机,可以在电容的正极并联一个稳压二极管(例如3.3V 或5V)。
四、注意事项
1.选择合适的电容容量和额定电压,以满足单片机的需求。
2.接线时要注意电容的正负极,长脚为正极,短脚为负极。
3.焊接时要保证电容和电阻、二极管的焊接牢固,以防止接触不良导致电路故障。
单片机系统中法拉电容的数据保护研究
单片机系统中法拉电容的数据保护研究引言在测量、控制等领域的嵌入式系统应用中,常要求系统内部和外部数据存储器(RAM)中的数据在电源掉电时不丢失,重新加电时RAM 中的数据能够保存完好,以保证系统稳定、可靠地工作和数据信息处理的安全。
这就要求对系统加接掉电保护措施。
掉电保护可采用以下三种方法:一是加接不问断电源。
由于这种方法体积大、成本高,对单片机系统来说,不宜采用。
二是采用EEPROM 来保存数据。
但由于其读写速度与读写次数的限制,使得EEPROM 不能完全代替RAM。
三是采用备份电池,掉电后保护系统中全部或部分数据存储单元的内容。
显然,上述第三种方法是比较可行的。
实际应用中,往往采用内置锂电池的非易失性静态随机存取存储器(nonvolatile SRAM)。
例如Dallas 半导体公司的DS1225,由于采用锂电池作为存储器备份电源,数据可以完好保存10 年以上。
但这种方案的缺点是成本高,且锂电池会造成环境污染。
法拉电容也叫超级电容器,双电层电容,其体积小、容量大、电压记忆特性好、可靠性高。
与充电电池相比,具有充电时间短、功率密度高、使用寿命长、低温特性好及无环境污染等优势。
在数据保护电路中采用法拉电容取代电池作后备电源,在提高系统可靠性、延长寿命、降低设备成本和维护成本等方面,有十分重要的意义。
本文将通过一个设计案例,具体介绍法拉电容在单片机系统的RAM 数据保护中的应用,为嵌入式系统中RAM 数据保护提供一种可行的参考方法。
某一采用UT6264C-70LL 作为RAM 的单片机系统,在系统掉电后,要求RAM 的数据后备时间达到5 天。
1 硬件设计采用法拉电容作为RAM 后备电源,法拉电容后备时间的典型计算公式为:式中:C(F)为法拉电容的标称容量,Umin(V)为电路中的正常工作电压,。
单片机掉电保护总结完整版
单片机掉电保护总结Document serial number [NWwT-\Y9SYT-NC8CB-XXLLT-XLT1O8]单片机应用系统断电时的数据保护方法在测量、控制等领域的应用中,常要求单片机内部和外部RAM中的数据在电源掉电时不丢失,重新加电时,RAM中的数据能够保存完好,这就要求对单片机系统加接掉电保护电路。
掉电保护通常可采用以下三种方法:一是加接不间断电源,让整个系统在掉电时继续工作,二是采用备份电源,掉电后保护系统中全部或部分数据存储单元的内容;三是采用EEPROM来保存数据。
由于第一种方法体积大、成本高,对单片机系统来说,不宜采用。
第二种方法是根据实际需要,掉电时保存一些必要的数据.使系统在电源恢复后,能够继续执行程序,因而经济实用,故大量采用[1]。
EEPROM既具有ROH掉电不丢失数据的特点,又有RAM随机读写的特点。
但由于其读写速度与读写次数的限制,使得EEPROM 不能完全代替RAM。
下面将介绍最常用的一些掉电保护的处理方法,希望能对相关设计人员在实际工作中有所帮肋。
1简单的RAM数据掉电保护电路在具有掉电保护功能的单片机系统中.一般采用CMOS单片机和CHOSRAM。
CMOS 型RAH存储器静态电源小,在正常工作状态下一般由电源向片外RAM供电,而在断电状态下由小型蓄电池向片外RAM供电,以保存有用数据.采用这种方法保存数据,时间一般在3-5个月[2]。
然而,系统在上电及断电过程中,总线状态的不确定性往往导致RAM内某些数据的变化,即数据受到冲失。
因此对于断电保护数据用的RAH存储器,除了配置供电切换电路外,还要采取数据防冲失措施,当电源突然断电时,电压下降有个过程,CPU在此过程中会失控,可能会误发出写信而冲失RAH中的数据,仅有电池是不能有效完成数据保护的,还需要对片选信号加以控制,保证整个切换过程中CS引脚的信号一直保持接近VCC O通常,采用在RAH的CS和VCC引脚之间接一个电阻来实现COMSRAM的电源切换,然而,如果在掉电时,译码器的输出出现低电平,就可能出现问题,图1给出一种简单的电路设计,它能够避免上述问题的产生。
基于法拉电容的智能仪器仪表掉电保护方案
收稿日期:2010-07-10基金项目:国家创新基金项目(07C26215111917)作者简介:林茂疆(1985—),男,浙江省人,硕士,主要研究方向为嵌入式系统与机电一体化控制。
基于法拉电容的智能仪器仪表掉电保护方案林茂疆,鄢萍,易润忠,刘飞(重庆大学制造工程研究所,重庆400030)摘要:针对智能仪器仪表高稳定性、高可靠性的需求和恶劣工业运行环境的矛盾,设计了一种基于法拉电容的掉电保护方案。
采用法拉电容作为后备电源在系统失电时为系统供电,并针对法拉电容快速充放电的特性,设计了相应的外围电路,并采用BOOST 电路提高电容能效;软件完成触发信号检测、保存数据、关闭系统配合硬件有效的实现智能仪器仪表的掉电保护。
通过实验验证了方案,并得到成功的应用。
关键词:法拉电容;智能仪器仪表;掉电保护中图分类号:TM 53文献标识码:A 文章编号:1002-087X(2010)12-1292-04Super-capacitor based power-down protection for intelligent instrumentsLIN Mao-jiang,YAN Ping,YI Run-zhong,LIU Fei(Manufacturing Engineering Institute,Chongqing University,Chongqing 400030,China)Abstract:A kind of super-capacitor based power-down protection was designed aiming to solve the contradiction of intelligent instrumentation for high stability,reliability requirements and harsh industrial environments.Super-capacitor was used as a back-up power in the system when the system lost power supply andcorresponding peripheral circuitswasdesigned for the super-capacitor'sfast charging and dischargingcharacteristics.BOOST convertor was applied for super-capacitor circuit to improve energy efficiency.Software was designed to check triggering signal and save essential data and close the system in the power-down protection.It is verified by experiment and applied successfully.Key words :super-capacitor;intelligent instruments ;power-down protection 智能仪器仪表运行的工业环境较为恶劣,电网的波动、感性负载的瞬态变化都严重干扰智能仪器仪表的正常供电和运行,特别是在医疗器械、生物电子、军工伺服系统等领域,关键数据的丢失,控制失步等都将造成严重的后果。
单片机接法拉电容
单片机接法拉电容(原创实用版)目录1.单片机的基本概念和作用2.法拉电容的基本概念和作用3.单片机接法拉电容的方法和步骤4.单片机接法拉电容的注意事项5.结论正文一、单片机的基本概念和作用单片机,全称为单片微型计算机,是一种具有存储程序和数据、能够进行逻辑运算和定时/计数等功能的微处理器。
单片机具有体积小、成本低、功耗低、功能强大等特点,广泛应用于各种嵌入式系统和自动控制领域。
二、法拉电容的基本概念和作用法拉电容,又称为超级电容器,是一种具有很高电容量、很小内阻、很长使用寿命的电容器。
法拉电容的主要作用是储存电能,用于提供瞬间大电流、滤波、稳压等。
它具有充电速度快、循环寿命长、低温特性好等特点,广泛应用于电子设备和工业控制等领域。
三、单片机接法拉电容的方法和步骤1.首先,根据单片机的工作电压范围和法拉电容的额定电压选择合适的电容器。
2.将法拉电容的两个引脚分别连接到单片机的电源引脚和地引脚。
注意,电容器的正极应连接到电源正极,负极应连接到电源负极。
3.为了防止电容器充电过快导致损坏,可以在电容器的正极和负极之间串联一个合适的电阻。
4.为了方便电容器的更换和维修,可以使用接线端子将电容器与单片机连接。
四、单片机接法拉电容的注意事项1.选择合适的电容器:根据单片机的工作电压范围和电流需求,选择电容量合适、额定电压相匹配的法拉电容。
2.避免电容器过充:在充电过程中,应控制充电电流,避免过大的充电电流导致电容器过充而损坏。
3.防止电容器过热:在使用过程中,应注意电容器的温度,避免长时间高温工作导致电容器性能下降或损坏。
4.定期检查和更换:根据电容器的使用寿命和实际使用情况,定期检查电容器的状态,如发现性能下降或损坏,应及时更换。
五、结论单片机接法拉电容是一种有效的电能储存方式,可以为单片机系统提供瞬间大电流、滤波、稳压等功能。
单片机接法拉电容
单片机接法拉电容摘要:1.单片机简介2.法拉电容简介3.单片机接法拉电容的注意事项4.实际应用案例正文:1.单片机简介单片机(Microcontroller Unit,简称MCU)是一种集成了CPU、存储器、外设接口等多种功能于一体的微型计算机。
它具有体积小、成本低、功耗低、功能强大等特点,广泛应用于嵌入式系统、自动化控制、智能家居等领域。
2.法拉电容简介法拉电容(Falstad Capacitor),是一种具有极高电容值的超级电容器。
它的单位为法拉(F),相较于普通电容器的微法(pF)或纳法(nF)单位,其电容值要大得多。
法拉电容具有快速充放电、高功率密度、长寿命等优点,常应用于能源存储、电动车辆、太阳能发电等领域。
3.单片机接法拉电容的注意事项当单片机与法拉电容连接时,需要注意以下几点:(1)选择合适的电源管理策略。
由于法拉电容的充放电特性,可能需要在单片机电源管理中加入专门针对法拉电容的充电控制和放电控制。
(2)考虑电磁干扰(EMI)。
法拉电容在充放电过程中会产生较大的电流变化,可能引起电磁干扰。
因此,在设计电路时,需要考虑采取屏蔽、滤波等措施,以减小电磁干扰对单片机的影响。
(3)保护电路。
法拉电容的电压和电流都较大,为了避免对单片机造成损害,需要在电路中加入保护器件,如保险丝、TVS等。
4.实际应用案例某智能家居系统采用了单片机控制,通过一个1000F的法拉电容为系统提供备用电源。
在家庭停电的情况下,系统可以自动切换到法拉电容供电,保证系统的正常运行。
单片机通过控制电源管理电路,对法拉电容进行充放电管理,实现备用电源的自动切换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用法拉电容从容实现单片机掉电数据保存
2009-05-25 21:49
今天,因为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,既然知道了这个问题,大家就清楚:
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.47F 的电容从5.5V 跌落到4.5V(甚至可以下到3.6V)所能维持的单片机掉电工作时间.
这里设单片机工作电流为
T=1V*0.47*1000(1000是因为工作电流为豪安)/20=23.5秒!!!!!
天!这个时间对单片机而言简直相当于从原始社会到共产主义社会的历史慢长.休说是从容写入内部FLASH ROM 掉电保护数据,就是把芯片从新写入新程序都可以写5次!!!!!!!!!!。