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总线的物理层设计,包括线缆选择、布线规则和接地处理。到时候我会分享一个我在现场调试时遇到的“幽灵故障”案例,保证让你印象深刻。