CAN总线: 位同步,接收方数据采样
内容参考江协科技;
这里大致内容为:CAN通信当中接收方如何准确的收到数据
接收方数据采样
CAN总线没有时钟线,总线上的所有设备通过约定波特率的方式确定每一个数据位的时长
发送方以约定的位时长每隔固定时间输出一个数据位 接收方以约定的位时长每隔固定时间采样总线的电平,输入一个数据位 理想状态下,接收方能依次采样到发送方发出的每个数据位,且采样点位于数据位中心附近
波特率:每秒发送多少个bit;
CAN通信中先确定好双方的波特率,理想的话就是发多少收多少。
接收方数据采样遇到的问题
接收方以约定的位时长进行采样,但是采样点没有对齐数据位中心附近
(有时候采样点刚好位于跳变沿,分不清是 0 还是 1)
解决方案 硬同步
接收方刚开始采样正确,但是时钟有误差,随着误差积累,采样点逐渐偏离
(双方虽然波特率一致,中途可能有损耗导致误差,随着时间积累误差越大)
解决方案再同步
位时序
为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,
CAN总线对每一个数据位的时长进行了更细的划分,分为同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个最小时间单位(Tq)构成 采样点就位于PBS1 与PBS2之间
- SS = 1Tq(固定1Tq) 开始时间段
- PTS = 1~8Tq 用于吸收网络上的物理延迟
- PBS1 = 1~8Tq
- PBS2 = 2~8Tq
硬同步
- 每个设备都有一个位时序计时周期,当某个设备(发送方)率先发送报文,其他所有设备(接收方)收到SOF的下降沿时,接收方会将自己的位时序计时周期拨到SS段的位置,与发送方的位时序计时周期保持同步(发送方也会在自己SS段的时候发送数据)就所有的设备都保持了一致
- 硬同步只在帧的第一个下降沿(SOF下降沿)有效
- 经过硬同步后,若发送方和接收方的时钟没有误差,则后续所有数据位的采样点必然都会对齐数据位中心附近
再同步
- 若发送方或接收方的时钟有误差,随着误差积累,数据位边沿逐渐偏离SS段,则此时接收方根据再同步补偿宽度值(SJW)通过加长PBS1段,或缩短PBS2段,以调整同步
- 再同步可以发生在第一个下降沿之后的每个数据位跳变边沿
SJW=1~4Tq(SJW是最大补偿宽度值,若是误差只有1Tq那么就补偿1Tq,大于了SJW只能补偿SJW最大大小,这是避免过度补偿)
这里就很好的引出了 位填充:当出现五个同样的电平后,下一个取反。(取数据的时候去除)。因为如果有很多相同的数据,波形长时间没变化就无法执行再同步,误差可能就会越来越大,辨别过载帧,错误帧,保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲。(位填充的三大作用)
波特率计算
波特率 = 1 / 一个数据位的时长 = 1 / (TSS + TPTS + TPBS1 + TPBS2)
例如: SS = 1Tq,PTS = 3Tq,PBS1 = 3Tq,PBS2 = 3Tq Tq = 0.5us
波特率 = 1 / (0.5us + 1.5us + 1.5us + 1.5us) = 200kbps







