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(取决于型号)
我的经验: 选型时别只看价格。如果MCU的SPI资源紧张,或者需要高速通信,SJA1000的并行接口反而更合适。反之,如果追求布线简单、板子小巧,MCP2515是更好的选择。

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
注意: 我曾经在选型时忽略了供电电压。MCU是3.3V的,却选了TJA1050,结果还得加电平转换芯片,白白增加了成本和板子面积。所以,先看供电,再看其他。

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
  • 在电源入口加一个自恢复保险丝
避坑指南: 我曾经在一个项目上没加TVS管,结果整车做静电测试时,CAN收发器烧了三个。从那以后,保护电路我从来不敢省。

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 (高速模式)
小技巧: 调试时,可以在CANH和CANL之间并一个示波器探头。看波形是否对称,幅值是否在1.5V到3.5V之间。如果波形不对称,多半是终端电阻或共模扼流圈的问题。

好了,这一章的内容就这些。CAN控制器和收发器的选型、电路设计,说白了就是平衡成本、性能和可靠性。没有绝对的好坏,只有适不适合你的项目。

下一章,咱们聊聊CAN总线的物理层测试。到时候我会分享一些用示波器抓波形的实战经验,保证有用。