4、CAN控制器与收发器:SJA1000/MCP2515控制器、TJA1050/SN65HVD230收发器、硬件电路设计要点
好,咱们今天聊聊CAN控制器和收发器。这两个家伙,说白了就是CAN通信的「大脑」和「嘴巴」。
控制器负责协议处理,收发器负责电平转换。我刚开始做车载项目时,总觉得选个芯片焊上去就能跑。结果呢?通信丢帧、总线错误、甚至烧片子……踩过的坑多了,才明白硬件设计里的门道。
4.1 CAN控制器:SJA1000 vs MCP2515
先说说控制器。市面上主流的就是两种:独立控制器和集成控制器。
SJA1000 是老牌劲旅了。飞利浦(现在的NXP)出品,支持CAN 2.0B,也就是标准帧和扩展帧都能处理。我最早接触它是在一个商用车项目上,那会儿MCU自带的CAN控制器不够用,就外挂了一片SJA1000。
它的特点很鲜明:
- 并行接口,跟MCU连接需要8位数据线加地址线
- 支持PeliCAN模式和BasicCAN模式
- 64字节的接收FIFO
- 工作电压5V
嗯,这里要注意。SJA1000的并行接口虽然速度快,但会占用MCU不少IO口。我记得有一次,MCU的引脚不够用了,不得不加了个CPLD做地址译码,搞得板子面积大了不少。
MCP2515 则是Microchip家的产品。它用的是SPI接口,跟MCU连接只需要4根线(MOSI、MISO、SCK、CS)。
我个人习惯在资源紧张的场合用MCP2515。比如一个简单的传感器节点,MCU选个便宜的8位单片机,外挂MCP2515加TJA1050,成本控制得很好。
MCP2515的几个关键点:
- SPI时钟最高10MHz
- 支持CAN 2.0B
- 两个接收缓冲器,一个发送缓冲器
- 工作电压3.3V或5V(取决于型号)
4.2 CAN收发器:TJA1050 vs SN65HVD230
收发器负责把控制器的逻辑电平转换成CAN总线的差分信号。说白了,就是让信号能在线路上跑得远、抗干扰。
TJA1050 是NXP的经典产品。5V供电,速率最高1Mbps。我在一个重型卡车的项目上用过它,总线长度超过100米,节点数30多个,通信依然稳定。
它的特点:
- 支持高速CAN(ISO 11898-2)
- 有显性超时功能,防止总线被长时间拉低
- 待机模式电流极低
- 工作温度范围-40°C到+125°C
SN65HVD230 是TI的产品。3.3V供电,适合低功耗设计。我最近在做一个T-Box项目,MCU是3.3V的,直接配SN65HVD230,省去了电平转换的麻烦。
它的亮点:
- 3.3V单电源供电
- 低功耗模式
- 总线引脚ESD保护
- 速率同样支持1Mbps
| 参数 | TJA1050 | SN65HVD230 |
|---|---|---|
| 供电电压 | 5V | 3.3V |
| 速率 | 1Mbps | 1Mbps |
| 工作温度 | -40~125°C | -40~125°C |
| 待机电流 | 5μA | 1μA |
| 典型应用 | 商用车、工业 | 消费电子、T-Box |
4.3 硬件电路设计要点
好了,芯片选好了,怎么画电路?这里面的坑可不少。我一个个说。
4.3.1 电源与去耦
CAN收发器在工作时,电流变化很快。尤其是从隐性到显性的切换瞬间,电流尖峰很大。
我的做法是:
- 每个收发器的电源引脚旁边放一个100nF的陶瓷电容
- 电容尽量靠近芯片引脚
- 如果板子空间允许,再加一个10μF的电解电容
你想想看,如果去耦电容放得远了,走线电感就会大,高频噪声滤不掉。我见过一个案例,CAN通信偶尔出错,查了半天,就是去耦电容放得太远。
4.3.2 终端电阻
CAN总线两端必须各接一个120Ω的终端电阻。这个大家都知道。但具体怎么接?
我建议:
- 电阻精度选1%的
- 功率至少1/4W
- 如果节点可能被拔掉,用可插拔的终端电阻模块
为什么精度要1%?因为电阻值偏差大了,会导致总线信号反射,影响通信质量。我在一个项目上用过5%的电阻,结果总线波形乱七八糟,换了1%的就好了。
4.3.3 共模扼流圈
这个很多人会忽略。共模扼流圈能抑制共模干扰,提高EMC性能。
我的经验是:
- 在CANH和CANL线上串联一个共模扼流圈
- 感值选51μH到100μH之间
- 注意扼流圈的额定电流要大于总线最大电流
嗯,这里要注意。共模扼流圈不是必须的。如果板子空间紧张,或者EMC要求不高,可以省略。但如果是车规级产品,我强烈建议加上。
4.3.4 保护电路
车载环境很恶劣。静电、浪涌、电源反接……这些都可能烧毁CAN收发器。
我常用的保护方案:
- 在CANH和CANL对地各接一个TVS管
- TVS管的击穿电压选6.8V到7.5V
- 在电源入口加一个自恢复保险丝
4.3.5 布局与布线
PCB布局布线直接影响信号质量。我的几条原则:
- 控制器和收发器尽量靠近,走线越短越好
- CANH和CANL走差分线,线宽一致,间距一致
- 避免在CAN总线附近走高频信号线
- 地线要完整,不要有断点
你想想看,如果CANH和CANL的走线长度不一样,差分信号的共模抑制能力就会下降。我见过一个板子,CANH走了10mm,CANL走了30mm,结果总线波形严重失真。
4.3.6 典型电路参考
下面给一个MCP2515 + TJA1050的典型电路。这个组合我用了很多次,稳定可靠。
// MCP2515与TJA1050连接示意
// MCU通过SPI控制MCP2515
// MCP2515的TXD/RXD连接TJA1050
MCP2515引脚:
SCK -> MCU SPI时钟
SI -> MCU MOSI
SO -> MCU MISO
CS -> MCU GPIO
INT -> MCU GPIO (中断)
TXCAN -> TJA1050 TXD
RXCAN -> TJA1050 RXD
TJA1050引脚:
TXD -> MCP2515 TXCAN
RXD -> MCP2515 RXCAN
CANH -> 总线CANH (经共模扼流圈)
CANL -> 总线CANL (经共模扼流圈)
VCC -> 5V (加100nF去耦电容)
GND -> 地
S -> 接GND (高速模式)
好了,这一章的内容就这些。CAN控制器和收发器的选型、电路设计,说白了就是平衡成本、性能和可靠性。没有绝对的好坏,只有适不适合你的项目。
下一章,咱们聊聊CAN总线的物理层测试。到时候我会分享一些用示波器抓波形的实战经验,保证有用。