CAN协议采用串行通信方式,数据以“位(bit)”为单位进行传输,传输一“位”数据所需要的时间即为“位时间”。位时间反映了数据传输的速率(通常用波特率表示,单位为pbs)。今天这篇文章,我们来详细谈谈CAN通信的位时间。
在CAN协议中,位时间被划分为四个段,即:同步段、传播时间段、相位缓冲段1和相位缓冲段2,其含义如下:
同步段(Synchronization Segment,SS):同步段用来对总线上的所有节点进行同步,首个沿信号(上升沿或下降沿)期望落在该段中;
传播时间段(Propagation Time Segment,PTS):传播时间段吸收网络上的物理延时(CAN信号从发送方传输到接收方需要一定的时间),包括信号在总线上的传播时间和信号在节点内的延时。传播时间延迟了可能较早进行采样的节点,保证了数据流到达所有节点后才开始采样;
相位缓冲段1(Phase Buffer Segment1,PBS1):当首个沿信号没有落在同步段内时,表明接收/发送双方的位时间存在差异,需要进行补偿。其方法是增加相位缓冲段1的时间或减少相位缓冲段2的时间。
相位缓冲段2(Phase Buffer Segmen2,PBS2):原理类似相位缓冲段1;
上述四个段的时间单位是以固定的时钟输入为基准,称为基准时间单元(time quantum),用“Tq”表示。
基准时间单元与硬件(CAN控制器输入时钟频率)相关。假设CAN控制器的输入时钟频率为10 MHz,则基准时间单元为0.1us(微秒)。这里假设输入时钟与最终使用的时钟是同一信号。
在实际电路中,为了使基准时间单元可调,在CAN控制器的输入时钟和最终使用的时钟信号之间一般会增加一个分频器。最终使用的时钟信号是经过分频之后的信号。假设输入时钟信号为20MHz,分频器的值设置为2,则最终使用的时钟信号频率为10MHz,基准时间单元为0.1us。
一般来说,同步段的长度固定为1个基准时间单元(1Tq),传播时间段的长度为1~8个基准时间单元(1~8Tq),相位缓冲段1的长度为1~4个基准时间单元(1~4Tq),相位缓冲段2的长度为2~4个基准时间单元(2~4Tq)。
CAN通信的波特率与位时间相关,共有五个参数需要配置:
名称 | 说明 |
---|---|
tseg1 | 位时间中的传播时间段和相位缓冲段1的时间长度总和 |
tseg2 | 位时间中相位缓冲段2的时间 |
sjw | 重同步时的最大调整宽度,其值不超过4 |
brp | 分频系数 |
smp | 采样次数(包括单次或三次,通常是单次采样) |
注:同步段固定为1Tq,无需用户配置。
假设CAN控制器的输入时钟频率为f,则位时间t可以用下面的公式计算:
t=brp*(1+tseg1+tseg2)/f
其中:
brp:分配系数;
tseg1:传播时间段1和相位缓冲段1的时间和;
tseg2:相位缓冲段2的时间;
1:为同步段的时间;
波特率为位时间的倒数,则其公式为:
baudrate=f/brp*(1+tseg1+tseg2)
参数sjw和smp对位时间(波特率)没有影响,但对信号同步和采样有影响。
sjw决定了重同步时的最大调整宽度(关于信号同步后面章节详细介绍),smp表示采样次数,即几次采样作为最终的采样值,一般都采用单次采样。为了直观的表示采样点的位置,通常使用百分数来表示采样点,其公式为:
smp=(1+tseg1)/(1+tseg1+tseg2)*100%
例如,假设采样点的位置为70%,若位时间为1us,则表示在0.7us时进行采样。
CIA推荐的最佳采样点位置为87.5%,实际应用中并非只能在该位置,只要在某个范围内即可,下面的表格是CIA推荐的波特率、总线长度和采样点范围的关系:
波特率 | 总线长度/m | 位时间/us | 采样点位置 | 采样点范围 |
---|---|---|---|---|
1 Mbps | 25 | 1 | 87.5 | 75~90 |
800 kbps | 50 | 1.25 | 87.5 | 75~90 |
500 kbps | 100 | 2 | 87.5 | 85~90 |
250 kbps | 250 | 4 | 87.5 | 85~90 |
125 kbps | 500 | 8 | 87.5 | 85~90 |
50 kbps | 1000 | 20 | 87.5 | 85~90 |
20 kbps | 2500 | 50 | 87.5 | 85~90 |
10 kbps | 5000 | 100 | 87.5 | 85~90 |
好了,关于CAN通信的位时间就先介绍到这里。本文参考了周立功、黄敏思主编的《CAN FD现场总线原理和应用设计》。
下面是【CAN通信技术】的文章归档链接:
我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》从硬件到软件,比较详细的介绍了SCL语言的编程,感兴趣的话可以扫描下面的二维码查看:
发表评论