2. 汽车电子与CAN总线基础
做CAN通信,最核心的硬件就两个:控制器和收发器。控制器负责协议处理,收发器负责电平转换。这两者选不对,软件写得再好也白搭。
我个人习惯,选型前先画一张系统框图,把信号流向理清楚。下面这张图,基本概括了本章要讲的核心关系。
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米,建议在总线入口加共模扼流圈。