Skip to content
深入#RS-485#CAN#差分#终端匹配#偏置#隔离#总线

RS-485 与 CAN 总线硬件 RS-485 & CAN ​

一条 3.3V 的 RS-485 总线,两端各 120Ω 终端,偏置电阻按“常见值”取 560Ω 上拉/下拉。总线空闲时差分电压只有 3.3\times60/(560+560+60)=168\text{mV},低于接收器 200mV 的门限,空闲电平不确定,接收端偶尔读出随机字节。把偏置改成 390Ω,空闲差分升到 236mV,问题消失;但节点增加到 32 个时又跌到 205mV,余量只剩 5mV。RS-485 的偏置、终端和节点数是同一个分压网络里的三个变量,不能分开拍脑袋。

CAN 也一样:1Mbps、8MHz 时钟,位时间只有 8 个 tq;如果坚持 87.5% 采样点,相位段 2(TS2)只剩 1 tq,而 ISO 11898-1 的信息处理时间按 2 tq 计,很多控制器不允许。位定时不是“填几个寄存器”,而是一组互相约束的整数。 这一章把 RS-485 的终端/偏置/共模和 CAN 的仲裁/位定时/失效模式都算成可复算的数字。单端串口见UART 与 RS-232 物理层,同步总线见I²C 与 SPI 总线时序,高速差分接口见USB 与以太网物理层概览,接口保护与隔离取舍见常用外设接口设计。

1. 设计动机 ​

<>

现场一:RS-485 空闲时乱码。 总线上的收发器都关断,A/B 悬空,差分电压在 0V 附近漂;接收器门限是 ±200mV,0V 落在不确定区,输出随机翻转。加 fail-safe 偏置把空闲差分拉到 +200mV 以上,接收端才稳定读“1”。偏置不是“可选的抗噪措施”,而是空闲态的定义。

现场二:CAN 1Mbps 跑 40m,偶发错误帧。 8MHz 时钟、8 个 tq、75% 采样点,传播段只有 625ns;40m 电缆往返 400ns,加收发器环路延迟约 300ns,总共 700ns,已经超过传播段。CAN 控制器检测到相位错误,错误计数上升,最后 bus-off。位定时里的传播段必须覆盖“信号跑到最远节点再回来”的时间,不是随便填。

现场三:两台设备相隔 50m,地电位差 10V,RS-485 收发器烧毁。 RS-485 的共模范围是 −7~+12V,10V 看似在范围内,但加上信号摆幅和浪涌就超了;地环流还会在电缆屏蔽层里流动。换成隔离收发器 + 隔离 DC/DC,地环路被切断,通信恢复。“共模范围”是器件不损坏、能正确判决的范围,不是“可以长期承受的地电位差”。

RS-485 和 CAN 都是差分总线,但设计重点不同:

维度RS-485CAN
物理层标准TIA-485-AISO 11898-2
拓扑多点、半双工(两线)或全双工(四线)多点、广播、半双工
仲裁无(靠主从/令牌/软件)非破坏性位仲裁
差分电平约 ±1.5V 以上(取决于收发器)显性 1.5~3V,隐性约 0V
共模范围−7~+12V约 −2~+7V(高速收发器)
终端两端各 120Ω两端各 120Ω(等效 60Ω)
速率/距离100kbps@1200m,10Mbps@短距1Mbps@约 40m,125kbps@约 500m
错误处理无(可加 CRC/重试)CRC、ACK、错误帧、bus-off

2. 定义与直观 ​

2.1 差分、共模与接收门限 ​

差分总线的信息在两根线的电压差里:

V_{diff}=V_A-V_B,\qquad V_{cm}=\frac{V_A+V_B}{2}

其中 V_A、V_B 是两根线对本地地的电压,V;V_{diff} 是差分电压,V;V_{cm} 是共模电压,V。外界干扰同时耦合到两根线,V_A、V_B 一起变,V_{diff} 不变;这就是差分抗干扰的来源。但共模电压不能无限大:收发器的输入级只能在规定的共模范围内正常工作,超出就饱和、误判,甚至损坏。

TIA-485-A 的关键参数:

参数数值含义
共模范围−7~+12V收发器能正常工作的 V_{cm}
接收门限±200mV差分绝对值超过 200mV 才判为确定状态
差分输出≥1.5V(54Ω 负载)驱动器保证的最小差分摆幅
单位负载 UL1 UL = 12kΩ总线最多 32 UL
电缆120Ω 双绞线终端电阻匹配特性阻抗

“32 个单位负载”是 TIA-485-A 的老口径;现代收发器有 1/4 UL、1/8 UL,可以挂到 128 甚至 256 个节点。能不能挂这么多,要看每个节点的 UL 和总线电容,不是只看“RS-485 支持 32 个”。

2.2 RS-485 拓扑、终端与方向控制 ​

RS-485 的标准拓扑是菊花链(daisy chain):所有节点手拉手挂在同一对双绞线上,只在总线最远的两端各并一只 120Ω 终端,中间节点不端接。终端的作用是吸收信号到达末端时的反射:

\Gamma=\frac{Z_L-Z_0}{Z_L+Z_0}

其中 Z_L 是末端负载阻抗,\Omega;Z_0 是电缆特性阻抗,\Omega;\Gamma 是反射系数。Z_L=Z_0=120\Omega 时 \Gamma=0,无反射;开路时 \Gamma=1,全反射。

RS-485 差分总线:A/B 双绞线上挂多个收发器,只在最远两端各并 120Ω 终端
RS-485 差分总线:A/B 双绞线上挂多个收发器,只在最远两端各并 120Ω 终端

半双工两线制用 DE/RE 控制方向:DE 有效时驱动器把 A/B 拉开,DE 无效时驱动器高阻,接收器一直使能(或 RE 有效)。任一时刻只能有一个节点驱动总线,否则多个驱动器对顶。全双工四线制把发送和接收分开,一对线一个方向,终端仍然各端各 120Ω。

2.3 CAN 物理层与帧 ​

CAN 用一对 CANH/CANL,逻辑是显性(dominant,0)和隐性(recessive,1):

状态CAN_H(5V 收发器典型)CAN_L差分
显性 0约 3.5V约 1.5V约 2V
隐性 1约 2.5V约 2.5V约 0V

ISO 11898-2 给的是范围而不是单点:显性差分 1.5~3.0V,隐性差分约 −0.5~+0.05V;共模范围约 −2~+7V。一些资料写“CAN 共模约 ±12V”是错的:±12V 是部分扩展共模收发器的能力,不是 ISO 11898-2 高速 CAN 的标准范围;选型时要看具体器件的数据手册,不能拿“CAN 都能 ±12V”做设计前提。

CAN 的“线与”是显性覆盖隐性:任一节点发显性,总线就是显性;所有节点都发隐性,总线才是隐性。多个节点同时发时,发显性的节点“赢”,发隐性的节点读回显性,知道自己输了,退出仲裁——这就是非破坏性仲裁。仲裁靠物理电平实现,不需要主节点调度,也不需要重传。

一帧标准 CAN 的基本结构:

段内容作用
SOF1 位显性帧开始,同步
仲裁场11 位 ID + RTR决定优先级(ID 越小优先级越高)
控制场IDE、DLC 等数据长度
数据场0~8 字节载荷
CRC 场15 位 CRC + 界定符检错
ACK 场ACK 槽 + 界定符接收方应答
EOF7 位隐性帧结束

位填充规则:连续 5 个相同电平后插入 1 个相反电平,接收方自动去掉。位填充保证总线至少有跳变,接收方能持续重同步;它也是后面“两次重同步之间最多 10 位”的依据。

__CAN 总线:CANH/CANL 双绞线两端各 120Ω,显性差分约 2V,隐性两线都约 2.5V

2.4 CAN 位定时:把 1 位切成 tq ​

CAN 的标称位时间被切成若干时间份额(time quantum,tq):

t_{q}=\frac{BRP}{f_{clk}},\qquad t_{bit}=NBT\cdot t_{q}

其中 BRP 是波特率预分频(整数),f_{clk} 是 CAN 外设时钟,Hz;NBT 是一位包含的 tq 数;t_{bit} 是位时间,s。一位由四段组成:

NBT=1+T_{prop}+T_{phase1}+T_{phase2}
  • 同步段(Sync_Seg):固定 1 tq,用于同步;
  • 传播段(Prop_Seg):补偿总线传输延迟和收发器环路延迟;
  • 相位段 1(Phase_Seg1):补偿边沿相位误差;
  • 相位段 2(Phase_Seg2):采样点之后的余量,也是信息处理时间。

采样点位置:

SP=\frac{1+T_{prop}+T_{phase1}}{NBT}

重同步跳转宽度(SJW) 是一次重同步最多能调整的 tq 数,通常 SJW\leq\min(T_{phase1},T_{phase2}),且不超过 4。SJW 越大,容忍的振荡器误差越大,但抗噪能力下降。

3. 定量关系 ​

3.1 终端电阻与驱动电流 ​

两端各 120Ω,对驱动器来说两只终端是并联的:

R_{term}=120\parallel120=60\ \Omega

显性差分 2V 时,总线电流:

I_{bus}=\frac{V_{diff}}{R_{term}}=\frac{2}{60}=33.3\ \text{mA}

每只终端上的电流是总电流的一半(16.7mA),功耗:

P_{120}=\frac{V_{diff}^2}{120}=\frac{2^2}{120}=33.3\ \text{mW}

两只共 66.7mW。选 0.125W 电阻有 3.75 倍余量,选 0.25W 更稳妥。注意不要把“总线电流 33.3mA”当成“每只电阻 33.3mA”,否则功耗会算大 4 倍。

TIA-485-A 要求驱动器在 54Ω 负载下给出至少 1.5V 差分:

I_{min}=\frac{1.5}{54}=27.8\ \text{mA}

这是收发器驱动能力的下限;实际选型要看数据手册在 54Ω、共模 −7~+12V 下的保证值。

3.2 偏置网络:空闲态的定义 ​

RS-485 空闲时所有驱动器关断,A/B 只靠终端和偏置电阻。为了让接收器读到确定的“1”,要加 fail-safe 偏置:A 通过 R_{b,up} 接 VCC,B 通过 R_{b,down} 接地。

忽略节点输入电阻时,空闲差分:

V_{AB}=V_{CC}\frac{R_{term}}{R_{b,up}+R_{b,down}+R_{term}}

其中 V_{CC} 是偏置电源,V;R_{term}=60\Omega;R_{b,up}、R_{b,down} 是偏置电阻,\Omega。5V、560Ω:

V_{AB}=5\times\frac{60}{560+560+60}=254.2\ \text{mV}

高于 200mV,可用。3.3V、560Ω:

V_{AB}=3.3\times\frac{60}{560+560+60}=167.8\ \text{mV}

低于 200mV,不可用。 这是一些资料“560~680Ω”说法的问题:它只对 5V 成立,3.3V 下 560Ω 不够。3.3V 要取更小的偏置:

V_{AB}(390\Omega)=3.3\times\frac{60}{390+390+60}=235.7\ \text{mV}V_{AB}(330\Omega)=3.3\times\frac{60}{330+330+60}=275.0\ \text{mV}

节点多了以后,每个节点的 12kΩ 输入电阻并联进来,等效终端变小。32 UL 时:

R_{in,total}=\frac{12\ \text{k}\Omega}{32}=375\ \OmegaR_{term}'=60\parallel375=\frac{60\times375}{60+375}=51.72\ \Omega

再算空闲差分(3.3V、390Ω):

V_{AB}=3.3\times\frac{51.72}{390+390+51.72}=205.2\ \text{mV}

只比 200mV 高 5.2mV,批次/温度一变就可能不够。换成 330Ω:

V_{AB}=3.3\times\frac{51.72}{330+330+51.72}=239.8\ \text{mV}

余量 39.8mV,可用。5V、560Ω、32 UL:

V_{AB}=5\times\frac{51.72}{560+560+51.72}=220.7\ \text{mV}

也可用,但余量只有 20.7mV。偏置电阻不是“越大越省电”,它和节点数、终端、电源电压一起决定空闲差分;节点多、电源低,就要减小偏置。

偏置还会增加驱动器的直流负载。驱动器看到的等效负载:

R_{load}=R_{term}\parallel(R_{b,up}+R_{b,down})\parallel R_{in,total}

5V、560Ω、32 UL:

R_{load}=60\parallel1120\parallel375=49.4\ \Omega

显性 2V 时驱动器要给出:

I_{drive}=\frac{2}{49.4}=40.5\ \text{mA}

比纯终端的 33.3mA 多 21.6%。选收发器时要确认它在 54Ω 负载下的驱动能力,并留出偏置电流的余量;偏置电流本身:

I_{bias}=\frac{5}{560+560+60}=4.24\ \text{mA}

功耗:

P_{bias}=5\times4.24\ \text{mA}=21.2\ \text{mW}
RS-485 故障保护偏置:A 经上拉、B 经下拉,把空闲差分偏到 +200mV 以上
RS-485 故障保护偏置:A 经上拉、B 经下拉,把空闲差分偏到 +200mV 以上

3.3 共模、地电位差与隔离 ​

共模电压来自两处:驱动器输出的共模分量,以及两地之间的地电位差。设地电位差为 V_{GND},电缆地线电阻为 R_g,流过的地电流为 I_g:

V_{GND}=I_gR_g

例:I_g=20\text{A}、R_g=0.5\Omega,则 V_{GND}=10\text{V}。RS-485 的共模上限是 +12V,看似还有 2V 余量;但信号本身还有 ±1.5V 以上的摆幅,加上浪涌/感应,实际余量更小。如果地电流到 30A:

V_{GND}=30\times0.5=15\ \text{V}>+12\ \text{V}

超出共模范围,接收器可能误判,收发器也可能损坏。 CAN 的共模范围更窄(约 −2~+7V),同样的 10V 地电位差已经超出上限 3V,所以汽车/工业 CAN 更强调共地或隔离。

隔离的作用是切断地环路:信号经变压器/电容隔离,电源经隔离 DC/DC,总线侧与 MCU 侧没有直流连接。隔离器要看的参数:

参数含义设计要点
工作电压长期承受的隔离电压按实际地电位差选,不按“测试电压”选
隔离耐压短时耐受(如 1kVrms/1min)安全认证用,不等于长期工作电压
CMTI共模瞬态抗扰度地电位快速跳变时不误码
爬电距离/电气间隙沿面/空间距离按 IEC 60664-1 计算

“共模范围 −7~+12V”不等于“可以长期承受 12V 地电位差”。 它是“在这个范围内还能正确判决”的保证;长期工作还要看隔离、爬电、浪涌和安规。

长总线跨设备时用隔离收发器 + 隔离 DC/DC 切断地环路,总线侧与 MCU 侧无直流连接
长总线跨设备时用隔离收发器 + 隔离 DC/DC 切断地环路,总线侧与 MCU 侧无直流连接

3.4 CAN 位定时与振荡器容差 ​

位时间的四段里,传播段必须覆盖信号在总线上的往返:

T_{prop}\geq\frac{2\left(t_{cable}+t_{loop}\right)}{t_q}

其中 t_{cable} 是单程电缆延迟,s(双绞线约 5ns/m);t_{loop} 是收发器环路延迟,s(典型 100~250ns,以数据手册为准);T_{prop} 以 tq 为单位。40m 电缆:

t_{cable}=40\times5=200\ \text{ns}

往返 400ns;加 2×150ns 环路延迟,共 700ns。若 t_q=125\text{ns}(8MHz、BRP=1),需要:

T_{prop}\geq\frac{700}{125}=5.6\ \text{tq}

取整至少 6 tq。这就是 8MHz、1Mbps 下位定时的硬约束。

振荡器容差用一个保守上界估算。位填充保证两次重同步之间最多约 10 位;两端晶振最坏反向漂移,累计相位误差:

\Delta_{phase}=2\Delta f\times10\times t_{bit}

要在 SJW 内被吸收:

2\Delta f\times10\times NBT\cdot t_q\leq SJW\cdot t_q\Delta f\leq\frac{SJW}{20\,NBT}

其中 \Delta f 是两端相对频率偏差(无量纲);SJW 以 tq 计;NBT 是每位 tq 数。这个式子是保守上界,ISO 11898-1/Bosch 规范还有更精确的表达式(计入 Phase_Seg2),工程上先用它判断量级。8MHz、NBT=8、SJW=1:

\Delta f\leq\frac{1}{20\times8}=0.625\%

SJW=2 时 1.25%。晶振典型 20~50ppm,远小于 0.625%,没问题;陶瓷谐振器 ±0.5% 时,SJW=1 只剩 0.125% 余量,建议 SJW=2 或改用晶振;内部 RC ±2% 则完全不够。“CAN 对晶振不敏感”是相对的:1Mbps、8 个 tq、SJW=1 时,0.625% 就是上限。

4. 典型计算 ​

4.1 1Mbps CAN 在 8MHz 时钟下的位定时 ​

需求:1Mbps,8MHz CAN 时钟,总线 40m,收发器环路延迟约 150ns,晶振 ±30ppm。求 BRP、NBT、TS1、TS2、SJW 和采样点。

第一步,算 tq。取 BRP=1:

t_q=\frac{1}{8\times10^6}=125\ \text{ns}

1Mbps 的位时间是 1µs,所以:

NBT=\frac{1\ \mu\text{s}}{125\ \text{ns}}=8

第二步,分配四段。NBT=1+T_{prop}+T_{phase1}+T_{phase2}=8。如果要求采样点 87.5%,则 1+T_{prop}+T_{phase1}=7,T_{phase2}=1。但 ISO 11898-1 的信息处理时间按 2 tq 计,很多控制器要求 T_{phase2}\geq2;取 T_{phase2}=2,则:

1+T_{prop}+T_{phase1}=6

采样点:

SP=\frac{6}{8}=75\%

传播段至少 6 tq(3.4 节算出的 5.6 向上取整)。很多控制器把 PropSeg 与 PhaseSeg1 合并成 TS1,表中 TS1 即两者之和;用 TS1 做传播预算更保守。方案 A 的 TS1=5,只有 625ns,小于 700ns,40m 不够。

第三步,两种可行配置:

方案时钟BRPNBTTS1(prop+phase1)TS2采样点传播段40m 是否够
A(8MHz,保守)8MHz185275%625ns不够(需 700ns)
B(8MHz,TS2=1)8MHz186187.5%750ns够(700ns)
C(16MHz,推荐)16MHz11613287.5%812.5ns够,余量 112.5ns

方案 A 的传播段 625ns < 700ns,40m 会偶发错误帧;方案 B 把 TS2 压到 1 tq,采样点 87.5%,传播段 750ns,40m 刚好够,但 TS2=1 是否允许要看控制器(很多控制器允许,但 ISO 的信息处理时间按 2 tq 计,长线/高容差时不建议)。方案 C 用 16MHz,NBT=16,TS1=13、TS2=2,采样点 87.5%,传播段 812.5ns,40m 余量 112.5ns,是最稳的。

第四步,算最大总线长度。方案 C:

L_{max}=\frac{812.5-2\times150}{2\times5}=51.25\ \text{m}

方案 B:

L_{max}=\frac{750-300}{10}=45\ \text{m}

方案 A:

L_{max}=\frac{625-300}{10}=32.5\ \text{m}

这就是“1Mbps 约 40m”的定量来源:它不是标准值,而是位定时、收发器延迟和电缆延迟共同夹出来的量级。 40m 能不能跑,取决于你选哪个方案;方案 A 只有 32.5m。

第五步,SJW 与振荡器容差。方案 C 取 SJW=2:

\Delta f\leq\frac{2}{20\times16}=0.625\%

取 SJW=4:

\Delta f\leq\frac{4}{20\times16}=1.25\%

±30ppm 的晶振远小于 0.625%,SJW=2 足够;如果用车规级陶瓷谐振器(±0.5%),SJW=4 更稳。SJW 不能超过 TS1、TS2,也不能超过控制器上限(常见 4)。

第六步,验算位填充。NBT=16、TS1=13、TS2=2,采样点在 14/16=87.5%;连续 5 位同电平后插入 1 位,接收方在跳变沿重同步,SJW=2 能吸收 ±2 tq 的相位跳变。位定时配好后,用示波器量 CANH/CANL 的显性宽度和采样点位置,确认与寄存器一致。

4.2 RS-485 100m、115200:线径与终端 ​

需求:3.3V RS-485,100m,115200,24AWG 双绞线,两端 120Ω,32 个 1 UL 节点。求接收端差分电压、终端功耗和偏置取值。

第一步,算电缆直流电阻。24AWG 约 0.084Ω/m,往返 200m:

R_{cable}=0.084\times200=16.8\ \Omega

第二步,算接收端差分。驱动器输出按 2V 典型、终端 60Ω:

V_{RX}=2\times\frac{60}{60+16.8}=1.5625\ \text{V}

接收门限 200mV,噪声余量:

\frac{1.5625}{0.2}=7.8\ \text{倍}

第三步,算 1200m 的极限:

R_{cable}=0.084\times2400=201.6\ \OmegaV_{RX}=2\times\frac{60}{60+201.6}=0.459\ \text{V}

仍是 200mV 的 2.3 倍,直流上能到 1200m;但 1200m 的往返延迟:

t_{round}=2\times1200\times5\ \text{ns/m}=12\ \mu\text{s}

100kbps 的位时间是 10µs,往返延迟已经超过一位;这就是“1200m 要降到 100kbps 以下”的原因。距离的上限不只是直流压降,还有往返延迟和边沿。

第四步,终端功耗。2V 差分、每只 120Ω:

P_{120}=\frac{2^2}{120}=33.3\ \text{mW}

两只共 66.7mW,选 0.125W 或 0.25W 电阻。

第五步,偏置。3.3V、32 UL,取 390Ω:

V_{AB}=3.3\times\frac{51.72}{390+390+51.72}=205.2\ \text{mV}

余量只有 5.2mV;取 330Ω:

V_{AB}=3.3\times\frac{51.72}{330+330+51.72}=239.8\ \text{mV}

余量 39.8mV,推荐 330Ω。偏置电流:

I_{bias}=\frac{3.3}{330+330+51.72}=4.64\ \text{mA}

驱动器负载:

R_{load}=60\parallel660\parallel375=48.0\ \Omega

先算 60\parallel660=55\Omega,再 55\parallel375=48.0\Omega;显性 2V 时:

I_{drive}=\frac{2}{48.0}=41.7\ \text{mA}

选收发器时要确认 54Ω 负载下的驱动能力,并留 20% 余量。

第六步,终端位置。只在 100m 的两端各一只 120Ω,中间 30 个节点不端接;分支(stub)尽量短,1Mbps 时建议 <0.3m,115200 时可以放宽到几米,但越长反射越明显。星型拓扑、长分支是 RS-485 现场误码的头号原因。

4.3 CAN 仲裁与失效模式 ​

仲裁算例:节点 A 发 ID 0x123(二进制 100100011),节点 B 发 ID 0x122(100100010)。前 8 位相同,第 9 位 A 发 1、B 发 0;总线为显性 0,A 读回 0 ≠ 1,A 退出,B 继续。ID 越小优先级越高,B 赢是因为它的 ID 更小,不是因为它“先发”。

失效模式:

失效现象原因处理
总线开路通信中断/错误帧连接器松动、线缆断检查终端电阻、分段测量
A/B 短路差分 0V,接收器不确定线缆破损、进水加 fail-safe 偏置、隔离、保护
终端失配振铃、过冲、偶发错误只端一端、阻值错、终端不在两端两端各 120Ω,用 1% 电阻
共模超限误码、收发器发热/损坏地电位差、浪涌隔离、共地、TVS
分支过长反射、边沿畸变星型/长 stub菊花链,缩短分支
方向控制错总线冲突、丢字节DE/RE 时序错、多节点同时驱动半双工互锁,等 TC 再释放 DE

CAN 还有一套错误处理:错误计数 TEC/REC 超过阈值后,节点从 error-active 进入 error-passive,TEC 超过 255 进入 bus-off,停止发送,等待 128 次连续 11 位隐性后恢复。bus-off 不是“芯片坏了”,而是总线错误太多时的自我保护;先查终端、共模、位定时,不要先换芯片。

5. 工程含义 ​

5.1 终端与偏置的取值流程 ​

  1. 确认电缆特性阻抗:RS-485/CAN 常用 120Ω 双绞线;终端取 R=Z_0,两端各一只。
  2. 算总线电流和终端功耗:I=V_{diff}/60,P=V_{diff}^2/120,选至少 2 倍功率余量的电阻。
  3. 算节点等效输入电阻:R_{in,total}=12\text{k}\Omega/N(1 UL 节点);1/4 UL、1/8 UL 按比例换算。
  4. 算空闲差分:V_{AB}=V_{CC}\times(R_{term}\parallel R_{in})/(R_{b,up}+R_{b,down}+R_{term}\parallel R_{in}),要求 >200mV,最好 >250mV。
  5. 算驱动器负载和电流:确认收发器在 54Ω、共模范围内的驱动能力。
  6. 验算功耗:偏置 + 终端 + 驱动器,长期工作的温升要可接受。

5.2 隔离与共地的取舍 ​

场景共地隔离说明
同一机箱、短总线可以不需要地电位差小,成本低
跨机柜、几十米谨慎推荐地电位差可能几伏
跨厂房、不同配电不允许必须地电位差可达几十伏,地环流大
汽车/电机附近谨慎推荐共模瞬态强,地弹大
高安全/医疗不允许必须安规要求

隔离不是“加一颗隔离器”就完事:还要隔离 DC/DC、隔离侧的地要浮空、爬电距离/电气间隙按 IEC 60664-1 算、CMTI 要覆盖现场瞬态。用 0Ω 把隔离侧的地连回本地地,等于把隔离废掉。

5.3 保护与布线 ​

  • TVS:总线入口对地加 TVS,钳位电压低于收发器绝对最大值;RS-485 常用双向 TVS,CAN 用低电容 TVS。
  • 限流:TVS 与收发器之间串 10~100Ω 或 PTC,限制浪涌残流;电阻不能太大,否则和总线电容一起拖慢边沿。
  • 共模扼流圈:抑制共模噪声,差分信号不受影响;选型看共模阻抗和额定电流。
  • 屏蔽/双绞:双绞抑制磁场耦合,屏蔽抑制电场耦合;屏蔽层单点接地,避免地环路。
  • 布线:菊花链、短分支、终端在两端、A/B 成对走、远离电源/电机线。

5.4 A/B 极性的坑 ​

RS-485 的 A/B 标注在标准和厂商之间并不完全统一:有的器件 A 是同相端、B 是反相端,有的相反;有的用 “+”/“−” 标注。不要凭字母接线,要看数据手册的真值表:驱动器输入高时,哪个引脚是高、哪个是低;接收器 V_A-V_B>200\text{mV} 时输出什么。 接反的现象是“完全收不到”或“收到的数据取反”,不会烧器件,但很难查。

6. 常见坑 ​

<>
  • 只端接一端:现象——高速时波形振铃、偶发错误帧。原因——末端开路,\Gamma\approx1,反射叠加。解决——只在最远两端各 120Ω,中间不端接。
  • 用一只 60Ω 代替两只 120Ω:现象——看似等效,实际终端位置不对,反射仍在。原因——60Ω 是两只 120Ω 并联的等效值,不是单只电阻的取值;终端必须放在总线两端。解决——两端各 120Ω,1% 精度。
  • 3.3V 用 560Ω 偏置:现象——空闲差分 168mV,接收器输出随机。原因——偏置分压不够,低于 200mV 门限。解决——按 3.2 节算,3.3V/32 节点取 330Ω 左右;5V 可用 560Ω。
  • 忽略节点输入电阻:现象——实验室 2 个节点正常,现场 32 个节点空闲就乱。原因——32 UL 并联后终端等效从 60Ω 降到 51.7Ω,偏置分压下降。解决——按最坏节点数算 V_{AB},留 >50mV 余量。
  • 偏置电阻取太小:现象——驱动器发热、差分摆幅下降。原因——偏置网络与终端并联,驱动器负载从 60Ω 降到 48Ω,电流增大。解决——在 V_{AB} 和驱动能力之间折中,选 330~560Ω 并验算电流。
<>
  • 以为 CAN 共模能到 ±12V:现象——地电位差 10V 时误码/损坏。原因——ISO 11898-2 高速 CAN 共模约 −2~+7V,±12V 是部分扩展器件的能力。解决——查具体收发器数据手册;地电位差大就隔离。
  • 8MHz、1Mbps 硬套 87.5% 采样点:现象——控制器报位错误,或采样点实际是 75%。原因——NBT=8 时 87.5% 要求 TS2=1,而信息处理时间按 2 tq 计。解决——用 16MHz/NBT=16/TS1=13/TS2=2,或确认控制器允许 TS2=1。
  • 传播段不够:现象——总线越长错误帧越多,缩短就好。原因——T_{prop} 没覆盖 2×(电缆延迟+收发器延迟)。解决——按 3.4 节算,40m/1Mbps 至少 6 tq 传播段。
  • 星型/长分支:现象——示波器上振铃、过冲,偶发错误帧。原因——分支末端反射。解决——菊花链、短 stub、两端终端。
  • 不隔离跨厂房:现象——通信口烧、地线发热。原因——地电位差在地环路里产生大电流。解决——隔离收发器 + 隔离 DC/DC,屏蔽单点接地。
  • A/B 接反:现象——完全收不到或数据取反。原因——A/B 标注不一致。解决——按数据手册真值表核对,不按字母猜。
  • DE 释放过早:现象——最后一个字节偶尔错。原因——TXE 就释放 DE,最后一位没发完。解决——等 TC,再留收发器关断时间。

7. 自测题 ​

RS-485 两端各 120Ω,显性差分 2V。总线电流、每只终端功耗各是多少?

两只 120Ω 并联:

R_{term}=120\parallel120=60\ \Omega

总线电流:

I=\frac{2}{60}=33.3\ \text{mA}

每只终端电流是总电流的一半(16.7mA),功耗:

P=\frac{2^2}{120}=33.3\ \text{mW}

两只共 66.7mW。不要用 33.3mA 去乘 120Ω,那会把功耗算大 4 倍。

3.3V、32 个 1 UL 节点、两端 120Ω,偏置 560Ω 为什么不够?应该取多少?

32 UL 的输入电阻:

R_{in,total}=\frac{12\text{k}}{32}=375\ \Omega

与终端并联:

R_{term}'=60\parallel375=51.72\ \Omega

560Ω 时:

V_{AB}=3.3\times\frac{51.72}{560+560+51.72}=145.7\ \text{mV}

低于 200mV,不够。390Ω 时 205.2mV,余量太小;330Ω 时 239.8mV,推荐。5V 下 560Ω 可以(32 UL 时 220.7mV)。

CAN 的共模范围是多少?为什么不能拿 ±12V 做设计前提?

ISO 11898-2 高速 CAN 的共模范围约 −2~+7V;±12V 是部分扩展共模收发器的能力,不是标准范围。拿 ±12V 做前提,遇到 10V 地电位差会以为“还在范围内”,实际已经超出标准器件的共模能力,可能误码或损坏。选型要看具体收发器数据手册的共模范围,地电位差大就隔离。

1Mbps、8MHz CAN,NBT=8。要 87.5% 采样点,TS1/TS2 怎么分?有什么约束?

位时间 1µs,tq=125ns,NBT=8。87.5% 要求 1+TS1=7,所以 TS1=6、TS2=1。约束是 TS2 不能小于信息处理时间(ISO 11898-1 按 2 tq 计),很多控制器要求 TS2≥2;若 TS2=2,则 TS1=5,采样点 75%。要 87.5% 且 TS2=2,需要 NBT=16(16MHz 时钟,TS1=13、TS2=2)。

8MHz、1Mbps、NBT=8、TS1=5、TS2=2,40m 总线够不够?

传播段 5×125=625ns。40m 往返 400ns,加 2×150ns 收发器环路延迟 300ns,共 700ns:

625<700

不够,40m 会偶发错误帧;最大约:

L_{max}=\frac{625-300}{2\times5}=32.5\ \text{m}

要 40m,用 16MHz/NBT=16/TS1=13/TS2=2(传播段 812.5ns,最大约 51m),或确认控制器允许 TS2=1(TS1=6,传播段 750ns,最大约 45m)。

RS-485 100m、24AWG、2V 驱动、60Ω 终端,接收端差分多少?1200m 呢?

24AWG 约 0.084Ω/m,100m 往返:

R_{cable}=0.084\times200=16.8\ \OmegaV_{RX}=2\times\frac{60}{60+16.8}=1.5625\ \text{V}

1200m:

R_{cable}=0.084\times2400=201.6\ \OmegaV_{RX}=2\times\frac{60}{60+201.6}=0.459\ \text{V}

直流上都高于 200mV;但 1200m 往返延迟 12µs,100kbps 位时间只有 10µs,所以距离还受延迟/边沿限制。

CAN 仲裁时,ID 0x123 和 0x122 哪个赢?为什么?

0x122 赢。两者前 8 位相同,第 9 位 0x123 发 1、0x122 发 0;总线显性 0 覆盖隐性 1,0x123 读回 0 ≠ 1,知道自己输,退出仲裁;0x122 继续。ID 越小,显性位越靠前,优先级越高。仲裁是非破坏性的,输家退出后不需要重传当前帧。

8. 参考资料 ​

  • TIA-485-A, Electrical Characteristics of Generators and Receivers for Use in Balanced Digital Multipoint Systems, 1998:−7~+12V 共模范围、±200mV 接收门限、1.5V 差分输出(54Ω 负载)、12kΩ 单位负载、32 UL 与 120Ω 电缆;本章 2.1、3.1、3.3 的 RS-485 参数以该标准为准。
  • ISO 11898-2:2016, Road vehicles — Controller area network (CAN) — Part 2: High-speed medium access unit:显性/隐性差分电压、共模范围、总线故障与位时间要求;本章 2.3、3.3、3.4 的 CAN 物理层参数以该标准为准。
  • ISO 11898-1:2015, Road vehicles — Controller area network (CAN) — Part 1: Data link layer and physical signalling:帧格式、位填充、仲裁、位定时(同步段/传播段/相位段/SJW);本章 2.3、2.4、4.1 的位定时与仲裁参考该标准。
  • Texas Instruments, SLLA272D RS-485 Design Guide:终端匹配、故障保护偏置、拓扑、保护与共模计算;本章 3.1、3.2、5.1 的偏置与终端计算参考该指南。
  • Texas Instruments, SLOA101B Introduction to CAN:位定时参数、采样点、SJW 与总线长度估算;本章 3.4、4.1 的位定时算例参考该文档。
  • Robert Bosch GmbH, CAN Specification Version 2.0, 1991:非破坏性仲裁、错误处理与位填充规则;本章 2.3、4.3 的仲裁与错误处理参考该规范。