3、CAN控制器与收发器:独立控制器(SJA1000)、集成控制器(STM32 bxCAN)、收发器(TJA1050/SN65HVD230)选型

做CAN硬件设计,选型是第一道坎。

我见过不少新手,一上来就纠结「用独立控制器还是集成的好?」。其实这个问题没那么玄乎。说白了,就是看你的MCU有没有CAN外设,以及你对实时性要求有多高。

今天咱们就把控制器和收发器这两大块掰开揉碎讲清楚。我尽量用项目里踩过的坑来帮你避雷。

3.1 独立控制器:SJA1000

SJA1000是NXP(原Philips)的老牌独立CAN控制器。嗯,确实是老,但老不代表过时。很多工业设备、车载ECU还在用它。

核心特点:

  • 支持BasicCAN和PeliCAN两种模式
  • PeliCAN模式下支持CAN 2.0B(29位扩展帧)
  • 64字节的接收FIFO
  • 单路5V供电
  • 与MCU通过并行接口连接(地址/数据复用)

我个人习惯在以下场景选SJA1000:

  • MCU本身不带CAN控制器,但需要CAN通信
  • 系统对实时性要求极高,需要独立的CAN协议处理
  • 老项目维护,替换原有SJA1000方案

注意:SJA1000的并行接口会占用较多MCU引脚。我曾经在一个项目中为了省引脚,硬是用GPIO模拟了并口时序,结果调试了整整两天。嗯,那滋味不好受。

选型时还要注意:SJA1000的时钟输入通常是16MHz或24MHz。我建议直接用16MHz,因为波特率配置更规整。你想想看,用24MHz算某些波特率时,分频系数经常是小数,容易出偏差。

3.2 集成控制器:STM32 bxCAN

现在大部分MCU都集成了CAN控制器。STM32的bxCAN就是个典型代表。

bxCAN全称是Basic Extended CAN。它支持CAN 2.0A和2.0B,有3个发送邮箱和2个接收FIFO(每个FIFO有3个邮箱)。

bxCAN的优势:

  • 无需额外芯片,节省PCB面积和成本
  • 通过寄存器直接配置,开发简单
  • 支持自动重发、自动离线恢复
  • 配合DMA使用,CPU负载极低

我记得第一次用STM32F103做CAN项目时,觉得「集成控制器肯定比独立的好」。结果发现,bxCAN的接收FIFO只有3个邮箱,如果总线负载高,很容易丢帧。后来我加了软件环形缓冲区才解决。

为什么会这样?因为bxCAN的硬件接收深度有限。SJA1000有64字节FIFO,而bxCAN只有3个邮箱。所以,如果你的系统有大量突发数据,建议用独立控制器,或者用STM32的高端系列(比如F4、F7,它们的CAN控制器更强)。

小技巧:用bxCAN时,建议开启硬件过滤。你可以配置多个过滤组,只接收需要的ID。这样能大幅降低CPU中断频率。我一般会配2-3个过滤组,一个收控制帧,一个收数据帧,一个收错误帧。

选型建议:

  • 普通工业控制、车载诊断:STM32 bxCAN完全够用
  • 高负载、多节点、实时性苛刻:考虑独立控制器或双CAN控制器

3.3 收发器:TJA1050 vs SN65HVD230

收发器是CAN控制器和物理总线之间的桥梁。它负责把控制器的逻辑电平转换成差分信号。

市面上最常见的两款是:TJA1050(NXP)和SN65HVD230(TI)。

参数 TJA1050 SN65HVD230
供电电压 5V 3.3V
速率 最高1Mbps 最高1Mbps
待机模式 支持(通过RS引脚) 支持(通过S引脚)
共模范围 -2V ~ +7V -2V ~ +7V
热关断保护
典型应用 车载、工业 低功耗、便携设备

选型时,我一般遵循这个原则:

  • MCU是5V系统:用TJA1050。它和5V控制器直接连接,不需要电平转换。
  • MCU是3.3V系统:用SN65HVD230。它的逻辑电平是3.3V,和STM32等MCU完美匹配。

曾经踩过的坑:有一次我把TJA1050接到了3.3V的STM32上,结果逻辑电平不匹配,CAN一直发不出数据。后来加了电平转换芯片才解决。所以,收发器的供电电压一定要和MCU的I/O电平匹配。

另外,TJA1050的待机模式是通过RS引脚控制的。拉低RS引脚,收发器进入待机,功耗极低。SN65HVD230的S引脚功能类似。如果你做的是电池供电设备,这个功能很有用。

3.4 选型总结与实战建议

好了,咱们总结一下:

选型决策树:

  1. MCU有没有CAN控制器?
    → 有:用集成控制器(如STM32 bxCAN)
    → 没有:用独立控制器(如SJA1000)
  2. MCU供电电压是多少?
    → 5V:收发器选TJA1050
    → 3.3V:收发器选SN65HVD230
  3. 总线负载高不高?
    → 高:考虑独立控制器或双CAN方案
    → 低:集成控制器足够

最后,给你一个硬件连接的小建议:

  • CAN控制器和收发器之间,走线尽量短,不要超过5cm
  • 收发器的CANH和CANL引脚,各加一个5pF的小电容到地,能抑制高频噪声
  • 终端电阻120Ω一定要加,而且尽量靠近总线两端

嗯,选型这块就讲这么多。下一章咱们聊聊CAN总线的终端电阻和拓扑结构,那也是个容易出问题的地方。