第三章:CAN控制器与收发器——SJA1000、MCP2515、TJA1050等常用芯片介绍与选型要点
各位同学,咱们今天聊聊CAN通信的核心器件——控制器和收发器。
做门控系统,你肯定绕不开这几个芯片。我这些年经手过的项目,从电梯门控到停车场道闸,十有八九用的都是它们。今天我把自己的选型心得和踩过的坑,一股脑倒给你们。
3.1 CAN控制器:SJA1000与MCP2515
先说说控制器。它的任务是把你要发的数据,打包成CAN协议规定的帧格式。说白了,就是给数据穿上“CAN格式的外衣”。
3.1.1 SJA1000——老当益壮
SJA1000是NXP(原飞利浦)的经典芯片。我入行那会儿,它几乎是唯一的选择。
- 接口方式:并行接口。你得给它配一堆IO口,还要处理地址锁存、读写时序。
- 工作模式:支持BasicCAN和PeliCAN两种模式。PeliCAN是扩展帧,现在基本都用这个。
- 缓存深度:发送缓冲器只有1个,接收缓冲器有64字节的FIFO。
我的经验:SJA1000的并行接口,在8位单片机时代是优势。但现在大家用STM32这类32位MCU,反而觉得它占引脚太多。我有个项目,为了省IO口,硬是用GPIO模拟了并行时序,调试了整整两天。嗯,那滋味不好受。
3.1.2 MCP2515——后起之秀
MCP2515是Microchip的产品。它最大的特点就是——SPI接口。
- 接口方式:SPI串行接口。只需要4根线(CS、SCK、SI、SO),省引脚。
- 缓存深度:发送缓冲器有3个,接收缓冲器有2个,还带一个额外的接收缓冲器。
- 工作模式:支持CAN 2.0B,标准帧和扩展帧都行。
避坑指南:我曾经在一个项目中,MCP2515的SPI时钟频率设得太高,导致数据错位。后来发现,MCP2515的SPI最高只能到10MHz,而且线长超过10cm就得降速。记住,SPI不是越快越好,稳定才是王道。
3.1.3 选型对比
| 对比项 | SJA1000 | MCP2515 |
|---|---|---|
| 接口 | 并行(8位) | SPI(串行) |
| 引脚数 | 28脚(占用MCU引脚多) | 18脚(占用MCU引脚少) |
| 发送缓冲器 | 1个 | 3个 |
| 接收缓冲器 | 64字节FIFO | 2个+1个额外 |
| 典型应用 | 工业控制、车载 | 门禁、楼宇、消费类 |
| 价格 | 稍贵 | 便宜 |
我个人习惯:如果MCU引脚富裕,用SJA1000更稳定。如果做小体积、低成本的门控节点,MCP2515是首选。
3.2 CAN收发器:TJA1050与它的兄弟们
收发器是连接控制器和物理总线的桥梁。它负责把控制器的逻辑电平,转换成CAN总线的差分信号。
3.2.1 TJA1050——高速稳定
TJA1050是NXP的经典收发器。它替代了早期的PCA82C250。
- 速率:最高1Mbps,门控系统绰绰有余。
- 工作模式:高速模式、静音模式。静音模式下只收不发,适合诊断。
- 保护特性:总线引脚对地短路保护、热关断保护。
注意:TJA1050的静音模式是通过RS引脚控制的。我见过有人把RS引脚悬空,结果芯片一直处于静音模式,发不出数据。记住,RS引脚不能悬空,要么接地(高速模式),要么接高电平(静音模式)。
3.2.2 其他常用收发器
除了TJA1050,还有几个也常见:
- TJA1040:低功耗版本,待机电流只有几微安。适合需要休眠唤醒的门控系统。
- TJA1051:改进版,电磁兼容性更好。我建议新设计优先考虑它。
- SN65HVD230:TI的产品,3.3V供电。如果你用3.3V的MCU,这个很合适。
3.2.3 选型要点
选收发器,我一般看这几点:
- 供电电压:5V还是3.3V?和你的MCU匹配。
- 速率:门控系统一般125kbps或250kbps,TJA1050完全够用。
- 功耗:如果节点需要电池供电,选TJA1040这类低功耗的。
- 保护等级:总线引脚对电源/地短路保护,这个必须有。
- 工作温度:工业级(-40°C~85°C)是基本要求。
我的建议:如果你做门控系统,我推荐MCP2515 + TJA1050的组合。SPI接口省引脚,TJA1050稳定可靠。这个组合我用了不下十个项目,没出过大问题。
3.3 典型电路设计
光说不练假把式。我给你们一个典型的连接电路:
// MCP2515 + TJA1050 典型连接
// MCU (STM32) -> MCP2515 -> TJA1050 -> CAN总线
// MCP2515引脚连接
// CS -> PA4 (SPI片选)
// SCK -> PA5 (SPI时钟)
// SI -> PA7 (SPI主出从入)
// SO -> PA6 (SPI主入从出)
// INT -> PB0 (中断引脚)
// TJA1050引脚连接
// TXD -> MCP2515的TXCAN
// RXD -> MCP2515的RXCAN
// RS -> GND (高速模式)
// CANH -> 总线CANH
// CANL -> 总线CANL
小技巧:CANH和CANL之间要接一个120欧姆的终端电阻。这个电阻不能省,否则总线反射会导致通信错误。我见过有人用100欧姆代替,结果距离一长就丢包。记住,120欧姆是标准,别乱改。
3.4 避坑总结
最后,我把这些年踩过的坑总结一下:
- 电源去耦:每个芯片的VCC引脚旁边,必须放一个0.1uF的陶瓷电容。我有个项目,因为省了这个电容,导致总线偶尔出现毛刺,查了三天才找到原因。
- 地线处理:控制器的地和收发器的地要共地。别用细线,至少1mm宽。
- 终端电阻:只在总线两端各放一个120欧姆。中间节点不要加。
- 共模扼流圈:如果环境干扰大,在CANH和CANL上串一个共模扼流圈。我做过一个电梯门控项目,加了扼流圈后,误码率从1%降到了0.01%。
好了,这一章就到这里。下一章咱们聊聊CAN网络的唤醒与休眠机制,那才是门控系统的精髓。