一、CAN总线基础:从起源到物理层

1.1 CAN总线的诞生——为什么要有它?

说起CAN总线,得从上世纪80年代讲起。那时候汽车电子开始爆发,各种ECU(电子控制单元)越来越多。你想想看,一个豪华车里有几十个ECU,每个ECU之间都要通信。如果用传统的点对点接线,那线束得多重?我记得有个数据,当时一辆车的线束总长能超过2公里,重量接近50公斤。这显然不合理。

1983年,德国Bosch公司开始研发一种新的串行通信协议。1986年,CAN(Controller Area Network)总线正式诞生。它的初衷很简单:用两根线,把车上所有的电子设备连起来。我在电梯行业干了十几年,说实话,CAN总线进入电梯领域是2000年以后的事。但一旦进来,就再也没离开过。

核心要点:CAN总线最初是为汽车设计的,但它的可靠性、实时性和低成本,让它成了工业控制、电梯控制、医疗设备等领域的首选。

1.2 CAN总线的特点——它凭什么这么牛?

CAN总线有五个让我印象深刻的特性。我一个个说。

第一,多主站通信。 传统RS485是主从结构,主机问,从机答。CAN总线不一样,任何节点都可以主动发消息。这在电梯里太重要了——轿厢里的按钮按下,不需要等主机轮询,直接发出去就行。

第二,实时性高。 CAN总线采用非破坏性仲裁机制。说白了,优先级高的消息永远先发。电梯的急停信号,优先级必须最高。我做过一个项目,客户非要用RS485做急停通信,结果延迟了200毫秒,差点出事。后来全换成CAN了。

第三,错误处理能力强。 CAN有5种错误检测机制,包括CRC校验、位填充、格式检查等。错误率极低,低于10的负12次方。嗯,这个数字你可能没概念,我换个说法:连续运行1000年,才可能出现一个未被检测到的错误。

第四,差分信号传输。 抗干扰能力极强。电梯井道里电机、变频器、接触器,电磁环境非常恶劣。CAN总线在这种环境下依然稳定工作。我曾经在电梯控制柜旁边用示波器看过CAN波形,干扰确实有,但信号依然完整。

第五,节点数多。 理论上一个CAN网络可以挂110个节点。实际应用中,我建议控制在50个以内,否则总线负载太高,实时性会下降。

个人经验: 我在调试一个32层电梯时,CAN总线上挂了轿厢控制器、厅外控制器、门机控制器、安全回路模块等,总共28个节点。总线负载率控制在30%左右,通信非常稳定。

1.3 CAN总线 vs RS485——到底选哪个?

这个问题我几乎每次培训都会被问到。直接上对比表吧。

对比项 CAN总线 RS485
通信方式 多主,任意节点可主动发 主从,主机轮询
最大速率 1 Mbps(40米内) 10 Mbps(短距离)
最大距离 10 km(5 kbps时) 1.2 km(100 kbps时)
仲裁机制 非破坏性位仲裁 无,需软件处理冲突
错误检测 5种机制,极强 仅奇偶校验或CRC(需软件实现)
硬件成本 略高(需要CAN控制器) 低(UART即可)
应用场景 实时控制、安全关键系统 数据采集、非实时通信

我的建议很简单:如果系统对实时性和可靠性要求高,选CAN。如果只是传数据、成本敏感,选RS485。 电梯控制系统,毫无疑问选CAN。我曾经见过有人用RS485做电梯五方对讲,没问题。但做电梯主控通信?千万别。

避坑指南: 我曾经在一个项目中,客户坚持用RS485做电梯群控通信。结果两台电梯同时发指令时,数据冲突导致电梯乱跑。后来改成CAN,问题立刻解决。记住:多主通信场景,RS485天生不适合。

1.4 CAN总线物理层——两根线背后的门道

CAN总线的物理层,说白了就是两根线:CAN_H和CAN_L。但这两根线不简单。

差分信号原理

CAN总线用差分电压传输信号。显性电平(逻辑0)时,CAN_H比CAN_L高2V左右。隐性电平(逻辑1)时,两线电压差接近0V。为什么用差分?抗共模干扰。电梯井道里的电机启动时,地电位可能瞬间跳变几十伏。差分信号不受影响,因为干扰同时作用在两根线上,电压差不变。

终端电阻

CAN总线两端必须各接一个120欧姆的终端电阻。为什么是120欧姆?因为CAN总线的特性阻抗就是120欧姆。不接终端电阻会怎样?信号反射,波形畸变,通信失败。我调试过一台电梯,CAN通信时好时坏。查了两天,发现终端电阻松了。拧紧后一切正常。

重要提醒: 终端电阻必须接在总线的最两端。如果接在中间,反射依然存在。我习惯用万用表量CAN_H和CAN_L之间的电阻。正常应该是60欧姆(两个120欧姆并联)。如果测到120欧姆,说明只接了一个终端电阻。

总线拓扑

CAN总线推荐直线型拓扑。分支线越短越好,最好不超过30厘米。为什么?分支线会产生信号反射。我在一个项目中,为了布线方便,把分支线拉到了2米。结果通信速率只能降到50 kbps才能稳定。后来重新布线,分支控制在20厘米以内,速率直接上到250 kbps。

电平标准

CAN总线有几种物理层标准。最常见的是ISO 11898-2,也就是高速CAN。显性电平:CAN_H=3.5V,CAN_L=1.5V,差分电压2V。隐性电平:CAN_H=2.5V,CAN_L=2.5V,差分电压0V。还有一种低速CAN(ISO 11898-3),容错能力更强,但速率低。电梯行业基本都用高速CAN。

个人习惯: 我设计CAN电路时,会在CAN_H和CAN_L之间加一个TVS管,防止浪涌。还会在每根线上串一个小电阻(比如10欧姆),限制电流。这些小细节,能省很多售后麻烦。

线缆选择

CAN总线推荐使用双绞线,绞距越密越好。为什么?双绞线能抵消电磁干扰。我见过有人用普通平行线做CAN通信,距离一长就丢包。换成双绞线后,问题消失。线缆的阻抗要匹配,120欧姆左右。常用的有RVSP 2×0.75平方毫米的双绞屏蔽线。

嗯,到这里,CAN总线的基础知识就讲完了。下一章我们深入CAN的数据链路层,看看报文是怎么组织的。到时候我会讲一个我踩过的坑——关于CAN ID分配的问题,保证让你印象深刻。