2. 采样点位置原理:位时间组成

采样点,说白了就是接收节点在什么时候“看一眼”总线电平,决定这一位是0还是1。位置偏了,误码率直线上升;位置对了,噪声、延迟、时钟偏差都能扛住。我刚开始接触CAN FD时,以为只要随便设个80%就完事,结果在测试台上被误码率狠狠教训了一回。

想理解采样点,就得先搞清楚CAN FD的一位时间到底由哪些段构成。CAN 2.0和CAN FD在仲裁段用相同的位时间结构,但数据段允许更短的位时间——段长度依然相同,只是时间基数变了。

2.1 位时间的四个段

一个完整的CAN FD位时间,被硬性拆成四个段:同步段(SS)、传播段(PROP)、相位缓冲段1(PS1)和相位缓冲段2(PS2)。采样点就卡在PS1和PS2之间。

段名称英文缩写典型时长(Tq)主要功能
同步段SS1 Tq检测边沿,硬同步的“锚点”
传播段PROP1~8 Tq补偿物理传输延迟
相位缓冲段1PS11~8 Tq容忍时钟相位超前,可在重同步时缩短
相位缓冲段2PS21~8 Tq容忍时钟相位滞后,可在重同步时延长

总位时间 = SS + PROP + PS1 + PS2,单位是时间量子Tq。Tq由系统时钟分频得到,CAN FD数据段常用2~4个时钟周期做一个Tq,仲裁段则更宽松。

关键点:采样点位置 = (SS + PROP + PS1) / 总位时间 × 100%。我们配置的不是时间,而是这个百分比。

2.2 同步段:节奏的起点

同步段固定为1 Tq,不参与任何调整。它的任务就是“看到跳变沿就立刻开始计时”。硬件在SS结束时检测总线边沿,如果边沿落在SS内,就认为这一位同步了。

为什么非得留1 Tq?因为CAN总线是“线与”机制,多个节点同时发送时,显性位会覆盖隐性位,边沿可能被延迟。留出SS可以容忍边沿的微小偏移。

我记得有一次,一个同事把SS设为0,想着省一个Tq提高速率——结果整个网络一上电就报错,复位都救不回来。教训:SS动不得。

2.3 传播段:补偿物理延迟

传播段的存在,说白了就是给信号一个“来回跑”的时间。CAN报文从发送节点到接收节点,再经过接收节点反向传播到发送节点(用于位填充和应答),这段延迟必须被补偿掉。

传播段长度 = 2 × (总线物理延迟 + 收发器延迟 + 线缆延迟)。算一下:总线100米,信号速度约5 ns/m,来回就是1 μs。如果Tq=50 ns,就需要20个Tq。当然实际中收发器和隔离器还会加额外延迟,不能只看线长。

避坑建议:我曾经在一个多节点项目中,把PROP设成经验值2 Tq,结果远距离节点总是采样错误。后来实测总线最长路径的往返延迟,发现需要6 Tq。改完配置,误码率直接降到0。

2.4 相位缓冲段:容忍时钟偏差

这是整个位时间设计中最灵活的部分。PS1和PS2允许在重同步时被动态缩短或延长,相当于“弹性缓冲区”。

  • PS1:当接收节点时钟比发送节点快时,采样点会左移(提前)。重同步机制会把PS1缩短,把采样点“拉回”正确位置。
  • PS2:当接收节点时钟慢时,采样点右移(延后)。重同步机制延长PS2,把采样点重新对准。

PS1和PS2的总长度决定了系统能容忍多大的时钟偏差。公式:容忍度 = min(PS1, PS2) / (总位时间)。通常建议PS2≥PS1,因为相位滞后(时钟慢)是更常见的情况。

注意:不要把PS1或PS2设成0。如果PS1=0,采样点直接放在PROP之后,没有弹性空间,时钟抖一抖就崩。CAN FD标准要求PS1≥1 Tq,PS2≥1 Tq。

2.5 采样点位置与重同步

采样点位置就是“SS + PROP + PS1”占整位的比例。理想值是多少?我个人习惯取75%~87.5%之间。仲裁段建议靠后(接近87.5%),因为仲裁阶段需要更强的抗干扰能力;数据段可以稍微靠前(75%~80%),换取更高波特率。

重同步机制会影响采样点吗?会。当节点在SS之外检测到边沿时,启动重同步:如果边沿落在PS1,就缩短PS1让采样点左移;如果边沿落在PS2,就延长PS2让采样点右移。这个调整必须在一个位时间内完成,且调整量受SJW(同步跳转宽度)限制。

CAN FD 一位时间的段划分与采样点 SS 同步段 PROP 传播段 PS1 相位缓冲段1 采样 PS2 相位缓冲段2 位时间组成要点 • 采样点位于 PS1 结束、PS2 开始的位置 • 重同步机制可动态缩短 PS1 或延长 PS2 • 仲裁段采样点建议 80%~87.5%,数据段 75%~80%

从图上可以清楚看到:SS固定1 Tq,PROP用来“等”信号跑完,PS1和PS2像个缓冲垫,采样点就卡在它们之间。如果采样点太靠前(PS1太小),信号还没稳定;太靠后(PS1太大),又容易被后续位干扰。

实战要点:你想想看,为什么CAN FD的采样点配置比CAN 2.0更敏感?因为数据段位时间短,同样1 Tq的偏差,在高速率下占比更大。所以FD网络中,必须先确定Tq长度,再精确计算各段Tq数。

最后说个我的习惯:在新平台调采样点时,我会先用示波器抓取CAN差分信号,观察最差情况下的信号建立时间,再反推需要的PROP长度。PS1和PS2则留出至少2 Tq余量。这样出来的配置,基本一次过。