1. CAN总线基础:从起源到物理层

各位同学,咱们今天聊聊CAN总线的基础。说实话,我最早接触CAN总线是在做汽车电子项目的时候,那时候刚入行,被这玩意儿折腾得不轻。后来慢慢摸透了,才发现它设计得确实巧妙。

1.1 CAN协议的起源——为什么会有它?

上世纪80年代,汽车里的电子设备越来越多。你想啊,发动机、变速箱、ABS、仪表盘……每个模块都要互相通信。传统的点对点接线,线束又重又贵,还容易出故障。

1986年,德国博世公司推出了CAN(Controller Area Network)协议。它的目标很明确:用两根线,让所有节点都能互相通信。嗯,说白了就是给汽车装了个“内部局域网”。

核心设计理念:

  • 多主通信——任何节点都能主动发消息,不用等主机问
  • 实时性强——优先级高的消息优先发送,不会堵车
  • 可靠性高——错误检测和自动重发机制,误码率极低
  • 线束少——两根线搞定所有通信,省成本省重量

我在一个商用车项目中见过,用CAN总线替换了原来几十根信号线,整车线束重量直接降了40%。这就是它的价值。

1.2 物理层特性——两根线怎么传数据?

CAN总线的物理层,说白了就是一对双绞线:CAN_H和CAN_L。终端电阻各120Ω,总线上并联,等效60Ω。这个电阻不能省,我见过有人调试时忘了接终端电阻,波形反射得一塌糊涂。

参数 高速CAN(ISO 11898-2) 低速CAN(ISO 11898-3)
最大速率 1 Mbps 125 kbps
总线长度(1 Mbps) 约40 m 约500 m
显性电平 CAN_H ≈ 3.5V, CAN_L ≈ 1.5V CAN_H ≈ 5V, CAN_L ≈ 0V
隐性电平 CAN_H ≈ 2.5V, CAN_L ≈ 2.5V CAN_H ≈ 0V, CAN_L ≈ 5V
终端电阻 120Ω × 2 通常不需要

这里有个坑:高速CAN和低速CAN的电气特性不一样,不能混用。我曾经在一个项目里,有人把高速CAN节点接到了低速CAN总线上,结果通信时好时坏,查了两天才发现是收发器不匹配。

1.3 差分信号原理——为什么抗干扰这么强?

CAN总线用两根线传一个信号,这就是差分传输。你想想看,如果只用一根线传数据,外面有电磁干扰,信号就变了。但差分信号不一样:

  • 隐性(1):CAN_H = 2.5V,CAN_L = 2.5V,差分电压 = 0V
  • 显性(0):CAN_H = 3.5V,CAN_L = 1.5V,差分电压 = 2V

干扰来了怎么办?两根线同时被干扰,但差分电压不变。这就是CAN总线能在发动机舱这种强干扰环境下稳定工作的原因。

我的经验:用示波器看CAN_H和CAN_L的波形,两根线应该是镜像对称的。如果不对称,说明共模抑制出了问题,可能是接地不良或者线缆有问题。

1.4 总线拓扑结构——怎么连才靠谱?

CAN总线推荐的是直线拓扑,也叫“干线-支线”结构。主干线是双绞线,每个节点用短支线接到主干线上。支线长度越短越好,高速CAN建议不超过30cm。

我见过有人图省事,把节点接成了星形或者环形。结果呢?信号反射严重,通信丢包率飙升。CAN总线不是以太网,拓扑结构必须遵守规则。

避坑指南:

  • 不要用星形拓扑——信号反射会导致位定时错误
  • 不要用环形拓扑——CAN协议不支持环网冗余
  • 支线尽量短——超过1米就可能出问题
  • 终端电阻必须接在总线两端——不是每个节点都接

我曾经在一个项目中,客户把终端电阻接到了每个节点上,结果总线等效电阻只有十几欧姆,驱动器直接过载保护。嗯,这个教训挺深刻的。

CAN总线典型拓扑结构 120Ω 120Ω 节点1 节点2 节点3 节点4 拓扑要点 • 主干线两端各接一个120Ω终端电阻 • 支线长度尽量短,高速CAN不超过30cm • 节点数量受驱动器驱动能力限制,通常不超过30个

1.5 位定时与同步——时钟怎么对齐?

CAN总线没有单独的时钟线,所有节点靠同步机制来对齐时钟。每个位时间被分成4段:同步段、传播段、相位缓冲段1、相位缓冲段2。采样点通常在相位缓冲段1的末尾。

这里有个关键参数:采样点位置。我习惯把采样点设在87.5%左右,这样对线缆延迟和振荡器误差的容忍度最好。如果采样点太靠前或者太靠后,总线长度稍微一长就容易出错。

位时间分段(以1 Mbps为例):

  • 同步段:1个时间量子(tq)
  • 传播段:1~8个tq
  • 相位缓冲段1:1~8个tq
  • 相位缓冲段2:1~8个tq
  • 采样点位置 = (同步段 + 传播段 + 相位缓冲段1) / 总tq

我调试过一个项目,两个节点距离50米,波特率500kbps。一开始采样点设在75%,通信偶尔出错。后来把采样点调到87.5%,问题就解决了。说白了,位定时参数要根据实际总线长度和节点时钟精度来调整,不能照搬参考设计。

1.6 小结

CAN总线的基础就这些:差分信号抗干扰、直线拓扑防反射、位定时保同步。这些概念看着简单,但实际项目中出问题往往就是这些基础没搞扎实。后面咱们会一步步深入,从协议帧格式到调试工具,再到故障定位,把CAN总线彻底吃透。