问题描述:CAN多节点通信,波特率500K,节点之间通信不良。两路CAN均发送失败。
排查:仿真状态查看寄存器,发送失败标志位置位,仲裁失败无置位,因为发送失败导致三个邮箱都处于发送状态。CAN盒子连接到CAN总线,发现因为打开了自动重传,一直在重复发送单帧数据。检查数据发送结构体,数据长度、ID、DATA内容均正常。主频8,使用外部晶振,未打开PLL。
测试:
1.怀疑晶振精度差导致波特率不准,打开PLL,将外部晶振频率分频再倍频到120M,CAN收发问题依旧。
2.检查硬件电路,首位节点焊接120欧姆匹配电阻,问题依然未解决。示波器抓CAN信号位置,波形基本正常。
3.怀疑采样同步问题,调整CAN BS1 BS2段长度,将采样点后移。BS1_8tq,BS2_7tq,此时采样点位置为56.25%,CAN1通信成功,CAN2依此方法设置,依旧发送失败。
4.将采样点位置设置BS1_11tq,BS2_4tq时,此时采样点位置为(11+1)/(11+1+4)= 75%。CAN2两台设备收发正常。网络中设备增加到四台时,发送依旧失败,但每条数据自动重传五六次之后也可能会发送成功。
5.将采样点继续后移,发现每次后移一些,网络中能接纳的节点数就会增加。
结论:
1.CAN采样点位置一般设置在75%以上,大多在80%以上。
2.型号不同,CAN的采样特性也有差异。经过和STM32F105对比,发现GD32的CAN采样优化不好,对采样点位置要求较高。
3.一般CAN网络中,如果有对于采样点的要求,各个设备之间的采样点位置要保持一致。
4.当网络中节点数量比较多时,需要测试多节点通信是否正常。