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

方案BRPNtqTSEG1TSEG2SJW采样点实际波特率误差
最优116132287.5%5000000 ppm
备选 12861187.5%5000000 ppm
备选 24421175%5000000 ppm
备选 3117142288.235%470588.24-58823.5 ppm
备选 4115122286.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 级方案,误差通常不是瓶颈, 采样点位置反而更值得核对。更多串行链路的误差口径可参考 波特率误差计算器。

相关工具推荐

单位换算器

支持长度、重量、温度、面积、体积等多种单位类型的相互转换

热门 本地

科学计算器

高级数学运算,支持三角函数、对数、指数运算等科学计算,包含内存管理和历史记录

热门 本地

统计学计算器

数据分析工具,支持描述统计、回归分析、概率分布、假设检验等统计计算

热门 本地

方程求解器

一次方程、二次方程、方程组求解,支持图像绘制、牛顿迭代法和数值方法

热门 本地

财务比率计算器

盈利能力、偿债能力、运营能力比率分析,支持图表展示、行业对比和财务健康评分

热门 本地

折扣计算器

计算折扣后价格、节省金额和折扣率,支持折扣率和折数输入

热门 本地

这张卡挂在哪些职业工具箱

相关教程