第2章:CAN协议基础:CAN总线的发展历史、CAN的物理层特性、CAN的差分信号与总线拓扑

各位同学,咱们今天聊聊CAN总线。说实话,在呼吸机这类医疗设备里,CAN总线几乎是标配。我这些年经手的呼吸机项目,从主控板到传感器模块,内部通信基本都靠它。为什么?因为它可靠、实时、还抗干扰。咱们一步步来看。

2.1 CAN总线的发展历史:从汽车到呼吸机

CAN总线,全称是Controller Area Network。1983年,德国博世公司为了解决汽车内部线束太多、通信不可靠的问题,开始研发这个协议。1986年正式发布,1993年成为国际标准ISO 11898。

你想想看,一辆高档汽车里有多少个ECU?发动机、变速箱、ABS、气囊……每个模块都要互相通信。用传统点对点连线,线束比人胳膊还粗。CAN总线用两根线就把所有节点串起来了,省线、轻量、还可靠。

后来,医疗设备行业也盯上了它。为什么?因为呼吸机里也有类似的需求:主控MCU、流量传感器、压力传感器、比例阀驱动、报警模块……这些模块之间需要实时交换数据。而且医疗设备对可靠性要求极高,CAN总线的错误检测和重发机制正好满足需求。

我个人习惯,在呼吸机内部用CAN总线做传感器数据采集和控制指令下发。外部通信才用以太网。这样分工明确,互不干扰。

关键时间节点:

  • 1983年:博世公司启动CAN研发
  • 1986年:CAN协议正式发布
  • 1993年:ISO 11898国际标准
  • 2000年后:医疗设备开始广泛采用
  • 2012年:CAN FD(灵活数据速率)发布

2.2 CAN的物理层特性:电压、速率与节点

CAN的物理层,说白了就是规定了信号怎么在线上跑。咱们最常用的是ISO 11898-2标准,也就是高速CAN。

电压特性:

CAN总线用两根线:CAN_H和CAN_L。显性电平(逻辑0)时,CAN_H约3.5V,CAN_L约1.5V,差分电压约2V。隐性电平(逻辑1)时,两根线都是2.5V,差分电压接近0V。

为什么会这样设计?我刚开始学的时候也纳闷。后来在项目中调试时遇到过一个问题:呼吸机旁边的电机一启动,通信就丢包。查了半天,发现是共模干扰把信号电平抬高了。CAN的差分信号天生就能抑制共模干扰,这就是它抗噪的秘诀。

参数 高速CAN(ISO 11898-2) 低速CAN(ISO 11898-3)
最大速率 1 Mbps 125 kbps
显性电平(CAN_H) 3.5V 3.6V
显性电平(CAN_L) 1.5V 1.4V
隐性电平 2.5V(两线相同) 2.5V(两线相同)
总线长度(1 Mbps时) 约40米 约500米

速率与距离的关系:

这里有个经验公式:速率越快,距离越短。1 Mbps时,总线长度别超过40米。呼吸机内部走线一般就一两米,所以用1 Mbps完全没问题。但如果你要连接多个病床的呼吸机到中央监护系统,距离长了就得降速。

节点数量:

标准CAN最多支持110个节点(取决于收发器驱动能力)。呼吸机内部一般也就5-10个节点:主控、流量传感器、压力传感器、比例阀驱动、报警模块、人机界面。绰绰有余。

实战经验: 我建议你在设计呼吸机CAN网络时,预留20%的节点余量。万一后期要加个氧浓度传感器或者二氧化碳监测模块,不用重新布线。

2.3 CAN的差分信号:为什么它抗干扰这么强?

差分信号,说白了就是用两根线的电压差来表示数据。CAN_H和CAN_L绞在一起走线,外部干扰对两根线的影响几乎相同。接收器只看差值,共模干扰就被抵消了。

举个例子:假设外部来了一个+1V的共模干扰。CAN_H从3.5V变成4.5V,CAN_L从1.5V变成2.5V。差分电压呢?4.5 - 2.5 = 2V,没变!数据照样正确接收。

我曾经在一个项目中遇到过:呼吸机放在ICU里,旁边就是高频电刀。电刀一开机,整个病房的电磁环境恶劣得不行。普通RS485通信直接瘫痪,但CAN总线纹丝不动。这就是差分信号的威力。

差分信号的关键要点:

  • 两根线必须绞在一起(双绞线),间距尽量小
  • 阻抗匹配:通常120Ω终端电阻
  • 避免分支过长,否则信号反射
  • 布线远离电源线和电机驱动线

注意: 差分信号虽然抗干扰强,但不是万能的。如果CAN_H和CAN_L的走线长度不一致,或者绞距不均匀,共模抑制能力会下降。我在一个呼吸机项目中就吃过这个亏——布线时偷懒没绞线,结果EMC测试死活过不了。

2.4 CAN的总线拓扑:线性总线与终端电阻

CAN总线推荐用线性拓扑,也叫总线型拓扑。所有节点都挂在一根主干线上,每个节点用短支线连接。

为什么不能用星型或树型? 因为信号反射。CAN总线要求阻抗连续,分支会产生阻抗不连续点,信号会反射回来干扰正常通信。你想想看,呼吸机里如果通信时不时丢一帧,报警延迟几毫秒,后果可能很严重。

终端电阻:

在总线两端各接一个120Ω电阻。为什么是120Ω?因为CAN双绞线的特性阻抗大约是120Ω。终端电阻的作用是吸收信号能量,防止反射。

我记得有一次,一个同事调试呼吸机样机,发现通信偶尔出错。查了半天,发现终端电阻只接了一个,而且焊在了中间节点上。我告诉他:终端电阻必须在总线两端,而且只能有两个。改完之后,通信稳如老狗。

总线拓扑设计要点:

  • 主干线长度:1 Mbps时不超过40米
  • 支线长度:尽量短,最好不超过30cm
  • 终端电阻:两端各一个120Ω,精度1%
  • 节点间距:尽量均匀分布
  • 线缆类型:CAN专用双绞线,屏蔽层单端接地

关于屏蔽:

医疗设备对EMC要求很高。我建议在呼吸机内部使用屏蔽双绞线。屏蔽层在CAN收发器端单点接地,不要两端都接,否则会产生地环路电流,反而引入干扰。

2.5 小结:CAN物理层在呼吸机中的实战考量

好了,咱们把CAN物理层的关键点串一下:

  • 差分信号是CAN抗干扰的核心,双绞线+终端电阻是标配
  • 速率选1 Mbps,呼吸机内部距离足够
  • 线性拓扑,支线尽量短
  • 终端电阻必须两端各一个,别偷懒
  • 屏蔽层单端接地,别搞成地环路

下一章,咱们会深入CAN的数据链路层,看看报文是怎么组织的,以及那个经典的仲裁机制是怎么工作的。到时候我会拿呼吸机里的实际数据帧来举例,保证你一听就懂。

嗯,今天就到这儿。有什么问题,咱们课程群里聊。