1. CAN协议基础:从起源到物理层,一个老工程师的实战笔记

大家好,我是老张。做工业通信这行快二十年了,今天咱们聊聊CAN总线。说实话,CAN协议是我个人最喜欢的一个现场总线——它不复杂,但设计得非常巧妙。很多刚入行的朋友觉得CAN难,其实是你没抓住它的核心逻辑。

1.1 CAN总线的起源:为什么会有它?

上世纪80年代,汽车里的电子设备越来越多。空调、ABS、发动机控制、车窗……每个模块之间都要连线。你想想看,一辆车要是用点对点连线,线束比车还重。

1986年,德国博世公司推出了CAN总线。它的初衷很简单:用两根线代替几十根线。我记得第一次接触CAN是在一个汽车电子项目里,客户要求用CAN替代原来的RS485网络。当时我还嘀咕:两根线能搞定?结果真香了。

核心思想: CAN(Controller Area Network)是一种多主总线,任何节点都可以随时发送数据。它不依赖主站,节点之间平等通信。这一点和Modbus的“主从模式”完全不同。

1.2 物理层特性:两根线里的大学问

CAN的物理层,说白了就是一对差分线——CAN_H和CAN_L。但别小看这两根线,里面的门道不少。

参数 高速CAN(ISO 11898-2) 低速CAN(ISO 11898-3)
最大速率 1 Mbps 125 kbps
总线长度(1 Mbps时) 约40米 约500米
显性电平 CAN_H ≈ 3.5V, CAN_L ≈ 1.5V CAN_H ≈ 3.5V, CAN_L ≈ 1.5V
隐性电平 CAN_H ≈ 2.5V, CAN_L ≈ 2.5V CAN_H ≈ 2.5V, CAN_L ≈ 2.5V
终端电阻 120Ω(两端各一个) 可选

这里有个坑,我必须要说。我曾经在一个项目里,现场总线长度超过100米,速率还设成了500kbps。结果呢?通信时好时坏,查了两天才发现是总线长度超了。记住一个经验公式:速率 × 长度 ≤ 40(Mbps·米)。超过这个范围,信号反射会让你怀疑人生。

1.3 差分信号原理:为什么CAN这么抗干扰?

差分信号,说白了就是两根线传同一个信号,但相位相反。CAN_H和CAN_L的电压差决定了总线状态。

  • 显性(Dominant): CAN_H - CAN_L > 0.9V,代表逻辑“0”
  • 隐性(Recessive): CAN_H - CAN_L ≈ 0V,代表逻辑“1”

为什么差分信号抗干扰?因为外部噪声会同时耦合到两根线上。接收器只看差值,共模噪声就被抵消了。嗯,这个原理和RS485是一样的,但CAN的电气特性更严格。

实战技巧: 我习惯在CAN_H和CAN_L之间并联一个100nF的电容,滤除高频噪声。但注意,电容不能太大,否则会影响信号边沿。100nF是我试出来的经验值。

1.4 CAN总线拓扑结构:别搞成星型!

CAN总线推荐直线型拓扑,也叫“菊花链”。所有节点都挂在同一条主干线上,分支(stub)越短越好。

为什么不能搞星型?我遇到过最惨的一次教训:一个客户把CAN总线布成了星型,结果通信完全乱套。原因很简单——信号反射。星型拓扑会产生多个反射点,波形畸变得一塌糊涂。

避坑指南: 我曾经在一个项目中,分支线超过了1米,结果高速通信时丢包严重。后来把分支缩短到30厘米以内,问题解决。记住:分支长度 ≤ 0.3米,这是铁律。

标准的CAN总线拓扑长这样:

120Ω 120Ω 节点1 节点2 节点3 节点4 CAN总线直线型拓扑 主干线(双绞线) 分支长度 ≤ 0.3米 CAN_H CAN_L

这张图我画了很多次。你看,主干线就是一根双绞线,两端各挂一个120Ω终端电阻。节点通过短分支接入主干。就这么简单,但很多人就是做不到。

1.5 总结:CAN物理层的三个关键点

  1. 差分信号是CAN抗干扰的根本,别想着用单端传输
  2. 终端电阻必须加,而且位置要对——总线两端各一个
  3. 拓扑结构必须是直线型,分支越短越好

我个人习惯,每次做CAN项目前,先画拓扑图,标出每个节点的位置和分支长度。这个习惯帮我避免了很多现场问题。你想想看,如果物理层都没搞好,上层协议再牛也白搭。

一句话记住CAN物理层: 两根线,差分传,直线布,终端阻。做到这四点,CAN通信就成功了一半。

专注资料整理