
1. 为什么偏偏是120Ω从差分信号说起1.1 一个让新手反复踩坑的经典问题搞过CAN总线的人几乎都遇到过这个灵魂拷问为什么终端电阻非得是120Ω我手头只有两个60Ω的串起来行不行或者干脆拿两个240Ω的并联凑一个120Ω更有人觉得既然120Ω是标准那我用两个60Ω串联总阻值也是120Ω应该没毛病吧我刚开始接触CAN的时候也动过这种“聪明”的念头。后来在一次台架测试上因为终端电阻选错整条总线在低速时勉强能通一上500kbps就开始随机丢帧排查了整整两天才发现是电阻惹的祸。从那以后我对这个看似不起眼的120Ω有了彻底的敬畏。这篇文章就是把这些年关于CAN终端电阻的实战经验、踩过的坑、以及背后的原理一次性讲透。不管你是刚入行的嵌入式工程师还是做了几年车载网络的老人只要你在实际项目中接过CAN总线这里面的细节大概率能帮你省下几个通宵。1.2 差分信号与阻抗匹配的基本逻辑CAN总线用的是差分信号传输CAN_H和CAN_L两根线承载的是一对反相的电压信号。接收端判断的是两根线之间的电压差而不是单根线对地的电压。这种设计的好处是共模干扰会被差分接收器自然抵消掉抗干扰能力极强。但差分信号有个硬性要求传输线必须做好阻抗匹配。你可以把CAN总线想象成一条很长的水管信号就是水波。如果水管末端是敞开的水波冲到尽头会反射回来和后面的波叠加造成混乱。终端电阻的作用就是充当“水管的封堵”把到达末端的信号能量吸收掉不让它反射。标准CAN总线的特性阻抗大约是120Ω。注意这里说的是特性阻抗不是直流电阻。特性阻抗由线缆的几何结构和材料决定跟线有多长没有直接关系。终端电阻要匹配的就是这个特性阻抗所以选120Ω。那为什么不能用60Ω或者240Ω简单说阻值不对反射就来了。60Ω相当于在末端接了一个比线缆特性阻抗低的负载信号会负反射240Ω相当于负载偏高信号会正反射。两种反射都会让波形出现振铃、过冲、台阶接收器在采样点可能读到错误的电平误码率飙升。1.3 两个120Ω并联等于60Ω这个账要算清楚很多人搞混的一个点是CAN总线两端各有一个120Ω终端电阻这两个电阻在电气上是并联关系。因为CAN_H和CAN_L之间从一端看过去两个120Ω是并联的等效阻值就是60Ω。所以如果你用万用表在断电状态下量CAN_H和CAN_L之间的电阻正常应该读到大约60Ω。如果读到120Ω说明只有一端接了终端电阻如果读到无穷大说明两端都没接如果读到40Ω说明有三个120Ω并联了多半是某个节点上多焊了一个。这个60Ω是直流等效阻值不是特性阻抗。特性阻抗始终是120Ω终端电阻要匹配的也是120Ω。这两个概念千万别混。注意有些工程师看到“总线等效60Ω”就以为终端电阻应该用60Ω这是典型的因果倒置。60Ω是两个120Ω并联的结果不是设计目标。2. 60Ω和240Ω到底会出什么问题2.1 用60Ω单电阻省了一个电阻赔了整条总线有人图省事直接在总线一端焊一个60Ω电阻觉得这样等效阻值也是60Ω跟两端各120Ω并联的效果一样。这个想法在直流层面看起来没错但在交流层面完全是两回事。终端电阻的核心作用是吸收信号能量、抑制反射它必须分布在总线的两个物理末端。信号从一端传到另一端到达末端时被那里的120Ω吸收掉。如果你只在一边放一个60Ω另一端是敞开的信号传到敞开的那端照样会反射回来。反射波回到60Ω那端时虽然会被部分吸收但已经晚了——反射已经发生波形已经被污染了。实测数据很能说明问题。在一段10米、500kbps的CAN总线上一端接60Ω、另一端悬空的情况下用示波器看CAN_H波形上升沿会有明显的振铃过冲幅度能达到1V以上。接收器在采样点如果正好落在振铃的谷底就可能把显性位判成隐性位造成丢帧。2.2 用240Ω反射更隐蔽但同样致命240Ω的情况稍微不同。240Ω比特性阻抗120Ω高信号到达末端时会产生正反射反射波的极性和入射波相同。表现出来就是波形上升沿变缓、幅度偏高严重时会出现台阶。这种问题在低速总线上可能不明显因为信号上升沿本来就慢反射波和主波混在一起看不出来。但一旦速率提到500kbps甚至1Mbps反射的影响就藏不住了。我见过一个案例客户用240Ω终端电阻跑250kbps实验室里一切正常装车后在特定工况下偶发通信中断。后来用示波器抓波形发现是反射导致的位采样错误换成120Ω后问题消失。240Ω还有一个隐患总线等效阻值变成120Ω。这时候如果你用万用表量会以为“阻值正常”从而排除了终端电阻的问题把排查方向引到别处去白白浪费时间。2.3 不同阻值下的波形对比下面这张表是我在实际测试中整理的用同一段双绞线、同一速率、同一收发器只改变终端电阻配置观察波形和误码情况终端电阻配置总线等效阻值波形表现500kbps误码率适用场景两端各120Ω60Ω上升沿干净无明显振铃极低正常标准配置一端120Ω一端悬空120Ω末端反射明显振铃高随机丢帧不推荐一端60Ω一端悬空60Ω反射幅度异常很高不推荐两端各240Ω120Ω上升沿变缓有台阶中等特定工况出错不推荐两端各60Ω30Ω幅度被拉低驱动吃力高可能通信不上不推荐一端120Ω一端240Ω80Ω不对称反射中等不推荐从表里能看出来只有两端各120Ω才是真正稳的配置。其他组合要么反射要么幅度不对要么驱动能力不够。2.4 为什么有人会想到用60Ω或240Ω说到底用错阻值通常来自几个误解误解一以为终端电阻的作用只是“给总线一个直流负载”所以只要等效阻值对就行。实际上终端电阻的核心作用是阻抗匹配必须放在物理末端。误解二手头没有120Ω拿两个240Ω并联凑一个120Ω然后只放在一端。这样等效阻值对了但位置错了另一端还是悬空。误解三看到某些资料说“CAN总线终端电阻可以是120Ω到130Ω”就以为240Ω也在范围内。实际上那个范围指的是单个电阻的容差不是可以随便翻倍。误解四把CAN和RS-485搞混。RS-485的终端电阻通常取120Ω但有些场合会用更低的值有人就把这套经验直接搬到CAN上。3. 终端电阻的正确接法与实操细节3.1 两端各一个120Ω位置比阻值更关键终端电阻必须接在总线的两个物理末端也就是离收发器最远的两个节点上。中间节点绝对不能接终端电阻否则相当于在传输线中间加了一个负载会造成阻抗不连续同样引起反射。实际布线时终端电阻通常放在总线两端的节点板上靠近连接器的地方。如果总线很短比如小于1米而且速率不高比如125kbps以下有时候不接终端电阻也能勉强通信但这属于“能用但不合规”的做法量产项目千万别这么干。我个人的习惯是只要总线长度超过30厘米或者速率超过125kbps就老老实实两端各焊一个120Ω。别省这两个电阻省下来的成本还不够后面排查故障的时间。3.2 电阻选型精度、功率、封装都不能马虎终端电阻虽然简单但选型也有讲究阻值精度建议选1%精度的金属膜电阻。5%的碳膜电阻虽然便宜但阻值偏差可能导致匹配效果打折扣。两个5%偏差的120Ω电阻一个114Ω一个126Ω并联后等效阻值偏离60Ω反射抑制效果会变差。功率CAN总线在显性状态时终端电阻上会有电流流过。标准CAN收发器输出的差分电压大约2V120Ω上的功耗是2²/120≈33mW。看起来很小但如果是长时间显性比如总线短路故障功耗会上升。建议选0.25W以上的电阻留足余量。封装直插的1/4W金属膜电阻最常用贴片的话0805或1206都可以。如果节点板空间紧张可以用两个120Ω贴片电阻串联或并联来分散功耗但要注意等效阻值仍然是120Ω。温度系数车载环境温度变化大建议选温度系数100ppm/℃以内的电阻避免高温下阻值漂移影响匹配。3.3 用万用表验证终端电阻的正确姿势断电状态下用万用表电阻档量CAN_H和CAN_L之间的阻值正常应该读到55Ω到65Ω之间。这个范围考虑了电阻容差和线缆电阻。如果读到120Ω左右说明只有一端接了终端电阻。这时候要检查另一端节点的终端电阻是不是漏焊了或者拨码开关没拨到位。如果读到无穷大说明两端都没接。这种情况在实验室里很常见因为很多人用开发板做测试时忘了接终端电阻。如果读到30Ω左右说明有三个或更多120Ω并联了。检查是不是某个中间节点也焊了终端电阻。如果读到40Ω左右说明有两个120Ω和一个60Ω并联或者四个120Ω并联。这种情况比较少见但一旦遇到多半是有人乱接。提示测量前一定要断电并且确保所有节点都断电。带电测量不仅读数不准还可能损坏万用表。3.4 终端电阻的供电与隔离问题有些CAN节点采用隔离收发器这时候终端电阻的接法要注意终端电阻必须接在隔离侧的总线端不能接在非隔离侧。因为隔离收发器的两侧地是分开的终端电阻如果接错侧相当于没有匹配总线阻抗。另外如果总线两端节点都有隔离那么两端的终端电阻分别接在各自的隔离侧这是正确的。但如果一端隔离一端不隔离就要确保终端电阻都接在总线侧避免隔离屏障被电阻旁路。4. 故障排查终端电阻相关问题的实战记录4.1 案例一低速能通高速丢帧这是我早期遇到的一个典型案例。客户反馈CAN总线在125kbps下通信正常但切到500kbps后随机丢帧概率大概百分之几。到现场后先量终端电阻读到120Ω说明只有一端接了。检查另一端节点发现终端电阻的拨码开关被拨到了OFF位置。客户说“出厂默认就是OFF我们没动过”。这就是问题所在出厂默认不一定适合你的总线长度和速率。把拨码开关拨到ON再量阻值变成60Ω切到500kbps测试丢帧消失。整个过程不到十分钟但客户之前已经排查了两天换了收发器、换了线缆、改了软件都没解决。这个案例的教训是终端电阻是CAN通信的第一检查项遇到通信问题先量阻值别急着怀疑软件。4.2 案例二多个节点误接终端电阻另一个案例是一条有8个节点的总线通信时好时坏。量阻值读到30Ω说明有三个终端电阻并联了。逐个节点检查发现有三个节点的终端电阻拨码开关都在ON位置。客户说“我们以为每个节点都要接终端电阻”。这是典型的误解终端电阻只在总线两端接中间节点不接。把中间节点的终端电阻全部断开只保留两端阻值恢复到60Ω通信稳定。4.3 案例三终端电阻焊错位置还有一个比较隐蔽的案例客户在节点板上把终端电阻焊在了收发器的非隔离侧而总线是隔离的。结果终端电阻实际上没有接在总线上量阻值读到无穷大。这种情况比较难发现因为电阻确实焊了但位置错了。排查时要对照原理图确认终端电阻连接的是总线侧还是非隔离侧。4.4 常见问题速查表现象可能原因排查方法解决方法量阻值120Ω只有一端接终端电阻检查另一端节点补接120Ω量阻值无穷大两端都没接检查两端节点两端各接120Ω量阻值30Ω三个以上终端电阻并联逐个节点检查拨码只保留两端量阻值40Ω混接不同阻值检查每个节点电阻值统一为120Ω低速正常高速丢帧终端电阻缺失或错位量阻值看波形两端各120Ω波形有振铃反射示波器看上升沿检查终端电阻位置波形幅度偏低等效阻值过低量阻值移除多余终端电阻通信完全不上总线短路或终端电阻严重错误量阻值查短路逐段排查4.5 示波器抓波形的几个关键点用示波器排查终端电阻问题重点看几个地方上升沿正常上升沿应该干净利落没有明显的振铃或台阶。如果上升沿有振铃多半是反射。幅度CAN_H的显性电平大约3.5V隐性大约2.5V。如果幅度明显偏低可能是等效阻值过低驱动能力不够。位宽在采样点位置波形应该稳定。如果采样点附近有波动说明反射已经影响到判决。眼图如果示波器支持眼图可以更直观地看信号质量。眼图张开度越大越好闭合说明信号质量差。抓波形时探头要接在总线末端也就是终端电阻附近。接在中间节点看到的是驻波不能反映末端反射情况。5. 一些容易忽略的边界情况5.1 短总线的终端电阻取舍如果总线非常短比如同一块板子上两个CAN节点之间通信距离只有几厘米这时候终端电阻还要不要接从理论上看短线缆的反射影响很小因为信号往返时间远小于上升沿时间反射波和主波混在一起不会造成明显的采样错误。但实际上很多收发器在无负载时输出波形会过冲接上120Ω反而能让波形更干净。我的建议是不管多短两端各接一个120Ω。成本几乎为零但能避免很多玄学问题。如果实在不想接至少要在实验室里用示波器确认波形没问题再考虑省略。5.2 多路CAN总线的终端电阻处理有些控制器有多个CAN通道每个通道都是一条独立的总线各自需要两端各一个120Ω。千万别把不同通道的终端电阻混在一起那样会改变每条总线的等效阻值。如果多个通道共用同一个连接器要在连接器引脚定义上区分清楚避免插错。5.3 终端电阻与总线长度的关系CAN总线的最大长度和速率有关125kbps可以到500米250kbps可以到250米500kbps可以到100米1Mbps只能到40米。这些长度限制的前提是终端电阻正确匹配。如果终端电阻不对实际可用长度会大幅缩短。比如500kbps下如果只有一端接终端电阻可能50米就开始丢帧。所以遇到通信距离不达标的情况先检查终端电阻。5.4 终端电阻的功耗与发热前面提到正常通信时终端电阻功耗很小。但如果总线出现持续显性故障比如CAN_H对地短路终端电阻上可能会有持续电流功耗上升。假设CAN_H对地短路收发器输出显性电平时CAN_H被拉到地CAN_L被拉到高电平终端电阻两端电压可能达到3V以上功耗超过75mW。长时间下来0.25W的电阻会发热但一般不会烧毁。如果用的是0402小封装电阻就要注意功率余量。5.5 终端电阻与EMC的关系终端电阻不仅影响信号完整性还影响EMC性能。正确的终端匹配可以减小信号反射从而降低辐射发射。如果终端电阻缺失或错位总线上的反射会导致高频谐波增加可能让整车EMC测试超标。我参与过一个项目CAN总线的辐射发射在特定频点超标排查后发现是某个节点的终端电阻拨码开关接触不良导致等效阻值偏高。重新焊接后辐射发射下降了6dB。6. 实操心得与避坑清单6.1 设计阶段的检查项在原理图设计阶段就要把终端电阻规划好确认总线两端节点是否都有终端电阻位置确认终端电阻连接的是总线侧不是非隔离侧确认终端电阻阻值是120Ω精度1%确认终端电阻功率余量足够如果终端电阻可配置确认拨码开关或跳线的可靠性6.2 调试阶段的检查项在台架调试阶段按这个顺序检查断电量CAN_H和CAN_L之间阻值确认在55Ω到65Ω之间如果阻值不对逐个节点排查终端电阻上电用示波器看波形确认上升沿干净如果波形有振铃检查终端电阻位置如果波形幅度偏低检查等效阻值是否过低跑通信测试确认误码率在可接受范围6.3 装车阶段的检查项装车后环境更复杂要额外注意线束长度是否超出速率允许范围连接器接触是否可靠终端电阻是否因为振动而松动温度变化是否导致阻值漂移EMC测试是否通过6.4 我踩过的几个坑坑一以为开发板自带终端电阻。很多CAN开发板上有一个120Ω电阻但默认不焊接或者通过跳线选择。我刚开始用的时候以为板上已经有了结果量阻值无穷大排查了半天。坑二拨码开关接触不良。有些节点用拨码开关选择终端电阻时间长了开关氧化接触电阻变大等效阻值偏离。后来我改用焊接跳线可靠性高很多。坑三把终端电阻焊在非隔离侧。这个坑最隐蔽因为电阻确实焊了量阻值却不对。后来养成习惯焊之前先看原理图确认连接的是总线侧。坑四用240Ω并联凑120Ω。手头没有120Ω拿两个240Ω并联等效阻值对了但只放在一端另一端还是悬空。这个坑的本质是没理解终端电阻要放在两端。坑五忽略线缆本身的电阻。长线缆的直流电阻不能忽略比如100米双绞线可能有几欧姆电阻。量阻值时要把这个考虑进去55Ω到65Ω的范围已经包含了线缆电阻。6.5 一个快速判断终端电阻是否正常的方法如果你手头没有万用表或者不方便断电可以用一个简单的方法粗略判断在总线空闲时用示波器看CAN_H和CAN_L的直流电平。正常情况隐性电平时CAN_H和CAN_L都接近2.5V。如果终端电阻缺失隐性电平可能会偏高或偏低因为收发器的偏置电流没有合适的泄放路径。这个方法只能粗略判断不能替代万用表测量。但在紧急情况下能帮你快速缩小排查范围。6.6 关于终端电阻的常见误区澄清最后澄清几个常见误区误区终端电阻越大越好。实际上必须匹配特性阻抗120Ω是标准值大了小了都不行。误区终端电阻可以放在任意位置。必须放在总线两端中间节点不能放。误区短总线不需要终端电阻。短总线反射影响小但接上终端电阻能让波形更干净建议接。误区终端电阻可以用其他值代替。除非你重新计算特性阻抗并更换线缆否则必须用120Ω。误区终端电阻只影响通信距离。它还影响信号质量、EMC性能、误码率是多方面的。我在实际项目中只要遇到CAN通信问题第一件事就是量终端电阻。这个习惯帮我省下了大量排查时间。终端电阻虽然只是两个小小的电阻但它是CAN总线物理层最基础、最关键的一环。把这一环做扎实后面的问题会少很多。