3、CAN网络节点设计:节点组成与终端电阻匹配
好,咱们进入第三章。前面聊了网络拓扑怎么选、怎么搭骨架,这一章我们聚焦到最基础的单位——单个CAN节点。
一个CAN节点能不能稳定工作,说白了就两件事:内部电路对不对,外部电阻配没配好。我见过太多项目,协议栈写得飞起,结果节点丢帧、总线报错,查到最后发现是收发器供电脚少了个滤波电容,或者终端电阻焊错了位置。
咱们从里到外,把节点拆开看。
3.1 节点核心三件套:MCU + CAN控制器 + 收发器
一个标准的CAN节点,硬件上离不开这三个东西:
| 组件 | 角色 | 典型型号(举例) |
|---|---|---|
| MCU | 大脑,跑协议栈和应用逻辑 | STM32F4、S32K144、TC2xx |
| CAN控制器 | 负责CAN协议核心:帧封装、仲裁、错误检测 | MCU内部集成(bxCAN、FlexCAN)或独立SJA1000 |
| CAN收发器 | 把控制器逻辑电平转成差分信号,驱动总线 | TJA1040、TJA1050、SN65HVD230 |
关键认知:现在绝大多数MCU都把CAN控制器集成在片内了。你选型时只需要确认MCU内部有几个CAN控制器(CAN core),然后外面配一个收发器就行。独立控制器芯片(比如SJA1000)现在只在一些老旧平台或特殊隔离场景下才会用。
我个人习惯,画原理图时会把这三部分用不同颜色框出来。MCU一个框,CAN控制器一个框(虽然是片内的,但逻辑上要分开),收发器一个框。这样调试时一眼就能定位问题在哪一段。
3.2 收发器选型与供电设计
收发器是节点和总线之间的“物理接口”。选错了,后面怎么调都没用。
选型时重点看三个参数:
- 速率:普通CAN最高1Mbps,CAN FD能到5Mbps以上。你的收发器必须支持目标速率。
- 工作电压:5V还是3.3V?要和MCU的IO电平匹配。现在很多收发器支持3.3V供电,但总线侧仍然是5V差分,注意看数据手册。
- 待机模式与唤醒:车载节点经常需要低功耗休眠,然后通过总线唤醒。选带待机模式(Standby)和唤醒功能的收发器,比如TJA1040。
一个小经验:收发器的VCC引脚旁边,一定要放一个100nF的陶瓷电容,尽量靠近引脚。我遇到过一例现场总线偶发错误,示波器一抓,收发器供电上有高频毛刺。加了这个电容后,问题再没出现过。
3.3 终端电阻匹配——为什么是120Ω?
终端电阻是CAN总线里最容易出错的地方,也是排查故障时第一个该检查的点。
为什么需要终端电阻?
- 吸收信号反射,防止波形畸变。
- 保证总线隐性电平(CAN_H和CAN_L之间压差为0)。
- 提供显性电平所需的回路电流。
标准值为什么是120Ω?
因为CAN总线使用的双绞线特性阻抗大约是120Ω。终端电阻等于特性阻抗时,反射最小。这不是拍脑袋定的,是传输线理论算出来的。
注意:终端电阻不是每个节点都加!标准CAN总线只在最远两端各加一个120Ω电阻。中间节点不加。如果每个节点都加,等效并联电阻会远小于60Ω,总线驱动能力不够,直接瘫痪。
我曾经接手过一个售后问题:一台工程车辆CAN总线间歇性通信失败。我到现场一量,CAN_H和CAN_L之间的电阻只有18Ω。拆开所有节点一查,有6个节点都焊了120Ω电阻。去掉4个后,总线恢复正常。嗯,这就是典型的“好心办坏事”。
3.4 节点内部连接与PCB布局要点
原理图搞定后,PCB布局同样关键。我总结了几条硬规矩:
- 收发器尽量靠近总线连接器(DB9或端子)。CAN_H/CAN_L走线越短越好,不要超过10cm。
- MCU到收发器的TXD/RXD线要短,且远离高频开关节点。比如远离DC-DC电感和MOSFET驱动。
- 终端电阻放在收发器旁边,而不是连接器旁边。这样电阻到收发器引脚的寄生电感最小。
- 收发器下方铺地,不要走其他信号线。特别是CAN_H/CAN_L差分对下方要保持地平面完整。
一句话总结:CAN节点设计,硬件上就是“MCU选对、收发器配好、电阻放对位置”。这三件事做扎实了,软件调试才能顺利进行。
3.5 本章知识结构图
下面这张图把CAN节点的内部组成和关键连接画清楚了,你可以对照着看:
3.6 常见错误与避坑指南
- 终端电阻焊错位置:有人把电阻焊在节点内部PCB上,但节点不在总线末端。结果总线等效电阻偏小,通信距离缩短。
- 收发器供电电容缺失:导致总线波形上有毛刺,偶发错误帧。加100nF陶瓷电容即可解决。
- MCU和收发器电平不匹配:3.3V MCU配5V收发器,中间没加电平转换,导致TXD/RXD信号异常。要么选3.3V收发器,要么加电平转换芯片。
- CAN_H和CAN_L接反:这个低级错误我见过不止一次。接反后节点无法正常通信,但不会损坏设备。用万用表量一下CAN_H对地电压(正常约2.5V)就能判断。
特别提醒:如果你在设计一个多节点系统,建议在样机阶段就把每个节点的终端电阻做成可配置的(比如用跳线帽或0Ω电阻)。这样调试拓扑时,可以灵活决定哪个节点做末端,不用反复焊接。