上一篇文章分析了CAN总线再理想状态下的同步原理,为什么说是理想状态下,那有没有不理想的状态呢?显然是有的!
下面列举几种同步后让然后不理想的情况:
1. 因为隐性电平到显性电平的跳变需要时间,如果跳变时间较长会存在发送节点发出跳变的时间和接收节点实际采集到的跳变之间存在偏差,所以实际存在如下情况(这里认为SJW都是1),可见调整后仍会有偏差存在。按照200-500ns的规定范围,可以最大偏差出2TQ(16位分的情况下为250ns/tq),所以如果如果跳变时间过长,不但无法完成重同步,甚至会因为重同步而导致了偏差产生的情况。
(这里拓展一下,什么情况会影响跳变时间呢?影响最大也最常见的就是匹配电阻,另外CAN线缆长度,节点数量等也会影响,其实归根结底就是驱动能力和阻抗匹配的影响)
2.在实车环境中各ECU节点位分数不一样,比如CAN网络规范中提到的10位分,12位分,16分为,20位分等,下图中以10位分和16位分两种情况举例,可见重同步以后因为位分情况不同,重同步以后也没有完全对齐,而且可能会造成新的偏差,所以要注意尽量按照主机厂提供的CAN一致性规范来进行位分配置!
3. 如果传输过程中存在干扰导致波形偏差太多,重同步以后也无法完全调整对齐,对于SJW=1的情况,每次最多调整1TQ,如下图,节点之前的偏差超过了SJW,经过重同步后并没有对齐;
所以在实际使用环境中需要关注SJW的合理配置,特别在CAN总线环境较差的情况下可以给SJW配置一个较大的值。
由上可知,在实际的CAN网络中,因为各种原因会产生相位差,而硬同步和重同步机制的调整能力是有限的,过大的偏差可能无法完全消除,所以在实际项目中要注意维护CAN一致性的各项参数在规范要求以内!