最近做了一个项目,是一个CAN总线和1553B总线的网关,其中CAN总线设计中出了一点小故障,拿出来分享一下。
CAN总线采用光耦隔离,电路采用传统的光耦隔离电路,基本上如下图:
、
只是我是用的是2812自带的ECAN模块,为了保护芯片管脚,TX端并没有直接驱动光耦,而是经过了一个PNP三极管,TX通过电阻连接到PNP三极管的基极,三极管的集电极连接6N137发光二极管的阴极。板子做好以后用ZLG的USB-CAN进行调试,工作一切正常,在1Mbps的速率下可以正常通信。
但是和其它产品通讯时,却发现无论如何也通讯不上,于是用示波器观察CAN总线上的波形,发现CAN总线上密密麻麻的全都是数据,经过解析后发现基本上全是重发数据,再进一步观察波形,发现在CAN帧的应答场位置,没有出现正常的应答位,或者应答位滞后,出现在了帧结束的位置。由此初步判断是传输延迟造成的。
将通讯速率降为500kbps,通讯正常,从而基本可以认为是传输延迟过长,导致高速时无法在规定时间产生应答位,造成发送方一直重试,无法通讯。
最初怀疑是选用光耦隔离的结果,但仔细检查电路图后发现,TX到PNP晶体管基极的电阻取值过大,导致PNP晶体管开关速度较慢,在高速通讯时出现了故障,随即将基极电阻减小,故障消失。
在此次调试中,总结出了如下两点:
1.光耦的传输延迟虽然较大,但仍可以适应CAN总线1Mbps的通讯,由于光耦的传输延迟随温度变化也会改变,我又将产品放入高低温箱中进行了试验,结果表明产品在-40度到70度范围均可正常传输。
2.6N137的输出是集电极开路,需要加上拉电阻,在一般的设计中,上拉电阻一般取1k~10k,取值越大功耗越低,但在这个设计中,上拉电阻取值为390欧,是为了让上升沿变得更陡,减小传输延迟,事实证明,这么做是正确的,因为当上拉电阻变成1k以后,在1Mbps速率下便无法正常通讯。
用户993350 2012-12-12 15:20