Ⅰ 单片机系统软件抗干扰方法 用c语言编写的
MCU抗干扰当然需要同时从软硬件两方面着手。
LZ既然说到用C语言去抗干扰的话,我这里就自己积累的一些简单经验分享有一下(其实汇编和C在抗干扰方面差不多,我这里就C方面讲吧):
1、可以在对系统起重要的指令如函数调用前和函数返回前加上两条 “_nop_()”这个函数, ,以便有比较高的概略入正轨。
2、虽然在整个系统中未用中断,但建议把所有未用到的中断响应写成空函数。
3、软件“看门狗”技术,因为硬件看门狗有时候在工业应用中,严重的干扰会破坏中断控制字,关闭中断,系统无法定时看门狗,而软件看门够能有效解决这个问题,在实际应用中,可采用“环行中断监视系统”,我这里就举个例子,用定时器T0通过一个变量来监视定时器T1,在用T1来监视主程序的,主程序监视T0,,,这里可通过3个变量的自增1来简单实现,,,,,,,,当然还有其他更好的方法。
就大致说这样3点吧,我感觉现有的MCU抗干扰本身就做的不错,当然MCU外部的电路抗干扰也绝不能忽视,,,上面个人提到的3点,在一般的情况下,都是不需要那样做的,,而在我实际使用中,好象还没有遇见过MCU由于干扰而出现的问题(其实这样的事情让我遇到,也是比较开心的,能增加一些感性认识)。
Ⅱ 单片机原理的抗干扰
在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性好越来越受到重视。下面以MCS-51单片机系统为例,对微机系统软件抗干扰方法进行研究。 在工程实践中,软件抗干扰研究的内容主要是:一、消除模拟输入信号的噪声(如数字滤波技术);二、程序运行混乱时使程序重入正轨的方法。本文针对后者提出了几种有效的软件抗干扰方法。
指令冗余
CPU取指令过程是先取操作码,再取操作数。当PC受干扰出现错误,程序便脱离正常轨道“乱飞”,当乱飞到某双字节指令,若取指令时刻落在操作数上,误将操作数当做操作码,程序将出错。若“飞” 到了三字节指令,出错机率更大。
在关键地方人为插入一些单字节指令,或将有效单字节指令重写称为指令冗余。通常是在双字节指令和三字节指令后插入两个字节以上的NOP。这样即使乱飞程序飞到操作数上,由于空操作指令NOP的存在,避免了后面的指令被当作操作数执行,程序自动纳入正轨。
此外,对系统流向起重要作用的指令如RET、 RETI、LCALL、LJMP、JC等指令之前插入两条NOP,也可将乱飞程序纳入正轨,确保这些重要指令的执行。
拦截技术
所谓拦截,是指将乱飞的程序引向指定位置,再进行出错处理。通常用软件陷阱来拦截乱飞的程序。因此先要合理设计陷阱,其次要将陷阱安排在适当的位置。
(1 )软件陷阱的设计
当乱飞程序进入非程序区,冗余指令便无法起作用。通过软件陷阱,拦截乱飞程序,将其引向指定位置,再进行出错处理。软件陷阱是指用来将捕获的乱飞程序引向复位入口地址0000H的指令。通常在EPROM中非程序区填入以下指令作为软件陷阱:
(2 ) 陷阱的安排
最后一条应填入020000,当乱飞程序落到此区,即可自动入轨。在用户程序区各模块之间的空余单元也可填入陷阱指令。当使用的中断因干扰而开放时,在对应的中断服务程序中设置软件陷阱,能及时捕获错误的中断。如某应用系统虽未用到外部中断1,外部中断1的中断服务程序可为如下形式:
NOPNOPRETI返回指令可用“RETI”,也可用“LJMP 0000H”。如果故障诊断程序与系统自恢复程序的设计可靠、 完善,用“LJMP 0000H”作返回指令可直接进入故障诊断程序,尽早地处理故障并恢复程序的运行。
考虑到程序存贮器的容量,软件陷阱一般1K空间有2-3个就可以进行有效拦截。
软件“看门狗”技术
若失控的程序进入“死循环”,通常采用“看门狗”技术使程序脱离“死循环”。通过不断检测程序循环运行时间,若发现程序循环时间超过最大循环运行时间,则认为系统陷入“死循环”,需进行出错处理。
“看门狗”技术可由硬件实现,也可由软件实现。在工业应用中,严重的干扰有时会破坏中断方式控制字,关闭中断。则系统无法定时“喂狗”,硬件看门狗电路失效。而软件看门狗可有效地解决这类问题。
笔者在实际应用中,采用环形中断监视系统。用定时器T0监视定时器T1,用定时器T1监视主程序,主程序监视定时器T0。采用这种环形结构的软件“看门狗”具有良好的抗干扰性能,大大提高了系统可靠性。对于需经常使用T1定时器进行串口通讯的测控系统,则定时器T1不能进行中断,可改由串口中断进行监控(如果用的是MCS-52系列单片机,也可用T2代替T1进行监视)。这种软件“看门狗”监视原理是:在主程序、T0中断服务程序、T1中断服务程序中各设一运行观测变量,假设为MWatch、T0Watch 、T1Watch,主程序每循环一次,MWatch加1,同样T0、T1中断服务程序执行一次,T0Watch、 T1Watch加1。在T0中断服务程序中通过检测T1Watch的变化情况判定T1运行是否正常,在T1中断服务程序中检测MWatch的变化情况判定主程序是否正常运行,在主程序中通过检测T0Watch的变化情况判别T0是否正常工作。若检测到某观测变量变化不正常,比如应当加1而未加1,则转到出错处理程序作排除故障处理。当然,对主程序最大循环周期、定时器T0和T1定时周期应予以全盘合理考虑。限于篇幅不赘述。 单片机系统因干扰复位或掉电后复位均属非正常复位,应进行故障诊断并能自动恢复非正常复位前的状态。
非正常复位的识别
程序的执行总是从0000H开始,导致程序从 0000H开始执行有四种可能:一、系统开机上电复位;二、软件故障复位;三、看门狗超时未喂狗硬件复位; 四、任务正在执行中掉电后来电复位。四种情况中除第一种情况外均属非正常复位,需加以识别。
(1 )硬件复位与软件复位的识别
此处硬件复位指开机复位与看门狗复位,硬件复位对寄存器有影响,如复位后PC=0000H, SP=07H,PSW=00H等。而软件复位则对SP、SPW无影响。故对于微机测控系统,当程序正常运行时,将SP设置地址大于07H,或者将PSW的第5位用户标志位在系统正常运行时设为1。那么系统复位时只需检测PSW.5标志位或SP值便可判此是否硬件复位。
由于硬件复位时片内RAM状态是随机的,而软件复位片内RAM则可保持复位前状态,因此可选取片内某一个或两个单元作为上电标志。设40H用来做上电标志,上电标志字为78H,若系统复位后40H单元内容不等于78H,则认为是硬件复位,否则认为是软件复位,转向出错处理。若用两个单元作上电标志,则这种判别方法的可靠性更高。
(2 )开机复位与看门狗故障复位的识别
开机复位与看门狗故障复位因同属硬件复位, 所以要想予以正确识别,一般要借助非易失性RAM或者EEROM。当系统正常运行时,设置一可掉电保护的观测单元。当系统正常运行时,在定时喂狗的中断服务程序中使该观测单元保持正常值(设为 AAH),而在主程中将该单元清零,因观测单元掉电可保护,则开机时通过检测该单元是否为正常值可判断是否看门狗复位。
(3 )正常开机复位与非正常开机复位的识别
识别测控系统中因意外情况如系统掉电等情况引起的开机复位与正常开机复位,对于过程控制系统尤为重要。如某以时间为控制标准的测控系统,完成一次测控任务需1小时。在已执行测控50分钟的情况下,系统电压异常引起复位,此时若系统复位后又从头开始进行测控则会造成不必要的时间消耗。因此可通过一监测单元对当前系统的运行状态、系统时间予以监控,将控制过程分解为若干步或若干时间段,每执行完一步或每运行一个时间段则对监测单元置为关机允许值,不同的任务或任务的不同阶段有不同的值,若系统正在进行测控任务或正在执某时间段,则将监测单元置为非正常关机值。那么系统复位后可据此单元判系统原来的运行状态,并跳到出错处理程序中恢复系统原运行状态。
非正常复位后系统自恢复运行的程序设计
对顺序要求严格的一些过程控制系统,系统非正常复位否,一般都要求从失控的那一个模块或任务恢复运行。所以测控系统要作好重要数据单元、参数的备份,如系统运行状态、系统的进程值、当前输入、输出的值,当前时钟值、观测单元值等,这些数据既要定时备份,同时若有修改也应立即予以备份。
当在已判别出系统非正常复位的情况下,先要恢复一些必要的系统数据,如显示模块的初始化、片外扩展芯片的初始化等。其次再对测控系统的系统状态、运行参数等予以恢复,包括显示界面等的恢复。之后再把复位前的任务、参数、运行时间等恢复, 再进入系统运行状态。
应当说明的是,真实地恢复系统的运行状态需 要极为细致地对系统的重要数据予以备份,并加以数据可靠性检查,以保证恢复的数据的可靠性。
其次,对多任务、多进程测控系统,数据的恢复需考虑恢复的次序问题。
系统基本初始化是指对芯片、显示、输入输出方式等进行初始化,要注意输入输出的初始化不应造成误动作。而复位前任务的初始化是指任务的执行状态、运行时间等。
对于软件抗干扰的一些其它常用方法如数字滤波、RAM数据保护与纠错等,限于篇幅,本文未作讨论。在工程实践中通常都是几种抗干扰方法并用,互相补充 完善,才能取得较好的抗干扰效果。从根本上来说,硬件抗干扰是主动的,而软件是抗干扰是被动的。细致周到地分析干扰源,硬件与软件抗干扰相结合,完善系统监控程序,设计一稳定可靠的单片机系统是完全可行的。
Ⅲ 单片机系统软件抗干扰方法
在提高硬件系统抗干扰能力的同时 软件抗干扰以其设计灵活 节省硬件资源 可靠性好越来越受到重视 下面以MCS 单片机系统为例 对微机系统软件抗干扰方法进行研究
软件抗干扰方法的研究
在工程实践中 软件抗干扰研究的内容主要是 一 消除模拟输入信号的嗓声(如数字滤波技术) 二 程序运行混乱时使程序重入正轨的方法 本文针对后者提出了几种有效的软件抗干扰方法
指令冗余
CPU取指令过程是先取操作码 再取操作数 当PC受干扰出现错误 程序便脱离正常轨道 乱飞 当乱飞到某双字节指令 若取指令时刻落在操作数上 误将操作数当作操作码 程序将出错 若 飞 到了三字节指令 出错机率更大
在关键地方人为插入一些单字节指令 或将有效单字节指令重写称为指令冗余 通常是在双字节指令和三字节指令后插入两个字节以上的NOP 这样即使乱飞程序飞到操作数上 由于空操作指令NOP的存在 避免了后面的指令被当作操作数执行 程序自动纳入正轨
此外 对系统流向起重要作用的指令如RET RETI LCALL LJMP JC等指令之前插入两条NOP 也可将乱飞程序纳入正轨 确保这些重要指令的执行
拦截技术
所谓拦截 是指将乱飞的程序引向指定位置 再进行出错处理 通常用软件陷阱来拦截乱飞的程序 因此先要合理设计陷阱 其次要将陷阱安排在适当的位置
软件陷阱的设计
当乱飞程序进入非程序区 冗余指令便无法起作用 通过软件陷阱 拦截乱飞程序 将其引向指定位置 再进行出错处理 软件陷阱是指用来将捕获的乱飞程序引向复位入口地址 H的指令 通常在EPROM中非程序区填入以下指令作为软件陷阱
NOP
NOP
LJMP H
其机器码为
陷阱的安排
通常在程序中未使用的EPROM空间填 最后一条应填入 当乱飞程序落到此区 即可自动入轨 在用户程序区各模块之间的空余单元也可填入陷阱指令 当使用的中断因干扰而开放时 在对应的中断服务程序中设置软件陷阱 能及时捕获错误的中断 如某应用系统虽未用到外部中断 外部中断 的中断服务程序可为如下形式
NOP
NOP
RETI
返回指令可用 RETI 也可用 LJMP H 如果故障诊断程序与系统自恢复程序的设计可靠 完善 用 LJMP H 作返回指令可直接进入故障诊断程序 尽早地处理故障并恢复程序的运行
考虑到程序存贮器的容量 软件陷阱一般 K空间有 个就可以进行有效拦截
软件 看门狗 技术
若失控的程序进入 死循环 通常采用 看门狗 技术使程序脱离 死循环 通过不断检测程序循环运行时间 若发现程序循环时间超过最大循环运行时间 则认为系统陷入 死循环 需进行出错处理
看门狗 技术可由硬件实现 也可由软件实现 在工业应用中 严重的干扰有时会破坏中断方式控制字 关闭中断 则系统无法定时 喂狗 硬件看门狗电路失效 而软件看门狗可有效地解决这类问题
笔者在实际应用中 采用环形中断监视系统 用定时器T 监视定时器T 用定时器T 监视主程序 主程序监视定时器T 采用这种环形结构的软件 看门狗 具有良好的抗干扰性能 大大提高了系统可靠性 对于需经常使用T 定时器进行串口通讯的测控系统 则定时器T 不能进行中断 可改由串口中断进行监控(如果用的是MCS 系列单片机 也可用T 代替T 进行监视) 这种软件 看门狗 监视原理是 在主程序 T 中断服务程序 T 中断服务程序中各设一运行观测变量 假设为MWatch T Watch T Watch 主程序每循环一次 MWatch加1 同样T T 中断服务程序执行一次 T Watch T Watch加1 在T 中断服务程序中通过检测T Watch的变化情况判定T 运行是否正常 在T 中断服务程序中检测MWatch的变化情况判定主程序是否正常运行 在主程序中通过检测T Watch的变化情况判别T 是否正常工作 若检测到某观测变量变化不正常 比如应当加 而未加 则转到出错处理程序作排除故障处理 当然 对主程序最大循环周期 定时器T 和T 定时周期应予以全盘合理考虑 限于篇幅不赘述
系统故障处理 自恢复程序的设计
单片机系统因干扰复位或掉电后复位均属非正常复位 应进行故障诊断并能自动恢复非正常复位前的状态
非正常复位的识别
程序的执行总是从 H开始 导致程序从 H开始执行有四种可能 一 系统开机上电复位 二 软件故障复位 三 看门狗超时未喂狗硬件复位 四 任务正在执行中掉电后来电复位 四种情况中除第一种情况外均属非正常复位 需加以识别
硬件复位与软件复位的识别
此处硬件复位指开机复位与看门狗复位 硬件复位对寄存器有影响 如复位后PC= H SP= H PSW= H等 而软件复位则对SP SPW无影响 故对于微机测控系统 当程序正常运行时 将SP设置地址大于 H 或者将PSW的第 位用户标志位在系统正常运行时设为 那么系统复位时只需检测PSW 标志位或SP值便可判此是否硬件复位 图 是采用PSW 作上电标志位判别硬 软件复位的程序流程图
图 硬 软件复位识别流程图
此外 由于硬件复位时片内RAM状态是随机的 而软件复位片内RAM则可保持复位前状态 因此可选取片内某一个或两个单元作为上电标志 设 H用来做上电标志 上电标志字为 H 若系统复位后 H单元内容不等于 H 则认为是硬件复位 否则认为是软件复位 转向出错处理 若用两个单元作上电标志 则这种判别方法的可靠性更高
开机复位与看门狗故障复位的识别
开机复位与看门狗故障复位因同属硬件复位 所以要想予以正确识别 一般要借助非易失性RAM或者EEROM 当系统正常运行时 设置一可掉电保护的观测单元 当系统正常运行时 在定时喂狗的中断服务程序中使该观测单元保持正常值(设为 AAH) 而在主程中将该单元清零 因观测单元掉电可保护 则开机时通过检测该单元是否为正常值可判断是否看门狗复位
正常开机复位与非正常开机复位的识别
识别测控系统中因意外情况如系统掉电等情况引起的开机复位与正常开机复位 对于过程控制系统尤为重要 如某以时间为控制标准的测控系统 完成一次测控任务需 小时 在已执行测控 分钟的情况下 系统电压异常引起复位 此时若系统复位后又从头开始进行测控则会造成不必要的时间消耗 因此可通过一监测单元对当前系统的运行状态 系统时间予以监控 将控制过程分解为若干步或若干时间段 每执行完一步或每运行一个时间段则对监测单元置为关机允许值 不同的任务或任务的不同阶段有不同的值 若系统正在进行测控任务或正在执某时间段 则将监测单元置为非正常关机值 那么系统复位后可据此单元判系统原来的运行状态 并跳到出错处理程序中恢复系统原运行状态
非正常复位后系统自恢复运行的程序设计
对顺序要求严格的一些过程控制系统 系统非正常复位否 一般都要求从失控的那一个模块或任务恢复运行 所以测控系统要作好重要数据单元 参数的备份 如系统运行状态 系统的进程值 当前输入 输出的值 当前时钟值 观测单元值等 这些数据既要定时备份 同时若有修改也应立即予以备份
当在已判别出系统非正常复位的情况下 先要恢复一些必要的系统数据 如显示模块的初始化 片外扩展芯片的初始化等 其次再对测控系统的系统状态 运行参数等予以恢复 包括显示界面等的恢复 之后再把复位前的任务 参数 运行时间等恢复 再进入系统运行状态
应当说明的是 真实地恢复系统的运行状态需 要极为细致地对系统的重要数据予以备份 并加以数据可靠性检查 以保证恢复的数据的可靠性
其次 对多任务 多进程测控系统 数据的恢复需考虑恢复的次序问题 笔者实际应用的数据恢复过程流程图如图 所示
图 系统自恢复程序流程图
图中恢复系统基本数据是指取出备份的数据覆盖当前的系统数据 系统基本初始化是指对芯片 显示 输入输出方式等进行初始化 要注意输入输出的初始化不应造成误动作 而复位前任务的初始化是指任务的执行状态 运行时间等
结束语
lishixin/Article/program/qrs/201311/11074