ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CAN总线终端电阻为何是120Ω?双绞线、反射与振铃深度解析

CAN总线终端电阻为何是120Ω?双绞线、反射与振铃深度解析 做车载电子的人大概率都经历过这样的场景一台车或者一套台架测试系统CAN 网络时好时坏网关里报出一堆帧错误总线错误率居高不下。查来查去协议软件、ID 配置、收发器芯片都是好的最后拿示波器往总线上一搭波形边沿的振铃比停车场减速带还夸张。再往两端接头处一检查终端电阻要么没接要么接错了位置。这个事我身边至少碰到过十几次。标题里这个问题的热度一直很高但多数资料只让你记结论双绞线加 120Ω 终端电阻。真正要回答“为什么是双绞线为什么是 120Ω为什么不能拿普通线替代”很多人就卡壳了。这篇文章我打算从故障现象、电磁场原理、传输线理论一直讲到实车测量把这条技术链路完整捋一遍。不管你是做嵌入式软件、整车线束设计还是刚接触 CAN 协议想搞懂物理层都能从里面拿到可以直接用的判断依据。1. 一次“波形振铃”故障引出的问题1.1 现象空调面板乱跳BCM 疯狂报错先讲一个去年处理过的实车案例。车型是一台试验阶段的商用车车主反馈空调面板偶发性乱码仪表盘上的故障灯也时不时亮一下。诊断仪连上去之后BCM车身控制器里全是总线关闭、ACK 错误这类记录看起来就像某个节点在用错误的方式干扰网络。当时第一反应是查软件波特率配置、滤波器掩码、报文 ID 冲突逐项确认都没问题。又把所有节点逐个断开用“二分法”缩小范围结果最后只剩一个节点的时候错误依然存在。到这里基本可以断定问题不在协议层而在物理层。1.2 波形上升沿后的振铃以及采样点的误判把示波器探头夹在 CAN_H 和 CAN_L 之间采集一发显性帧的波形。正常来说CAN 总线隐性电平差分为 0V 左右显性电平差分约 2V波形应该是一个干净利落的方波过渡。可实际看到的波形上升沿冲到 2.8V然后下来的时候过冲又掉到负的 0.6V来回震荡了差不多 700ns 才勉强稳定下来。这个振铃直接影响了接收节点的采样判断。CAN 每个位都有一个采样点通常在位的 60%~70% 时间位置。如果振铃的幅度超过接收端的差分阈值比如把本来应该是隐性的位读成了显性那接收节点就会认为收到了错误的电平进而报填充错误或校验错误。这也就是为什么总线错误率居高不下的原因。1.3 根因缺失终端电阻导致的边界反射后来把靠近总线末端的两个接插件拆下来一量发现一个终端电阻老化开路了。也就是说这 2 米多长的总线只剩一端有 120Ω 电阻另一端处于开路状态。信号跑到开路端之后没有阻抗把它吸收掉能量原路反射回来和后续信号叠加形成振铃。把电阻补上之后同样的位序列波形上升沿过冲控制在 0.3V 以内错误帧立刻消失。整个过程让我意识到一个问题很多工程师不是不会接电阻而是不理解这个电阻存在的位置、阻值和线缆之间的内在关系。只有把传输线的基本逻辑吃透遇到这种问题才不是靠猜。2. 双绞线的本质差分信号、回路面积与电磁干扰的博弈2.1 差分信号CAN 为什么能抗干扰要理解双绞线先得说清楚 CAN 物理层用的差分信号。CAN_H 和 CAN_L 不是两条独立传逻辑电平的信号线而是一对配对使用的差分线。显性位的时候收发器把 CAN_H 拉到大约 3.5V把 CAN_L 拉到大约 1.5V两根线之间的差分电压约为 2V。隐性位的时候两根线都回到 2.5V 附近差分电压约为 0V。差分接收器判断的是“两根线之间的差值”而不是某一根线对地的绝对电压。这意味着假如外部电磁干扰在两根线上同时感应出 1V 的共模电压CAN_H 变成 4.5VCAN_L 变成 2.5V差值仍然是 2V接收端照样能正确读出显性位。这种设计天生就具备共模抑制能力比单端信号线强得多。但这里有个前提共模干扰要在两根线上“同时产生相同的变化”。如果两根线的物理位置不对称一根离干扰源近、一根远感应到的噪声幅度就不一样那就不可能被差分相减完全抵消。双绞线解决了这个对称性问题。2.2 双绞线的绞合到底改变了什么双绞线最直观的好处是让两根线在任何一段都保持着几乎相等的距离和相对位置。每根线在空间里交替占据“靠近干扰源”和“远离干扰源”的位置单位长度上感应到的噪声经过平均之后两端电压趋于一致。这相当于从物理结构上强行保证了共模干扰的均衡性。再从发射角度看。任何电流流过导线都会产生磁场CAN_H 和 CAN_L 里的信号电流方向相反它们各自产生的磁场方向也相反。如果两根线是平行并排的那么在某些角度上两个磁场可能同向叠加产生不必要的电磁辐射。两根线绞合起来之后相邻绞环的电流方向相对于外部观察点来回反转磁场贡献互相抵消就像两个方向相反的微小磁偶极子叠在一起。所以双绞线不仅能抗干扰还能减少自身对外辐射。这一点在汽车上特别重要。车厢里不仅有 CAN 总线还有点火线圈的高压脉冲、电机的 PWM 驱动、雨刮电机和空调压缩机的瞬态电流任何一个都在向空间辐射噪声。如果 CAN 线是两根平行线哪怕差分接收器再能抗共模干扰实际装车后也难免出现偶发误码。2.3 节距、线径与分布电容对阻抗的隐性影响双绞线不是随便绞一下就行。绞合节距指的是两根线拧一圈所对应的长度节距越小单位长度上的绞环越多抑制低频磁场干扰的效果越好。但绞得太密也有代价会增加线对之间的分布电容还可能让线缆的制造一致性变差、成本上升。从信号完整性角度讲线径、绝缘层厚度、介电常数、绞合节距共同决定了线缆的特征阻抗。同样是双绞线有的做出来是 100Ω有的是 130Ω。CAN 标准推荐的线缆特征阻抗是以 120Ω 为设计目标生产厂商在线径和绝缘材料上都有对应的工艺窗口。这意味着你随手找一根网线里的双绞线去替代车用 CAN 线虽然它也是双绞线但特征阻抗可能是 100Ω加上终端电阻 120Ω 之后匹配度只有 80% 左右反射系数虽然不至于完全失控但已经进入不可忽略的范围。我自己在实际项目中见过不少人用普通屏蔽线替代 CAN 线做台架测试短距离低速运行没什么感觉一旦把波特率提到 500kbps 或者 1Mbps总线长度拉长到几十米随之而来的就是通信不稳定。线缆选型这一环在物理层设计里是最容易被忽略、却又最能决定成败的一环。3. 120Ω 终端电阻从传输线理论看阻抗匹配闭环3.1 特性阻抗不是直流电阻也不是万用表量出来的很多人第一次听到“特性阻抗”这个概念容易理解成“线的电阻”。这是个很常见的误区。用万用表量一段 1 米长的双绞线量出来的电阻可能连 0.1Ω 都不到那是直流电阻。特性阻抗描述的是当一个高频信号沿着这条传输线传播时线缆对信号呈现出的瞬态阻抗它由单位长度的分布电感和分布电容决定。简单说如果你给一根均匀的传输线持续不断地输入阶梯波信号在向前传播的过程中每到一个新的位置都需要先给这一段线路的分布电容充电、同时建立分布电感的磁场。这个“瞬态阻力”就是特性阻抗公式近似为 Z0 sqrt(L/C)。L 是单位长度电感C 是单位长度电容。只要线缆的几何尺寸和材料均匀特性阻抗就是一个固定值和线的长短没有关系。双绞线的特性阻抗通常在 100Ω 到 130Ω 之间具体值由线径、绝缘层介电常数、绞合节距共同决定。汽车 CAN 常用线缆按 ISO 11898-2 的推荐目标特征阻抗控制在 120Ω 附近。也就是说120Ω 不是从电路里算出来的而是线缆“本身”就有的一个物理属性。终端电阻的任务是让电路去“顺应”线缆的这个属性。3.2 反射系数一条边界上的能量分配法则当信号沿着一条特征阻抗为 Z0 的传输线到达末端的一个负载阻抗 ZL 时就会遇到边界。边界两侧阻抗不一致信号不可能完全平顺地全部进入负载必然有一部分能量被反射回来。反射的强度用反射系数描述Γ (ZL - Z0) / (ZL Z0)如果末端开路ZL 接近无穷大Γ 趋近于 1信号完全被反射回来如果末端短路ZL 为 0Γ 趋近于 -1信号完全反射但相位相反如果 ZL Z0Γ 等于 0没有反射。回到 CAN 总线的场景。信号在总线上从发送节点向两个方向传播到达总线末端时如果末端设备内部没有跨接电阻相当于开路那么显性位的上升沿就会被完全反射回去沿路叠加到原始波形上。反射波到达另一端后如果那里也没有匹配电阻就继续反射。这个来回振荡的过程就形成了你在示波器上看到的振铃。120Ω 终端电阻跨接在 CAN_H 和 CAN_L 之间等效地给每条传输线的末端提供了一个匹配负载。终端阻抗等于线缆特征阻抗时信号到达边界后“感觉”跟继续往前走没有区别能量被电阻吸收转成热量不会反弹。3.3 为什么汽车行业统一以 120Ω 为目标选定 120Ω 不是因为某个拍脑袋的决定。CAN 总线设计时线缆选型首先要满足车辆复杂电磁环境下的信噪比要求而双绞线在这种场景下能做到的典型特征阻抗恰好落在 100Ω 到 130Ω 这个区间。ISO 11898-2 把高速 CAN 收发器的物理层参数和线缆指标做了配套设计以 120Ω 为标称值收发器的输出阻抗和检测阈值都围绕这个值展开。为什么不用 50Ω50Ω 是同轴射频线缆体系里的常见值它要求的导体直径和介质结构完全不同在汽车线束里既不灵活也不经济。为什么不用 75Ω75Ω 对介质损耗和反射系数的优化方向偏向长距离视频传输和车载短距离多节点总线的需求不匹配。汽车 CAN 线缆在轻量化、抗弯折、耐温、成本这些约束下双绞线天然形成了 120Ω 附近的设计空间。还要注意一点终端电阻只匹配了驻波并不能弥补线缆本身特征阻抗与 120Ω 的偏差。假设你拿了一根特征阻抗 105Ω 的线配上 120Ω 终端反射系数就是 (120-105)/(120105) ≈ 6.7%虽然不大但换算到误码概率上足以在临界条件下造成偶发错误帧。所以真正的匹配是两头同时做线缆选到 120Ω终端电阻也接 120Ω形成完整闭环。3.4 特性阻抗如何计算和测量特性阻抗的近似公式 Z0 sqrt(L/C) 在工程中已经够用。具体到线缆L 和 C 可以通过 LCR 表或网络分析仪测出但对普通工程师来说最直接的验证办法不是计算而是实测眼图。在一条搭建好的 CAN 总线上用示波器观察差分波形重点关注上升沿和下降沿的过冲幅度。如果末端终端电阻匹配良好上升沿应该平稳地从一个电平过渡到另一个电平过冲控制在 0.3V 以内。如果看到明显的振铃说明末端反射没有被吸收干净。这时候可以试试改变终端电阻值比如从 120Ω 换成 60Ω 或 200Ω观察振铃是否变化。注意这只是一个诊断手段正常工作状态下不要偏离 120Ω因为收发器是按照 120Ω 终端设计的。4. 终端电阻的安装位置、数量与总线拓扑的配合4.1 为什么两个终端必须出现在物理端点很多初学者会有个疑问既然终端电阻是用来吸收反射的那我在总线中间放一个 120Ω 不就行了吗为什么要放两个问题在于信号在总线上的传播方向是双向的。发送节点发出的信号会同时向左右两端传播。如果只在中间放一个电阻那么总线两端的边界仍然是开路的信号到达端点后照样发生反射。反射波传回中间时虽然被中间这个电阻吸收了一部分但残余的那部分已经足够引起波形畸变。所以CAN 总线网络的两端必须各放一个 120Ω 电阻。这两个电阻并联之后从总线上任意一点往两端看过去等效直流电阻约为 60Ω。这也是很多诊断手册里写的“CAN_H 对 CAN_L 静态电阻约 60Ω”的由来。同一个道理如果只在总线一端放置一个 120Ω 电阻另一端开路那么开路的那个末端等于没有匹配反射问题依然存在。早期一些低速率应用可以靠芯片内部限流硬扛过去但到了 500kbps 以上就会逐渐暴露问题。4.2 只接一个电阻、或者接在中间的后果我专门在实验室搭过一条长 20 米、波特率 500kbps 的 CAN 总线对比过几种终端电阻接法的波形表现终端接法总线末端状态上升沿过冲总线错误率备注两端各 120Ω两端匹配约 0.2V0正常仅一端 120Ω另一端开路约 0.8V偶发错误帧低速短距离可能“能用”中间单点 120Ω两端开路约 1.2V错误率明显上升反射沿总线双向传播两端无电阻两端开路约 2.5V通信基本瘫痪误码严重从表格里可以看得出来不是“有电阻就行”而是“位置对了才算行”。中间单点放电阻等效于给总线提供了一个分压点但无法消除端点处的全反射。最典型的故障场景是有人为了省事把 120Ω 电阻直接焊在调试板的 CAN 收发器旁边总线末端还是空着的。这种接法在短距离台架测试里问题不大一旦把几块板子用长线串联起来错误就开始出现。4.3 遇到星形拓扑和内置终端电阻怎么办汽车里的 CAN 网络大多是直线拓扑或类直线拓扑但实际应用中难免出现分支。标准 CAN 规范对分支线Stub长度有严格限制分支线越长反射越明显。通常建议分支长度控制在 0.3 米以内如果做不到要在分支靠近主干的地方做好端接或者使用 CAN 中继设备。还有一类特殊情况某些 ECU 模块内部已经集成了 120Ω 终端电阻并且没有跳线可以关闭。如果你在做多节点组网时把两个这样的模块都接在总线上然后又按照“两端各一个 120Ω”的习惯单独加电阻等于把三个 120Ω 并联等效电阻降到约 40Ω总线阻抗已经不匹配了。遇到这种模块必须确认每个节点是否带终端电阻再整体规划。判断方法很简单把网络里所有节点断开电源用万用表在总线两端分别测 CAN_H 与 CAN_L 之间的电阻。如果测出来是 60Ω 左右说明总线上已经有两个 120Ω 并联如果测出来是 40Ω说明有三个或者非标终端并联如果测出来是 120Ω说明只有一个终端在场。基于这个读数就能反推当前总线上的终端数量是否正常。5. 实车验证万用表和示波器检查 CAN 总线健康度5.1 万用表快速判断 120Ω 终端是否在场做 CAN 总线诊断我习惯先把万用表拿出来。注意这里测的是断电状态下的总线不是带电测。操作步骤断开整车蓄电池或至少关闭相关 ECU 的电源等待 3 分钟以上让模块内部电容放电。找到被测 CAN 网络的接线端子通常是 OBD 诊断口或某个 ECU 的连接器。把万用表调到电阻档红表笔接 CAN_H黑表笔接 CAN_L记录读数。在总线物理末端也就是最远端的接插件上再做一次同样的测量对比两端读数。正常情况下任意测量点读到的都应该是 60Ω 左右因为两个 120Ω 终端电阻并联。如果读到 120Ω则说明网络里可能只有一端有终端或者另一端终端已经断开。如果读到接近 0Ω说明 CAN_H 和 CAN_L 之间短路了。如果读数随着时间漂移不稳定可能有模块内部的非线性电路影响这时候要逐个断开节点定位。这里有个小技巧在整车环境中你测量到的 60Ω 并不是绝对的。一些 ECU 的收发器芯片在断电状态下可能呈现出高阻抗对读数影响不大但部分模块的 ESD 防护二极管并联在总线上会略微拉低读数导致你测到 52Ω 或 55Ω。这个偏差在正常范围内不用紧张关键是判断“数量级”而不是纠结小数点。5.2 示波器看清完整位序列万用表能告诉你终端电阻在不在场但波形质量好不好必须用示波器看。采集条件我建议这样设置探头用 1MΩ 输入阻抗带宽至少 100MHz采样率至少 1GS/s。CH1 接 CAN_HCH2 接 CAN_L用数学通道做 A-B 差分运算同时观察单端波形和差分波形。正常情况下总线上有通信活动时你会看到 CAN_H 在隐性 2.5V 和显性 3.5V 之间跳变CAN_L 在隐性 2.5V 和显性 1.5V 之间跳变差分波形在 0V 和 2V 之间变化。重点观察两点一是边沿的过冲幅度。匹配良好的总线上差分波形不应出现超过 0.5V 的尖峰。如果你看到上升沿一下子冲到 2.8V再回落到 2V 附近震荡说明反射没有被吸收干净。二是采样点附近的电平稳定性。把示波器时基调到每个位时间的大约 70% 位置观察该点附近的差分电压是否稳定高于或低于阈值。只要采样点上出现抖动就可能造成误判即使帧格式完全正确也会产生偶发错误。采集时可以多抓几个帧进行分析注意波形是否重复出现相同的振铃模式。如果振铃总是出现在逻辑 1 到逻辑 0 的跳变沿大概率是电缆末端开路或短路如果振铃在总线空闲一段时间后才出现可能是某个节点在上电瞬间没有进入正常接收状态。5.3 探头设置和差分测量常见误区用双通道示波器做差分测量最大的坑是探头通道间的延迟差异。CH1 和 CH2 如果使用了不同型号或不同长度的探头两个通道对同一时刻信号的响应时间不一致数学通道 A-B 算出来的波形就会带假过冲。所以在测量前必须把两个探头接在同一个测试点上用校准方波做 Deskew 校准把通道间延迟调零。另一个误区示波器探头输入阻抗。普通无源探头大多支持 1MΩ 和 50Ω 两种模式。测量 CAN 总线这种低速差分信号应该使用 1MΩ 输入阻抗因为 50Ω 输入阻抗会直接给 120Ω 终端电阻并联一个 50Ω 接地负载严重破坏总线阻抗。如果你用的示波器默认输入阻抗是 50Ω一定先切回 1MΩ。最后提醒一点不要带电插拔 CAN 接插件。带电拔插产生的瞬态电弧很容易打到收发器芯片上轻则导致通信中断重则烧毁芯片。正确做法是先把设备断电再接好探头最后上电采集。这个习惯能省掉很多后面查不出来的“灵异故障”。6. 关于 CAN 物理层我最想提醒的三件事整条线聊下来其实核心就是三个词对称、匹配、吸收。双绞线负责在空间上维持对称性让共模干扰在两根线上保持一致线缆的特征阻抗定义了信号的传播环境120Ω 终端电阻则在边界处提供匹配把反射能量吸收掉。三者是一个闭环缺一环都会在高速率、长距离的场景里显形。第一永远不要迷信“低速就不需要终端电阻”。我在很多项目里见过 125kbps 低速总线上没接终端电阻短距离短时间也能跑但环境一变化就出问题。终端电阻的意义不只是让信号不发振铃它还保证了总线静态电平的稳定性和抗干扰能力。低速系统同样应该按规范接两端 120Ω。第二线缆选型比终端电阻更容易被忽略。双绞线这个“双绞”不是装饰而是物理层可靠性的基础。挑选线缆的时候要确认它满足 ISO 11898 对应的线缆标准特征阻抗在 120Ω 附近。不要图便宜拿普通双绞线或者平行线替代省下的那点成本往往会在后期测试和售后里加倍吐出来。第三如果你在做 FPGA 或者其他自研逻辑实现 CAN 协议控制器记得物理层模块本身不会帮你解决反射问题。逻辑层再完美信号到了模拟边界如果不匹配照样错误百出。我在调试 FPGA 实现 CAN 控制器的时候就多次因为台架上没接终端电阻导致上位机怎么也收不到完整帧最后把两个 120Ω 电阻补上才恢复正常。协议栈里看不到的部分往往才是最影响系统稳定性的部分。这几条经验都是拿实际故障换来的。下次再遇到 CAN 通信时好时坏的案子别急着改代码先量一量总线两端的电阻再看一眼示波器上的波形边沿八成能找到答案。
返回列表