工业现场中嵌入式系统抗干扰与容错技术
一、引言
对于微机嵌入式应用系统,系统的可靠性是至关重要的,只有高可靠性才能保证系统正常运行。在工业现场,因工作环境恶劣,干扰源较多,对于那些需要作连续数据记录的智能仪器对系统的可靠性要求更高,这类仪器的特点是:能够根据用户的要求选择量程范围,掉电时进行数据保护记录,其中包括用户设定的量程参数和累加记录的数据结果等;而当系统上电恢复工作时又能将保存的数据准确的读出,并在此基础上继续作累加记录。但在上电或掉电阶段,系统工作状态往往不够稳定,容易造成读写数据错误,需要在硬件和软件设计上采取抗干扰和容错措施。本文以智能电能表的抗干扰设计为例,根据电能表的工作环境特点,分析了影响电能表可靠性的因素,并针对影响其可靠性最为严重的供电系统干扰,提出了相应的抗干扰措施。
二、系统功能电路图
图1给出系统中与本文内容相关的功能电路图,其功能是实现系统掉电时记录数据保护,系统上电工作时恢复记录数据。
图1 系统功能图
电路中包括一个单片机AT89C52,一个看门狗芯片MAX813,一个E2PROM存储芯片AT24C02,一个电压比较器A由LM393芯片构成,两个反相器由74HC04芯片构成。两反向器用于实现电压匹配,以确保外部中断信号电压在0~5V。电压比较器是在系统掉电时发出外部中断信号,保证系统在停止工作前,将记录在单片机内部RAM中的数据,保存到掉电保护芯片AT24C02中。图中仅用了一片AT24C02,所以片选端A0、A1和A2接地。WP为写保护输入端即当其为高电平时具有写保护功能,低电平时可进行正常的读写,SCL为串行时钟输入端,SDL为串行数据输入输出端。AT24C02是Atmel公司生产的,具有I2C总线接口的串行E2PROM。AT24C02自定时写周期包括自动擦除时间不超过10ms,典型时间为5ms,擦写次数一般为10万次以上,写人数据的有效保存时问一般可达100年,采用单一电源供电,电源电压为5V。
三、影响系统正常工作的干扰因素
对于微机应用系统来说,工作环境中会遇到各种干扰,按窜入微机系统的渠道主要有三种:空间干扰,如电磁辐射;供电系统干扰,如电网的欠压或过压等;过程通道干扰,如测量通道中的干扰。其中供电系统的干扰最为严重。大部分微机嵌入式系统的直流电源都是通过市电经过整流、稳压、滤波后提供的,然而电网电压并非纯净的正弦波,其污染程度不容忽视。在工矿企业中,电网的污染主要来自各电气设备的投切、故障跳闸和对地短路等原因。
对一机械制造厂车间电网的监测表明,平均2~3小时出现一次欠压,最大欠压约为40伏,最长时间达2秒,平均为0.3秒。平均5~6小时出现一次过压,最大过压为17伏,最大过压时间为0.8秒,平均为0.2秒。
另外,除电网窜入的干扰外,电源电路本身也是一个干扰源,例如电源电路本身产生的纹波和自激振荡,开关电源产生的尖锋脉冲噪声等。研究表明,浪涌与下陷幅度过大也会影响系统正常工作,如果有连续几个±10%。±15%的浪涌或下陷,由此造成的振荡能产生±30%~±40%的电源电压变化,而使系统无法正常工作。
造成系统数据记录错误的原因,主要集中在系统上电阶段和系统工作阶段电网电压波动,即供电系统产生的干扰。因而本文针对供电系统产生的干扰,在系统硬件上和软件上分别采用相应的抗干扰措施。
另外,对于记录数据准确性要求极高的系统,为了保证记录数据的准确可靠,防止系统在读写数据时造成的数据错误以及存储器部分存储单元损坏造成的记录数据错误,还必须通过多次记录的方法,即数据备份冗余来提高系统的容错能力。
四、系统硬件抗干扰措施
对于具有掉电保护记录功能的系统,必须提高供电系统供电质量,如使用各种稳压器、电源调节器等措施消除电网噪声影响。对于印刷电路板电感造成的供电电压上升缓慢的影响,可采用给PCB板上的集成电路增加去耦电容方法来解决,电容容量一般取0.01μF~0.1μF。
为了有效地消除系统因电源电压波动造成误中断的影响,在系统硬件电路上仍要采取相应的措施,解决由电网电压波动造成的电压比较器A的误翻转。为此,本系统电路中的电压比较电路采用施密特电路结构,施密特电路的特点是抗干扰能力强,能够有效地消除电路中各种噪声和电压波动的影响,使比较器输出波形不因各种干扰的影响而出现无故的翻转,从而减少因干扰而引起的误中断信号,保证整个系统的正常工作,也可减少AT24C02的误擦写次数,从而可以提高AT24C02的使用寿命,提高整个系统的可靠性。
五、系统软件抗干扰措施
硬件上虽对电压波动的干扰采取了一定措施,但对CPU与存储器的工作状态匹配,系统上电过程中产生外部误中断干扰及系统工作过程中的电压波动的误中断的克服仍需采用软件方法。软件的抗干扰措施主要是针对两个方面的干扰影响:一个是系统上电阶段,系统工作不协调可能出现的数据读写错误;一个是系统工作过程中供电电压波动干扰造成的误中断,而造成不必要的对AT24C02的写操作。
对于智能累加性记录仪器,刚开始工作时,必须读出上次记录结果,以及用户所设定的一些量程和换算比例参数等。在系统上电过程中,存在两种造成读写数据出错的干扰。 1. 对供电电源上升缓慢干扰的克服
由于PCB板印制线条电感的影响,电源电压上升缓慢,当CPU已正常工作时,电压比较电路输出仍为低电平,发出外部中断信号。虽然AT24C02带有写保护端,但因系统工作不稳,如不采取必要的软件处理措施,仍会使系统产生中断响应,而误改记录结果,即将上电阶段CPU的RAM中的随机数写入AT24C02。因此,必须在软件上使CPU等待,只有当比较电路输出电平为高后,才允许CPU读外部存储器中的数据,然后才可打开中断,允许中断。
2. 对系统各部分工作状态不匹配干扰克服
系统上电过程中,还存在CPU和存储器工作状态的匹配问题,即在读取数据前,必须先判断外部存储器是否已正常工作。因此,需测试AT24C02的工作状态,即向存储器中送入特征字,然后再读出来,并判断结果是否与送入的特征数据一样,如相同,证明外部存储器已正常工作,否则等待10ms,再送入特征字,直到读出结果和写入的数据相同,特征字可用55H(01010101B)或AAH(10101010B)。但由于AT24C02擦写次数是有限的,为防止可能出现的恶性情况,当测试3次仍不正确的话,CPU进入死循环,在死循环中不访问看门狗,超过一定时间后(大约1.6s,看门狗允许最大访问时间间隔),看门狗发出复位信号,重新启动CPU。系统启动过程抗干扰程序实现流程图如图2所示。
当系统正常工作后,对于电网电压欠压造成的电压波动,虽在硬件上采用了抗干扰措施,但当欠压过大,仍会使电压比较器误翻转,引起不必要的外部中断。在软件上仍需进行必要的处理,即在进入外部中断响应后,程序需等待300ms,并判断外部中断信号是否仍为低电平,当外部中断信号电平变高时,应结束中断,返回正常工作;当300ms后仍为低电平,CPU才进行记录数据保护记录。300ms是根据电网的欠压的平均值确定的。
六、系统的容错措施
对于数据记录准确性要求极高的微机系统,除了必要的抗干扰措施,还必须具有容错能力。所谓的容错,就是通过增加冗余资源的方法来掩盖故障造成的影响,使得系统即使出错或发生故障,其功能仍不受影响。对于数据记录的容错方法就是通过数据多次备份。本系统中采用了常用的三模冗余(Triple Modular Redundancy,TMR)方法,即对需要记录的数据记录三次,读出时两两进行比较,以比较结果来决定记录结果正确与否。只有当至少两个记录结果相同时,系统才能以此为基础继续累加记录,否则发出出错信号报警。通过多次记录能有效地克服单次记录可能造成的错误,并能有效地弥补因存储器部分存储单元物理介质损坏而造成的数据记录结果破坏,有效地提高了系统的可靠性。
上述软件抗干扰措施具体实现代码如下:
wdi equ p3.4
wp equ p3.5
ORG 0000H
ljmp main
ORG 0003H
ljmp int0
ORG 0030H
Main:……
setb wp;AT24C02写保护,禁止写入,但可正常读
wait0:cpl wdi;访问看门狗
jnb p3.2,wait0;查看外部中断电压信号是否已变高
mov r1,#10;当外部中断消失后再等l0ms
waita:mov r0,#250
wait1:cpl wdi
nop
djnz r0,waitl
jnb p3.2,wait0
djnz r1,waita
clr wp;取消写保护
mov r0,#3
retry:mov a,#55H;正常后,检查外部存储器是否正常工作送人;特征字#55H
mov b.#XXH;#XXH为外部存储器的一个存储单元地址
lcall wrt24c02
mov a,#XXH
lcall rd24c02
cjne a,#55H,number
……;省略的为读出记录数据和结果比较程序
setb ea:开中断进入主循环
limp loop
number:djnz r0,retry
waitrest:ajmp waitrest;等待看门狗复位,重启
loop:……
……
ljmp loop
int0:push psw
push acc
mov r0,#100
intwait0:mov r1#250
intwaitl:cpl wdi;进人中断后等待大约l00ms,以防止电;网波动造成的误中断
nop
djnz r1,intwaitl
djnz r0,intwait0
jb p3.2,noclose;当l00ms后中断信号消失,结束中断
mov r0,#ramaddreH;#ramaddreH为CPU中记录数据的地址,有两个字节
mov b,#rom24c02H;#rom24c02H为E2PROM中要写入的单元地址
mov a,@r0
lcall wrt24e02
inc r0
mov a,@r0
mov b,#rom24c02H+1
lcall rt24c02
intwait:ajmp intwait;数据写完以后,在此等待直到完全关机
noclose:pop acc
pop psw
reti
……
end
wrt24c02,rd24c02是写和读AT24C02子程序,由于AT89C52无I2c串行接口,所以是以软件模拟12C串口。因篇幅有限,这里省略了有关读写程序。
需要说明的是,对于进入外部中断int0后,在进行数据保存前,等待300ms,这一时间是根据电网欠压平均时间确定的,但要确保外部电源下降到CPU停止工作前,即2.7V前,将要保存的数据可靠地写入AT24C02中。本文中的电能表电能读数的表示是用三个字节来表示的,并且每一个数据要保存三次,共需写入9个字节,每个字节写操作需5ms,共要45ms,考虑可能出现最长的写入时间,故选择总写入时间为100ms。因而需要选择合适的分压电阻R6和R8或稳压二极管z来确保电压比较器的翻转时机,用以保证系统在掉电时响应外部中断到停止工作前,有0.4s的时间间隔,确保将要保存的数据可靠地写入存储器,又尽可能地减少因误中断造成的不必要的数据擦写。
七、结束语
实际应用结果表明,采用上述的硬件和软件两方面的抗干扰设计方法及数据冗余措施,大大地提高系统的可靠性和容错性,有效地克服了各种干扰因素造成记录数据出错的可能性,保证存储数据的准确性,提高了产品在工业现场适应性。因而,对于智能记录仪器的数据记录来说,这一硬件和软件相结合的抗干扰设计方法和容错技术是有效的,可行的。
文章版权归西部工控xbgk所有,未经许可不得转载。