资讯动态

CAN总线物理层测试:终端电阻、供电扫描与边沿时间复现指南

发布时间:2026/10/29 15:48:34 来源:尧图企业网站定制
简介面向高校电子信息、车辆工程及汽车电子方向学生与初学者的CAN总线物理层测试文档围绕通信稳定性与可靠性这一核心问题系统梳理终端电阻、低压与高压通讯范围、显性/隐性输出电压、上升沿与下降沿时间等测试项目。每个项目均给出测试目的、评定标准、参考参数表与实测结论如终端电阻2540Ω判为PASS、上升沿32ns与下降沿40ns均满足不超过限值的要求读者可据此理解总线电气特性判读思路与调试方法。压缩包共1个doc文件约5.61MB。目前已有1932人学习适合课程实验、ECU硬件验证及车载网络入门阶段对照参考也便于在实验报告撰写与测试流程规范梳理时直接借鉴其条目组织方式。1. CAN 总线通讯测试流程的物理层底稿八个用例、一张表和一堆 SKIPCAN 总线通讯测试流程最容易出问题的地方多数时候在于物理层那几张表到底能不能被别人照着复现跟先不先跑通报文关系不大。某实验室给过来的 ECU 物理层测试文档A11A、A14B 两个软硬件版本八个用例从终端电阻一路排到地偏移每个用例都按“测试目的 — 评定标准 — 测试结果”三段式组织结果栏几乎全是 PASS只有地偏移写着 SKIP。这种文档表面看是验收报告实际上更像一张待填的底稿它告诉你测什么、判据取哪个区间却不告诉你探头夹在哪、电源步进取多大、测点算不算线束。把这份底稿读成一份可执行的清单比多跑几遍报文有用得多。2. 终端电阻那一栏2540Ω 是怎么来的又凭什么判 PASS终端电阻是整个物理层测试里唯一一个“断电就能测、但最容易测错”的项。它决定了总线空闲时的隐性电平能不能稳住、显性位翻转时反射能不能压下去也直接决定了后面显性/隐性电压、边沿时间那几项的数据有没有意义。文档 [TG1_TC1] 给的实测值是 2540Ω结果 PASS单看这一行会以为没什么可说的真正翻到评定标准那一页才发现判据里同时存在两套终端取值对不上号就会出现“数值明明超出表格范围却判 PASS”的情况。2.1 60Ω、120Ω、1.3kΩ先把拓扑和判据对上再动手文档表 1 给的是 R1、R2 标称 60Ω最小值 60Ω、最大值 65Ω电阻容差标的是 -10% 到 1%分裂终端的电容 C1 在 14.7nF 到 100nF 之间耗散功率 220mW 到 400mW。备注里又写了一句支线终端推荐值范围是 2×1.3kΩ±1%。这两套数不是同一个东西一个是主干两端的终端电阻一个是挂在支线上的节点终端。参数最小值标称值最大值单位备注R1606065Ω主干终端之一R2606065Ω主干终端之二C114.7—100nF分裂终端对地电容R1/R2 耗散功率220250400mW连续显性下的裕量R1/R2 容差-10—1%低温与批次漂移支线终端—2×1.3k—Ω±1%主干两端各 60Ω断电在总线两端量到的是并联值 30Ω 附近如果按常见的 120Ω 双终端体系量到的是 60Ω。这两套读法在现场都会碰到先确认 DUT 用的是哪一种再套判据不然拿着 120Ω 的经验去套 60Ω 的表第一反应就是“电阻坏了”。我一般会先查原理图上的终端位置再用万用表确认终端是焊在 ECU 内部还是在线束端最后才去对表格里的区间。还有一点容易漏表里的 60Ω 是单端标称实际量测时表笔跨在 CAN_H 和 CAN_L 之间看到的是两端并联。如果 DUT 只装了一端终端比如台架只接了半个线束读数会是 60Ω 左右而不是 30Ω这不代表器件异常只代表拓扑不完整。测之前把线束两端都接上或者明确记录“只挂单端”否则后面的数据没法对比。2.2 断电、脱机、单点终端电阻测量的三个前置条件终端电阻的测量步骤本身不复杂难点在“条件”两个字。我照着这份文档复现时会把下面几步固定成流程每一步做完都在记录表上打勾避免测到一半被别的事情打断后条件漂了。断电并断开所有供电包括 KL30 常电和 KL15 唤醒电等总线电容放电 30 秒以上。带电测电阻是最常见的错误万用表读出来的是半导体结的等效阻抗几 kΩ 到几十 kΩ 都有可能。拔掉所有非 DUT 节点只保留 DUT 和线束。台架上如果还挂着 CAN 分析仪、其他 ECU 或负载盒它们的内部终端会并联进来读数直接失真。万用表打到 200Ω 或 2kΩ 档先短接表笔读一次底数把表笔线阻和接触电阻记下来后面从测量值里扣。普通表笔一对大概 0.2Ω 到 0.5Ω测 30Ω 时可以忽略测 1.3kΩ 时就得算进去。表笔分别顶在诊断口的 CAN_H、CAN_L 端子上读数稳定后再记录读数跳动说明接触不良换个测点重来。同一测点正反向各测一次两次差值超过 1Ω 就要查是不是有二极管或保护器件并在总线上。这套步骤跑下来大概五分钟但能省掉后面一小时的返工。文档里 [TG1_TC1] 的测试结果只写了一行 2540Ω实际记录里至少应该有测点位置、环境温度、表笔底数三个字段否则这个数没法复现。2.3 从 2540Ω 反推测点、表笔与线束电阻怎么算2540Ω 这个数落在支线终端 2×1.3kΩ 的附近两端各 1.3kΩ 并联是 650Ω串联是 2600Ω2540Ω 更接近串联读数也就是测点跨过了两个支线终端而中间没有并联路径。按 ±1% 的判据2600Ω 的窗口是 2574Ω 到 2626Ω2540Ω 比下限低 34Ω约 -1.3%严格算已经在窗口外沿。那为什么判 PASS可能是判据取的是更宽的工程窗口也可能是测点包含了线束电阻和接触电阻。我一般会做三件事把这个账算清第一把表笔短接底数扣掉通常 0.3Ω 左右对 2540Ω 影响很小可以排除第二确认测点是否在 DUT 端子而不是诊断口诊断口到 DUT 之间那段线束每米几十毫欧几米线束也就零点几欧同样排除第三确认环境温度1.3kΩ 的电阻如果是普通厚膜温漂 100ppm/℃ 量级25℃ 偏差 10℃ 也就 0.1%也排除。排除完这三项剩下的偏差只能来自电阻本身的批次公差或者判据版本。我的处理办法是不直接改判 PASS/FAIL而是在记录里加一列“相对标称偏差”把 -1.3% 写进去同时把判据条款号抄在备注里。这样后面复核的人一眼能看出这是踩线值而不是随便写的通过。终端电阻踩线不会立刻导致通信失败但它会把显性电平的差分电压往下拉等到温度低、线束长的时候才暴露出来属于典型的“测试通过、整车偶发丢帧”的来源。3. 供电扫描7~18V 工作窗口和 5.0V / 19.0V 两个端点供电电压扫描是这份文档里最能体现“判据怎么定”的部分。表 2 给的通信电压范围是 7V 到 18V标称 12V。[TG1_TC2] 低压测试要求 VError、VStop、VStart 三个阈值都小于等于通信电压最小值 7V实测三点都是 5.0V判 PASS[TG1_TC3] 高压测试要求三点都大于等于最大值 18V实测三点都是 19.0V同样判 PASS。单看结论没问题但这三个点全部相同说明扫描步进和记录方式还有讨论空间。3.1 VError、VStop、VStart 三个阈值分别在测什么这三个参数描述的是 DUT 在电压下滑和回升过程中的三段行为顺序不能乱。VError 是开始出现错误帧的电压通常最高VStop 是彻底停止发送的电压比 VError 低VStart 是电压回升后重新恢复通信的电压一般略高于 VStop中间那一段差值就是回滞。这份文档把三个值都记成 5.0V有两种可能一是 DUT 的收发器在 5V 附近同时完成了出错、停发和恢复回滞极小二是扫描步进取的是 0.5V 或 1V三个事件落在同一个步进格子里记录精度不够区分。从工程直觉看第二种可能性更大因为收发器从出错到完全停发通常有几百毫伏的过渡带不太可能三点完全重合。判 PASS 的逻辑也要看清低压测试要求三点“小于等于 7V”也就是在 7V 以下就必须完成出错和停发DUT 在 5.0V 就做到了说明它的欠压保护动作比规范要求更早裕量是正的。高压测试要求三点“大于等于 18V”DUT 在 19.0V 才动作说明它能扛到 18V 以上裕量也是正的。两个方向都合格但“裕量多大”这件事文档没写而这恰恰是后面整车匹配时最需要的数。3.2 可编程电源 CAN 卡的上下扫流程要复现这两个用例台架上至少需要一台可编程直流电源、一个能发能和收的 CAN 接口卡、一台记录报文和错误帧的上位机。我一般用下面这套流程扫描步进取 0.1V在 5V 到 8V、17V 到 20V 两个区间加密中间段大步跳过。# 低压段下扫从 9.0V 以 0.1V 步进降到 4.0V每步停留 2s # can0 已按 500kbps 拉起candump 后台记录错误帧用 -e 打开 ip link set can0 up type can bitrate 500000 candump -e -ta can0 can_low.log for mv in $(seq 9000 -100 4000); do # 这里的 scpi set 是占位按你电源的 SCPI 命令替换 scpi_set_voltage $(echo scale3; $mv/1000 | bc) sleep 2 echo $(date %s) $mv volt_low.csv done这段脚本的逻辑很直白电源按 100mV 一步往下走每步停留 2 秒让 DUT 的欠压检测和总线状态稳定同时后台用 candump 把带时间戳的报文和错误帧全部落盘。-e是关键参数不加它只能看到正常报文看不到错误帧计数VError 就无从判断-ta给每行加绝对时间戳方便和 volt_low.csv 里的电压记录对齐。参数上有三个地方要按现场改步进 100mV 是精度和耗时的折中如果 DUT 的欠压点很陡可以降到 50mV每步停留 2 秒是给 DUT 的电源监控和收发器唤醒留时间太快会出现“电压已经回升但通信还没恢复”的假 VStartseq 的起止范围按 DUT 的标称窗口放宽 2V 到 3V7~18V 的窗口就扫 4V 到 21V。高压段同理把方向反过来注意别超过 DUT 的绝对最大额定电压超过之前先查器件手册。扫完拿两份日志对齐volt_low.csv 给出每个电压点的时间戳can_low.log 给出第一个错误帧和最后一帧正常报文的时间戳两者相减就能定位 VError 和 VStop。VStart 看回升段把同样的脚本反向跑一遍找第一帧成功发出的时刻。3.3 判 PASS 之后看什么步长、回滞、温度判 PASS 只是起点。真正决定这份数据能不能拿到整车上去用的是三件事步长、回滞、温度。步长决定分辨率。0.1V 步进意味着 VError 的精度是 ±0.1V如果规范要求的窗口只有 0.5V 宽这个精度勉强够如果 DUT 的过渡带只有 200mV就必须降到 50mV 甚至 20mV。文档里三点同为 5.0V我第一反应就是步长不够复现时会把 4.5V 到 5.5V 单独拉出来按 20mV 扫一遍。回滞决定抗抖能力。VStop 和 VStart 之间的差值如果只有几十毫伏电源纹波或者负载突变就会让 DUT 在停发和恢复之间反复横跳表现出来就是“电压正常但通信时断时续”。复现时我会专门记录 VStart 减 VStop 的差值小于 100mV 就在报告里标黄。温度决定边界会不会漂。这份文档没写环境温度而欠压检测点通常带温度系数-40℃ 和 85℃ 下的 VStop 差个几百毫伏很常见。台架条件允许的话至少补一个高低温点把三个阈值在不同温度下各测一遍否则这份 PASS 只在室温成立。4. 显性隐性电平与边沿13.5V 下四个电压、两个 ns电压和边沿这四组数据是物理层里最“像示波器活儿”的部分。[TG1_TC4] 和 [TG1_TC5] 分别在 13.5V 供电下测显性位和隐性位的 VCAN_H、VCAN_L、VDiff、VCom[TG1_TC6]、[TG1_TC7] 测差分信号的上升沿和下降沿。文档给的实测值是显性 3.9V / 1.14V / 2.76V / 5.04V隐性 2.54V / 2.52V / 0.02V / 5.04V上升沿 32ns下降沿 40ns全部 PASS。数据本身自洽但有两个地方必须先说清楚否则照着抄会抄错。4.1 VDiff 和 VCom 的两笔账先看显性组VCAN_H 减 VCAN_L 等于 3.9 - 1.14 2.76V和 VDiff 完全对上这一笔没问题。再看 VCom文档写 5.04V而 (3.9 1.14) / 2 2.52V两者差了一倍3.9 1.14 5.04V正好等于和值。隐性组同样2.54 2.52 5.06V文档记 5.04V而半和是 2.53V。也就是说这份文档里的 VCom 取的是 CAN_H 与 CAN_L 的和不是常见的半和。判据表里 VCom 的范围写的是 4.25V 到 5.8V如果按半和理解2.52V 远低于 4.25V会被判 FAIL按和值理解5.04V 落在窗口中间PASS 才成立。这不是文档写错而是定义口径的问题但复现的人如果没注意第一遍就会得出“共模电压严重偏低”的结论。参数显性判据min/typ/max显性实测隐性判据min/typ/max隐性实测VCAN_H2.75 / 3.5 / 4.5 V3.9 V2.0 / 2.5 / 3.0 V2.54 VVCAN_L0.5 / 1.5 / 2.25 V1.14 V2.0 / 2.5 / 3.0 V2.52 VVDiff1.5 / 2.0 / 3.0 V2.76 V-0.5 / 0 / 0.05 V0.02 VVCom4.25 / — / 5.8 V5.04 V4.25 / — / 5.8 V5.04 V我一般的做法是在报告首页加一行口径说明“VCom 为 VCAN_H VCAN_L 之和”并且要求测量时两个单端探头同时采集、软件做和值运算不要用差分探头直接读。差分探头读到的是 VDiff读不出 VCom用两个单端探头分别接 CAN_H、CAN_L再把两路相加才能和文档对上。探头的地夹要接同一个参考点通常是 DUT 的电源地两个夹子接在不同地方会引入地环路读数能差几十毫伏。4.2 示波器架法探头、带宽、时基与触发边沿时间要测到 32ns 这种量级示波器和探头的选型不能太随意。32ns 的 10%~90% 上升沿对应的等效带宽大概在 10MHz 量级但为了看清拐点和振铃实际用 100MHz 以上带宽、1GSa/s 以上采样率比较稳妥。探头用 10:1 无源探头够用但要注意探头本身的容抗1.5pF 到 10pF 并在总线上会轻微改变边沿测出来的值偏慢要求更严的场合用低电容差分探头代价是贵。时基按边沿的 10 倍以上设32ns 的边沿用 100ns/div 到 200ns/div 比较合适一屏能看到一个完整位。触发用 CAN_H 的上升沿电平设在 2.5V 左右单次触发触发位置放在屏幕左侧 20% 处这样能同时看到边沿前后的稳态。通道耦合用 DC带宽限制关掉探头衰减比在示波器里设成一致否则读数会差 10 倍这个坑每年都有人踩。测量项不要用示波器默认的“上升时间”默认值通常是 0%~100%而 CAN 规范里看的是 10%~90%。0%~100% 会把噪声和过冲算进去读出来偏大32ns 可能变成 45ns。我一般手动加两条光标卡在 10% 和 90% 幅值处或者用示波器的门限测量功能把低/高门限设成 10%/90%。4.3 32ns 与 40ns 的复现与判读复现这两个数关键在采到一段干净的显性位。DUT 持续发报文的时候用单次触发抓一帧找连续显性位最多的那一段比如报文 ID 里的多个 0在那一段上量第一个从隐性跳显性的边沿。下降沿同理找显性跳隐性的地方。如果示波器支持导出 CSV我习惯导出来自己算避免仪器内置算法的门限口径差异import numpy as np # 读取示波器导出的两列时间(s)、差分电压(V) t, v np.loadtxt(can_edge.csv, delimiter,, skiprows1, unpackTrue) low np.percentile(v, 10) # 用分位数代替 min避开毛刺 high np.percentile(v, 90) v10, v90 low 0.1 * (high - low), low 0.9 * (high - low) # 找第一次穿过 10% 和 90% 的采样点线性插值到亚采样精度 i10 np.argmax(v v10) i90 np.argmax(v v90) t10 np.interp(v10, [v[i10-1], v[i10]], [t[i10-1], t[i10]]) t90 np.interp(v90, [v[i90-1], v[i90]], [t[i90-1], t[i90]]) print(ftRdiff {(t90 - t10) * 1e9:.1f} ns)这段代码的逻辑是先用 10% 和 90% 分位数估计稳态低电平和高电平比直接取 min/max 抗毛刺再找第一次越过 10% 和 90% 门限的采样点用np.interp在相邻两点之间做线性插值把时间精度从采样间隔提升到亚采样级。采样率 1GSa/s 时采样间隔 1ns插值后 32ns 的测量误差能压到零点几纳秒。参数上要注意两点skiprows1按实际导出文件的表头行数改有的示波器导三行注释分位数用 10 和 90 是经验值如果波形过冲很大可以改成 5 和 95。算出来的值和示波器内置读数差 1ns 到 3ns 属于正常差太多就查探头衰减比和门限设置。判读的时候别只盯上限。判据表 5 给的是上升沿 0~150ns、下降沿 0~200ns实测 32ns 和 40ns 都在窗口里裕量很大。但摘要里有一句“上升沿时间的最大值 200ns”和表 5 的 150ns 对不上这是文档内部的口径冲突。遇到这种冲突我按表格走因为表格是判据原文摘要是二次描述同时在记录里把两个数都写上注明“按表 5 判 150ns摘要口径 200ns 待确认”。边沿太快也不是好事32ns 的边沿配合长线束容易激起振铃如果实测低于 10ns反而要查是不是终端缺失导致反射叠加。5. 避坑与排查五条让报告返工的现场问题物理层测试的返工八成不是设备坏而是条件没锁死。下面五条是我照着这类文档复现时踩过或者见别人踩过的每条都按“现象 — 原因 — 解决”记照着排能省不少时间。5.1 终端电阻读数每次都不一样现象同一台 DUT同一个诊断口三次测量得到 2540Ω、2510Ω、2580Ω偏差 70Ω远超电阻本身的公差。原因表笔接触压力不一致诊断口端子有镀层或者氧化层接触电阻在几十毫欧到几欧之间跳另一种可能是测量时线束还挂着其他节点某个节点的内部偏置电阻随温度变化。前者更常见。解决换带弹簧针的表笔或者直接用测试台架上的香蕉插座测之前用无水乙醇擦一下端子测量时保持表笔垂直压紧读数稳定 3 秒以上再记如果还是跳把线束从诊断口拔下来直接测 DUT 端子排除线束。记录里写上测量次数和中位数不要只记一次。5.2 VCom 读数只有一半被判成共模异常现象用差分探头或者只接一个通道测 VCom读出来 2.52V对照判据 4.25V 到 5.8V直接判 FAIL整份报告被打回。原因VCom 在这份文档里的定义是 CAN_H 与 CAN_L 之和不是半和。单通道测量拿到的是某一路对地的电压差分探头拿到的是 VDiff都得不到和值。解决两个单端探头同时接 CAN_H 和 CAN_L地夹接同一点示波器里做数学相加或者在报告首页注明口径。复现之前先翻判据表确认是半和还是和值这一步花三十秒能省一次返工。5.3 上升沿判据 150ns 和 200ns 打架现象同一份文档表 5 写上升沿最大 150ns摘要段落写最大 200ns测试值 32ns 怎么判都 PASS但写报告时不知道该引哪个数。原因文档经过多轮修改摘要没跟着表格同步属于版本不一致。解决以带条款号的表格为准报告里写“依据表 5tRdiff ≤ 150ns”同时把冲突点写进备注交给文档 owner 确认。不要自己二选一也不要两个都引否则复核的人会认为你没读规范。5.4 低压测试三点同值回滞测不出来现象VError、VStop、VStart 全部记成 5.0VPASS但整车冷启动时 4.8V 就偶发丢帧。原因扫描步进 0.5V 或 1V三个事件落在同一个格子里回滞被抹平另外单点采样没有覆盖温度冷启动时的实际停发点比室温高。解决把 4.5V 到 5.5V 区间按 20mV 重扫单独记录三个阈值加一个 -20℃ 或者 0℃ 的低温点VStart 用回升段单独跑一遍别用下扫的数据反推。回滞小于 100mV 的在报告里标出来。5.5 边沿时间受探头和线束影响换个台架就超差现象台架上测 32ns换到另一个实验室测 55ns两边都没改 DUT判据都是 150ns但差了一倍评审时说不清。原因探头的输入电容、地线长度、线束长度都会改变边沿。10:1 无源探头的地线夹如果有 10cm引入的电感在几十纳秒的边沿上就能看到振铃示波器的 10%~90% 门限会被振铃带偏。解决探头地线用最短的弹簧地针不用长地夹测量点尽量靠近 DUT 端子不要在中途破线两个实验室统一探头型号和衰减比报告里附一张边沿波形截图标注探头型号和地线方式。截图这件事文档里 [TG1_TC4] 到 [TG1_TC7] 都留了位置别嫌麻烦它是唯一能证明测量条件的东西。6. 从 SKIP 到闭环地偏移补测与记录字段八项里唯一没做的是 [TG1_TC8] 地偏移测试结果栏写着 SKIP。SKIP 在测试报告里是个危险词它既不是通过也不是失败而是“没覆盖”一旦交付评审有人追问这一项就会变成整份报告的缺口。地偏移测的是 DUT 的地相对总线参考地发生偏移时还能不能正常收发典型偏移量在 ±2V 量级做法是把 DUT 的电源地通过一个可调直流源抬起来或者拉下去同时监控报文收发。6.1 地偏移补测的最小可行做法台架上串一台隔离的可调电源在 DUT 地与总线地之间从 0V 开始按 0.5V 一步往正负两个方向走每步停留 3 秒用 candump 记录报文和错误帧。走到 DUT 开始丢帧或者错误帧计数明显上升就记下这个偏移量再往回调 0.5V 确认能恢复。整个过程和供电扫描类似只是把电压加在地线上而不是电源正极。要注意的是地偏移测试必须用隔离电源普通台式电源的地和示波器、CAN 卡的地是共的串进去会形成地环路轻则读数不准重则烧接口。另一个细节是偏移过程中 CAN_H、CAN_L 的对地电压会整体平移如果 DUT 的收发器共模范围不够先出问题的是接收而不是发送所以监控要同时看收和发只看发送会漏判。6.2 一份能复用的记录字段这份文档的测试结果栏只有“参数、符号、单位、测试值、测试结果”五列够验收不够复现。我一般会在后面补四列成本很低但下次换人接手时能省掉重新摸索。字段示例作用测量条件13.5V / 25℃ / 500kbps温度、电压、波特率缺一不可测点位置DUT 端子 CAN_H-CAN_L区分 DUT 端子、诊断口、线束末端仪器与探头100MHz 无源 10:1地针边沿类数据必须记否则无法比对口径与条款VCom和值表 5防止定义歧义和版本冲突补这四列之后再回头看 2540Ω 那个数就能一眼判断它是支线终端还是主干终端、有没有扣表笔底数、偏差相对哪个标称值算。物理层测试的价值不在 PASS 那两个字而在于别人拿着你的记录能在另一个台架上复现出同一个数。从那以后我每次拿到这种三段式测试文档都会先把它翻成一张带条件、测点、仪器、口径的表格再动手接线凡是有 SKIP 的项不管评审提不提都单独列一条待办。这套习惯让我少返工了好几次。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑