当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]基于微机主要部件的抗扰性能试验,提出了几种在单片微机上行之有效的软件抗干扰对策,探索了抗干扰程序的原理及设计方法。

对于研制微机工控系统的科技人员而言,系统自身及应用环境产生的各种电磁噪声仍是普遍的困扰因素。许多应用系统在进行仿真调试和实验室内的联机试运行时都是成功的,然而一旦进入现场使用,系统则会产生预料以外的误动作或误显示,严重时甚至导致前期研制成果基本失效,浪费了宝贵的时间和人力物力。因此,如何在系统研制的过程中对干扰源进行正确的分析,如何提高系统各部分及整体抗电磁干扰的能力,已经日益引起人们的高度重视。以往对于电磁干扰的抑制主要侧重于采取硬件措施,例如电磁隔离、去耦滤波、噪声补偿、CPU“看门狗”等。

笔者在研制数控设备的过程中对单片机受到的常见干扰进行了试验分析,采用了相应的软件抑制及补偿措施,室内模拟噪声测试和现场使用均证明了这些方法的有效性。

1 单片机的各部分对干扰信号的反应

单片机属于数字系统,各逻辑元件都有相应的阈电平和噪声容限,外来噪声只要不超过逻辑元件的容限值,整个系统就能维持正常。然而一旦侵入系统的噪声超过了某种容限,此干扰信号就会被逻辑器件放大、整形,成为产生误动作的重要原因。倘若干扰改变了触发器或存储器的信息,则在噪声消失后系统也不能恢复正常运行。因此,在分析计算机系统受干扰的原因时,应当注意其对噪声信号的存储或滞留特性。

我们借鉴美国电器制造商协会(NEMA)提出的工控微机抗扰度试验标准,将放电干扰电压提高到2kV,检测常用的MCS—51系列芯片各部分的超常抗扰能力和受扰结果,以分析确定相应的软件对策。试验原理及触点的放电波形、电缆感应的干扰电流波形分别如图1~图3所示,试验时将图1中剩余的电缆芯线分别接到集成电路的受试引脚上,每次干扰试验持续6min。

1.1 中央处理器CPU

CPU属于高速数字器件,易受干扰的有运算器、控制器和控制寄存器。当电磁干扰信号窜入时,CPU将错误地执行指令,引起误动作或者错误的结果;而控制寄存器中的信息如果被噪声修改,将导致初始化错误、寻址失败乃至系统瘫痪。试验表明,干扰信号大多数由总线导入CPU内;其中与外界联系最频繁、因而最容易受干扰的是程序指针PC,这种干扰往往引发致命错误,属于重点防范和重点纠错的对象。

1.2 特殊功能寄存器SFR

SFR包括各种I/O端口的寄存器、各种片内部件的工作方式寄存器,以及堆栈指针、数据指针等等,其特点是传递数据的速度高,能够与CPU的运行密切配合。如果某个SFR被干扰信号改写,则意味着程序运行的结果异常,轻者改变单片机内各部件的操作控制,重则导致整个系统的输出紊乱,引发故障或安全事故。因此,对于与程序有关的SFR内容必须提供及时有效的保护。

1.3 存储器MEM

微处理机的存储器包括片内存储器及片外扩展的存储器。为了增强抑制噪声的能力,工控计算机的数据存储器和程序存储器一般分属两个器件。噪声试验表明:程序存储器(EEPROM或者EPROM)的抗扰度最高,经过引脚噪声超常耦合试验后芯片内容毫无变化;单片机内部的数据存储器(片内RAM)抗扰度也较为满意,经过9次试验后仅有两个字节的内容发生了改变,累积变化率不到1%;片外RAM(6264)的抗扰性能相对较差,在6次试验后,其内容的累计变化率已达8.05%。因此,在干扰信号较强的环境中运行的工控微机,其较持久的和重要的数据应当保存在片内RAM之中,在扩展的RAM中只宜保存临时数据(中间变量),否则应当采用后述方法在应用程序中实施数据恢复。

2 软件补偿措施

对于已经侵入微处理机的噪声,必须采取能够维持系统功能的对应措施,以免出现意外停机或意外启动,甚至引起恶性事故。对CPU的误动作和各种存储器内容的误修改,在应用软件中插入相应的程序模块,进行主动补偿是一种简便而可靠的方法。

2.1 主动初始化

这里的“初始化”泛指在各段程序中,对单片机及片外扩展器件的各种功能、端口或者方式、状态等采取的永久性的或者临时的设置。我们不仅要保证上电或复位后软件能够正确地实现各种级别的初始化,而且在程序中每次使用某种功能前,都要再一次对相应的控制寄存器设定动作模式。实践证明,这一措施可以大大提高系统对于入侵干扰的自恢复性能。

2.2 数据冗余化

在噪声幅度较大的环境中,采用冗余数据法可以明显地增加系统的可靠性,这种方法对于传输系统的永久性硬件故障或者干扰引入的数据错误都具有明显的纠错效果。采用的主要措施是给重要的数据添加冗余位,延长数据—代码之间的汉明(hamming)距离以增强检测和纠正错误的能力。图4表明了这种方式的原理,完全无冗余性的代码汉明距离为1。

冗余化码系在远距离数字通讯传输技术中应用较为普遍,但在工业控制中的应用尚不多见。图4A代表工控技术中的一般数据码,无检测错误的能力。奇偶校验则是在数据中增加1位冗余位(图4B),使汉明距离变为2,因此可以检测奇数位错误。若再增加冗余位使码系间的汉明距离延长为3(图4C),还可具有校正1位错误的能力。在干扰信号特别强烈的场合中,控制或采集终端与上位机之间的串行传送还可以考虑采用循环冗余校验(CRC)手段来增加数据的可靠性。

2.3 重复执行

程序指令在执行的过程中或者保持(锁存)之后,都有可能被噪声修改而导致控制失效乃至引发事故,为此应当尽量增加重要指令的执行次数以纠正干扰造成的错误。对于频率较低的传感器数据,建议在有效时间内多次采集并比较;对于控制外部设备的指令,则需要多次重复执行以确保有关信号的可靠性。为达此目的,可把重要的指令设计成定时扫描模块,使其在整个程序的循环运行过程中反复执行。如此即使干扰信号改写了指令内容,也能在受控设备的反应时间内自动恢复正常。

2.4 重要数据的保护和恢复

编写专门的数据保护子程序,是提高工控微机系统可靠性的有效途径。在编写程序的过程中,对于由指令改变结果性质的数据,可以考虑在每次改变后都尽可能地保护起来,以便在需要时能够恢复正确值。 对于大多数工控微处理机而言,在运行错误而强制“复位”之后,I/O端口和特殊寄存器SFR中的内容都将变成芯片出厂时的设定值[4],这很可能会引起整个系统的运行混乱。因此计算机在重新启动后,应当首先执行数据恢复程序,把控制端口等重要寄存器被保护的内容恢复还原。基于前述的试验结果,保护数据最可靠的地址位于微处理机的片内RAM;若数据的保护量较大,则建议扩展非易失性的SRAM作为片外数据存储器。这种新型芯片具有很高的抗干扰性能,其缺点是目前的价位较高。

3 片内软WDT监控

“看门狗”(WDT)已经成为工控微机必不可少的成员之一,其通常采用软件与片外专门电路相结合的技术,来防止CPU程序的“跑飞”。我们在课题的研究过程中注意到,利用微处理机内部闲置的定时/计数器,配合以适当的程序就可以方便地构成WDT,在PC异常时能够及时有效地强制“软复位”而恢复系统的正常运行。

3.1 基本原理

与前面提及的软件补偿措施相配合,此WDT可以有效地防止由于CPU的PC“飞出”正常运行的程序区域而导致的系统瘫痪。用微处理机片内的一个定时器单元接收内部时钟提供的稳定脉冲,当此定时器溢出(加法型)或者为零(减法型)时提出中断请求;对应的中断服务程序使PC回到初始化程序的第一行,从而实现强制性“软复位”。 程序正常运行时,软件每隔一定的时间(小于定时器的溢出周期)给定时器清零或置数,即可预防溢出中断而引起的误复位。

3.2 设计示例

下面以常用的MCS-51系列单片机的T0为例,介绍软WDT的设计思路。

首先,在初始化程序块中设置T0的工作方式,并开启其中断和计数功能。设主频为12MHz,T0为8位计数器,则:

最大计数值为 28-1=255

计数速率是主频的112(1次/μs),故:

溢出周期为(255+1)÷1=256μs

其次,计算各条指令的执行耗时,以适当的间隔设置 T0=0。由于MCS—51系列单片机的指令集中只有“乘”、“除”两条指令耗用4个机器周期,其它均只耗用1~2个机器周期,为保险起见简化为“每条指令均耗用2个机器周期”,即每执行一条指令耗用2μs。据此可以推算出“清零定时器T0”的指令执行间隔应当少于:

256÷2=128(条)

即每执行不多于128条程序指令(计入多次循环执行的指令),就应当执行一条清零T0的指令,以防止软复位被误执行。

第三,设计T0溢出所对应的中断服务程序。此子程序只须一条指令,即在T0对应的中断向量地址(000BH)写入“无条件转移”命令,把PC 拖回整个程序的第1行,对单片机重新进行初始化并获得正确的执行顺序。由于这条中断指令并没有结束中断子程序就转出去了,为了能够继续响应其它的中断请求,可以在程序的初始化功能块中把SP定高2字节,在此2字节中写入“中断返回” (RETI)之后应执行指令的地址,以便RETI执行后自动弹栈装入PC,并在初始化程序结束前写上RETI指令。

在工业控制系统的研制过程中,微机的抗干扰性能是系统成败的关键之一。数十年来,人们已经研究出了许多抗干扰的硬件措施,包括采用净化电源、接地、屏蔽、光电耦合、数据滤波及延时除颤等等。本文针对微处理机易受干扰的部件提出了软件抗干扰的一些方案,实用表明具有较高的经济性和可靠性,很容易将其结合进工业控制程序之中,不失为一类简便而有效的抗扰手段。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

与谷歌的合作使 Nordic 能够在 nRF Connect SDK 中嵌入开发人员软件,以构建与安卓移动设备兼容的谷歌Find My Device和未知跟踪器警报服务

关键字: 谷歌 SoC 嵌入式开发

嵌入式开发作为当今电子工程和信息技术领域的核心分支,涵盖了广泛的软硬件技术和系统集成方法,用于构建高性能、低成本、低功耗、体积小巧且功能专一的嵌入式系统。这些系统无处不在,从微型传感器节点到复杂的工业控制设备,从日常使用...

关键字: 嵌入式开发 Python

嵌入式开发是当今信息技术领域不可或缺的一部分,它融合了硬件设计、软件开发和系统集成等多个学科,专门用于创建那些被嵌入到特定设备或系统中的专用计算机系统。嵌入式开发的主要过程包括利用分立元件或集成器件进行电路设计、结构设计...

关键字: 嵌入式开发 硬件设计 软件开发

嵌入式开发作为一种专业且技术密集型的领域,涵盖了从硬件底层驱动、中间件到应用层软件开发等多个层面的工作,其所需的工具种类繁多,各有针对性,旨在提升开发效率、保证代码质量以及简化调试过程。

关键字: 嵌入式开发 keil

嵌入式开发作为信息技术领域的重要分支,其涉及的语言种类繁多,各具特色。这些语言的选择取决于目标平台的特性、性能需求、开发者的熟练程度以及项目的具体要求。本文将详细介绍几种常见的嵌入式开发语言,包括C语言、C++、汇编语言...

关键字: 嵌入式开发 C语言

嵌入式开发是一项综合了硬件设计、软件编程以及系统整合的技术活动,其目的是为了创造出能够在特定环境中高效、稳定运行的嵌入式系统。这一流程涵盖了多个紧密关联且不可或缺的阶段,从最初的客户需求分析到最终的产品测试和交付,每个环...

关键字: 嵌入式开发 硬件设计

嵌入式开发作为一个融合了计算机软硬件和系统工程的综合性领域,其成功与否往往取决于三个核心要素的有效整合与协调。这三个要素分别是:硬件平台的选择与设计、软件开发及其优化、以及系统级的设计与集成。深入理解并熟练掌握这三个方面...

关键字: 嵌入式开发 ARM

嵌入式开发作为信息技术的关键支柱,在全球数字化转型浪潮中扮演着无可替代的角色。从传统的嵌入式微控制器到如今先进的片上系统(SoC),再到与云计算、人工智能深度融合的智能终端,嵌入式系统的演进与发展始终紧跟时代脉搏。本文将...

关键字: 嵌入式开发 智能应用

嵌入式开发是一种专门针对特定硬件平台设计和实现软件系统的工程实践,它涵盖了从需求分析、系统设计、编程实现、调试测试直到产品部署及维护的全过程。本文将深入探讨嵌入式开发的主要阶段,分解其流程并阐述每个步骤的关键要点,以便于...

关键字: 嵌入式开发 嵌入式软件
关闭
关闭