CAN总线采用的是异步串行通信,也就是没有单独的时钟线来保证各个收发器之间时钟的一致,每个收发器是按事先设置的波特率来对总线上的电平进行分位。因此波特率设置准确对CAN总线的稳定通信来说非常重要。
CAN总线里我们可以通过对CAN节点里的位定时寄存器的控制来实现不同波特率的通信。CAN协议里将一个位时间分为同步段、传播段、相位缓冲段1和相位缓冲段2。每个段的时间长度都可以用一个整数的基本时间单位表示,该基本时间单位由系统的时钟振荡器分频得到。
同步段位于一个位的起始位置,CAN-bus规定跳变沿为同步信号,但是发送节点发送一个位跟接收节点接收到这个位之间存在网络传播延迟,传播段则是为了补偿这段传播延迟,由于采样点位置在相位缓冲段1跟相位缓冲段2之间,通过设置相位缓冲段1和相位缓冲段2的值,可以调整采样点位置,保证每个位采样点一致。缓冲段的长度调节范围则是由同步跳转宽度(SJW)决定。
![](https://pic1.zhimg.com/80/v2-98c7b1a7d05730bd268a9852c09f4dbc_hd.jpg)
![](https://pic3.zhimg.com/80/v2-23a4d1d701eec7e9733579d7e3aeaf52_hd.jpg)
SJW:同步跳转宽度;
TS2/TS1:位时间里两个时间段的分配;
BRP:波特率分频器,该区域定义了基本时间单元的长度;
例如某著名车厂CAN通信标准里规定,通信速率为125 kbps时,应该采用单次采样,采样点位置设置在70%~77%之间。其位定时参数取值可见表1与表2。
表1 LS_CAN通信速率与采样点参数
![](https://pic4.zhimg.com/80/v2-8fa117ae3026efa28cb229f57c0fecc7_hd.jpg)
![](https://pic4.zhimg.com/80/v2-9c2de159d81e142b2446bf8beefa5e5f_hd.jpg)
同步跳转宽度(SJW):SJW的值直接影响到重同步时相位缓冲段的可调节的范围,SJW的值可以在1~4之间选择,我们选择3、4可以使总线获得更宽的波特率容忍度;
采样次数:分为单次采样跟三次采样,三次采样在设计之初虽然是为了过滤掉总线上毛刺,但是采用三次采样经常会影响SJW的跳转,所以实际应用中我们一般都会采用单次采样。
了解设置波特率的原则后,我们采用ZLG致远电子的波特率计算软件,对25kbps波特率的设置参数进行计算,计算结果如图3。
![](https://pic1.zhimg.com/80/v2-12df634123f763e180e0e6545a4bd3ac_hd.jpg)
- 自动波特率识别:采用CANScope自动侦测波特率的功能,对CAN卡的波特率进行识别,识别结果为25kbps;
![](https://pic1.zhimg.com/80/v2-f5c1053724f8dcaadddae09dcab447b0_hd.jpg)
- 采样点测试:采用CANScope对当前波特率下CAN卡的采样点进行测试,测试结果为75%;
![](https://pic4.zhimg.com/80/v2-e31d8f2173ce2ea960ffaa0920696287_hd.jpg)
- 位宽容忍度测试:采用CANScope对当前波特率下CAN卡进行位宽容忍度测试,测试其对波特率的容忍度情况,测试结果为24kbps~26kbps,容忍度情况较好;
![](https://pic2.zhimg.com/80/v2-ab32fa9cb7afdd3f36cbc151f4714e41_hd.jpg)
- 位时间测试:用CANScope的眼图功能对当前波特率下CAN卡进行位时间测试,位时间为40us,与25kbps波特率的位时间相符。
![](https://pic4.zhimg.com/80/v2-0c5dacb19dbc85d89e369b6749dbb417_hd.jpg)
![](https://pic3.zhimg.com/80/v2-cc47a5e3a4b663af210d809f8df8c34e_hd.jpg)