打印
[经验分享]

单片机系统的复位(初始化)、抗干扰与防“走飞”

[复制链接]
351|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzbf|  楼主 | 2024-9-23 14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、复位功能的重要性
对于任何一个微机系统来说,系统上电复位都是开始工作的第一步。上电复位,使整个系统处于或回到默认的初始硬件状态下,以便做好工作准备。
在上电或复位后一段时间内(实际上时间很短)让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。
复位电路性能的优劣,直接影响到整个系统工作的可靠性。许多小伙伴在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、程序“走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。二、单片微机系统初始化状态(复位)复位也就是强制单片机进行初始化,作用是使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51的RST引脚是复位信号的输入端,高电平有效,持续时间要在24个时钟周期以上。单片机复位后,其内部各寄存器的状态如表所示。
单片机的引脚功能:
  • RST:复位信号输入端,高电平有效。
  • EA:内/外程序存储器选择控制端,低电平有效。=1,访问片内程序存储器,但在PC(程序计数器)值超过0FFFH(对于8051、8751)时,即超出片内程序存储器的4K字节地址范围时,将自动转向执行外部程序存储器内的程序。=0,单片机则只访问外部程序存储器。
单片机的复位是由RESET引脚来控制的,此引脚输入高电平超过两个机器周期后,单片机即进入芯片内部复位状态,而且一直在此状态下等待,直到RESET引脚转为低电平后,才检查EA引脚是高电平或低电平,若为高电平则执行芯片内部的程序代码,若为低电平便会执行外部程序。如果RST持续为高电平,单片机就处于循环复位状态。
单片机复位后的状态:
单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值,见下表。
说明:表中符号×为随机状态;
A=00H,表明累加器已被清零;
PSW=00H,表明选寄存器0组为工作寄存器组;
SP=07H,表明堆栈指针指向片内RAM 07H字节单元,根据堆栈操作的先加后压法则,第一个被压入的内容写入到08H单元中;
Po-P3=FFH,表明已向各端口线写入1,此时,各端口既可用于输入又可用于输出;
IP=×××00000B,表明各个中断源处于低优先级;
IE=0××00000B,表明各个中断均被关断;
需要指出的是,记住这些特殊功能寄存器复位后的主要状态,对于了解单片机的初态,编写应用程序中的韧始化部分是十分必要的。
三、复位情形
启动复位一般有三种情况:
一是上电复位,在给系统(电路)通电时马上进行复位操作;在电源上电以及在正常工作时电源电压异常或被干扰时,电源电压不稳定,对单片机工作的稳定性可能带来严重的影响。因此,在电源上电时要进行复位;监视正常工作时电源电压,若电源有异常则会进行强制复位,如欠压复位。
二是手动复位,在必要时可以由手动操作,一般使用按钮来操作。比如,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,可以按下复位按钮,内部的程序自动从头开始执行。
当单片机运行出错或进入死循环时可按复位键重新启动。
三是自动复位,根据程序或者电路运行的需要自动地进行,如Watchdog。
从电路实现形式来看,单片机复位电路主要有四种类型:
(1)微分型复位电路;
(2)积分型复位电路;
(3)比较器型复位电路;
(4)看门狗型复位电路。四、防止程序“走飞”
采用单片机为核心组成检测与控制系统,特别是在工业现场,系统会受到各种干扰的影响,会导致程序计数值指针 ( PC)的内容改变,打乱程序的正常运行,由于偶然巧合而进入死循环,这就是我们平常说的程序“走飞”。
出现“走飞”这种情况后 ,系统将无法完成正常功能,造成整个系统的陷入停滞状态,发生不可预料的后果。这是非常有害的 ,有时甚至是非常危险的。软件设计人员在进行软件开发设计时,必须采取措施防止程序走飞或者一旦走飞马上让程序返回到指定的安全状态,使得系统能够经 住不同环境下各种干扰的考验,始终保持安全稳定运行。
目前在防止程序走飞方面的措施主要有:
1.设置监视跟踪定时器:利用定时中断来监视程序的运行状态。如果主程序正常运行一个循环周期的时间为t0,设定定时器的定时时间t1稍大于t0,在主程序运行过程中每次都要执行一次定时时间常数t1刷新操作。 这样只要程序正常运 行,定时器不会出现定时中断;当程序“走飞”的时候,不能刷新定时常数 ,定时器就会产生中 断 ,利用定时中断服务程序将系统复位。
在以前传统的8051往往没有内置看门狗,都是需要外置看门狗的,例如常用的看门狗芯片有Max813、5045、IMP706、DS1232。
看门狗型复位电路(Watchdog):自动避免程序运行异常时“走飞“,陷入死循环。
  Watchdog:编写一段程序P,实现如下功能:当系统正常运行,CPU正常工作时,定时复位某个计数器CTC,使得该计数器CTC的值不超过某一规定值t0;当系统异常,CPU不能正常工作时,造成计数器CTC不能被复位,其计数会超过t0,进而产生复位脉冲送给看门狗,使得CPU恢复正常工作状态。
2.是设置软件陷阱。 当程序计数指针PC值失控,造成程序走飞而进入非程序区后 ,只要在非程序区设置拦截措施,使程序进入陷阱,然后强制使程序进入初始状态。
上述两种方法都存在一定的缺陷,一般采取结合使用的办法。
Watchdog这种复位电路的可靠性主要取决于软件设计时将定时向复位电路发出脉冲的程序P放在何处。一般是将此段程序P放在定时器CTC的中断服务子程序中。但是,有时这种设计仍然会引起程序”走飞“或工作不正常。
原因主要是:当程序“走飞”发生在中断子程序P定时器初始化以及开中断之后的话,这种“走飞”情况就有可能不能由Watchdog复位电路校正回来。因为定时器中断一直在产生,即使程序不正常,Watchdog也能被正常复位。
为了解决这个问题,提出定时器加预设的方法,即在初始化时压入堆栈一个地址,在此地址内执行的是一条关中断和一条死循环语句。在所有不被程序代码占用的地址尽可能地用子程序返回指令RET代替。这样,当程序走飞后,其进入陷阱的可能性将大大增加。而一旦进入陷阱,定时器停止工作并且关闭中断,从而使Watchdog复位电路会产生一个复位脉冲将CPU复位。
当然这种技术不适用于实时性较强的控制或处理软件。
五、抗干扰设计
单片机的抗干扰设计通常分为硬件抗干扰设计和软件抗干扰设计。
1.硬件抗干扰设计硬件抗干扰设计是整个单片机应用系统抗干扰设计的基础,它为软件的抗干扰设计提供了良好的条件。影响单片机系统可靠安全运行的因素主要来自系统内部和外部的各种电气干扰,并受系统结构设计、元器件选择、安装、制造工艺影响等,这些都构成单片机系统的干扰因素。
1.形成干扰的基本要素
● 干扰源:指产生干扰的元件、设备或信号。用数学语言描述 <span class="MathJax_SVG" id="MathJax-Element-2-Frame" tabindex="0" data-mathml="dudt" role="presentation" style="display: inline-block; line-height: normal; overflow-wrap: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; position: relative;">dudt 或者 <span class="MathJax_SVG" id="MathJax-Element-1-Frame" tabindex="0" data-mathml="didt" role="presentation" style="display: inline-block; line-height: normal; overflow-wrap: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; position: relative;">didt 大的地方就是干扰源,如雷电、继电器、可控硅、电机、高频时钟等都可能成为干扰源。
● 传播路径:指干扰从干扰源传播到敏感器件的通路或媒介。典型的干扰传播路径是通过导线的传导和空间的辐射。
● 敏感器件:指容易被干扰的对象。如 A/D 及 D/A 转换器、单片机、数字 IC、 弱信号放大器等。
2.干扰的分类
干扰的分类有好多种,通常可以按照噪声产生的原因、传导方式、波形特性等进行不同的分类。
按产生的原因分可分为放电噪声音、高频振荡噪声、浪涌噪声;按传导方式可分为共模噪声和串模噪声;按波形可分为持续正弦波、脉冲电压、脉冲序列等。
3.干扰的耦合方式
干扰源产生的干扰信号是通过一定的耦合通道对测控系统产生作用的。细分下来,主要有以下几种:
● 直接耦合:这是最直接的方式,也是系统中存在的最普遍的一种方式。例如,干扰信号通过电源线侵入系统。对于这种形式,最有效的方法就是加入去耦电路,从而很好的抑制干扰信号。
● 公共阻抗耦合:这也是常见的耦合方式,这种形式常常发生在两个电路电流有共同通路的情况下。为了防止这种耦合,通常在电路设计上就要考虑,使干扰源和被干扰对象间没有公共阻抗。
● 电容耦合:又称电场耦合或静电耦合,是由于分布电容的存在而产生的耦合。
● 电磁感应耦合:又称磁场耦合,是由于分布电磁感应而产生的耦合。
● 漏电耦合:这种耦合是纯电阻性的,在绝缘不好时就会发生。
4.硬件抗干扰技术
1)抑制干扰源
抑制干扰源就是尽可能地减小干扰源的 du/dt、di/dt。这是抗干扰设计中最优先考虑和最重要的原则,常常会起到事半功倍的效果。减小干扰源的 du/dt 主要是通过在干扰源两端并联电容来实现;减小干扰源的 di/dt 则是在干扰源回路串联电感或电阻及增加续流二极管来实现。抑制干扰源的常用措施如下:● 继电器线圈增加续流二极管,消除断开线圈时产生的反电动势干扰。仅加续流二极管会使继电器的断开时间滞后,增加稳压二极管后继电器在单位时间内可动作更多的次数。● 在继电器接点两端并接火花抑制电路(一般是 RC 串联电路,电阻一般选几千到几十千欧,电容选 0.01μF),减小电火花影响。
● 给电机加滤波电路,注意电容、电感引线要尽量短。
● 电路板上每个 IC 要并接一个 0.01~0.1μF 高频电容,以减小 IC 对电源的影响。注意高频电容的布线,连线应靠近电源端并尽量粗短,否则,等于增大了电容的等效串联电阻,会影响滤波效果。
● 布线时避免 90° 折线,减少高频噪声发射。
● 可控硅两端并接 RC 抑制电路,减小可控硅产生的噪声(这个噪声严重时可能会把可控硅击穿的)。
2)切断干扰传播路径
按干扰的传播路径可分为传导干扰和辐射干扰两类。所谓传导干扰是指通过导线传播到敏感器件的干扰。高频干扰噪声和有用信号的频带不同,可以通过在导线上增加滤波器的方法切断高频干扰噪声的传播,有时也可加隔离光耦来解决,电源噪声的危害最大,要特别注意处理。所谓辐射干扰是指通过空间辐射传播到敏感器件的干扰。一般的解决方法是增加干扰源与敏感器件的距离,用地线把它们隔离和在敏感器件上加屏蔽罩。
切断干扰传播路径的常用措施如下:
● 充分考虑电源对单片机的影响。电源做得好,整个电路的抗干扰就解决了一大半。许多单片机对电源噪声很敏感,要给单片机电源加滤波电路或稳压器,以减小电源噪声对单片机的干扰。例如,可以利用磁珠和电容组成 π 形滤波电路,当然条件要求不高时也可用 100Ω 电阻代替磁珠。
● 如果单片机的 I/O 口用来控制电机等噪声器件,在 I/O 口与噪声源之间应加隔离(增加 π 形滤波电路)。
● 注意晶振布线。晶振与单片机引脚尽量靠近,用地线把时钟区隔离起来,晶振外壳接地并固定。
● 电路板合理布局。如强、弱信号、数字、模拟信号,尽可能把干扰源(如电机、继电器)与敏感元件(如单片机)远离。
● 用地线把数字区与模拟区隔离。数字地与模拟地要分离,最后在一点接于电源地。A /D、D/A 芯片布线也以此为原则。
● 单片机和大功率器件的地线要单独接地,以减小相互干扰。大功率器件尽可能放在电路板边缘。
● 在单片机 I/O 口、电源线、电路板连接线等关键地方使用抗干扰元件如磁珠、磁环、电源滤波器、屏蔽罩,可显著提高电路的抗干扰性能。
3)提高敏感器件的抗干扰性能
提高敏感器件的抗干扰性能是指从敏感器件的角度考虑尽量减少对干扰噪声的拾取,以及从不正常状态尽快恢复的方法。提高敏感器件抗干扰性能的常用措施如下:
● 在布线时尽量减少回路环的面积,以降低感应噪声。
● 布线时,电源线和地线要尽量粗,除减小压降外,更重要的是降低耦合噪声。
● 对于单片机闲置的 I/O 口,不要悬空,要接地或接电源。其他 IC 的闲置端在不改变系统逻辑的情况下接地或接电源。
● 对单片机使用电源监控及看门狗电路,如 IMP809、IMP706、IMP813、X5043、X5045 等。可大幅度提高整个电路的抗干扰性能。
● 在速度能满足要求的前提下,尽量降低单片机的晶振和选用低速数字电路。
● IC 器件尽量直接焊在电路板上,少用 IC 座。
2.软件抗干扰设计
单片机应用系统的抗干扰设计主要是硬件方面的抗干扰设计,在提高系统硬件抗干扰能力的同时,软件抗干扰具有设计灵活、节省硬件资源、可靠性好等特点。
软件抗干扰的方法很多,这里只介绍一些常用的方法。
1.数据采集系统中的软件抗干扰设计针对数据采集系统的软件抗干扰设计,主要是采用软件数字滤波。常用的如下。
● 算术平均值法:对同一点数据连续多次采样没,然后取平均值。这种方法可以降低系统的随机干扰对采样结果的影响。
● 比较取舍法:对一点数据连续多次采样,比较数值的变化规律,剔出偏差数据。
● 中值法:对一点数据连续多次采样,取中值作为采样结果。
2.开关量控制系统的软件抗干扰可采取软件冗余、设置当前输出状态寄存单元、设置自检程序等软件抗干扰措施。
3.程序运行异常的软件抗干扰外界环境干扰系统运行,致使 PC 值改变,造成程序无法运行甚至进入死循环。程序运行异常的软件抗干扰设计就是在程序出现异常状况时,及时引导系统恢复到原始状态。常用的方法有:
● 设置软件陷阱。
● 指令冗余技术。
● 使用 Watchdog 技术。

一个实例
下面以一个简单的数字时钟的设计来说明,单片机源程序的基本结构
一、系统构成与功能系统由80C51单片机、LED 数码管、按键、发光二极管、三极管、电阻、电容等部分构成。
功能:实现时间的调整、定时时间的设定,输出等功能。上电后,系统自动进入计时状态,起始于¡ 00¡ 时¡ 00¡ 分。
系统的功能选择由SB0、SB1、SB2、SB3、SB4四个按钮来 完成。其中
1.SB0为时间校对,定时器调整功能键,按SB 0 进入调整状态。
2.SB1 为功能切换键。
第一轮按动SB1 依次进入一路、二路、三路定时时间设置提示程序,按SB3 进入各路定时调整状态。定时时间到,二极管发亮。到了关断时间后灭掉;如果不进入,继续按SB1 键,依次进入时间¡ 年¡ 位校对、¡ 月¡ 位校对、 ¡ 日¡ 位校对、¡ 时¡ 位校对、¡ 分¡ 位校对、¡ 秒¡ 位校对状态。
不管是进入那种状态,按动SB2 皆可以使被调整位进行不进位增量加1 变化。各预置量设置完成后,系统将所有的设置存入RAM 中,按SB1 退出调整状态。
3.SB4 为年月日显示转换键,可使原来显示时分秒转换显示年月日。
二、电路工作原理
1. 显示原理
由6 个共阴极的数码管组成时、分、秒的显示。P0 口的8 条数据线P0.0 至P0.7 分别与两个CD4511 译码的ABCD 口相接,P2 口的 P2.0 至P2.2 分别通过电阻R10 至R13 与VT1 至VT3 的基极相连接。这样通过P0 口送出一个存储单元的高位、低位BCD显示代码,通过P2 口送出扫描选通代码轮流点亮LED1 至LED6,就会将要显示的数据在数码管中显示出来。从P0 口输出的代码是BCD 码,从P2 口输出的就是位选码。这是扫描显示原理。
2 键盘及读数原理
键盘是人与微机打交道的主要设备,按键的读取容易引起误动作。可采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动,延时时间20ms.
3 连击功能的实现
按下某键时,对应的功能键解释程序得到执行,如操作者没有释放按键,则对应的功能会反复执行,好象连续执行,在这里我们采用软件延时250ms,当按键没释放则执行下一条对应程序。利用连击功能,能实现快速调时操作。三、程序设计思想
本系统的主程序主要完成时间显示和定时输出判断功能。而年月日显示和各时间单元进位,时间设定时,调定时间设定时等功能全部在中断服务程序中完成。
1.数据与代码转换。
由前述可知,从P2 口输出位选码,从P0 口输出段选码,LED 就会显示出数字来。但P0口的输出的数据是要BCD 码,各存储单元存储的是二进制数,也就是和要显示出的字符表达的含义是不一致的。可见,将要显示的存储单元的数据直接送到P0 口去驱动LED 数码管显示是不能正确表达的,必须在系统内部将要显示的数据经过BCD 码行转换后,将各个单元数据的段选代码送入P0 口,给CD4511 译码后去驱动数码管显示。
2.计时功能的实现与中断服务程序
时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。计数器T0 打开后,进入计时,满100 毫秒后,重装定时。中断一次,满一秒后秒进位,满60 秒后即为1 分钟,分钟单元进位,60 分到了后,时单元进位,24 小时满后,天单元进位。这样然后根据进率,得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LED 中显示出来,实现时钟计时功能。累加是用指令INC 来实现的。
进入中断服务程序以后,执行PUSH PSW 和PUSH A 将程序状态寄存器PSW 的内容和累加器A 中的数据保存起来,这便是保护现场。用以保护现场和恢复现场时存取关键数据的存储区叫做堆栈。在软件的控制之下,堆栈可在片内RAM 中的任一区间设定,而堆栈的数据存取与一般的RAM 存取又有区别,对它的操作,要遵循¡ 后进先出¡ 的原则。
3 时间控制功能与比较指令
系统的另一功能就是实现对执行设备的定时开关控制,主要控制思想是:先将执行设备开启的时间和关闭时间置入RAM 某一单元,在计时主程序当中执行几条比较指令,如果当前计时时间与执行设备的设定开启时间相等,就执行一条 CLR 指令,将对应的那路P3 置为高电位,开启;如果当前计时时间与执行设备设定的关闭时间相等,就执行SETB对应的P3 置低电位,二极管截止,。实现此控制功能用到的比较指令为CJNE A,#direct,rel,其转移条件是累加器A 中的值与立即数不等则转移。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

124

主题

5165

帖子

3

粉丝