4、CAN控制器与收发器:SJA1000、MCP2515、TJA1050、SN65HVD230选型与对比
做CAN通信,说白了就两样东西绕不开:控制器和收发器。
控制器负责协议处理,收发器负责电平转换。我见过不少新手,一上来就纠结选哪个芯片。其实没那么玄乎,搞清楚各自定位就好。
今天咱们就聊聊四款经典芯片:SJA1000、MCP2515、TJA1050、SN65HVD230。前两个是控制器,后两个是收发器。
4.1 控制器选型:SJA1000 vs MCP2515
先说说控制器。我个人习惯,选控制器主要看三点:接口方式、封装大小、供货稳定性。
SJA1000——老牌劲旅
SJA1000是NXP(原Philips)的经典产品。我入行那会儿,几乎所有的CAN节点都用它。它支持CAN 2.0B,兼容BasicCAN和PeliCAN两种模式。
它的接口是并行总线,说白了就是地址线、数据线一大堆。接MCU的时候,像接SRAM一样。好处是速度快,坏处是占引脚。
核心参数:
- 工作电压:5V
- 接口:并行(Intel/Motorola模式)
- 支持CAN 2.0B(29位扩展ID)
- 64字节接收FIFO
- 支持单次/自接收/监听模式
我在项目中遇到过一个问题:SJA1000的复位时序要求很严格。有一次板子焊完,CAN死活不通。查了半天,发现是MCU的复位信号比SJA1000慢了一点点。嗯,这里要注意,复位引脚必须拉低至少5个时钟周期。
MCP2515——SPI接口的灵活选手
MCP2515是Microchip的产品。它最大的特点是SPI接口。你想想看,只要MCU有SPI,就能扩展出一路CAN。这对引脚紧张的MCU来说,简直是救星。
我建议,如果你的MCU引脚不多,或者想快速验证方案,直接上MCP2515。它内部集成了三个发送缓冲器、两个接收缓冲器,还有6个滤波器。
核心参数:
- 工作电压:2.7V~5.5V
- 接口:SPI(最高10MHz)
- 支持CAN 2.0B
- 3个发送缓冲器,2个接收缓冲器
- 6个接收滤波器,2个掩码
不过MCP2515有个小坑——SPI通信速率不能太高。我曾经为了追求速度,把SPI时钟调到10MHz,结果数据经常错位。后来降到5MHz,稳如老狗。所以别贪快,5MHz以内最保险。
怎么选?
| 对比项 | SJA1000 | MCP2515 |
|---|---|---|
| 接口 | 并行 | SPI |
| 引脚数 | 28脚(占用MCU引脚多) | 18脚(占用MCU引脚少) |
| 速度 | 快(直接内存映射) | 受限于SPI速率 |
| 灵活性 | 一般 | 高(可扩展多路) |
| 供货 | 成熟,但逐渐停产 | 充足,仍在量产 |
我个人习惯:新项目首选MCP2515。除非你MCU自带CAN控制器,或者对实时性要求极高,才考虑SJA1000。
4.2 收发器选型:TJA1050 vs SN65HVD230
收发器的作用,就是把控制器的逻辑电平,转换成CAN总线的差分信号。说白了,它就是个电平转换器加驱动器。
TJA1050——5V系统的标配
TJA1050是NXP的经典收发器。它替代了早期的TJA1040和PCA82C250。我最早用82C250,那个芯片发热厉害。后来换成TJA1050,功耗低了不少。
TJA1050支持5V供电,最高速率1Mbps。它内部有热保护、短路保护,抗干扰能力不错。
小技巧: TJA1050的RS引脚(斜率控制)接地时,进入高速模式。如果总线长度超过100米,建议在RS引脚接一个10kΩ电阻到地,降低边沿斜率,减少反射。
我曾经在一条200米长的CAN总线上调试,信号反射得一塌糊涂。后来把RS引脚接了电阻,再配合终端电阻120Ω,问题就解决了。
SN65HVD230——3.3V系统的首选
SN65HVD230是TI的产品。它最大的特点是3.3V供电。现在很多MCU都是3.3V的,如果用TJA1050,还得加电平转换。用SN65HVD230就省事了。
它支持待机模式,功耗极低。适合电池供电的设备,比如车载诊断设备、便携式工具。
核心参数:
- 工作电压:3.0V~3.6V
- 速率:最高1Mbps
- 待机电流:<1μA
- 支持CAN 2.0B
- 热关断保护
不过要注意,SN65HVD230的共模电压范围是-7V~+12V。如果总线环境特别恶劣,比如有高压干扰,建议加隔离。
怎么选?
| 对比项 | TJA1050 | SN65HVD230 |
|---|---|---|
| 供电电压 | 5V | 3.3V |
| 待机模式 | 支持(通过RS引脚) | 支持(通过S引脚) |
| 功耗 | 中等 | 低 |
| 抗干扰 | 强 | 中等 |
| 适用场景 | 工业、车载5V系统 | 3.3V系统、低功耗设备 |
我建议:5V系统用TJA1050,3.3V系统用SN65HVD230。别混用,否则电平不匹配,通信会出问题。
4.3 实战搭配方案
说了这么多,直接给几个我常用的搭配方案:
方案一:5V MCU + SJA1000 + TJA1050
适合:工业控制、车载ECU、对实时性要求高的场景。
注意:MCU引脚要够用,SJA1000占用至少8个IO。
方案二:3.3V MCU + MCP2515 + SN65HVD230
适合:便携设备、电池供电、引脚紧张的场景。
注意:SPI走线要短,时钟不要超过5MHz。
方案三:3.3V MCU + MCP2515 + TJA1050(加电平转换)
适合:手头只有TJA1050,但MCU是3.3V的。
注意:MCP2515的TXD/RXD是5V电平,需要加电平转换芯片(如74LVC4245)。
4.4 避坑指南
最后,分享几个我踩过的坑:
坑1:终端电阻忘接
我曾经调试一块板子,CAN信号波形乱七八糟。查了半天,发现终端电阻没焊。CAN总线两端必须各接一个120Ω电阻,否则信号反射严重。
坑2:收发器供电不足
有一次用SN65HVD230,总线长度不到50米,但通信老是丢帧。后来用示波器一看,收发器的VCC只有2.8V。原来是电源走线太细,压降太大。换粗线后问题解决。
坑3:MCP2515的晶振选错
MCP2515需要外部晶振。我一开始用了16MHz的,结果CAN速率怎么算都不对。后来才发现,MCP2515内部有分频器,晶振频率必须和CAN速率匹配。建议用8MHz晶振,兼容性最好。
好了,关于CAN控制器和收发器的选型,就聊这么多。记住一句话:选型不是越贵越好,合适才是王道。下一章咱们聊聊CAN总线的终端电阻和拓扑结构,到时候见。