位定时入门:时间量子、采样点与相位裕度
适用读者 / 前置知识
- 适用读者:嵌入式工程师,以及任何需要配置 CAN/CAN FD 控制器寄存器或调网络时序的人。
- 前置知识:了解位(bit)、比特率(bps)的概念;最好读过图解 CAN FD 帧结构。不需要数学功底,只需要一点点比例计算。
正文
CAN 是异步串行总线,没有独立的时钟线,接收节点必须在每个位的合适时刻”采样”总线电平。位定时(Bit Timing)就是规定:一个位的时间怎么切分、在哪个时刻采样、采样时刻能否微调。这套机制直接决定网络能否稳定通信——绝大多数”偶发收不到、误码、莫名错误帧”的根因都藏在位定时配置里。
时间量子(TQ):位定时的最小砖块
控制器把系统时钟(如 80 MHz)按预分频系数(通常叫 BRP/Baud Rate Prescaler)分频,得到基本时间单位 TQ(Time Quantum):
TQ = 预分频系数 × 系统时钟周期
一个位时间(Tbit = 1 / 比特率)必须由整数个 TQ组成,每个段都以 TQ 的整数倍配置。例如:80 MHz 时钟、BRP=10 → TQ = 125 ns;位时间 2 µs(500 kbit/s)→ 16 个 TQ。
位时间的四段结构
ISO 11898-1 把位时间划分为四段,采样点位于相位缓冲段 1 与 2 的交界:
flowchart LR
subgraph BT["一个位时间(标称持续时间 = 1 / 比特率)"]
direction LR
S["同步段<br/>Sync Seg · 1 TQ"]
P["传播段<br/>Prop Seg"]
PS1["相位缓冲段 1<br/>PS1"]
PS2["相位缓冲段 2<br/>PS2"]
S --> P --> PS1 --> PS2
end
PS1 -. "采样点(采样总线电平)" .- PS2
| 段 | 作用 |
|---|---|
| 同步段(Sync Seg) | 固定 1 TQ。总线电平跳变应在此发生,是硬同步/重同步的基准 |
| 传播段(Prop Seg) | 吸收信号在总线与收发器上的传播延迟,让”自己发的显性回波”在采样点前稳定 |
| 相位缓冲段 1(PS1) | 可被重同步延长,用于向后调整采样点 |
| 相位缓冲段 2(PS2) | 可被重同步缩短,用于向前调整采样点 |
采样点位置用占位时间的百分比表示:
采样点(%) = (Sync Seg + Prop Seg + PS1) / 位时间总 TQ 数 × 100%
采样点为什么重要
每个节点在自己的采样点采样总线。如果两个节点采样点差异太大,或采样点早于”信号稳定时刻”,同一个位就可能被不同节点判成不同电平。工程上:
- 经典 CAN / 仲裁相位采样点常见配置在 70%~87.5% 附近;
- CAN FD 数据相位通常配置得更靠后(常见 80%~90% 附近),因为数据相位高速下留出更多 PS2 做相位调整;
注意:不同控制器/参考设计推荐值略有差异,具体数值以你所用控制器的数据手册与位定时参考表为准。
采样点靠后意味着:采样时刻更接近位末,给信号传播、振铃稳定留了更多时间,但留给 PS2 的相位调整空间变小,二者需权衡。
相位裕度:还能容忍多少偏差
**相位裕度(Phase Margin)**是指采样点两侧还可容忍的相位偏差总量。粗略地看,总相位裕度 ≈ 相位缓冲段 1 + 相位缓冲段 2 的长度之和(以 TQ 计)。它会被子网络以下因素消耗:
- 总线传播延迟(与线长成正比,经验上 ≈ 5~7 ns/m,以线缆特性为准);
- 收发器传播延迟及其不对称性(Tx 路径与 Rx 路径时间差);
- 各节点晶振/时钟偏差随帧长累积的漂移。
如果消耗超过裕度,采样点就会落到不稳定区间,表现为偶发位错误。所以”网络能不能跑”的本质问题是:配置完之后相位裕度是否仍为正。相关概念详见相位裕度词条。
同步机制:把采样点拉回正确位置
- 硬同步:帧起始 SOF 下降沿到来时,所有节点把采样点对齐到同步段;
- 重同步:帧内检测到电平跳变早于/晚于预期时,通过缩短或延长相位缓冲段来微调,每次调整量不超过 RJW(重同步跳转宽度)。
RJW 越大,容忍晶振偏差和相位漂移的能力越强,但过大会把采样点推出稳定区,需要权衡。详见RJW 词条。
一个完整计算示例
设系统时钟 80 MHz,仲裁相位目标 500 kbit/s,取位时间 16 TQ、采样点 75%:
比特率 = 80 MHz / (BRP × 16 TQ) = 500 kbit/s → BRP = 10,TQ = 125 ns
段分配:Sync 1 + Prop 3 + PS1 8 + PS2 4 = 16 TQ
采样点 = (1 + 3 + 8) / 16 = 75% ✔
RJW 取 ≤ min(PS1, PS2) = 4 TQ(常见取 1~2,以数据手册为准)
flowchart TD
F["系统时钟 80 MHz"] --> Q["BRP = 10 → TQ = 125 ns"]
Q --> B["500 kbit/s → 位时间 2 µs = 16 TQ"]
B --> C["段分配:Sync 1 + Prop 3 + PS1 8 + PS2 4"]
C --> SP["采样点 = (1+3+8)/16 = 75%"]
SP --> R["RJW ≤ 4 TQ(取 1~2,以数据手册为准)"]
CAN FD 的位定时有什么不同
CAN FD 对仲裁相位与数据相位分别配置一段位时间。数据相位有两个特殊之处:
- 传播段可以很短:数据相位的环回延迟由 **TDC(收发器延迟补偿)**补偿,不再需要长传播段吸收延迟,因此传播段常只留 1~2 TQ;
- 依赖第二采样点(SSP):TDC 使能后,发送节点按实测环回延迟推迟到第二采样点采样,采样点位置由 TDC 配置决定,而非固定百分比。
一句话:仲裁相位靠”长传播段 + 固定采样点”吸收延迟;数据相位靠”TDC + 第二采样点”消除延迟。 详见位定时配置实战与 TDC 词条。
关键结论
- 位时间由整数个 TQ 组成,分为同步段、传播段、PS1、PS2 四段,采样点位于 PS1/PS2 交界。
- 采样点百分比 = (Sync + Prop + PS1)/总 TQ;经典/仲裁相位常见 70%~87.5%,FD 数据相位常见 80%~90%,以数据手册推荐为准。
- 相位裕度 ≈ PS1 + PS2,被传播延迟、收发器延迟不对称与时钟偏差消耗,配置目标就是”裕度保持为正”。
- 同步段 + RJW 构成重同步能力,容忍节点间的时钟偏差。
- CAN FD 数据相位靠 TDC + 第二采样点(SSP)补偿环回延迟,传播段可压缩到 1~2 TQ。
动手验证
先看当前接口的实际位定时(需要 CAN 接口或 vcan):
# 配置仲裁 500 kbit/s + 数据 2 Mbit/s
sudo ip link set can0 up type can bitrate 500000 dbitrate 2000000 fd on
# 查看内核实际协商出的段配置(TQ、prop-seg、phase-seg1/2、sjw、采样点)
ip -details link show can0
输出里会出现类似 bitrate 500000 sample-point 0.750 以及 tq 125 prop-seg 3 phase-seg1 8 phase-seg2 4 sjw 1 的字段——把看到的数值与本教程的示例对照,你就能读懂每段是几 TQ、采样点算出来是多少。
自测题(动手算):
- 系统时钟 40 MHz,BRP = 4,求 TQ(ns)。
- 用上面得到的 TQ,配 250 kbit/s,位时间应为多少 TQ?合理吗(8~25 常见范围)?
- 若
ip -details显示sample-point 0.800,说明设计者把采样点放在位时间的什么位置?
参见
- 词条:时间量子、位时间、采样点、相位裕度、传播段、重同步跳转宽度、TDC
- 标准规范:CiA 601-3(位定时配置与评估工具)、CiA 601-1(物理接口实现)、ISO 11898-1 (2024)
- 教程:CAN FD 位定时配置实战
- 知识库:位定时与同步