摘要:介绍一种用休眠-复位运行方式提高单片机抗干扰能力的方法;分析其适用范围,给出具体应用电路;结合实例,分析这种运行方式下硬件和软件设计的特点。
关键词:单片机 复位/休眠抗干扰
引言
?牐犓孀盼⒌缱蛹际醯姆伤俜⒄梗?单片机的性能迅速提高,在运算、逻辑控制、智能化方面显示出非凡的优势,在很大程度上取代了原来由数字逻辑电路、运算放大电路组成的检测、控制电路,应用非常广泛。但由于它存在着死机、程序跑飞等致命缺陷,使它在许多重要场合的应用受到限制。在抗干扰方面的许多技术,比如设软件陷阱、加硬件看门狗电路等,可使这一问题有较好的解决,但仍然存在问题:① 看门狗动作时,意味着已经出现了错误,且运行了一段时间,这在有些场合是不允许的;② 有时程序出现死循环错误,但是刚好把看门狗控制环节包含进去,对于这样的错误采用看门狗无法识别;③ 在检测控制周期比较长的系统中,单片机花大量时间等待外设,执行等待命令时同样会受到干扰。针对这些情况,我们在实践中尝试了主动复位的办法,采用等间隔的脉冲或根据外部条件对单片机进行复位唤醒。每次复位后,单片机执行相应的程序,执行完任务后及时进入休眠,等待下次复位。用此方法较好地解决了上述问题,并在农用变压器综合保护器实验中得到了较好的效果。下面以51系列单片机为例探讨具体原理与实现方法,复位信号为高电平。
1 原理与实现方法
1.1 无条件定时复位法
?牐犛枚ㄊ逼鳌⒆ㄓ檬敝有酒?或其它脉冲产生器,按照设定的间隔定时产生复位信号。这种方法特别适合监测仪表。在实际运行中,往往是用A/D转换器采样输入的模拟量,然后进行存储显示。这一过程很快,但为了读数稳定,每秒数据更新不过1~2次,CPU的大量时间用于等待。如果让CPU执行完任务后直接进入休眠,然后由外界复位唤醒它去执行下一次操作,这就是定时复位法。这样会使抗干扰能力大大增强,主要有2点:① 休眠时,程序停止运行,不会出现PC指针紊乱引起的程序跑飞。如果工作与休眠的时间比例为1:9,也就是说,1s内有0.1s的时间用来检测、送显示,有0.9s的时间休眠,程序受干扰的概率是全速运行时的1/10,整体抗干扰能力提高了10倍。② 由于每1s无条件复位1次,一旦某次工作期间出现死机,在下次复位时肯定得以恢复。对于只是显示的仪表,某1s偶然出现的读数错误对下一次测量并没有记忆,是可以承受的,属“一过性”错误。这种定时复位相对于看门狗电路的优点,一是把等待时间改为休眠状态 ,缩短可能受干扰的时间;二是避免了恰好包含看门狗控制环节的死循环。
1.2 外部条件复位法
?牐犛行┦涑龌虿饬康钠舳?是由外部控制的。如暖气热表,靠热水水轮旋转产生的脉冲计算热量,没有热水流动,就没有热量输出,CPU只要保持原来数值即可,不需要计数。可以想象,停暖时热水水轮不转,CPU在春夏秋三季则无事可做;如果让其休眠,而不是时刻检测有无水轮脉冲,抗干扰能力会大大增强。因此,只要把水轮脉冲与CPU的复位联系起来,水轮每旋转1周,CPU复位1次,热表就可以正常工作了,这就是外部条件复位法。类似的应用还有半电子式电度表,当机械度盘旋转1周时才进行1个计数,用户不用电,CPU会一直休眠。这种方法的复位间隔不是固定的,而是根据外部条件确定的。在有些场合,休眠的时间会很长,对提高抗干扰能力非常有效。
2 硬件实现要点
2.1 无条件定时复位
?牐犚话阌?2种方法。① 使用定时器或专用时钟芯片复位。图1为使用555电路组成的定时电路;也可以使用X1126之类的时钟芯片,设置报警时间后用报警信号唤醒CPU。这种方法适用于长间隔定时,还可以根据本次运算的结果,临时决定下一次的报警唤醒时间,非常灵活方便。② 使用系统固有的信号作为定时复位脉冲。例如使用50Hz工频电源整形后作复位,既省略了定时器,同时又为检测电流信号的相位采集了相应的信号,如图2所示。
2.2 外部条件复位
?牐牥淹獠刻跫?脉冲整形后送到复位端子。对于上述水轮或电表度盘产生的脉冲,可以使用施密特触发器整形;对于记录最大或最小值的仪器,可使用窗口比较器。为了实现调节的电子化,可以使用电子电位器,用单片机指令设定上下限。
2.3 复位周期与复位高电平时间
?牐犕?3中,复位信号在高电平Tr期间,单片机处在复位状态,程序不运行,抗干扰能力最强;高电平过后,单片机开始执行程序。也就是说,复位信号的低电平Td期间是可供程序执行的时间,这个时间要大于每次程序的执行周期。合理选择复位周期和复位信号的高电平占空比非常重要。对于单纯显示仪表,复位周期决定数据刷新周期,低电平时间要大于检测、送显示的全部时间;否则,会出现永远不能完整执行程序的错误。单片机在Ts和Tr期间都能有效地抗干扰,但是最好还是把多余时间安排在Tr内。当程序执行时间较长,要求尽量缩短Tr时,可加入微分电路,如图1中的C30、R26、D9。
2.4 输出端子的处理
?牐?(1)复位期间的正脉冲
?牐牳次黄诩涞テ?机的全部I/O口变成高电平。也就是说,正常输出为低的引脚,会按照复位周期出现宽度为Tr的正脉冲。这个正脉冲会影响正常的输出,有2个办法处理:① 在端子上并联电容加以抑制,容量根据复位的Tr时间确定。减小Tr可以减小并联电容。② 把外围电路设计成高电平无效。
?牐?(2)容错
?牐犑实毖∪∈涑龆瞬⒘?电容的容量,可以实现容错控制。在某个复位周期,因干扰输出了错误电平。由于电容的保持作用,在本周期内尚不能使输出变化到有效的电平;在下个周期,错误被纠正。因此,只要不是连续2个周期出错,输出是可容错的。当然,这种方法会使正常的输出变化滞后一个周期,才真正反映到输出端子。
2.5 上电检测与手动复位
?牐犛行┫低吃诔跎系缡币?做一些初始化操作。采用复位方式运行时,每次复位已经成为正常运行的开始条件,无法辨别是否初上电。在某引脚对地接一个1μF的电容,复位后检测该引脚,如果是低电平就是初上电。如果给系统设立一个复位按钮,也就是常见的手动复位,这个按钮不是连接在复位端,而是并联在上述引脚对地的电容两端。