2. CAN总线硬件:CAN收发器原理、CAN控制器选型、终端电阻作用与测量

好,咱们进入第二章。硬件这部分,说实话是很多故障的根源。软件写得再漂亮,硬件底子不行,总线照样罢工。今天我就把CAN收发器、控制器和终端电阻这三个核心硬件,掰开了揉碎了讲清楚。

2.1 CAN收发器原理——总线信号的“翻译官”

CAN收发器,说白了就是个电平转换器。它把控制器输出的逻辑电平(通常是3.3V或5V的TTL/CMOS电平),转换成CAN总线上的差分信号。

为什么非得用差分信号?

你想想看,汽车里电磁干扰多厉害。点火线圈、电机、各种继电器...单端信号在这种环境里根本活不下来。差分信号就不一样了,两根线(CAN_H和CAN_L)同时受干扰,但它们的差值基本不变。这就是CAN总线能在发动机舱里稳定工作的底气。

收发器内部主要干三件事:

  • 发送:把控制器来的“0”和“1”,变成CAN_H和CAN_L上的电压差。显性位(逻辑0)时,CAN_H≈3.5V,CAN_L≈1.5V,压差2V左右。隐性位(逻辑1)时,两根线都约2.5V,压差接近0V。
  • 接收:反过来,把总线上的差分电压,还原成控制器能识别的逻辑电平。
  • 保护:好的收发器有过流、过温、短路保护。我见过不少案例,就是收发器烧了,整条总线瘫痪。

关键参数:

  • 工作电压:常见5V,也有3.3V的
  • 速率:从低速的125kbps到高速的1Mbps
  • 共模范围:-2V到+7V(这是抗干扰的关键)
  • 待机电流:休眠模式下要低,不然电瓶会亏电

2.2 CAN控制器选型——别小看这个“大脑”

控制器负责协议层的处理。比如帧的封装、错误检测、仲裁、位填充这些脏活累活,都是它干的。选型时,我一般看这几个方面:

考量因素 说明 我的经验
支持的协议 CAN 2.0A/B,还是CAN FD? 现在新车基本都上CAN FD了,选型时尽量往前看
FIFO深度 消息缓冲队列的大小 深度不够,高负载下容易丢帧。我吃过这个亏
滤波器数量 硬件过滤报文,减轻CPU负担 至少要有8个以上,不然软件过滤太费劲
工作温度 车规级:-40°C ~ +125°C 别用工业级替代,夏天机舱里温度轻松破百
封装与引脚 与MCU的接口方式 SPI接口的灵活,但延迟略高;内置的集成度高

避坑指南:我曾经在一个项目里选了某款便宜的控制器,结果发现它在总线负载超过70%时就开始丢帧。后来换了带更大FIFO的型号,问题才解决。选型时别只看价格,要留足余量。

2.3 终端电阻——为什么是120Ω?

终端电阻,每个CAN节点上都有两个,分别接在CAN_H和CAN_L之间。标准值是120Ω。为什么是这个值?

说白了,是为了阻抗匹配。CAN总线的特性阻抗大约是120Ω。如果不加终端电阻,或者阻值不对,信号在总线末端就会反射。反射回来的信号会和原始信号叠加,造成波形畸变。畸变严重了,接收器就会误判,产生位错误。

测量方法:

  1. 断开所有节点电源(重要!带电测不准)
  2. 用万用表电阻档,测量CAN_H和CAN_L之间的电阻
  3. 正常值:约60Ω(两个120Ω并联)
  4. 如果测到120Ω:说明只有一个终端电阻在工作
  5. 如果测到0Ω:说明短路了
  6. 如果测到无穷大:说明断路了

注意:测量时一定要断电。我见过有人带电测,结果万用表烧了。另外,有些节点内部已经集成了终端电阻,这时候外部就不用再加了。但这种情况比较少,大多数还是需要外部加。

嗯,这里有个小技巧。如果你怀疑终端电阻有问题,可以用示波器看波形。正常的CAN波形,显性位和隐性位之间过渡很干净,没有过冲和振铃。如果波形上有明显的“毛刺”或“台阶”,十有八九是终端电阻出了问题。

我个人习惯,在项目初期就把终端电阻的测量加入产线测试流程。这一步能拦截掉很多低级故障,比如焊锡虚焊、电阻贴错、PCB走线断裂等等。别小看这些,它们占了我遇到过的硬件故障的30%以上。

好了,硬件这部分就讲到这里。下一章我们聊聊软件层面的故障诊断,那又是另一片天地了。