2. 汽车电子与CAN总线基础

做CAN通信,最核心的硬件就两个:控制器和收发器。控制器负责协议处理,收发器负责电平转换。这两者选不对,软件写得再好也白搭。

我个人习惯,选型前先画一张系统框图,把信号流向理清楚。下面这张图,基本概括了本章要讲的核心关系。

CAN节点硬件架构与信号流向 MCU (SPI / 并行接口) CAN控制器 (SJA1000 / MCP2515) CAN收发器 (TJA1050 / SN65HVD230) CAN总线 (CAN_H / CAN_L) 地址/数据/SPI TX / RX 差分信号 关键说明: 1. MCU通过并行总线或SPI接口与控制器交换数据。 2. 控制器将并行数据转换为CAN协议串行帧,输出TX/RX信号。 3. 收发器将TX/RX单端信号转换为CAN_H/CAN_L差分信号,驱动总线。 4. 电气参数匹配(如终端电阻、共模电压)决定通信可靠性。

2.1 控制器对比:SJA1000 vs MCP2515

市面上主流的独立CAN控制器,基本就是这两款。SJA1000是老牌劲旅,MCP2515是后起之秀。我两个都用过,说说实际感受。

对比项 SJA1000 MCP2515
接口类型 并行总线(Intel/Motorola模式) SPI(最高10 MHz)
封装 DIP28 / SO28 SOIC-18 / PDIP-18
工作模式 BasicCAN / PeliCAN 标准帧 / 扩展帧
接收缓冲 64字节FIFO 2个接收缓冲 + 3个发送缓冲
滤波能力 单/双验收滤波(PeliCAN模式) 2个验收屏蔽 + 2个验收滤波
典型MCU搭配 51单片机、ARM7 STM32、AVR、PIC
价格(批量) 约3-5元 约2-4元

选型建议:

  • MCU引脚多、对实时性要求高 → 选SJA1000。并行总线读写速度快,没有SPI协议开销。我在一个高速数据采集项目中用过,中断响应延迟能控制在1μs以内。
  • MCU引脚紧张、追求布线简洁 → 选MCP2515。SPI接口只要4根线,PCB布局非常灵活。我做过一个手持设备,STM32F103 + MCP2515,板子面积只有拇指大小。

避坑指南:

我曾经在一个项目里,用SJA1000搭配STM32,结果死活通信不上。查了三天,发现是并行总线的时序没配好。SJA1000的ALE、RD、WR信号需要严格的建立/保持时间,用GPIO模拟时尤其要注意。后来改用FSMC接口,问题才解决。

2.2 收发器选型:TJA1050 vs SN65HVD230

收发器决定了物理层的性能。TJA1050是NXP的经典款,SN65HVD230是TI的低功耗方案。选哪个,主要看应用场景。

对比项 TJA1050 SN65HVD230
工作电压 4.75V ~ 5.25V 3.0V ~ 3.6V
待机电流 约 5μA 约 1μA
工作电流(发送) 约 50mA 约 15mA
共模电压范围 -12V ~ +12V -7V ~ +12V
斜率控制 无(固定斜率) 有(通过Rs引脚调节)
热保护 有 有
典型应用 工业控制、车载 电池供电设备、便携设备

我的经验:

如果系统是5V供电,且总线长度超过100米,我建议用TJA1050。它的驱动能力更强,抗干扰性能更好。如果是3.3V系统,或者对功耗有严格要求,SN65HVD230是首选。记得,SN65HVD230的Rs引脚接高电平进入待机模式,接低电平进入高速模式,悬空则进入斜率控制模式。

2.3 电气参数匹配:这些细节决定成败

选好了芯片,还得把电气参数匹配好。否则,通信距离、节点数量、抗干扰能力都会大打折扣。

2.3.1 终端电阻

CAN总线两端必须各接一个120Ω电阻。为什么是120Ω?因为CAN双绞线的特性阻抗大约是120Ω。不接或者接错,信号会反射,导致通信错误。

我曾经踩过的坑:

有一次调试一个多节点系统,总线上挂了8个设备,通信时好时坏。用示波器一看,CAN_H上的信号有严重的过冲和振铃。检查发现,终端电阻被接在了中间节点上,而不是两端。重新分配后,波形干净了,通信也稳定了。

2.3.2 共模电压与隔离

CAN收发器的共模电压范围是有限的。TJA1050是-12V到+12V,SN65HVD230是-7V到+12V。如果现场干扰大,或者两个节点地电位差大,就需要加隔离。

  • 隔离方案:使用隔离电源模块 + 隔离CAN收发器(如ISO1050)。
  • 非隔离方案:确保所有节点共地,地线截面积足够大。

2.3.3 节点数量与总线长度

标准CAN总线最多支持110个节点(理论上),但实际受限于收发器的驱动能力。下表是经验值:

波特率 最大总线长度 推荐节点数
1 Mbps 40 m ≤ 30
500 kbps 100 m ≤ 50
250 kbps 200 m ≤ 64
125 kbps 500 m ≤ 110

核心原则:

波特率越低,总线可以越长,节点可以越多。但别盲目追求长距离,信号衰减和干扰会随之增加。我一般留20%的余量。

2.3.4 电源与去耦

收发器在发送时,瞬间电流变化很大。如果电源去耦不好,会导致总线电平抖动。

  • 每个收发器旁边放一个100nF陶瓷电容,位置尽量靠近电源引脚。
  • 如果总线长度超过100米,建议在总线入口加共模扼流圈。