CAN总线入门:差分信号、终端电阻与ID仲裁

CAN总线是现场调试绕不开的东西,两根线就能在汽车、工程机械、电池管理系统里常年稳定地跑,靠的是三样本事:差分信号抵掉共模干扰、两端终端电阻压住信号反射、逐位仲裁解决「谁先说话」。把这三样弄明白,再遇到 CAN 不通,就不会一上来瞎翻程序了。下面用大白话把原理讲透,最后给一套现场排查的固定顺序,都是能直接上手的。

CAN总线是一条「广播式」的公共线
CAN 最大的特点是「多主」。挂在网上的每个节点都能主动发数据,不需要谁来点名授权。整条总线就像一间开着喇叭的会议室:谁发言,所有人都听得见。
发出来的每条报文都带一个 ID。注意,这个 ID 代表的是数据的含义,不是发送设备的门牌号。比如某个 ID 固定表示「电池状态」,谁发的无所谓——关心的节点就接收处理,不关心的直接忽略。所以同一条总线上,有的节点收了去干活,有的装没听见,各取所需,互不打扰。
两根线凭什么抗干扰:CAN_H 与 CAN_L 的差分把戏
CAN 只用两根线:CAN_H 和 CAN_L。接收器不看单根线上的电压,只看两条线的差值。
发显性电平(逻辑 0)时,一条线抬高、一条线压低,差值拉得很开;发隐性电平(逻辑 1)时,两条线贴在一起,差值几乎为零。抗干扰的窍门就在这里:车间里变频器、电机搞出来的干扰,往往同时落到两根线上,也就是常说的共模噪声——两根线一起抖,差值几乎不变,接收器根本「感觉」不到。
还有一条要记牢:显性比隐性「嗓门大」,显性会覆盖隐性。这不只是物理层特性,还是后面仲裁机制的地基。
CAN总线终端电阻:便宜、也最容易背锅的两个元件
终端电阻只放在总线的物理两端,一边一只,作用是阻抗匹配、减少信号反射。少了、多了、或者装错了位置,通信都会变得不稳定——那种时好时坏的毛病,十有八九跟它有关。
现场快速判断的办法土但好用:断电,拿万用表测 CAN_H 和 CAN_L 之间的电阻。两只终端电阻是并联关系,正常应该读到单只阻值的一半左右;读出无穷大,说明有一只没接上;读数正好等于单只阻值,多半是有人多并了电阻。
踩过的坑说一个。现象是有台改造设备通信老断续,查了半天没头绪。原因是装配的师傅看别的节点上挂了个电阻,自己也照着加了一只,终端电阻从两只变成四只,波形直接变形。处理办法是把多出来的拆掉,通信立刻恢复。记住,不是每个节点都要加终端电阻。
ID 仲裁:不用裁判的「抢话筒」规则
多个节点同时想发数据怎么办?CAN 靠逐位仲裁解决,不用任何中央调度。
规则简单粗暴:每个节点一边发一边监听总线,如果自己发的是隐性(1)、却听到总线上是显性(0),就知道有 ID 更小的报文在场,主动退出,等下一轮再发。ID 数值越小,优先级越高。整个过程不破坏任何报文——赢的节点把报文完整发完,输的节点自动重发,总线时间一点不浪费。
所以工程上有个惯例:关键的安全报文,比如故障信号,会把 ID 设得很小,保证它随时能插上话。
一帧数据怎么可靠送达:从帧头到 ACK
一帧标准数据帧,从头到尾大致是:帧起始、ID、控制位、数据区、CRC 校验、ACK 应答、帧结束。经典 CAN 的数据区一次最多装八个字节;新的 CAN FD 能装到六十四字节,但要求全网节点都支持才能开。
| 帧字段 | 干什么用 | 现场关注点 |
|---|---|---|
| 帧起始 | 通知总线,这一帧开始了 | 波形上的同步头 |
| ID | 数据的含义,同时定优先级 | 过滤器按它筛报文 |
| 控制位 | 数据长度等信息 | 数据区到底几字节 |
| 数据区 | 真正要传的数据 | 经典 CAN 最多 8 字节,CAN FD 最多 64 字节 |
| CRC | 校验,出错自动重发 | 干扰大时错误帧变多 |
| ACK | 接收方应答 | 无人应答就报 ACK 错误 |
| 帧结束 | 给这一帧收尾 | 帧尾标志位 |
数据传没传对,靠 CRC 兜底;接收方收到正确的帧,会在 ACK 槽位把总线拉成显性,等于举牌喊了一声「我收到了」。注意,这个应答只代表帧收对了,不代表应用层已经把数据处理完——那是两层的事,别混。
要是总线上一个应答的节点都没有,发送端就会报 ACK 错误。这是现场常见的报错,原因往往就那几个:总线上只有发送节点在工作、对端没上电或处于静默模式、波特率对不上、线断了、终端电阻有问题。
CAN总线不通怎么查:先硬件、再软件、最后波形
别一上来就翻程序,按下面的顺序来,效率高得多。
第一步查硬件。CAN_H、CAN_L 有没有断线、接反,节点之间有没有共地,收发器供电和使能脚是否正常,再用万用表按前面说的并联阻值法验一遍终端电阻。物理层不过关,后面全是白折腾。
第二步查软件配置。波特率和位时序是否一致、控制器初始化对不对、报文过滤器有没有配好、节点是不是卡在回环或静默模式、标准帧和扩展帧类型是否统一。现场吃过亏:两台设备波特率差着一档,程序怎么看都没毛病,总线永远只有错误帧。
第三步才上示波器。看差分波形幅值正不正常、ACK 槽位有没有被拉低、有没有错误帧和反射振铃。口诀就一句:先确认物理连接,再查配置,最后看波形,顺序别倒。
| 顺序 | 查什么 | 常见问题 |
|---|---|---|
| 第一步 硬件 | 接线、共地、收发器供电使能、终端电阻 | 断线或接反、缺终端电阻、多并电阻、没共地 |
| 第二步 软件 | 波特率与位时序、初始化、过滤器、模式、帧类型 | 波特率差一档、卡在静默模式、标准帧与扩展帧混用 |
| 第三步 波形 | 差分幅值、ACK 槽位、错误帧、反射振铃 | 波形变形、无人应答、振铃导致误码 |
这跟位移传感器有什么关系
位移测量这边,CAN 的存在感也在变强。移动机械、车辆、工程机械上的位置反馈,越来越多用带 CAN 输出的位移传感器——磁致伸缩位移传感器把位置测好,数据直接挂上整车或整机总线,省掉一路一路的模拟量拉线,抗干扰也上了一个台阶。
选型时先确认波特率、报文格式跟主站匹配;装好后,把本文前面说的物理层验一遍——接线、共地、终端电阻,调试基本能一遍过。
常见问题
问:万用表测 CAN_H 和 CAN_L 之间的电阻,读多少算正常?
答:两端各一只终端电阻,并联后大约是单只阻值的一半(常见 120Ω 规格对应约 60Ω)。测出开路说明有终端电阻缺失,读数等于单只阻值则可能有人多并了电阻,两种情况都要查。
问:CAN_H 和 CAN_L 接反了会怎样?
答:整条总线通信会乱,常见表现是所有节点刷错误帧。接线一定按引脚定义来,上电前先量一遍阻值,能避开大部分低级故障。
问:位移传感器怎么接入 CAN 网络?
答:选带 CAN 输出的型号,确认波特率与主站一致,按报文 ID 配好过滤器,再把终端电阻和共地验一遍。控制器侧的具体配置,可以按现场情况让厂家给选型建议。
问:为什么总线上会报 ACK 错误?
答:说明没有任何一个节点正确接收并应答。常见原因是总线上只有发送节点在工作、对端没上电或处于静默模式、波特率对不上、线断了、终端电阻有问题。按硬件到软件的次序逐个排。
问:波特率必须全网一致吗?
答:必须。CAN 是异步总线,靠位时序对时钟,节点波特率差一档,两边就永远收不到正确的帧,表现是通信完全没有、只刷错误帧。现场吃过这种亏,程序怎么看都没毛病。
位移传感器接入 CAN 的选型、物理层核对与通讯调试,易测电气位移传感器工程师欢迎您的咨询。
推荐文章
- 造纸机械位移传感器怎么选?压光辊缝、卷取与网部测点[2026-10-04]
- 轧机位移传感器怎么选:辊缝、压下与弯辊[2026-10-01]
- 压铸机位移传感器怎么选:压射与合模两处测点[2026-09-29]
- 传感器数据滤波入门:从毛刺到有效信号的顺序[2026-09-26]
- 液压机油缸位移监测:预测性维护怎么做[2026-09-24]

