3、CAN控制器与收发器:常用CAN控制器芯片(SJA1000、MCP2515)、收发器(TJA1050、SN65HVD230)选型与电路设计

好,咱们进入正题。这一章聊的是CAN通信的“心脏”和“嘴巴”——控制器和收发器。

说白了,控制器负责把你要发的数据打包成CAN协议规定的帧格式,收发器则负责把这些数字信号变成差分信号怼到总线上。两者缺一不可。我这些年调试过的充电桩,十有八九的问题都出在这两个芯片的选型和电路设计上。

3.1 常用CAN控制器芯片选型

控制器芯片,我接触最多的就是SJA1000和MCP2515。一个老牌劲旅,一个后起之秀。怎么选?看你的主控资源。

3.1.1 SJA1000:独立控制器的经典之选

SJA1000是NXP(原Philips)的经典产品。它支持CAN 2.0B协议,也就是标准帧和扩展帧都能处理。

核心特点:

  • 并行接口:与MCU通过地址/数据总线连接,读写速度快。
  • 两种模式:BasicCAN模式(11位标识符)和PeliCAN模式(扩展帧)。我个人习惯直接用PeliCAN模式,兼容性更好。
  • 64字节FIFO:接收缓冲够大,不容易丢帧。

选型建议:

  • 如果你的MCU是STM32这类带FSMC(灵活静态存储控制器)的,用SJA1000很爽,直接挂到总线上,像操作外部RAM一样读写。
  • 但要注意,SJA1000是5V供电的。现在很多MCU是3.3V,需要做电平转换。我在一个项目中就吃过这个亏,直接连上去,结果SJA1000不工作,查了半天才发现是电平不匹配。

避坑指南: 我曾经在SJA1000的复位电路上栽过跟头。它的复位引脚是低电平有效,而且要求复位脉冲宽度至少100ns。有些设计图随便接个RC电路,上电瞬间复位不彻底,导致芯片初始化失败。建议用MCU的GPIO专门控制复位,或者用带复位监控的电源芯片。

3.1.2 MCP2515:SPI接口的灵活之选

MCP2515是Microchip的产品。它通过SPI接口与MCU通信,引脚少,连接简单。

核心特点:

  • SPI接口:只需要4根线(SCK、MOSI、MISO、CS),省IO口。
  • 内置中断逻辑:有多个中断源,可以灵活配置。
  • 3.3V供电:与主流MCU电平兼容,省去电平转换的麻烦。

选型建议:

  • 如果你的MCU引脚紧张,比如用STM32F103C8T6这种48引脚的,MCP2515是首选。
  • 但SPI通信有延迟,吞吐量不如并行接口。对于高速CAN(1Mbps),如果数据量很大,MCP2515可能会有点吃力。你想想看,每次收发数据都要通过SPI读写寄存器,效率肯定不如直接内存映射。
对比项 SJA1000 MCP2515
接口类型 并行(地址/数据总线) SPI(串行)
供电电压 5V 3.3V
接收缓冲 64字节FIFO 2个接收缓冲 + 1个MAB
典型应用 高性能、大数据量场景 引脚受限、低功耗场景
价格 略高 便宜

3.2 常用CAN收发器芯片选型

收发器,就是把控制器的逻辑电平转换成CAN总线的差分信号。选型主要看两点:供电电压和速率。

3.2.1 TJA1050:高速CAN的标杆

TJA1050也是NXP的。它支持最高1Mbps的通信速率,是充电桩CAN通信的标配。

核心特点:

  • 5V供电:与SJA1000完美搭配。
  • 斜率控制:通过Rs引脚可以控制上升/下降斜率,降低EMI。
  • 待机模式:低功耗场景下有用。

电路设计要点:

  • CANH和CANL对地各接一个5pF左右的电容,滤除高频噪声。我见过有人不接,结果EMC测试过不了。
  • Rs引脚:如果对EMI要求高,接一个10kΩ电阻到地,降低斜率。如果追求速率,直接接GND。

个人经验: TJA1050的Vref引脚(第5脚)可以输出2.5V的参考电压。有些设计用它给控制器供电,我不建议这么做。Vref驱动能力很弱,带不动SJA1000。老老实实单独供电吧。

3.2.2 SN65HVD230:3.3V系统的优选

SN65HVD230是TI的产品。它支持3.3V供电,适合与MCP2515或3.3V的MCU直接连接。

核心特点:

  • 3.3V供电:省去电平转换。
  • 低功耗:待机电流仅1μA。
  • 总线引脚ESD保护:±16kV HBM,抗静电能力强。

选型建议:

  • 如果你的系统是电池供电的,比如便携式充电桩诊断仪,SN65HVD230的低功耗特性很合适。
  • 但要注意,3.3V的收发器驱动能力比5V的弱一些。在长距离(超过100米)或节点数很多(超过30个)的场合,建议用TJA1050。

3.3 典型电路设计

嗯,这里要注意。电路设计不是把芯片连起来就完事了。有几个关键点必须处理好。

3.3.1 电源与去耦

CAN通信对电源噪声很敏感。我建议每个芯片的电源引脚旁边都放一个0.1μF的陶瓷电容,尽量靠近引脚。如果空间允许,再加一个10μF的电解电容。

// 典型去耦电容布局
// VCC —— 10μF电解 —— 0.1μF陶瓷 —— 芯片VCC引脚
// GND —— 10μF电解 —— 0.1μF陶瓷 —— 芯片GND引脚

3.3.2 终端电阻

CAN总线两端必须各接一个120Ω的终端电阻。这个电阻不能省,也不能随便换阻值。我见过有人用100Ω,结果信号反射严重,通信时好时坏。

警告: 终端电阻一定要接在总线的物理两端,而不是在PCB上随便找个地方焊上。如果充电桩内部有多个CAN节点,终端电阻只能放在最远端的两个节点上。我曾经在一个项目中,每个节点都接了120Ω电阻,结果总线负载太大,信号幅值被拉低,通信全乱套了。

3.3.3 共模扼流圈

在CANH和CANL线上串一个共模扼流圈,可以有效抑制共模干扰。特别是在充电桩这种大功率设备旁边,电机、开关电源产生的干扰很厉害。我建议用TDK的ACT45B系列,或者Würth的WE-CMB系列。

3.3.4 保护电路

充电桩工作环境恶劣,总线可能会被误接到高压线上。所以,TVS管是必须的。我习惯在CANH和CANL对地各接一个双向TVS管,击穿电压选6.8V左右。这样既能钳位浪涌,又不影响正常通信。

// 典型CAN收发器电路(以TJA1050为例)
// 
// MCU TXD —— 10kΩ上拉 —— TJA1050 TXD (1脚)
// MCU RXD —— TJA1050 RXD (4脚)
// TJA1050 CANH (7脚) —— 共模扼流圈 —— TVS管 —— 总线接口
// TJA1050 CANL (6脚) —— 共模扼流圈 —— TVS管 —— 总线接口
// TJA1050 Rs (8脚) —— 10kΩ —— GND
// TJA1050 VCC (3脚) —— 0.1μF —— GND
// TJA1050 GND (2脚) —— GND

3.4 选型总结与建议

说了这么多,到底怎么选?我总结一下:

  • 主控资源丰富(如STM32F407带FSMC):选SJA1000 + TJA1050,性能最强。
  • 主控引脚紧张(如STM32F103C8T6):选MCP2515 + SN65HVD230,连接简单。
  • 对EMI要求高:选TJA1050,利用Rs引脚控制斜率。
  • 低功耗应用:选SN65HVD230,待机电流极低。

最后,再啰嗦一句。芯片选型只是第一步,电路设计才是关键。去耦、终端电阻、保护电路,一个都不能少。你想想看,如果因为省了一个TVS管,导致整批充电桩在雷雨天气批量损坏,那损失可就大了。

好,这一章就到这里。下一章我们聊聊CAN总线的物理层设计,包括线缆选择、布线规则和接地处理。到时候我会分享一个我在现场调试时遇到的“幽灵故障”案例,保证让你印象深刻。