简述嵌入式系统设计中抗电磁干扰技术

简述嵌入式系统设计中抗电磁干扰技术,第1张

嵌入式系统抗干扰设计

王军安

〔西安电子科技大学计算机外部设备研究所)

摘要:针对嵌入式系统的杭干扰设计要求,从电路及印制板设计、机箱及电缆连接等方面讨

论了硬件系统的电磁兼容设计技术从软件的可靠性设计、程序跑飞的预防、补救及妥全措

施等方面讨论了软件系统的抗干扰设计技术.

关键词:嵌入式系统 抗干扰 EMI可靠性

引言

嵌入式系统的工作现场往往具有大量的电磁干扰源,它们一般可分为:(1)来自电源的

传导干扰:(2)来自传输信道的传导干扰(3)来自空间的辐射干扰。嵌入式系统在设计时

如果未采取有效的抗干扰措施,则运行时CPU及其它微弱信号处理模块很容易受这些干扰源

影响,而无法正常工作。因此,抗干扰性能一直是影响嵌入式系统工作可靠性的主要因素。

如何提高抗干扰性能,一直是嵌入式系统开发者关心的问题。

为了提高嵌入式系统的工作可靠性,在系统设计开始时,就应该对使用环境的电磁干扰

情况作出合理估计,并提出适当的电磁兼容性 (EMI)指标。在硬件设计、实现、系统互连

中,需要采取相关措施保证EMI指标在软件设计及编程时,对于嵌入式计算机最容易出现

的“程序跑飞”问题,需要采取预防和补救措施。本文将结合作者的实践经验,对以上问题进

行讨论。

一、硬件系统的抗干扰设计

硬件系统的抗干扰设计主要指电磁兼容性设计,电磁兼容性包含两个方面:(1)对环境

中的电磁干扰有一定的耐受能力(2)不可以向空间环境发射过强的电磁能量。

EMI问题主要源自电路的分布参数。许多电路从原理 (集中参数)上看,似乎没有问题,

而实际系统中由于器件的非理想性,以及结构、布线等问题,造成EMI发射或敏感。抗干扰

设计的基本原理包括:

(I)抑制干扰源:减小电压/电流变化率,如并联阻容吸收电路,串联阻尼电感,并联续

流二极管等。

(2)切断传导及辐射千扰的传播路径:如使用滤波器或隔离电路,使用屏蔽技术。

(3)提高敏感器件的抗千扰性能:缩短连线,减小环路面积,加宽电源及地线

以下主要从电原理及印制板设计、机箱屏蔽及电缆连接技术等方面讨论硬件系统的抗干

扰设计技术。

1.1电路设计及布线

在研制初期,就应该对系统进行可靠性预计及分析工作,确定影响可靠性的关键部件及

元器件。确认方案的合理性后,对影响可靠性的关键元器件降额使用。

以 卜是作者在实践中的儿点体会:

(1)尽可能简化、优化体系结构。如使用功能更全的Soc,嵌入式计算机。

(2)注意嵌入式系统的可靠复位。当电源有尖峰干扰或电压上升速度太慢时,普通阻容

复位电路难以正确复位,可考虑专用器件。

(3)电路的环路面积对EMI性能影响很大,使用大规模集成电路,可以有效减小环路面

积,从而提高抗干扰性、减小空间电磁发射。

(4)逻辑器件尽量使用CMOs电路,因为噪声容限大、功耗低。CMOs器件的输出阻抗

很小,而输入阻抗很大,连线过长时,应在输入端使用阻抗匹配电阻:不使用的输入端应接

高电平。

(5)数字信号的转换速率应与要求速度相适应 (必要时使用阻尼电路),仅在需要时使

用高速器件。

(6)注意信号电缆的EMI性能。最好使用屏蔽电缆,必要时使用隔离电路。如必须使用

扁平电缆,则可以将信号线与地线交错布置。

关于印制板设计的几点建议:

(1)成本允许时,尽量使用4层以上的线路板,以提高EMI性能。

(2)仔细考虑器件的位置和方向。

(3)对敏感电路及强辐射电路使用屏蔽。

(4)尽量减小高频信号及高敏感信号 (如时钟信号)的回路面积,旁边不布置其它信号

线,并用地线包围。

(5)在器件的电源、地端就近布置退藕电容器。

(6)无论器件位置、布线、信号电缆、地线,都尽可能按照电特性的不同 (模拟信号、

数字信号、离散量信号等)进行分组。

(7)不同部分的电路使用不同的地线,并形成树形连接,避免地线环路PCB空白位置

可以用地线填充:如果要连接系统地线与机箱地线,则在信号电缆连接器位置进行低阻抗连

接。

(8)使用先进的制造工艺。如PCB设计、制做、焊接、器件老化。

1.2机箱及过线的EMI设计

机箱及穿过的电源线、信号电缆通常是EMI设计的关键问题。机箱的作用是双向电磁屏

蔽及接地,而穿过的导线很容易破坏机箱的电磁屏蔽效果。

为了防止设备本身产生的电磁干扰进入电源线,同时防止电源线上的干扰进入设备,一

般需要使用电源线滤波器抑制双向的共模及差模传导干扰,还可以使用瞬态电压保护器及压

敏电阻抑制浪涌电压。

需要指出,来自电源线的共模千扰通过共模抑制电容器接至机箱。机箱必须妥善接地,

才能保证共模千扰的抑制效果。较大的共模抑制电容器可以改善共模千扰的抑制效果,但会

产生较大的漏电流,对安全不利。

当设备比较复杂时,屏蔽和接地方案需要仔细设计。如图1,作者的一些体会:

(1)从机箱电源输入口到电源线滤波器输入端的连线应尽量短,以防止双向空间电磁祸

合。最好选用带插座的电源线滤波器。

电源线滤波器外壳应该与机箱形成良好导电接触,并就近布置接地桩。

电Dv,线滤波器的输入、输出引线不要靠近,以防庄电磁祸合。建议把电源线滤波器靠近机箱

壁放置。

(2)穿过机箱的信号电缆很容易引入共模干扰,最好使用馈通滤波器或光电隔离器,必

要时应使用屏蔽网套。信号电缆应远离电源线。

(3)为了屏蔽电磁干扰、抑制静电放电干扰,机箱应近似为完整、连续的导电体:严格

控制机箱开孔尺寸,必要时使用多个狭缝或蜂窝状屏蔽通风窗。

(4)键盘及显示器件往往需要较大的窗口,不利于电磁屏蔽,可以考虑使用隔离仓技术

将显示电路与其它电路隔离,或使用透明屏蔽材料。

图1建议的机箱及屏蔽方案

二、软件系统的抗干扰设计

嵌入式系统的灵魂是软件系统,嵌入式系统的抗干扰设计,必须解决软件系统的抗干扰

问题。很遗憾,目前的冯一诺依曼计算机体系无法保证软件运行的绝对可靠,因此,必须使用

工程方法增强软件系统的可靠性。以下结合作者的实践经验,给出一些针对软件系统的可靠

性设计技术。

2.1软件的可靠性设计

(1)开机自检。即在复位后,软件先进行系统检查,以确保ROM内容正确、RAM可正

常读写、各外设正常工作……开机自检对系统可靠运行是十分必要的。

(2)软件的正确性和功能符合性。符合功能规范要求、并能正确运行,是软件可靠性设

计的基本要求。和微机上的纯软件相比,嵌入式软件不但和具体硬件紧密关联,而且往往具

有明显的、需要程序员维护的多任务特性:嵌入式系统还要求简洁、直观的人机交互方式,

因而需要仔细设计软件。

(3)对错误数据的抗敏性。除了基本功能符合性之外,软件设计时还应提高对错误数据

的抗敏性,如对输入数据应进行必要的检查、数据通信的校验机制等。关于数据通信的举例:

从串口接收数据,数据报格式为:[报头」[-氏度]{数据}[报文校验和],接收到[长度l后,应检查

长度值的合法性:接收时,还应检查数据报相邻字节的时间间隔,超时后放弃接收。

(’) 面向对象的程序设计。嵌入式系统的编程语言一般是c语言,甚至汇编语言,它们

都是过程性语言。和面向对象的编程语言 (C++, java)相比,过程性语言缺乏数据抽象、封

装和隐藏,程序员经常使用一堆零散的变量表示一个对象,不容易保证软件的可靠性,也不

利于软件维护。

根据作者的实践经验,即使使用过程性语言,只要在程序设计中使用了面向对象的编程

思想,也可以设计出可移植性强、易于维护的程序。当然,在传统的过程性语言中体现出面

向对象的编程思想,需要一定的编程经验和技巧。

2.2暂态设计

在设备复位、启动或关闭时,往往要求输出端口具有确定状态、或进入安全态,可以从

以 卜儿方面分析、测试并处理:

(1)假设电源稳定,当CPU处于复位状态时,设各输出端处于什么状态?

可以分析得到。如果复位时输出端状态与要求状态相反,可以使用非门转换如果复位时口

线呈现高阻态,则可以加上拉或一「拉电阻。

(2)电源接通、断开瞬间,设备输出端处于什么状态?

由于实际系统的复杂性,电源接通、断开瞬间,设备输出端的状态很难准确分析,一般采用

试验、调整方法解决。

(3)许多可编程芯片都有复位时间要求,设备启动时能否保证这些芯片的复位时间?主

要依靠分析和试验方法解决。

2.3程序跑飞时输出保持安全态

安全态指非动作态 (如电机停止运转)。在嵌入式系统中,来自内部的程序设计缺陷或外

部窜入的电磁干扰都有可能造成程序跑飞。在系统方案设计时就应采取措施,当程序跑飞时

输出尽可能保持在安全态。

程序跑飞时,CPU已无法执行正常程序流程。为了使输出保持在安全态,必须使用硬件

逻辑判断CPU发出的指令是否正确。基本思路是:CPU的输出口线不直接控制动作器,而在

两者之间增加硬件判断逻辑:当CPU口线输出特定的信号序列时,硬件判断逻辑才输出动作

指令,否则不输出动作指令。

如图2,图中使用了单稳态触发器判断动作信号:只有当CPU口线连续输出高于一定频

率的方波时,才有动作指令输出。图中用与非门实现两个信号的“与” *** 作,提高可靠性。可

以使用CPLD等器件实现更复杂的动作信号判断。

图2用单稳态触发器实现指令判断

2.4程序跑飞后能自动恢复

即看门狗(WatcliDog)技术,己普遍应用。其基本原理是:设置一个定时器(即“看门狗,

’),

该定时器溢出时会引起系统复位。程序需仔细设计:在正常执行时,能及时地对看门狗定时

器清零 (称为“喂狗,,),看门狗定时器不会溢出:当程序跑飞后,由于没有及时“喂狗”

,看门

狗定时器溢出,系统复位。

看门狗程序设计的关键是:(1)“喂狗”指令应比较特殊,以防程序跑飞后CPU将其它数

据解释为“喂狗”指令:(2)只在少数关键程序位置“喂狗”

,以保证程序跑飞后看门狗溢出。

可见,看门狗的作用是程序跑飞后尽快复位,并不能从根本上改善系统的可靠性。因此,

可靠性设计仍应从系统、硬件、软件实现上仔细设计‘

除看门狗之外,还有其它类似技术。如:(1)在不使用的程序存储器中存放“软利复位”

指令,当程序跑 匕后,引起软件复位(2)在汇编指令之间插入一些nop指令,减少CPU对

L指令错误读取的概率。

2.5部分数据发生错误— 休闲复位

软件的运行错误有时还表现为一部分数据发生错误,而主进程 〔或土循环)仍在运行。

如:系统在开始运行时设定外设的工作状态,运行中不再刷新。在运行中,如果外设的一{作

状态被干扰破坏,将无法恢复。这样的错误很难用看门狗技术完全检测。嵌入式系统通常设

计为尽量简洁的用户界面、尽量少的用户干预,当系统出现运行错误时,应尽可能自动恢复

到正常运行状态。

为解决以上问题,一种可用的处理方法是:程序定期刷新外设的工作状态 其缺点是

系统性能下降、效果不理想、具体实现较复杂。为此,作者在实践中使用“空闲复位”技术进

行解决:

当系统处于空闲状态一定时间以后,自动重新启动。为了维持以前的状态信息,可以在

非易失性存储器中保存少数关键数据。系统重新启动后,需要检查这些数据,如果数据值无

异常,则装入这些数据:否则,装入缺省数据,并根据需要给予提示。

三、结语

嵌入式系统的抗干扰设计是一个非常复杂、实践性很强的问题,以上主要从硬件的EMI

设计及软件的抗干扰设计等方面讨论了作者对嵌入式系统抗千扰设计技术的一些理解。从目

前的应用现状看,硬件EMI设计技术己经很成熟,应用也较成功但作为嵌入式系统的核心

与灵魂的软件系统,在可靠性方面还需要继续改进。

参考文献

张松春等,电子控制设备抗干扰技术及其应用,北京:机械工业出版社,1995

钟毓宁等,机电产品可靠性应用,中国计量出版社,1999

李海泉。计算机中的电磁干扰研究 计算机工程与设计,2002.12, p30

何立民,单片机应用技术选编一七,北京航空航天大学出版社。1999

[1]

[3]

[4]

Java程序从源文件创建到程序运行要经过两大步骤:1、源文件由编译器编译成字节码(ByteCode)

2、字节码由java虚拟机解释运行。因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言( "semi-interpreted" language)。

下面通过以下这个java程序,来说明java程序从编译到最后运行的整个流程。代码如下:

//MainApp.java

public class MainApp {

public static void main(String[] args) {

Animal animal = new Animal("Puppy")

animal.printName()

}

}

//Animal.java

public class Animal {

public String name

public Animal(String name) {

this.name = name

}

public void printName() {

System.out.println("Animal ["+name+"]")

}

}

第一步(编译): 创建完源文件之后,程序会先被编译为.class文件。Java编译一个类时,如果这个类所依赖的类还没有被编译,编译器就会先编译这个被依赖的类,然后引用,否则直接引用,这个有点象make。如果java编译器在指定目录下找不到该类所其依赖的类的.class文件或者.java源文件的话,编译器话报“cant find symbol”的错误。

编译后的字节码文件格式主要分为两部分:常量池和方法字节码。常量池记录的是代码出现过的所有token(类名,成员变量名等等)以及符号引用(方法引用,成员变量引用等等);方法字节码放的是类中各个方法的字节码。下面是MainApp.class通过反汇编的结果,我们可以清楚看到.class文件的结构:

第二步(运行):java类运行的过程大概可分为两个过程:1、类的加载 2、类的执行。需要说明的是:JVM主要在程序第一次主动使用类的时候,才会去加载该类。也就是说,JVM并不是在一开始就把一个程序就所有的类都加载到内存中,而是到不得不用的时候才把它加载进来,而且只加载一次。

下面是程序运行的详细步骤:

在编译好java程序得到MainApp.class文件后,在命令行上敲java AppMain。系统就会启动一个jvm进程,jvm进程从classpath路径中找到一个名为AppMain.class的二进制文件,将MainApp的类信息加载到运行时数据区的方法区内,这个过程叫做MainApp类的加载。

然后JVM找到AppMain的主函数入口,开始执行main函数。

main函数的第一条命令是Animal animal = new Animal("Puppy")就是让JVM创建一个Animal对象,但是这时候方法区中没有Animal类的信息,所以JVM马上加载Animal类,把Animal类的类型信息放到方法区中。

加载完Animal类之后,Java虚拟机做的第一件事情就是在堆区中为一个新的Animal实例分配内存, 然后调用构造函数初始化Animal实例,这个Animal实例持有着指向方法区的Animal类的类型信息(其中包含有方法表,java动态绑定的底层实现)的引用。

当使用animal.printName()的时候,JVM根据animal引用找到Animal对象,然后根据Animal对象持有的引用定位到方法区中Animal类的类型信息的方法表,获得printName()函数的字节码的地址。

开始运行printName()函数。

特别说明:java类中所有public和protected的实例方法都采用动态绑定机制,所有私有方法、静态方法、构造器及初始化方法都是采用静态绑定机制。而使用动态绑定机制的时候会用到方法表,静态绑定时并不会用到。

怎样运行自己编好的JAVA小程序?

写个DOS批处理,

javac Notepad.Java

java Notepad

~~~~~~~~~~~~~~~~~~~~

怎样才能运行JAVA小程序?

JDK+记事本是最简单的 不过JDK需要配置环境变量之类的 要想方便的话用Myeclipse 参考下载地址 :chinesedocument.kaifagongju/Javabianjiqi/20070927/3837. 安装完成直接编辑文件运行就ok

不能运行JAVA小程序!

当然还要你配置classpath!!!

1、JAVA需要什么样的环境变量,这些环境变量有什么作用?

JAVA程序能够顺利编译需要两个环境变量,一个是PATH(path),一个是CLASSPATH(classpath)。那么这两个环境变量代表什么呢?或者说究竟在JAVA程序编译中有什么作用呢?这就要涉及到WINDOWS的基本知识了。在WINDOWS环境中,每一条能用的指令都保存在硬盘的“某个角落”,比如说指令NOTEPAD(WINDOWS的记事本指令,在C:\WINNT目录下),那么在DOS命令提示符下直接输入NOTEPAD就可以打开记事本了。但是一旦我们把C:\WINNT目录下的NOTEPAD.EXE这个可执行文件移开(比如说我们现在把它“剪切”到D盘根目录下)我们再在DOS提示符下直接输入NOTEPAD时就无法再打开记事本了,但是我们在DOS下改变路径输入D:\NOTEPAD(或者先输入cd D: 在输入NOTEPAD也行)就可以打开记事本了。这就是说在我们直接输入NOTEPAD的时候,其实其默认路径就是C:\WINN。假设我们要运行一个JAVA程序(hello.java)就要先把它的class文件移动到JAVA里的bin目录下 然后打开DOS,把路径改到JAVA的BIN目录下 执行java hello.class,一次无所谓 但是每次都要这样去做未免太麻烦。还好WINDOWS提供了一个PATH环境变量,他的作用就是现在这个变量的值路径中去找,如果找到了要运行的EXE就运行,否则失败。如果我们把JAVA里的bin目录这个路径赋给path那么下次我在运行java这个命令的时候,即便是直接输入DOS也能够在path变量中找到JAVA的bin目录下的java指令了。

下面说说,classpath环境变量。不知道各位注意到没有,我上面说的那句话——“假设我们要运行一个JAVA程序(hello.java)就要先把它的class文件移动到JAVA里的bin目录下”,为什么要这样做呢?因为我们在用到java hello.class这条指令的时候,DOS不知道hello.class这个文件在哪里,他就先到当前目录中去找,如果找到就运行,否则失败。当然,如果说hello.java在D盘根目录下,你也可以用java D:\hello.class这条指令来运行,但是每次这样做也确实够麻烦。WINDOWS就提供了这样一个环境变量——classpath,如果没有就应该新建一个。我们把D:\这个路径赋值给classpath,那么下次在运行java hello.java的时候就先在当前目录中到,如果找到就运行,如果找不到就在classpath的值路径下去找,找到就运行,找不到就失败。

以上阐述了path和classpath两个环境变量的作用,如果设置好了。java的编译和运行就基本上没什么问题了。至于有些书上说的环境变量javahome初学阶段可以暂时不管它。

2、如何设置环境变量?

右击“我的电脑”,然后“属性”。在分页卡里选择“高级”,然后点击“环境变量...”按钮,d出环境变量对话框。在下面的系统环境变量中找到path然后双击,在变量值中添加上JAVA的BIN目录的路径(其他的不要删哈,删了后悔不要怪我哟~~~),和其他的路径值用英文状态的隔开。至于classpath我一般都没有设置,但是比如有些朋友喜欢规范一点,要把java文件全部放到一个文件夹中,比如说D:\javaexe,那么在classpath中加入.c:\jdk1.3\lib\tools.jarc:\jdk1.3\lib\dt.jarD:\javaexe\这个路径。(注意:.c:\jdk1.3\lib\tools.jarc:\jdk1.3\lib\dt.jar这三个不能少)

java小程序无法运行

win7可以运行这个

将文件保存为A.java,然后放到D盘根目录

cmd中输入:

D:\>javac A.java

D:\>java A 12 23 32 21

命令行输入的整数是:

12 23 32 21

命令行输入的整数升序排序后:

12 21 23 32

如何运行java小程序

先编写一个java小程序(applet)保存为 *.java

在dos中的文件目录下先编译javac *.java 生成*.class文件

接着编写一个含*.class文件的文件,如<<head<titleHelloWorldApplet</title<body<Applet code=HelloWorldApplet.class width=200 height=400

在dos中文件所在目录下appletviewer *.即成功

java小程序不能运行

可能是java环境变量的问题,设置好了重新打开浏览器就行了。

正常情况下设置三种系统环境变量

JAVA_HOME={JDK安装目录} (注:一般这个系统中没有这个,需要自己建)

PATH=%JAVA_HOME%\bin... (注:...指原来系统中PATH的内容)

classpath=.%JAVA_HOME%\lib (注:一般这个系统中没有这个,需要自己建)

设置完后,打开命令行

输入java -version

出现类似内容:

java version "1.5.0_06"

Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)

Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)

这种情况下JDK安装是没有问题的

如果运行不了你的东西,那应该是你写的程序上的问题

JAVA小程序的运行结果

没有运行结果……

但是,第一个里面,y = 97.66,第二个,y = 3

关于java小程序的运行

只要电脑上装有JDK,就可以编译和运行java程序,一般java虚拟机都是win关盘自带的,所以只需要去sun.下载jdk

配置好环境变量

在运行里面打开cmd

然后就可以做你要做的事情了

我运行java小程序出错?

public打错成了pubilc

java小程序运行错误

file2 f2=new file2()

和 类名不同 要一致

你看看转换F的 时候有问题没


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8109345.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存