TA的每日心情 | 难过 2019-11-19 16:03 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单论单片机硬件系统设计解决方案,一般从三个方面分析:优选设计方案、增加冗余和容错率、采用硬件抗干扰。本文详细的介绍了优化这三个方面对单片硬件可靠性带来的好处。# |& I p% |2 g9 `( S+ x
1、选优设计 t+ N4 e9 P6 c4 O. r
在系统硬件设计和加工时,应该选用质量好的接插件,设计好工艺结构;选用合格的元器件,进行严格的测试、筛选和老化;设计时技术参数(如负载)要留有一定的余量或降额使用元器件;提高印制板和组装的质量。) k6 F9 r: K! \* e4 @
2、采用硬件抗干扰措施. `! j& f- b! J( A' j" e
来自供电系统以及通过导线传输、电磁耦合等产生的电磁干扰信号,是单片机系统工作不稳定的重要因素,在系统硬件设计时必须采取有效的干扰抑制措施。单片机应用系统中还常使用系统监视电路检测系统发生的错误或故障,自动报警或使系统自动恢复正常工作状态。如采用电源故障监视、看门狗定时器等采用89C51单片机和X25045组成的看门狗电路,X25045硬件连接图如图所示。X25045芯片内包含有一个看门狗定时器,可通过软件预置系统的监控时间。在看门狗定时器预置的时间内若没有总线活动,则X25045将从RESET输出一个高电平信号,经过微分电路C2、R3输出一个正脉冲,使CPU复位。如图1所示电路中,CPU的复位信号共有3个:上电复位(C1、R2),人工复位(S、R1、R2)和Watchdog复位(C2、R3),通过或门综合后加到RESET端。C2、R3的时间常数不必太大,有数百微秒即可,因为这时CPU的振荡器已经在工作。3 r& H, Q1 y- e! I; E+ `
看门狗电路的定时时间长短可由具体应用程序的循环周期决定,通常比系统正常工作时循环周期的时间略长即可。编程时,可在软件的合适地方加一条喂狗指令,使看门狗的定时时间永远达不到预置时间,系统就不会复位而正常工作。当系统跑飞,用软件陷阱等别的方法无法捕捉回程序时,则看门狗定时时间很快增长到预置时间,迫使系统复位。需要注意的是,在程序正常运行的时候,应该在适当的地方加一条喂狗指令,使系统正常运行时的定时时间达不到预置时间。系统就不会复位。
" W& W, E8 b+ P 3、冗余与容错设计
% m8 W& u' i2 x/ q7 x' m x* t 保证单片机应用系统100%无故障是不可能的。容错是指当系统的某个部件发生故障时,系统仍能完全正常地工作,即给系统增加容忍故障的能力。为使系统具有 容错能力,必须在系统中增加适当的冗余单元,以保证当某个部件发生故障时能由冗余部件接替其工作,原部件修复后再恢复出错前的状态。硬件冗余设计可以在元 件级、子系统或系统级上进行。1 m: A0 R. m1 q$ f! i$ D* N& j' z
4、指令冗余
' x* o9 s- \' E CPU取指令过程是先取操作码,再取操作数。在程序的关键地方人为的插入一些单字节指令,或将有效单字节指令重写称为指令冗余,通常是在双字节指令和三字节指令后插入两个字节以上的NOP指令。这样即使跑飞程序飞到双字节指令和三字节指令操作数上。由于窄操作指令NOP的存在,避免了后面的指令被错误地执行,为程序纳入正轨做好准备。此外,对系统流向起重要作用的指令,如RET、RETI、LCALI.、LJMP,JC等,可以在这些指令之后插入两条NOP指令,可将跑飞程序纳入正轨,以确保这些重要指令的执行。指令冗余只能使CPU不再将操作数当作操作码错误地执行,却不能主动地将程序的错误执行方向扭转过来,要想纠止程序的错误执行方向,就需要下面的技术。+ X7 P1 e! A- r
5、设计软件“陷阱”
/ B/ z9 E8 b1 U3 w, ]: C 通常在程序存储器中未使用的EPROM空间填入窄操作指令NOP,再填入一条跳转指令,跳转到跑飞处理程序,或者直接填入指令LJMP 0000H,当跑飞程序落到此区域。即可在执行一段空操作后转入正轨。如果未使用的EPROM空间比较大,可以均匀地填入几条空操作指令和跳转指令,这种几条空操作指令加一条跳转指令的结构我们称之为“软件陷阱”。
2 ^5 c4 e% K! T- p( h 软件陷阱的一般结构为:, g+ J) w0 {# l0 L0 k! F
NOP" R, }, @! P( n/ k- J0 x: l. }
NOP
' e! _8 Z: R: w1 F LJMP FLY
% P* _* a) f6 Y4 u( |5 _! ` FLY为跑飞处理子程序,如果程序正常执行,软件陷阱部分是永远也执行不到的,只有在程序跑飞到陷阱里,软件陷阱会立刻将程序跳转到正常轨道。即使程序没有跑飞到陷阱里,也可以在程序执行一段错误操作后遇到一个软件陷阱,从而转入正轨。除了程序存储器的空白区域,程序的数据表结尾也应该设置软件陷阱,如果数据表比较大,应该在数据表的中间也设置软件陷阱,以保证程序跑飞到数据区能及时转入正轨。另外,如果程序存储器的空间足够大的话,可以在每两个子程序中间设 置一个软件陷阱。当使用的中断因干扰而开放时,在对应的中断服务程序中设置软件陷阱,能及时捕获错误的中断。软件陷阱的数量要根据实际受到干扰的情况和程序存储器的容量来确定,如果太少不能进行有效的跑飞拦截,如果太多又会占用大量的程序存储器空间。
" v6 i! Q2 \$ R/ ] |
|