我用ATMEGA256做了个分布式系统,主机是ATMEGA256,三个串口转485与外部设备通讯,一路485连接触摸屏,一路连接变频器和温控仪,还有一路连接9台分机,分机也是AVR的单片机。主机从三个串口不停向设备和分机发送查询和控制命令,在办公室实验时无论是停止或运行时都正常。首次安装到现场变频器运行后出现死机现象.
为了分析问题在程序段中插入了指示灯亮灭的控制代码,依次在上一段点亮一个指示灯,然后在下一段熄灭,再点亮下一个灯,如此循环。在死机时发现正常运行时闪亮变化很快的指示灯亮灭变化明显变得很慢了!但是亮灭的顺序还是正确的。
开始认为可能是电源部分的干扰,于是直接用一个手机用的充电宝(也就是电池)输出的5V电压供电,但是没有解决。偶然发现用手摸一下晶振时系统马上恢复正常,于是将晶振的外壳接上电源负极,当时连续运行几小时也没有出现这种现象了,以为问题解决了。
可是在正式使用时,同样的问题又出现了,不过频率比以前小多了,一天大概出现三到四次的样子。但是如果变频器不启动,分机也停止的时候,虽然通讯一直在进行但是连续运行了四天也没有任何问题。这次我在一个每秒中断的定时器中放了一个指示灯,让它每秒翻转,指示运行情况。可是在系统运行变慢时,也就是其他指示灯亮灭变化变慢时这个定时器中翻转的指示灯的亮灭频率却没有变化!此时再触摸晶振也没有任何变化。另外通讯线的屏蔽层和机柜都接地了。
这块主机板除了三个串口有连接设备和一路输出控制一个继电器外没有外接其他任何东西。我在连接变频器和温控仪的485电路上专门加装了一个光电隔离器,以防止变频器和温控仪通过通讯线干扰,问题也没有解决。
现在是一头雾水不知从何下手了。很奇怪为什么运行速度会变慢很多?如果是晶振变化导致的应该是整个系统频率都变化了,为什么定时器定时时间没变化?
不知道怎么搞了,还请各位多多指教!
|