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-485 | CAN |
|---|---|---|
| 物理层标准 | TIA-485-A | ISO 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Ω 负载) | 驱动器保证的最小差分摆幅 |
| 单位负载 UL | 1 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,全反射。
半双工两线制用 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 的基本结构:
| 段 | 内容 | 作用 |
|---|---|---|
| SOF | 1 位显性 | 帧开始,同步 |
| 仲裁场 | 11 位 ID + RTR | 决定优先级(ID 越小优先级越高) |
| 控制场 | IDE、DLC 等 | 数据长度 |
| 数据场 | 0~8 字节 | 载荷 |
| CRC 场 | 15 位 CRC + 界定符 | 检错 |
| ACK 场 | ACK 槽 + 界定符 | 接收方应答 |
| EOF | 7 位隐性 | 帧结束 |
位填充规则:连续 5 个相同电平后插入 1 个相反电平,接收方自动去掉。位填充保证总线至少有跳变,接收方能持续重同步;它也是后面“两次重同步之间最多 10 位”的依据。
__
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}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 地电位差”。 它是“在这个范围内还能正确判决”的保证;长期工作还要看隔离、爬电、浪涌和安规。
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 不够。
第三步,两种可行配置:
| 方案 | 时钟 | BRP | NBT | TS1(prop+phase1) | TS2 | 采样点 | 传播段 | 40m 是否够 |
|---|---|---|---|---|---|---|---|---|
| A(8MHz,保守) | 8MHz | 1 | 8 | 5 | 2 | 75% | 625ns | 不够(需 700ns) |
| B(8MHz,TS2=1) | 8MHz | 1 | 8 | 6 | 1 | 87.5% | 750ns | 够(700ns) |
| C(16MHz,推荐) | 16MHz | 1 | 16 | 13 | 2 | 87.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 终端与偏置的取值流程
- 确认电缆特性阻抗:RS-485/CAN 常用 120Ω 双绞线;终端取 R=Z_0,两端各一只。
- 算总线电流和终端功耗:I=V_{diff}/60,P=V_{diff}^2/120,选至少 2 倍功率余量的电阻。
- 算节点等效输入电阻:R_{in,total}=12\text{k}\Omega/N(1 UL 节点);1/4 UL、1/8 UL 按比例换算。
- 算空闲差分:V_{AB}=V_{CC}\times(R_{term}\parallel R_{in})/(R_{b,up}+R_{b,down}+R_{term}\parallel R_{in}),要求 >200mV,最好 >250mV。
- 算驱动器负载和电流:确认收发器在 54Ω、共模范围内的驱动能力。
- 验算功耗:偏置 + 终端 + 驱动器,长期工作的温升要可接受。
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\ \Omega560Ω 时:
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 的仲裁与错误处理参考该规范。