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,布线也简单。
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,它们支持待机模式,电流能降到微安级。
4.3 外围电路设计:关键元件与布局
芯片选好了,外围电路设计才是决定成败的关键。我见过太多因为电路设计不当导致的丢包、信号反射、甚至芯片烧毁的案例。
4.3.1 终端电阻
CAN总线两端必须各接一个120Ω的终端电阻。这个电阻的作用是匹配总线阻抗,防止信号反射。为什么是120Ω?因为CAN总线的特性阻抗大约是120Ω。如果你不接,或者只接一个,信号反射会导致波形畸变,丢包率直线上升。
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控制器与收发器选型流程
下面这张图总结了选型与电路设计的核心逻辑。你可以把它当作一个检查清单。
4.5 避坑指南:我踩过的几个雷
做CAN设计这么多年,有些坑是反复出现的。我挑几个典型的说说。
- 终端电阻位置不对:有一次我把终端电阻放在了节点内部,而不是总线末端。结果总线上的信号反射严重,丢包率超过10%。后来改成在总线两端各接一个120Ω,问题立刻解决。
- 收发器供电电压搞错:TJA1050必须用5V供电,但它的逻辑电平输入阈值是5V的TTL。如果你用3.3V的MCU直接驱动,可能无法可靠触发。我建议用TJA1051(支持3.3V逻辑)或者加电平转换。
- 共模扼流圈选型不当:共模扼流圈的额定电流要大于总线上的最大电流。如果选小了,扼流圈会饱和,失去共模抑制效果。我一般选额定电流100mA以上的。
- ESD保护管寄生电容太大:有些TVS管的寄生电容高达几百pF,会严重衰减CAN信号的高频分量。我建议用低电容TVS管,比如PESD1CAN,寄生电容只有几pF。
4.6 总结:选型与设计的核心原则
说了这么多,其实核心就几条:
- 控制器选型看接口:并行总线用SJA1000,SPI接口用MCP2515。
- 收发器选型看电压和功耗:5V系统用TJA1050,3.3V系统用TJA1051或SN65HVD230,低功耗用TJA1040。
- 外围电路不能省:终端电阻、共模扼流圈、ESD保护,一个都不能少。
- 布局布线要讲究:收发器靠近接口,滤波电容靠近芯片,差分线等长走线。
嗯,选型这块就聊到这儿。记住,芯片选对了只是开始,外围电路设计才是真正考验功力的地方。下次调试时如果遇到丢包,先检查一下终端电阻和共模扼流圈——八成问题出在这儿。