第三章: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 选型要点

选收发器,我一般看这几点:

  1. 供电电压:5V还是3.3V?和你的MCU匹配。
  2. 速率:门控系统一般125kbps或250kbps,TJA1050完全够用。
  3. 功耗:如果节点需要电池供电,选TJA1040这类低功耗的。
  4. 保护等级:总线引脚对电源/地短路保护,这个必须有。
  5. 工作温度:工业级(-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网络的唤醒与休眠机制,那才是门控系统的精髓。