3、位时序基础:位时间、同步段、传播段、相位缓冲段1、相位缓冲段2
好,咱们今天聊聊位时序。说实话,这是CAN总线里最容易被忽视、但又最关键的基础。我见过不少工程师,配置完波特率就跑,结果总线老是出错,查了半天发现是采样点没调好。嗯,咱们今天就把这块彻底讲透。
3.1 位时间到底是什么?
一个CAN数据位,在总线上持续的时间,就叫位时间。说白了,就是发送一个比特需要多久。
举个例子:波特率是500kbps,那一个位时间就是2微秒。这个很好算,对吧?
但问题来了——这2微秒不是一整块。它被分成了好几段。为什么要分?因为CAN总线是异步通信,没有单独的时钟线。接收器得靠这些段来“猜”什么时候该采样。
位时间 = 同步段 + 传播段 + 相位缓冲段1 + 相位缓冲段2
每个段又由若干个时间量子(Tq)组成。Tq是CAN控制器的最小时间单位,由晶振分频得到。
我个人习惯,先把Tq算清楚。比如晶振是16MHz,预分频设为8,那Tq就是0.5微秒。500kbps的位时间需要4个Tq?不对,500kbps位时间是2微秒,需要4个Tq。但实际中,我们通常用8到25个Tq组成一个位时间。太少,采样精度不够;太多,抗干扰能力下降。
3.2 同步段(Sync_Seg)
同步段是位时间的起点。它固定为1个Tq。
它的作用很简单:让总线上的所有节点对齐时钟。每个CAN控制器都在同步段的下降沿检测总线状态,调整自己的时钟。
我记得有一次调试,发现某个节点总是同步失败。查了半天,原来是晶振偏差太大。同步段只有1个Tq,如果晶振误差超过1%,重同步就来不及调整。所以,晶振精度很重要,一般建议用0.5%以内的。
小技巧:同步段不能改,永远是1个Tq。别在这上面花心思。
3.3 传播段(Prop_Seg)
传播段用来补偿总线上的信号延迟。包括:
- 信号在总线上的传输时间
- 收发器的延迟
- 比较器的延迟
传播段的长度,取决于总线长度。总线越长,传播段就得越长。
怎么算?有个经验公式:
传播段时间 ≥ 2 × (总线长度 × 5ns/m + 收发器延迟)
举个例子:总线长度10米,收发器延迟150ns。那传播段至少需要:
2 × (10 × 5ns + 150ns) = 2 × 200ns = 400ns
如果Tq是100ns,那传播段至少需要4个Tq。
你想想看,如果传播段设得太短,远端的节点信号还没传到,接收器就开始采样了。那采到的数据肯定是错的。我在项目中遇到过这种情况,总线长度只有2米,但用了很长的传播段,结果采样点偏后,反而容易采到信号边沿的毛刺。嗯,这里要注意:传播段不是越长越好,够用就行。
3.4 相位缓冲段1(Phase_Seg1)和相位缓冲段2(Phase_Seg2)
这两个段,是位时序里最灵活的部分。它们用来吸收时钟偏差,实现重同步。
- 相位缓冲段1:位于采样点之前。重同步时,可以延长它。
- 相位缓冲段2:位于采样点之后。重同步时,可以缩短它。
采样点就在Phase_Seg1和Phase_Seg2之间。所以,采样点的位置 = (同步段 + 传播段 + 相位缓冲段1) / 位时间。
我建议采样点设在70%到90%之间。为什么?
- 太靠前(比如50%),信号还没稳定,容易采到毛刺。
- 太靠后(比如95%),留给相位缓冲段2的调整空间太小,重同步能力差。
经典配置(500kbps,Tq=100ns,位时间=20Tq):
| 段 | Tq数 | 说明 |
|---|---|---|
| 同步段 | 1 | 固定 |
| 传播段 | 3 | 根据总线长度调整 |
| 相位缓冲段1 | 8 | 可延长 |
| 相位缓冲段2 | 8 | 可缩短 |
采样点 = (1+3+8)/20 = 60%。嗯,这个偏低了,建议调整到75%左右。
3.5 采样点调优的实战经验
我曾经调试过一个项目,总线长度50米,波特率250kbps。按照手册配置,采样点设在87.5%。结果总线偶尔出现错误帧,尤其是温度升高的时候。
排查过程是这样的:
- 先用示波器看总线波形,发现信号边沿有振铃。
- 计算传播延迟,发现实际延迟比理论值大了20%。
- 把采样点从87.5%降到80%,错误帧消失了。
为什么会这样?因为温度升高,收发器延迟变大,信号到达时间变晚。采样点太靠后,正好采到了信号边沿的振铃区。降低采样点,反而更安全。
避坑指南:我曾经以为采样点越高越好,结果吃了亏。实际上,采样点要根据实际总线环境来调。建议在量产前,做一下温度循环测试,看看采样点在不同温度下的表现。
3.6 位时序配置的通用步骤
我总结了一个流程,你照着做基本不会出错:
- 确定波特率:根据应用需求选,比如250kbps、500kbps。
- 计算Tq:Tq = 晶振周期 × 预分频值。预分频值尽量选整数,让位时间由8~25个Tq组成。
- 设定传播段:根据总线长度和收发器延迟,算出最小传播段Tq数。
- 分配相位缓冲段:剩下的Tq数,尽量平分给Phase_Seg1和Phase_Seg2。
- 验证采样点:采样点应在70%~90%之间。如果不在,调整预分频值或重新分配Tq。
- 实际测试:用CAN分析仪发大量数据帧,观察错误率。有条件的话,做极限温度测试。
说白了,位时序调优就是个平衡游戏。你要在采样精度、抗干扰能力和重同步能力之间找到最佳点。没有万能配置,每个项目都得亲自调。
嗯,今天就先聊到这儿。下一章咱们讲同步机制,看看重同步到底是怎么工作的。到时候我会分享一个我踩过的坑——因为同步跳转宽度设错了,导致整个网络瘫痪。敬请期待。