CAN 位定时计算器
时钟 × 波特率求 BRP/TSEG1/TSEG2/SJW 与采样点,经典 CAN 与 CAN FD 双相位
在线 CAN 位定时计算器:按 CAN 时钟频率与目标波特率枚举分频系数 BRP 与位时间 Tq 数(Ntq), 输出误差最小的 TSEG1/TSEG2/SJW 分配、实际采样点位置与波特率误差(百分比 + ppm 双显), 附按「误差 → 采样点偏差 → Tq 数」排序的备选方案 Top5;CAN FD 模式下仲裁相位与数据相位两套参数分别求解。 输出通用 Tq 时序参数(不做各家 IP 的寄存器位段编码),全部计算在浏览器本地完成,不上传任何数据。
位时序口径:1 位 = 同步段 SYNC_SEG(固定 1 Tq)+ TSEG1 + TSEG2,即 Ntq = 1 + TSEG1 + TSEG2; 采样点 SP = (1 + TSEG1) ÷ Ntq,波特率 = CAN 时钟 ÷(BRP × Ntq)。 搜索算法:枚举 BRP(1..512)× Ntq(4..385 合理域),|实际波特率 − 目标| 最小者优先,并列时取采样点偏差最小, 再并列取 Ntq 更大者(Tq 粒度更细);约束 TSEG1 ≥ 1、TSEG2 ≥ 1、TSEG1 ≥ TSEG2(惯例),SJW = min(TSEG2, 4)。
位定时求解
多数 MCU 的 CAN 外设挂在 APB/PCLK 下,常见 8/16/20/24/40/48/80 MHz;预设之外可直接输入
经典 CAN 常见 75%~87.5%(CiA 惯例 87.5%);采样点越靠后对长线传播延迟越宽容
经典 CAN最优解
BRP 分频
1
Ntq 每位 Tq 数
16
TSEG1(Tq)
13
TSEG2(Tq)
2
SJW(Tq)
2
实际采样点
87.5%
实际波特率
500000
波特率误差
0%
0 ppm
SYNC_SEG 1 Tq | TSEG1 13 Tq | TSEG2 2 Tq——采样点在 TSEG1 结束处(87.5%),实际波特率 = 8 MHz ÷(1 × 16)
共扫描 392 组 BRP×Ntq 可行组合,按「波特率误差 → 采样点偏差 → Ntq 更大」排序取本组为最优。
本页输出通用 Tq 参数,不做芯片寄存器位段编码——bxCAN / M_CAN / FlexCAN 位段宽度与「写值 −1」口径各不相同,落寄存器请按所用 IP 手册换算。
备选方案 Top5 · 经典 CAN
| 方案 | BRP | Ntq | TSEG1 | TSEG2 | SJW | 采样点 | 实际波特率 | 误差 |
|---|---|---|---|---|---|---|---|---|
| 最优 | 1 | 16 | 13 | 2 | 2 | 87.5% | 500000 | 0 ppm |
| 备选 1 | 2 | 8 | 6 | 1 | 1 | 87.5% | 500000 | 0 ppm |
| 备选 2 | 4 | 4 | 2 | 1 | 1 | 75% | 500000 | 0 ppm |
| 备选 3 | 1 | 17 | 14 | 2 | 2 | 88.235% | 470588.24 | -58823.5 ppm |
| 备选 4 | 1 | 15 | 12 | 2 | 2 | 86.667% | 533333.33 | +66666.7 ppm |
排序口径:|波特率误差| 升序 → 采样点偏差升序 → Ntq 更大优先。若最优解的 Ntq 超出你所用控制器上限 (如 bxCAN 最多 25 Tq),可直接从本表挑选 Ntq 合规的备选行——误差通常同为零或同一量级。
位时序结构
SYNC_SEG:同步段,固定 1 Tq,起始位边沿对齐的基准;
TSEG1:传播段 + 相位缓冲段 1,采样点在其结束处;
TSEG2:相位缓冲段 2,采样后到下一位开始的缓冲。
位时间 = SYNC_SEG(1 Tq)+ TSEG1 + TSEG2,采样点 SP = (1 + TSEG1) ÷ Ntq。 TSEG1 吸收信号传播延迟与边沿抖动,TSEG2 留给再同步补偿——两者此消彼长,这就是采样点百分比的物理含义。 SJW(再同步跳跃宽度)规定每个位边沿最多可加长/缩短多少个 Tq 来追踪偏差,按惯例取 min(TSEG2, 4)。
为什么不给寄存器值
各家 CAN IP 的位段宽度与上限不同:如 STM32 bxCAN 的位时间最多 1+16+8 = 25 Tq(BRP 可到 1024), M_CAN / m_can 系列可到 1+256+128 = 385 Tq,且普遍存在「寄存器写值 = 实际值 − 1」的口径 (TSEG1 写 12 表示 13 Tq)。本页给通用 Tq 参数,写寄存器时按手册位段宽度与偏移口径换算即可; Ntq 超上限时从备选表选合规行,或调整时钟重算。
实用提示
- 误差与采样点谁优先:CAN 对波特率误差比 UART 宽容(时钟容差约 ±0.5% 量级),同一误差档里优先挑采样点更接近目标的方案。
- 误差换算心智:0.1% = 1000 ppm、0.01% = 100 ppm;ppm 口径在晶振数据手册里更常见,对照时直接用本页 ppm 列。
- CAN FD 数据相位:速率高、位长短,收发器与环路延迟占比大,采样点取 70%~80% 并核对收发器延迟补偿(TDC)是否开启。
- 多节点同网:各节点按同一套 Tq 参数配置;时钟不同的节点允许 BRP/Ntq 不同,但实际波特率与采样点要对齐。
#什么是 CAN 位定时
CAN 总线没有单独的时钟线,每个节点用自己的 CAN 时钟把「一位」切成若干个最小时间单位——时间量子 Tq(Time Quantum), Tq = BRP ÷ CAN 时钟,BRP(Baud Rate Prescaler)是分频系数。一位由三段组成: 同步段 SYNC_SEG(固定 1 Tq)+ TSEG1 + TSEG2, 即每位的 Tq 数 Ntq = 1 + TSEG1 + TSEG2,波特率 = CAN 时钟 ÷(BRP × Ntq)。 采样点位于 TSEG1 结束处,采样点位置 SP = (1 + TSEG1) ÷ Ntq——SP = 87.5%、Ntq = 16 时对应 TSEG1 = 13、TSEG2 = 2。 位定时配置的本质就是:给定时钟与目标波特率,选出误差最小、采样点合适的 BRP/Ntq/TSEG1/TSEG2 组合。
TSEG1 与 TSEG2 是怎么分工的
经典教科书把 TSEG1 拆成传播段(PROP_SEG)与相位缓冲段 1(PHASE_SEG1),TSEG2 即相位缓冲段 2(PHASE_SEG2)。 采样点之前的 TSEG1 必须覆盖「发送节点输出驱动器延迟 + 总线传播延迟 + 接收节点输入比较器延迟」之和的两倍 (往返才能看到别的节点的边沿),所以长线、中继多的网络依赖靠后的采样点;采样点之后的 TSEG2 是留给 再同步与下一位准备的缓冲。约束 TSEG1 ≥ TSEG2 是工程惯例:保证采样点不早于 50%,给边沿重同步留出空间。
采样点为什么常设在 87.5%
CiA 与多数芯片默认档把经典 CAN 采样点定在 87.5%:够靠后,吸收长网络的传播延迟与边沿抖动; 又留出约 12.5% 的 TSEG2 做再同步补偿。工程常见区间是 75%~87.5%——短网络、底板互联可以取 75%~80%, 把 TSEG2 留厚一些、抗振荡器漂移;长距离、大衰减的网络取 87.5% 甚至更高。CAN FD 数据相位因为位时间短、 收发器环路延迟占比大,惯例取 70%~80%(本页默认 75%),并需要检查收发器延迟补偿(TDC)。 采样点改变时会直接改写 TSEG1/TSEG2 的分配,本页把它作为目标条件参与求解。
SJW 与再同步是怎么工作的
CAN 靠数据位的边沿做再同步:接收方在预期位置没等到边沿(慢了)或提前等到边沿(快了)时, 把当前位的 TSEG1 加长或 TSEG2 缩短来追平偏差,每次最多补偿 SJW 个 Tq。SJW 太小追不上累计漂移, 太大又可能在噪声边沿上把位时序拽过头——所以惯例取 SJW = min(TSEG2, 4):不超过 TSEG2, 保证补偿不会吃掉下一位。本页直接按该惯例输出 SJW,个别芯片允许独立配置时可在该值附近调整。
为什么本页不输出寄存器值
位定时参数最终要写进芯片的位时序寄存器,但各家 IP 位段宽度不同:STM32 bxCAN 的 TSEG1 最多 16 Tq、 TSEG2 最多 8 Tq(位时间上限 25 Tq),而 M_CAN 体系的 TSEG1 可到 256、TSEG2 可到 128(上限 385 Tq); BRP 的上限也从 64 到 1024 不等,且几乎都有「寄存器值 = 实际值 − 1」的写法。 统一输出通用 Tq 参数(BRP / Ntq / TSEG1 / TSEG2 / SJW)再按手册换算,比替某一款芯片硬编码更不容易出错。 CiA 601-2 建议位时间可编程 5~385 Tq,本页按通用合理域 4~385 Tq 搜索;若最优解的 Ntq 超出你的芯片上限, 从备选表挑合规行即可。
#常见问题 (FAQ)
BRP、TSEG1、TSEG2 算出来之后怎么填进寄存器?
按芯片手册找到位时序寄存器(bxCAN 的 BTR、M_CAN 的 NBTP/DBTP 等),把本页的 BRP/TSEG1/TSEG2/SJW 按「寄存器值 = 实际值 − 1」写进对应位段;同时确认实际值不超过该位段上限。若 Ntq 超上限, 从备选方案表里换一行 Ntq 合规的组合,误差通常同为零或同一量级。
采样点设多少合适?
经典 CAN 常见 75%~87.5%,CiA 与多数默认档取 87.5%;短网络可降到 75%~80% 换取更厚的再同步余量, 长线网络偏向 87.5%。CAN FD 数据相位取 70%~80%(常用 75%),并确认收发器延迟补偿(TDC)已启用。 同一网络所有节点的采样点应保持一致或接近。
CAN FD 为什么要仲裁相位和数据相位各算一套?
CAN FD 在仲裁段用慢速率保证鲁棒性、在数据段提速(常见 2~8 倍),两段各有一套独立的位时序寄存器 (NBTP 与 DBTP),采样点惯例也不同(仲裁 ~87.5%、数据 ~75%)。本页 FD 模式对两相位分别求解, 时钟共用、目标波特率与采样点独立输入。
波特率误差多少可以接受?
经典 CAN 对时钟容差的要求约 ±0.5% 量级(比 UART 宽松,且靠边沿再同步不断修正),因此本页把 ±0.5% 内标为可用。多数「CAN 时钟 ÷ 波特率」组合都能搜到零误差或 ppm 级方案,误差通常不是瓶颈, 采样点位置反而更值得核对。更多串行链路的误差口径可参考 波特率误差计算器。
相关工具推荐
单位换算器
支持长度、重量、温度、面积、体积等多种单位类型的相互转换
科学计算器
高级数学运算,支持三角函数、对数、指数运算等科学计算,包含内存管理和历史记录
统计学计算器
数据分析工具,支持描述统计、回归分析、概率分布、假设检验等统计计算
方程求解器
一次方程、二次方程、方程组求解,支持图像绘制、牛顿迭代法和数值方法
财务比率计算器
盈利能力、偿债能力、运营能力比率分析,支持图表展示、行业对比和财务健康评分
折扣计算器
计算折扣后价格、节省金额和折扣率,支持折扣率和折数输入