|
作者:
来源: 发表时间:2006-12-30
字号:大 中 小
|
云中月8888 发表于 2006-2-28 00:12 ZLG-ARM ←返回版面  |
如果 |
如果控制两个继点器K1,K2,在运行中K1闭合,K2断开,此时来了一个干扰,使watchdog复位,即使我根据0xaa55重新初始化,也可能使K1,K2状态发生瞬间变化....
| |
hotpower 发表于 2006-2-28 00:33 ZLG-ARM ←返回版面  |
继电器都是mS级,在开关时一定要延时后再继续程序 |
最好避免一开一关同时出现...
watchdog复位后,由于你的NOINIT变量已记忆2个继电器的状态(注意:IO是要被复位的!!!最好有IO的备份寄存器!!!)
故在reset后,0x55aa还保持着(因为并没真正掉电),所以在此处可以根据需要先恢复继电器reset前的状态.
这样就避免了继电器节点打火...
我的程序没一个不带0x55aa的,他很好用,有时不得不断电将vcc/gnd短路才能解除...
再:最好加法拉电容增加系统掉电的时间,这样0x55aa会更有效,因为多提供了异常事件处理的时间.
| |
发表于 2006-2-28 00:53 ZLG-ARM ←返回版面  |
搞工控抗干扰的一个理论基础就是<<论持久战>> |
当开关继电器后,若不延时而让程序走的话,随着时间的推移(当然是mS级了).
如果程序走到关键部位,如写入eeprom,则此时继电器才真正的动作,由于火花或
电源抖动都可能造成系统复位或eeprom写入失败.
最好的办法就是先躲避"敌人的攻击",暂时进入低功耗,等敌人背过身后,再给他一枪!!!
躲避和暂时退却并非是"丢人之事",而是为以后的攻击做准备!!!
所以延时是必须的,而且是最好关中断和休眠...
| http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?v=&ID=1996020 |
|
| !注意:如果您发现此文章出现影响您的阅读的状况,请从浏览器地址栏里复制本文的链接到留言本报告给站长解决! |
|