ARTICLE DETAIL

资讯详情

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

CAN总线终端电阻为何必须是120Ω?从阻抗匹配到信号完整性的工程解析

CAN总线终端电阻为何必须是120Ω?从阻抗匹配到信号完整性的工程解析 1. 从一次现场调试翻车说起为什么偏偏是120Ω做嵌入式或者汽车电子这行的估计没人没跟CAN总线打过交道。我印象特别深早些年接手一个车载控制器的联调项目实验室台架上跑得好好的装车之后偶发丢帧尤其是电机一启动通信误码率直接飙上去。查了三天示波器一挂波形上那个反射振铃看得人头皮发麻。最后问题出在哪一条支线的末端终端电阻漏贴了整条总线等效负载从60Ω变成了接近120Ω阻抗不连续信号在末端来回弹。这件事之后我把CAN物理层的东西从头到尾捋了一遍。今天想聊的这个话题就是那个被无数人当作标配却很少有人真正讲清楚的问题——CAN总线终端电阻为什么必须是120Ω。这不是一个拍脑袋定下来的数字它背后是阻抗匹配和信号完整性这两件事在物理层的硬约束。先把结论摆出来120Ω这个值本质上是双绞线特性阻抗的数值终端电阻的作用是让总线两端的阻抗连续把传输线末端的信号能量吸收掉避免反射。两个120Ω并联总线静态差分负载是60Ω这个60Ω又刚好匹配CAN收发器驱动能力和ISO 11898标准对负载的要求。所以它不是选出来的是被传输线物理特性和标准共同定出来的。这篇文章我打算从原理讲到实操包括怎么算、怎么测、怎么排查以及那些文档里不会写的坑。适合刚接触CAN物理层的朋友也适合做了几年但一直没深究过终端电阻的老手——我保证你能从里面捞到点新东西。2. 阻抗匹配到底在匹配什么把传输线当成水管来理解2.1 特性阻抗不是电阻别被名字骗了很多人第一次听到特性阻抗120Ω下意识觉得那是个电阻值其实完全不是一回事。特性阻抗Characteristic Impedance描述的是电磁波在传输线上传播时电压波和电流波的比值记作Z0。它由传输线单位长度的电感L和电容C决定Z0 √(L / C)注意这个公式里没有频率也没有线长。也就是说对于一条几何结构均匀的双绞线它的特性阻抗是一个相对固定的值跟你信号频率关系不大在一定的频率范围内。CAN常用的屏蔽或非屏蔽双绞线特性阻抗典型值就在95Ω到140Ω之间而ISO 11898标准把标称值定在了120Ω。为什么是120而不是100或者150这跟线缆制造工艺、收发器驱动能力、以及行业早期的事实标准都有关系。汽车行业大量使用的双绞线其几何尺寸和绝缘材料决定了Z0落在120Ω附近最经济、最稳定。标准一旦定下来整个生态——收发器、连接器、线束——都围绕这个值来设计形成了路径依赖。2.2 反射是怎么产生的水管突然变细的类比你可以把信号在传输线上的传播想象成水流在水管里走。如果水管从头到尾粗细一致水就顺畅地流过去。但如果水管末端突然堵死开路水撞到尽头会反弹回来如果末端突然变成一个巨大的水池短路水会瞬间泄掉同样产生扰动。电信号也一样。当信号沿着特性阻抗为Z0的线缆传播到达末端时如果末端负载阻抗ZL不等于Z0就会发生反射。反射系数Γ的公式是Γ (ZL - Z0) / (ZL Z0)末端开路ZL ∞Γ 1全反射信号原样弹回。末端短路ZL 0Γ -1也是全反射但相位相反。末端接Z0ZL Z0Γ 0无反射能量被完全吸收。CAN总线两端各接一个120Ω终端电阻正是为了让末端负载等于线缆特性阻抗把反射系数压到零。这就是阻抗匹配的核心目的。2.3 为什么是两个120Ω而不是一个60Ω这里有个特别容易被问到的点既然总线静态差分阻抗要60Ω为什么不干脆一端接一个60Ω原因在于拓扑对称性。CAN是总线型拓扑两端都要端接。如果只在一端接60Ω另一端开路那么开路那一端照样全反射问题没解决。两端各接120Ω从任意一端看进去看到的都是120Ω终端 远端120Ω并联后的等效在信号传播的瞬间远端电阻还没感知到靠的是传输线本身的Z0来吸收。等信号到达远端被120Ω吸收掉。两端对称反射最小。而且两个120Ω并联得到60Ω这个值恰好是CAN收发器差分驱动能力的最佳负载点。负载太重阻抗太低驱动电流不够差分电压幅度上不去负载太轻阻抗太高抗干扰能力下降。60Ω是权衡后的甜点。3. 120Ω背后的电气计算从差分电压到负载能力3.1 差分信号与显性/隐性电平CAN用的是差分信号两根线CAN_H和CAN_L。逻辑0显性位时收发器把CAN_H拉高、CAN_L拉低差分电压Vdiff V(CAN_H) - V(CAN_L) 典型值约2V逻辑1隐性位时两线都回到约2.5V的共模电平Vdiff接近0V。这个差分电压是怎么建立起来的靠的是收发器内部的驱动电路往总线上灌电流。以典型的高速CAN收发器为例显性状态下它会在CAN_H和CAN_L之间形成一个约2V的电压差同时驱动电流流过总线负载。3.2 负载电阻决定了驱动电流总线上的等效负载就是两个120Ω终端电阻并联加上所有节点收发器的输入阻抗通常很高几十kΩ以上可忽略。所以等效负载R_load 120Ω // 120Ω 60Ω显性状态下收发器需要在这个60Ω负载上建立约2V的差分电压那么驱动电流大约是I V / R 2V / 60Ω ≈ 33mA这个33mA就是收发器差分驱动级需要提供的电流量级。如果终端电阻选错比如只接了一个120Ω负载120Ω电流只要约16mA看似更省电但抗干扰裕度下降如果误接了三个120Ω负载40Ω电流要50mA很多收发器驱动能力不够差分电压被拉低通信直接失败。所以120Ω不是随便定的它直接决定了收发器的驱动电流预算和噪声容限。3.3 不同终端方案的对比实际工程里终端电阻的接法不止一种我整理了一个对比表方便你选型时参考终端方案接法等效负载优点缺点适用场景标准双端120Ω总线两端各一个120Ω60Ω反射最小标准推荐需两端都接绝大多数CAN网络单端120Ω仅一端接120Ω约120Ω省一个电阻另一端反射严重极短总线10cm应急分裂终端每端两个60Ω串联中点接电容到地60Ω改善共模EMC好成本高布线复杂高EMC要求场合单电阻60Ω一端接60Ω60Ω负载正确另一端仍反射不推荐提示分裂终端Split Termination在汽车EMC敏感场景里越来越常见两个60Ω串联、中点通过一个4.7nF到100nF的电容接地能把共模噪声旁路掉同时对差模阻抗还是120Ω。如果你的项目过不了辐射发射测试可以试试这个方案。4. 信号完整性视角反射、振铃与位定时4.1 反射如何毁掉一帧报文CAN的位速率从几十kbps到1Mbps不等CAN FD更高。信号沿总线传播遇到阻抗不连续点就反射。反射波和原始波叠加会在接收端造成过冲、下冲、振铃。如果振铃幅度超过收发器的采样阈值或者持续时间跨过了采样点接收端就会把显性误判成隐性或者反过来导致位错误。我实测过一个案例一条约20米的总线末端漏接终端电阻500kbps下用示波器看接收端波形显性位下降沿之后有明显的振铃幅度接近1V持续约200ns。而500kbps一个位时间是2μs采样点在位时间的75%左右也就是1.5μs处。振铃虽然没直接盖住采样点但它抬高了噪声基底一旦有外部干扰叠加误码就来了。4.2 传播延迟与终端电阻的关系信号在双绞线上的传播速度大约是光速的2/3即约5ns/m。一条40米的总线单程传播延迟约200ns往返400ns。这个往返时间必须远小于位时间否则反射波会在同一个位时间内回来捣乱。对于1Mbps位时间1μs往返400ns已经占了40%相当危险。所以高速CAN对总线长度有严格限制1Mbps通常不超过40米。终端电阻在这里的作用就是把往返反射的能量尽快吸收缩短振铃的衰减时间。4.3 用ADS做一次信号完整性仿真如果你手头有Keysight ADS或者类似的SI仿真工具可以搭一个简单的CAN通道模型验证一下。基本步骤用传输线模型TLINP或理想传输线设置Z0120Ω延迟按线长算比如20米延迟100ns。两端各接120Ω电阻到参考地差分的话用两个单端模型。激励源用一个带上升沿的脉冲模拟CAN收发器的显性驱动上升沿设成几十ns。在接收端探针观察波形。仿真里你可以做对比实验把一端电阻去掉立刻能看到反射振铃把电阻改成60Ω波形幅度会变化。这种仿真不需要很精确的模型定性验证足够了。我一般用它来给新人讲反射比纯讲公式直观得多。注意仿真里的传输线模型是理想的实际线缆有损耗、有寄生参数振铃会比仿真里衰减得快一些。所以仿真看到很糟的波形实测可能没那么糟但趋势是对的。5. 实操排查终端电阻到底该不该加、怎么测5.1 万用表测终端电阻的正确姿势最常用的排查手段就是断电测电阻。把总线两端设备都断电注意是断整个网络的电不是只断一个节点用万用表测CAN_H和CAN_L之间的直流电阻。正常情况约60Ω两个120Ω并联。测到120Ω只有一端接了终端电阻。测到约40Ω多接了一个终端电阻三个并联。测到很大或开路两端都没接或者线断了。这个测量必须在完全断电下做因为收发器内部有保护二极管带电测量会得到错误读数。我见过有人带电测出30多欧吓得以为短路其实是二极管导通造成的。5.2 容错测试中终端电阻的角色热词里提到CAN通信物理层容错测试这个场景很典型。做容错测试时经常要模拟线缆断路、短路、终端丢失等故障看网络能不能降级运行。这里有个常见误区测试时为了制造故障把终端电阻拔掉结果整个网络都瘫了误以为是协议栈的问题。实际上终端电阻属于物理层拔掉它属于物理层故障协议层的容错机制比如错误帧、总线关闭恢复是在物理层还能勉强通信的前提下才起作用的。如果反射严重到根本收不到正确位协议层再强也没用。所以做容错测试时终端电阻的配置要单独作为一个变量来控制别跟协议测试混在一起。5.3 常见问题速查表现象可能原因排查方法解决偶发丢帧电机启动时加剧终端电阻缺失或错误断电测CAN_H-CAN_L电阻补齐两端120Ω波形振铃严重阻抗不连续、支线过长示波器看接收端波形缩短支线检查终端通信距离上不去终端电阻不匹配测等效负载确认60Ω多节点时通信异常终端电阻重复接入逐个节点断电排查只保留两端EMC测试辐射超标共模噪声大近场探头定位改用分裂终端6. 那些文档不会告诉你的实操心得6.1 终端电阻不一定非要物理上在两端标准说终端电阻在总线两端但两端指的是电气拓扑的末端不是物理位置。有些项目为了布线方便把终端电阻做在连接器里或者做在某个节点的PCB上只要它在电气上是总线的最远端就行。我做过一个项目终端电阻直接集成在线束的末端接插件里省了一个节点盒效果一样好。但要注意如果终端电阻做在节点内部而这个节点又不在物理末端那就等于在总线中间加了个负载会造成阻抗不连续。所以做之前一定要画清楚拓扑图。6.2 支线Stub长度是隐形杀手终端电阻对了不代表信号就一定好。支线长度是另一个大坑。从主干线分出去到节点的线叫支线支线太长信号在支线上来回反射一样破坏信号完整性。经验值500kbps时支线不超过1米125kbps时不超过5米。这个没有绝对公式跟线缆参数有关但大致是这个量级。我见过有人把节点用3米长的线挂到500kbps总线上结果就是偶发误码查了半天才想到支线。6.3 终端电阻的功率和精度别忽视120Ω终端电阻在显性状态下要消耗功率。按33mA驱动电流算每个电阻上的功耗约P I² × R但注意电流是两个电阻分担的单个电阻电流约16.5mA P (0.0165)² × 120 ≈ 0.033W看起来很小选0603封装都够。但如果总线长时间处于显性比如故障时功耗会累积。我一般选0805或1206封装留足余量。精度方面用1%精度的金属膜电阻就够了没必要上0.1%因为线缆本身的特性阻抗公差就有±10%左右电阻再准也没用。6.4 热词里那个Chrome 120是个美丽的误会搜索热词里混进来一个this extension requires google chrome version 120 or greater这明显是浏览器扩展的报错跟CAN终端电阻的120Ω完全是两码事。做技术搜索时经常遇到这种关键词污染别被带偏。CAN的120Ω是物理层的阻抗值跟软件版本号没有任何关系。6.5 FPGA实现CAN时终端电阻怎么处理热词里还有FPGA是实现CAN总线这个我得多说两句。用FPGA做CAN控制器时FPGA本身只实现协议层位定时、CRC、仲裁等物理层还是要外接收发器芯片比如TJA1050、SN65HVD230之类。终端电阻是接在收发器的总线侧跟FPGA无关。但有个细节FPGA的IO电平跟收发器的逻辑电平要匹配通常是3.3V或5V。如果FPGA直接驱动收发器的TX引脚注意电平兼容。终端电阻千万别接到FPGA的IO上那是总线侧的事。7. 从阻抗匹配延伸到整个物理层设计聊到这儿终端电阻的事基本说透了。但我想再往外延一点因为阻抗匹配和信号完整性这两个概念不只用在CAN上。RS-485、FlexRay、以太网甚至高速PCB上的差分对都是同一套逻辑让传输线的特性阻抗和终端负载匹配把反射压下去。CAN的120Ω之所以经典是因为它把这个问题简化到了一个极致的程度——两个电阻一个数值覆盖了绝大多数场景。你不需要复杂的匹配网络不需要仿真调参照着标准接就行。这种简单可靠正是CAN能在汽车和工业领域活这么多年的原因之一。我自己在带新人的时候喜欢让他们先做一件事拿一条双绞线两端接120Ω用信号发生器打一个方波进去示波器看波形然后把一端电阻拔掉再看波形。那个反射振铃的对比比讲一小时公式都管用。物理层的东西看得见摸得着才记得住。最后分享一个我常用的快速判断法上电前先断电测电阻60Ω左右心里就有底了。如果测出来不对别急着上电先把终端电阻的事搞清楚。我踩过的坑里物理层问题占了通信故障的一大半而终端电阻又是物理层问题里最高频的一个。把它搞明白能省下大量调试时间。
返回列表