远程IO模块硬件设计:RS485总线浪涌防护与总线阻抗匹配
远程IO模块是工业现场分布最散的节点——32点DI/16点DO挂Modbus RTU,一条RS485总线拉300–1200米串32个站点,末端挂变频器、电磁阀、焊机,雷电感应的浪涌顺着屏蔽层窜进来能直接炸收发器(MAX3485/SP3485这类3.3V款Vcc才3.6V,扛不住±2kV就挂)。防护和匹配没做好,轻则丢包重发,重则整条线节点全灭。下面以32点DI+16点DO远程IO(STM32G4 + MAX3485,9600–250kbps自适应)为主线。
一、浪涌防护:两级 + Fail-Safe 偏置
RS485的浪涌路径是"线缆→A/B引脚→收发器→Vcc/地",IEC 61000-4-5要求线-地±4kV、线-线±2kV。单靠TVS扛不住——能量太大TVS先炸,必须分级。
第一级:GDT扛共模大能量
• A对GND、B对GND各挂一颗GDT(如Bourns 2035-xx,标称90V直流保持,8/20μs下±4kV能扛),GDT地走Chassis_GND(接屏蔽层)
• GDT和TVS之间串自恢复熔丝PPTC(100–250mA),限流防GDT动作后短路持续烧
第二级:TVS钳残压
• A对GND、B对GND各挂TVS(如Semtech RClamp0512TQC,Vrwm=5V,Cj<5pF,250kbps下不拖尾)
• A-B之间再挂一颗双向TVS(Vrwm=5V)或两颗反向串联稳压管(3.3V+3.3V),防A-B线-线浪涌
Fail-Safe偏置(防总线空闲时差分=0导致误触发)
• 总线侧A上拉1kΩ到3.3V、B下拉1kΩ到GND(偏置电流约3mA,32节点分摊后每节点多100μA,可接受)
• 偏置让空闲时VA-VB≈+200mV,满足MAX3485的Fail-Safe阈值(>-200mV)
/* 防护拓扑示意(原理图注释)*/
/*
A线──┬─GDT_A→Chassis_GND(屏蔽层)
├─PPTC(100mA)─┬─TVS_A(GND)──┐
│ └─TVS_AB(A-B) │
B线──┼─GDT_B→Chassis_GND │→ MAX3485(A/B)
├─PPTC(100mA)─┬─TVS_B(GND)──┘
│ └─下拉1k→GND(B)
└─上拉1k→3.3V(A)
Chassis_GND─1nF+1MΩ─Signal_GND(单点RC)
*/
⚠ TVS的Cj必须<10pF(250kbps时位周期4μs,Cj大了上升沿塌),RClamp0512TQC的Cj=3pF够用;别用普通SMAJ系列(Cj>50pF,250kbps直接拖成正弦)。
二、总线阻抗匹配:120Ω不是每个节点都挂
RS485差分阻抗标称120Ω,但终端电阻只在总线最远端两个节点挂,中间节点不挂——这是远程IO最容易翻车的地方。
• 32节点总线全长1200米,特征阻抗≈120Ω(AWG24双绞)
• 头节点(PLC侧)和尾节点(最远IO)各挂一颗120Ω/0.25W(误差±1%,如YAGEO CFR-25JB),其他30个中间节点不挂
• 如果中间节点也挂120Ω,等效Rterm=120∥120∥…30个≈4Ω,驱动器输出摆幅从±2V掉到±0.1V,通信直接断
MAX3485的RO引脚上拉10kΩ到3.3V(默认高,无数据时RO=1),防止总线空闲时RO乱跳触发STM32外部中断。
三、PCB布局三件事
1. TVS/GDT紧靠端子:A/B进端子后先过GDT→PPTC→TVS,再进MAX3485,走线<5mm;TVS的GND脚打2个via到SGND铜
2. A/B走差分对内:内层走,两侧GND fence每5mm一个via,远离DI/DO的大电流走线(DI光耦原边、DO继电器线圈)
3. 隔离电源:远程IO建议收发器侧和MCU侧隔离(ADuM1201+隔离DC/DC),浪涌从A/B进来被GDT泄到Chassis_GND,不进MCU;如果没隔离,Chassis_GND和Signal_GND之间1nF+1MΩ RC单点接,GDT地走Chassis、TVS地走Signal
/* STM32G4 侧接收中断(防抖动)*/
void EXTI_Callback(void) {
static uint32_t last_tick;
if (HAL_GetTick() - last_tick < 5) return; // <5ms 忽略(浪涌毛刺)
last_tick = HAL_GetTick();
modbus_byte_rx = USART_ReceiveData(USART2); // MAX3485的RO→USART2_RX
}
四、三个翻车高发点
• 120Ω每个节点都挂:32节点总线末端幅度从±2V掉到±0.15V,MAX3485的Vih_min=±200mV,直接断链。只在首尾挂
• TVS选Cj>20pF:250kbps时一位4μs,TVS结电容充放电拖尾,眼图闭合一半,误码率从10⁻⁹飙到10⁻⁵。换RClamp0512TQC(Cj=3pF)
• 屏蔽层两端接机壳形成地环路:远程IO的屏蔽层在端子处接Chassis_GND(弹片压),但Chassis_GND通过1nF+1MΩ RC单点接Signal_GND,不能直连——否则两端机壳地电位差(变频器启停时能有5–10V)会驱电流沿屏蔽层流,烧GDT。RC让高频浪涌走电容、低频地环路被1MΩ阻断
32节点、1200米、250kbps下,头尾120Ω+Fail-Safe偏置+GDT/TVS两级,眼图VA-VB开度>±1.5V,误码<10⁻⁹,EFT±2kV/5kHz、浪涌线-地±4kV一次过。
________________________________________
远程IO模块RS485的真谛:GDT(90V)→PPTC→TVS(Cj<5pF)两级防护、A/B间双向TVS、Fail-Safe上下拉保空闲、120Ω只挂首尾节点、屏蔽层接Chassis_GND+1nF+1MΩ单点RC接Signal_GND。这套走完32节点1200米250kbps不丢包,浪涌±4kV/EFT±2kV一轮clean。





