4. CAN控制器与收发器选型:主流芯片对比与外围电路设计

做CAN总线设计,选型是第一道坎。芯片选对了,后面能省一半的调试时间。我这些年经手过不少项目,从工业控制到车载设备,CAN控制器和收发器的搭配组合试了个遍。今天咱们就聊聊主流芯片怎么选、外围电路怎么搭。

4.1 CAN控制器选型:SJA1000 vs MCP2515

控制器负责协议层的处理,说白了就是把CPU要发的数据打包成CAN帧,或者把收到的帧解析出来。市面上用得最多的就是这两款:SJA1000和MCP2515。

对比项 SJA1000 MCP2515
接口方式 并行接口(8位/16位) SPI串行接口
封装 DIP28 / PLCC44 SOP-18 / DIP-18
工作模式 BasicCAN / PeliCAN 标准CAN 2.0B
接收缓冲 64字节FIFO 2个接收缓冲 + 3个发送缓冲
典型主控 51单片机、ARM7 STM32、Arduino、树莓派
成本 较高(约$3-5) 较低(约$1-2)

我个人习惯:如果主控是51或者ARM7这类有并行总线的,我会选SJA1000。它的PeliCAN模式支持扩展帧,而且FIFO深度够用。但如果你用的是STM32或者树莓派,MCP2515的SPI接口就方便多了——省IO,布线也简单。

经验之谈: 我在一个车载仪表盘项目里用过MCP2515,当时主控是STM32F103。SPI时钟配到10MHz,实测丢包率几乎为零。但要注意,SPI线不能太长,超过10cm就容易受干扰。后来我改成4层板,把SPI线走在内层,问题就解决了。

4.2 CAN收发器选型:TJA1050与它的兄弟们

收发器是控制器和物理总线之间的桥梁。它把控制器的逻辑电平转换成CAN总线的差分信号。TJA1050是NXP的经典款,但市面上还有TJA1040、TJA1051、SN65HVD230等。

型号 工作电压 速率 待机模式 典型应用
TJA1050 4.75~5.25V 最高1Mbps 无 工业控制、车载
TJA1040 4.75~5.25V 最高1Mbps 有(低功耗) 汽车电子、电池供电
TJA1051 3.3~5V 最高5Mbps 有 高速CAN FD
SN65HVD230 3.0~3.6V 最高1Mbps 有 3.3V系统、便携设备

这里有个坑:TJA1050没有待机模式,如果你做的是低功耗设备,比如电池供电的传感器节点,它会在空闲时一直耗电。我建议用TJA1040或者TJA1051,它们支持待机模式,电流能降到微安级。

注意: 我曾经在一个项目中用了TJA1050配3.3V的MCU,结果发现TJA1050的VCC必须接5V,而它的逻辑电平输入阈值是5V的TTL。MCU的3.3V输出可能无法可靠驱动它。后来我加了电平转换电路才搞定。所以选型时一定要看收发器的逻辑电平兼容性。

4.3 外围电路设计:关键元件与布局

芯片选好了,外围电路设计才是决定成败的关键。我见过太多因为电路设计不当导致的丢包、信号反射、甚至芯片烧毁的案例。

4.3.1 终端电阻

CAN总线两端必须各接一个120Ω的终端电阻。这个电阻的作用是匹配总线阻抗,防止信号反射。为什么是120Ω?因为CAN总线的特性阻抗大约是120Ω。如果你不接,或者只接一个,信号反射会导致波形畸变,丢包率直线上升。

实战建议: 终端电阻要放在总线的最远端。如果节点数量多,可以用可插拔的终端电阻模块,方便调试。我习惯用120Ω/0.25W的贴片电阻,精度1%以上。

4.3.2 共模扼流圈与滤波电容

CAN总线是差分信号,抗共模干扰能力很强。但实际环境中,电机、变频器、开关电源都会产生强烈的共模噪声。这时候就需要共模扼流圈。

  • 共模扼流圈:选型时注意额定电流和共模阻抗。一般用100μH~1mH,额定电流100mA以上。
  • 滤波电容:在收发器的VCC和GND之间加一个0.1μF的陶瓷电容,靠近芯片引脚放置。如果电源纹波大,再加一个10μF的电解电容。
  • ESD保护:CAN总线是外露接口,容易受到静电放电和浪涌冲击。我建议在CANH和CANL对地各加一个TVS管,比如PESD1CAN或NUP2105L。

4.3.3 典型外围电路原理图

下面是一个基于MCP2515 + TJA1050的典型电路。注意看各个元件的连接方式。

// MCP2515 + TJA1050 典型电路连接
// MCU (STM32) 通过SPI连接MCP2515
// MCP2515的TXD/RXD连接TJA1050

// MCP2515引脚连接:
// CS   -> PA4 (SPI片选)
// SCK  -> PA5 (SPI时钟)
// SI   -> PA7 (SPI MOSI)
// SO   -> PA6 (SPI MISO)
// INT  -> PB0 (中断引脚)

// TJA1050引脚连接:
// TXD  -> MCP2515 TXD (引脚3)
// RXD  -> MCP2515 RXD (引脚4)
// VCC  -> 5V (注意:不是3.3V!)
// GND  -> GND
// CANH -> 总线CANH (经共模扼流圈)
// CANL -> 总线CANL (经共模扼流圈)
// RS   -> GND (高速模式)

// 终端电阻:总线两端各一个120Ω
// ESD保护:CANH和CANL对地各一个TVS管

4.4 知识结构图:CAN控制器与收发器选型流程

下面这张图总结了选型与电路设计的核心逻辑。你可以把它当作一个检查清单。

CAN控制器与收发器选型流程 CAN控制器与收发器选型与电路设计流程 确定系统需求 控制器选型:SJA1000 vs MCP2515 收发器选型:TJA1050/TJA1040等 外围电路设计:终端电阻/共模扼流圈/ESD保护 测试验证与调试 关键检查点: 1. 终端电阻是否在总线两端? 2. 收发器VCC电压是否匹配? 3. ESD保护是否靠近接口? 4. 共模扼流圈是否选型正确?

4.5 避坑指南:我踩过的几个雷

做CAN设计这么多年,有些坑是反复出现的。我挑几个典型的说说。

  • 终端电阻位置不对:有一次我把终端电阻放在了节点内部,而不是总线末端。结果总线上的信号反射严重,丢包率超过10%。后来改成在总线两端各接一个120Ω,问题立刻解决。
  • 收发器供电电压搞错:TJA1050必须用5V供电,但它的逻辑电平输入阈值是5V的TTL。如果你用3.3V的MCU直接驱动,可能无法可靠触发。我建议用TJA1051(支持3.3V逻辑)或者加电平转换。
  • 共模扼流圈选型不当:共模扼流圈的额定电流要大于总线上的最大电流。如果选小了,扼流圈会饱和,失去共模抑制效果。我一般选额定电流100mA以上的。
  • ESD保护管寄生电容太大:有些TVS管的寄生电容高达几百pF,会严重衰减CAN信号的高频分量。我建议用低电容TVS管,比如PESD1CAN,寄生电容只有几pF。
一个小技巧: 调试时可以用示波器看CANH和CANL的差分波形。正常波形应该是方波,幅值约2V(CANH=3.5V,CANL=1.5V)。如果波形有振铃或台阶,说明终端电阻或共模扼流圈有问题。

4.6 总结:选型与设计的核心原则

说了这么多,其实核心就几条:

  1. 控制器选型看接口:并行总线用SJA1000,SPI接口用MCP2515。
  2. 收发器选型看电压和功耗:5V系统用TJA1050,3.3V系统用TJA1051或SN65HVD230,低功耗用TJA1040。
  3. 外围电路不能省:终端电阻、共模扼流圈、ESD保护,一个都不能少。
  4. 布局布线要讲究:收发器靠近接口,滤波电容靠近芯片,差分线等长走线。

嗯,选型这块就聊到这儿。记住,芯片选对了只是开始,外围电路设计才是真正考验功力的地方。下次调试时如果遇到丢包,先检查一下终端电阻和共模扼流圈——八成问题出在这儿。