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 选型总结与实战建议
好了,咱们总结一下:
选型决策树:
- MCU有没有CAN控制器?
→ 有:用集成控制器(如STM32 bxCAN)
→ 没有:用独立控制器(如SJA1000) - MCU供电电压是多少?
→ 5V:收发器选TJA1050
→ 3.3V:收发器选SN65HVD230 - 总线负载高不高?
→ 高:考虑独立控制器或双CAN方案
→ 低:集成控制器足够
最后,给你一个硬件连接的小建议:
- CAN控制器和收发器之间,走线尽量短,不要超过5cm
- 收发器的CANH和CANL引脚,各加一个5pF的小电容到地,能抑制高频噪声
- 终端电阻120Ω一定要加,而且尽量靠近总线两端
嗯,选型这块就讲这么多。下一章咱们聊聊CAN总线的终端电阻和拓扑结构,那也是个容易出问题的地方。