刘 麒,王 影
(吉林化工学院信控学院,吉林 吉林 132022)
单片机控制系统的软件抗干扰技术措施*
刘 麒*,王 影
(吉林化工学院信控学院,吉林 吉林 132022)
为了提高单片机控制系统在实际工作中的在软件方面的抗干扰性,基于软件抗干扰方法在单片机中的实现理论,论述了主流软件抗干扰技术的利弊,将C语言与其他多种汇编语言相结合,对现有的软件抗干扰技术的弊端进行分析并予以解决,较之硬件抗干扰技术,所提的软件抗干扰技术可大幅提高控制系统的工作效率并极大的节约了系统计算时间,并且可广泛应用于单片机嵌入式的控制系统中。
51单片机;混合编程语言;抗干扰技术
随着工业自动化程度的快速发展,单片机凭借其优秀的嵌入性以及强大的计算能力,在工业各个行业得到广泛的应用,国内外学者亦对其进行了广泛的研究,而对其控制系统在抗干扰能力方面的研究大多数集中在硬件的改善,硬件的改善可解决一部分影响单片机控制系统的干扰源,而相当大的一部分干扰源则是由软件方面引起的,并且改善软件方面的干扰源所耗成本较低,查找问题迅速,对其控制系统进行较为合适的算法设计,编制适宜的控制程序即可实现高精度采集控制,选用最为合适的控制算法,使单片机控制系统在各类干扰源的影响下可以稳定的运行。
比较目前较为流行的集中汇编语言,C语言(C51)凭借其良好的可读性以及较宽的可复制性,被广泛应用于单片机程序开发中[1]。目前已报道的文献表明,应用软件抗干扰技术较为主流的方法是基于C语言或者基于其他类型的编程语言来实现的,而C51结合多种语言来提高单片机控制系统抗干扰性的研究鲜见报道,在已经报道的文献中亦有多个不适用的方法,因此,本文结合51单片机对其控制系统的抗干扰性进行了详细的研究,首先对其工作原理进行了分析,结合实例着重分析了目前应用较为广泛的抗干扰的方法,并且对于已经报道的文献中所出现的不足予以纠正、改善,对所提的C51结合其他汇编语言进行编程并给出具体控制程序,此类程序具有优异的可复制性,对其稍作修改即可广泛应用于各个行业的控制领域。
基于单片机编制具有模块化特点的控制系统由5个子模块组成,其结构示意图如图1所示。左图是定时中断服务程序,用中断方式产生1 ms或其他适当时间间隔的定时信号,并在中断服务程序中做尽可能少的处理,如计数、设置标识位等。右图是系统主程序,在主程序的主循环中,可以对各种标志进行判断,符合条件则做相应处理,并清除相关标志。
图1 控制系统框图
图1所示的系统初始化子程序是在控制系统运行之初,对单片机的各个子模块状态进行预设的初始化设置,比如对各个控制变量以及数据存储单元赋予最初的设定值;监控模块主要是根据实时被控对象的变化情况来选择应执行的子模块来满足被控对象的稳定运行,其工作模式为一个循环往复的周期循环模式,在监控过程中的中断子程序会进行中断执行,在断点处返回并持续进行工作,在返回到监控模块中,其中断模式包括程序外以及定时器中断等模式;本文所提抗干扰模块是嵌入于各个子模块中的未被占用的内存空间中,本文将对其进行深入分析。
2.1 数字滤波技术
利用单片机搭建的控制系统主要是对被控对象的外部设备进行控制,在单片机控制系统进行被控对象的实时数据采集时,采集的数据并不能精确的反应被控对象的状态,采集数据会伴随着一定的随机误差的产生,此类随机误差不可避免,因为系统中存在着或大或小的随机性干扰源,其会干扰采集到的数据误差具有随机波动性,并且每次采样的数据误差均不相同,但是经过多次数据采样后,对被控对象的多组特性实时数据进行统计分析,发现多组数据具有一定规律的特性,在硬件方面可选用电子滤波器进行滤波,本文主要是在软件方面进行滤波,研究表明,软件数字滤波技术对于精确控制被控对象具有重要作用,其具有极强的实时反应被控对象的特性[2]。
2.1.1 限幅滤波算法
限幅滤波是基于同一数据采集点的相邻两次采集数值差,并将其差值的绝对值进行比较,最终得到最大差值A,对A进行判断,如果小于等于设定精度值,则本次数据采集为有效过程,反之应去除此采集数据延用上一次的采集值。
算法的程序代码如下:
//============================
#define A//允许的最大差值
char data;//上一次的数据
char filter()
{
char datanew;//新数据变量
datanew=get_data();//获得新数据变量
if((datanew-data)>A||(data-datanew>A))
return data;
else
return datanew;
}
说明:限幅滤波法多应用在采集被控对象的温度以及被控对象位置等参数,此类参数的共性为数据变化较慢。
2.1.2 中值滤波算法
此算法是采集一组被控对象的特征数据,将此组采集数据组由小到大进行排序,将位于此组数据中间的采样数据值作为此次采集过程的采样值,此类滤波技术实际上是一种排列取值的运算过程。
算法的程序代码如下:
#define N 11//定义获得的数据个数
char filter()
{
char value_buff[N];//定义存储数据的数组
char count,i,j,temp;
for(count=0;count { value_buf[count]=get_data(); delay();//如果采集数据比较慢,那么就需要延时或中断 } for(j=0;j { for(value_buff[i]>value_buff[i+1] { temp=value_buff[i]; value_buff[i]=value_buff[i+1]; value_buff[i+1]=temp; } } return value_buff[(N-1)/2]; 说明:中值滤波技术可屏蔽掉控制系统偶然因素以及采样设备波动干扰。种植滤波技术适用于数据变化较慢的被控对象,变化较快的数据则不适用。 2.1.3 算术平均值滤波算法 该算法的基本原理很简单,就是连续取N次采样值后进行算术平均。 算法的程序代码如下: char filter() { int sum=0; for(count=0;count { sum+=get_data(); delay(): } return(char)(sum/N); } 说明:被控对象发出的信号具有随机性时宜采用算术平均滤波算法进行滤波。 2.1.4 滑动平均滤波算法 上述的滤波算法均具有一个共性,就是需要进行多次数据采集才能得到一次有效的数据采集点,数据采集数度较慢,不能实时获得被测对象的特征变化。而滑动平均滤波算法只需将本次采集数据与前几次采集数据进行运算,求得其平均值,即可得到有效的采集数据。 程序代码如下: char value_buff[N]; char i=0; char filter() { char count; int sum=0; value_buff[i++]=get_data(); if(i==N) i=0; for(count=0;count sum=value_buff[count]; return(char)(sum/N); } 2.2 软件陷阱技术 2.2.1 空闲ROM存储空间 在对程序语言进行汇编过程中,代码在内存中的存储地址由伪指令来分配,内存中的地址分为固定位置以及重新分配位置2个段位,前者的位置在程序编制之初就已经设定好了相关地址,因此不可改变其地址,而后者可以基于会变软件对程序进行修改,实现对其存储地址再分配的目的,本文拟基于前者进行分析,设定内存空间的存储地址以500 h为起点[6]。 2.2.2 重置堆栈指针SP和中断功能的恢复 目前,国内已报道的文献[7-10]均未对中断功能的恢复进行深入的研究,导致此类干扰是影响控制系统精度的一个重要的因素,大部分研究仅仅给控制系统设定返回功能,将对系统进行重新的初始化以达到控制系统继续正常工作的目的,此种做法具有一定的作用,但是未能较为彻底的从根本上解决这一问题。本文拟将在内存代码存储地址以外的位置,执行中断指令,此种做法的目的是为了可以将各类中断指令分级处理,对于同等级的程序指令可同时接收,并可以对同等级的多个指令进行重置,此方法可以将中断程序指令的作用得到最优化的使用。 当单片机的CPU受到干扰源干扰时,会把系统操作数误以为系统指令程序来存储并执行,导致控制系统程序工作混乱,主要程序代码有以下几种: (1)中断向量区 ORG 0000H START:LJMP MAIN LJMP INT0 NOP NOP LJMP ERR 陷阱 LJMP TOINT NOP NOP LJMP ERR 陷阱 ORG 0040H ERR: (2)在表格区 在表格区的最后安排5 byte的陷阱 TABEL1: DB------------ DB------------ NOP NOP LJMP ERR (3)在未使用的ROM空间 未被程序指令占用的内存空间一般均为OFFH,当程序指令发生跑飞到此位置,其会产生飞流直下的状态,因此应在程序中在固定的程序存储地址程序加入些软件陷阱以准确实时的捕捉跑飞的程序指令。 程序指令如下: ORG 6000H NOP NOP LJMP ERR ORG 7FFBH NOP NOP LJMP ERR (4)在子程序后面 XXXX: ;;;;;;;;;; ;;;;;;;;;; RET NOP NOP LJMP ERR 单片机控制系统的CPU计算时间单位为微秒级,上述程序最多可消耗14个计算时间,也就是说程序指令出现跑飞开始到控制系统将其捕获并进行初始化所耗费的时间极短,小于等于80 μs,而硬件方面的定时器的工作时间单位为毫秒级,远远高于软件汇编程序中断捕获所耗的时间,这亦验证了采用汇编程序复位初始化控制系统可极大程度的节省系统运行时间周期,在系统工作效率以及控制的实时性方面获得了较大的提升。 2.3 软件冗余技术 单片机控制系统是由采集、控制硬件以及与之向匹配的软件(汇编程序指令)组成的,通过将两者进行完美融合实现控制系统协调工作,根据已有文献报道的软件冗余技术应用于控制系统中[7-10],学者们通常采用将空程序指令数设定为设置>3个,以此来解决正常运行的程序中所隐藏的跑飞程序。此种方法并不适用于控制系统正在执行中断程序的过程,会使得控制系统整体失灵。 2.3.1 恢复块技术 恢复块技术基于后向运行策略对系统进行恢复,由主块以及备用块构成,主块与备用块的功能是相同的,控制系统工作时,主块优先工作,并且在其运行结束以后对其性能进行测试,若其验收结果未达到设定标准,则启动备用块重新进行采集控制运行。 图2 恢复块方法 冗余系统的冗余单元设计成具有自检测和自纠错的能力,构成1个恢复块结构,其基本结构如下: ensure <接收测试> by <基本功能块> else by <备份块1> else by <备份块n> else by <错误处理> 2.3.2 多版本程序设计 多版本程序指令技术是一种基于静态的故障屏蔽以及中断指令的技术,其基于前向反馈恢复的控制策略,其是采用多个汇编程序同时对同意被控对象进行控制,基于统计学理论对多个程序运行结果进行统计分析,选出最符合实际需要的一种算法。其示意图如图3所示。 图3 多版本程序指令技术示意图 2.4 其他措施 2.4.1 数据重复读取 在对被控对象进行数据采集、控制时,经常会出现随机性极强的干扰信号干扰程序外的中断程序指令所发出的信号,由于其具有极强的随机性以及瞬时性而不易捕获,可对其发出的信号进行多次采集对比分析以后,将其过滤掉,参考程序代码如下: //============================ start();% 启动设备对象 try time=0;data=0; [data,time]=getdata();% 获取采样数据 catch time=0;data=0;disp(“A timeout occurred”); end stop();% 停止设备对象 delete();% 删除设备对象 2.4.2 软件看门狗(Watch dog)技术 软件冗余以及软件陷阱技术并不是对所有失灵的程序指令均有效,此时通常采用对控制系统的程序指令监控技术,其并不能直接解决程序代码失灵的问题,但是在程序代码出现失灵时可以及时发现并将所有中断程序关闭。软件看门狗示意图如图4所示。 图4 软件看门狗技术示意图 (1)为了避免单片机所开发的控制系统干扰源对系统产生的随机干扰,应从软、硬件入手,将两者完美融合,充分发挥各自的作用以及各自优势,二者相辅相成地配合协调工作,本文所提的混合编程语言理论可可大幅提高单片机控制系统的运行计算效率以及保证控制系统的稳定运行。 (2)对现有的软件抗干扰方法的远离以及利弊进行了深入分析,并提出了解决其弊端的办法,本文所提的混合编程理论较之硬件抗干扰技术,其具有节约大量计算运行时间的同时,并可极大的提高单片机CPU的计算能力从而提高整个控制系统的实时效率,并且本文所提混合编程理论可广泛应用于嵌入式控制系统中并可取得较好的控制效果。 [1] 卢莎,何菁,袁杰. 基于VLSI 平台的C51 处理器仿真与设计[J]. 现代电子技术,2013,36(12):92-96. [2] 张毅刚,刘杰. MCS-51单片机原理及应用[M]. 哈尔滨:哈尔滨工业大学出版社,2004:35-42. [3] 徐惠民,安德宁. 单片微型计算机原理接口及应用[M]. 北京:北京邮电大学出版社,2003:56-59. [4] 张丽云. 计算机接口实验平台的研制与开发[D]. 北京:北京交通大学,2007. [5] 王立莹,晋小莉. 微型计算机系统抗干扰技术[J]. 现代电子技术,2006,29(5):108-110. [6] 姜学军. 计算机控制技术[M]. 北京:清华大学出版社,2005:123-129. [7] 潘仲明,简盈,王跃科. 大作用距离超声波传感技术研究[J]. 传感技术学报,2006,19(1):206-210. [8] 潘宗预,潘登. 超声波测距精度的探讨[J]. 湖南大学学报(自然科学版),2002,29(3):18-21. [9] 张玉珊,张玉霞. 过程计算机控制系统中的软件滤波对策[J]. 河南师范大学学报(自然科学版),2001,29,(3):69-72. [10] 何忠悦,于淑芳. 单片机抗干扰技术实践应用探析[J]. 机电信息,2012(4):112-113. Software Anti Interference Technology of Single Chip Microcomputer Control System* LIUQi*,WANGYin (College of information and control,Jilin Institute of Chemical Technology,Jilin Jilin 132022,China) In order to improve single chip microcomputer(SCM)control system performances of disturbance rejection in the practical works,it discusses the advantages and disadvantages of the main software anti-interference technology based on realization in SCM. Combination C language and many assemble languages analyse and solve some drawbacks of on-going technology. The software anti-interference technology can improve work efficiency significantly,and it has greatly saved computation cycles. This method which combined C language and many assembly language can be widely used in embedded single chip microcomputer system. 51 single chip microcomputer;multi program language;anti-interference technology 项目来源:吉化院合字2015第095号项目 2016-03-12 修改日期:2016-05-06 C:7820;7210 10.3969/j.issn.1005-9490.2017.02.031 TP311 A 1005-9490(2017)02-0415-053 结束语