【系统功能】 主要是用来做一个老化设备。工人只需要将被老化的设备插上,而节省了复杂的接线过程。 PC机用来记录老化数据。 LPC2131和LPC922通信用来收集各个LPC922通过AD获得的信息,然后转发给PC机。
【系统构成】 系统为三级结构。 第一层是PC机。 第二层是LPC2131,最多有16个2131和PC同时通过RS485连接。 第三层是LPC922,最多有16个LPC922和一个LPC2131通信,也是RS485连接。
RS485的速度均为9600波特率。
也就是说,最终一台PC一个串口可以同时获取16*16=256个LPC922内的信息。 RS485转换芯片均为75176。 PC机和LPC2131目前连线不超过2米,目前一台PC仅和一个LPC2131通信,其他的LPC2131还未同时接上。 LPC2131和LPC922通信线是在电路板上,我们做了一个很大的电路板,RS485通信总线分两排从电路板上穿
过。在其中一端接上,形成一个右框形。
16个LPC922分布在总线旁边。LPC922由以下几个模块组成: 电源+AD+DA+RS485。 LPC2131由以下几个模块组成: 电源+UART0+UART1。
整个电路板的电源通过一个220转0-30V,5A的开关电源提供24V输入。该开关电源型号是APR-3005。 每个模块上使用一个MC34063将该24V降压到9.5V,然后经过LM7805降压到5V给模块供电。 LPC922和LPC2131的3.3V是经过LDO将5V降压到3.3V。使用的芯片是NCP500SN33。 各个不同电源之间的GND均通过跳线焊接。
之所以这样设计,是因为DA输出需要配电24V输出。而LM7805用24V输入发热太大。
RS485电路TTL电平侧均没有设计隔离。不过由于LPC922和LPC2131均为3.3V供电的系统。 而RS485为5V供电。 差分侧有A+上拉到VCC+5V,B-下拉到GND设计。 RS485芯片的发送端DE有下拉设计。 RS485的5V系统的GND和3.3V系统的GND通过一个0Ω的电阻连接。
【当前问题】 16台LPC922同时和LPC2131通信的时候。正常通信2-3小时没有任何问题。 2-3小时候过后,随机出现16台LPC922中间任意一台掉线的现象。 LPC922采用独立的RX,TX中断入口。
【已经测试过的方案】 1、怀疑LPC922长时间通信后死机。 增加程序运行指示灯控制。如果程序正常运行,则不停的闪烁。 测试发现,当模块LPC922掉线以后,他的程序运行指示灯闪烁正常。 2、怀疑RS485芯片失效。 当模块掉线以后,使用示波器观察RS485芯片的RXD引脚,有正常的数据波形。 3、由于RS485是一个半双工通信。怀疑是否在发送状态和接收状态的切换中出现问题,导致一直处于发送状
态,所以即使有RXD信号,也不进入中断读取信息。 增加发送状态和接收状态的强制切换,如果发送状态持续超过3S,则强制切换到接收状态。 测试结果表明,增加这样的处理依然存在掉线的情况。同时掉线后用示波器检查RS485发送使能引脚, 该引脚已经是高电平,可以从某种程度上证明,已经除以接收状态了。 4、增加串口接收中断指示灯。只要是串口有中断,则将对应的指示灯取反操作。 测试表明,当模块掉线以后,串口接收指示灯不再闪烁。 而此时程序运行灯闪烁正常。 所以,怀疑此时是否出现这样的状况,LPC922主程序运行没有死机,而串口部分死机不再通信? 5、为了进一步的检测是否4的结论成立,开启了LPC922的内部看门狗。测试表明,掉线后不能重新 回来,也可以从某种程度上证明,内部看门狗没有产生复位动作。 因为当模块掉线以后,如果我用镊子将LPC922的复位引脚碰一下GND,让LPC922复位的话,LPC922 是可以重新通信的。 6、为了检测总线上是否存在误码传输,在通信协议内的校验检查部分增加了一个指示灯控制。 如果校验码不正确,则控制一个指示灯取反。 测试表明,运行一段时间以后,误码开始发生。但误码也不是很频繁。结论是存在误码。
【曾经有效的改进过程】 最开始,掉线很频繁的发生。因为最开始的时候,各个电源模块之间的GND不是通过跳线焊接起来的。 是通过磁珠将各个电源之间的GND连起来的。经过更换成跳线连接后,掉线一度不再发生。让我以为问题 已经找到。可是经过细致的测试,发现运行2-3小时后还是会随即的发生16个模块中某一个掉线的情况。
【求助部分】 请各位分析原因所在。 1、程序原因? 2、硬件原因?电源、RS485总线设计? 3、芯片原因?LPC922、75176?
请各位网友来一下头脑风暴,说出各位的见解! 提出解决方案,最好给出一点解释!好让大家心里有底。
谢谢! 网友:emailli |