发布于 

烧不坏的通信口:隔离型 CAN 与 RS485 防护电路

第一次把 AGV 推上测试场,桌面阶段 CAN 分析仪一路绿灯,帧率稳得像假数据;可一上电机、一给负载,Bus-Off 报错就开始刷屏。通信口像被点了穴——线明明是通的,节点却接二连三掉线、报错,最后整条总线静默。这种"架空空转完美、落地带载就死"的灵异现场,十次里有九次不是软件写错了,是硬件把通信口卖给了现场噪声。

说个具体的:一台巡检机器人,桌上联调三天零丢帧,现场第一天夜班,电机一吃满载就掉节点。运维把波特率从 500 k 降到 250 k、加重试到十次,毫无改善;最后发现是驱动板和通信板共地,电机启动瞬间的地弹直接把通信收发器的共模窗口顶穿。降波特率只是把每个位拉宽,地弹那个微秒级尖峰照样在每一位上都来一下——方向错了,调参没用。 这种案子我见过太多次,所以这篇不跟你讲协议栈,只讲物理层怎么把口子焊死。

这条主线很清晰:电机一转,通信就死。顺着一根 CAN 线,把凶手一个个揪出来——先有地弹,再有共模噪声,最后静电补刀。每一章制伏一个,到结尾通信口就"烧不坏"了。

先说一个反直觉的现象:这种现场,第一反应往往是软件组背锅。上位机看到 Bus-Off、帧丢失,本能去调重试次数、加看门狗、降波特率——这些全是南辕北辙。地弹和静电作用的是物理层,软件栈在链路层之上,物理层把位判错了,上面再怎么重试都是重复错误。排查的第一步永远是先用示波器确认是硬件层的问题,而不是先改代码。 这一篇就是教你怎么把物理层这关守住。

一、凶手一号:地弹,把参考地抬到了天上

先看最阴险的一个。电机驱动板在启动、换相、堵转的瞬间,地电流 I 在微秒级突变,而任何 PCB 走线和接插件引脚都有寄生电感 L。地弹电压就是 V = L × dI/dt——一个几 nH 的引脚电感,碰上几十 A/µs 的电流斜率,地平面被瞬间抬高 5–15 V。

麻烦在于 CAN 收发器看的是"相对于自己地"的差分电压。逻辑侧 MCU 的地是干净的 GND_LOGIC,现场侧收发器的地却跟着电机地一起被抬起来。两边地电位一错位,CANH/CANL 对接收机的共模电压就跑出了 ISO 11898 规定的 -12 V ~ +12 V 窗口,接收机开始误判位、CRC 错、最后节点自己把自己踢进 Bus-Off。这不是信号坏了,是参考地跑了。 软件再怎么调重试、加看门狗都救不回来,因为根因在电源地。

怎么现场确认就是它?两个动作:第一,把示波器两个通道分别接到 GND_LOGIC 和 GND_ISO,用差分测量模式看两地之间的电压——电机一启动,你会在时域上看到一个 5–15 V、持续几微秒的尖峰,那就是地弹;第二,电流探头卡在驱动板供电线上,读出 dI/dt,代入公式 V = L × dI/dt 反推寄生电感,通常能定位到是接插件引脚还是地平面走线太细。很多人试过的"加终端电阻、降波特率"对地弹无效,因为终端电阻只管阻抗匹配、不管共模偏移,波特率降了位宽变宽,但地弹把整个共模窗口顶出去的瞬间照样判错。认准凶手再下药,别拿软件填硬件的坑。

补充一个容易漏的观察点:地弹不仅会抬高通信收发器的参考地,还会顺着同一个电源平面窜进 MCU 的数字电源。地弹发生时,逻辑侧如果和驱动侧共电源,MCU 的 VCC/GND 会跟着抖,轻则 ADC 采样跳变、定时器抖动,重则 MCU 复位——你看到的"Bus-Off"可能只是连锁反应里最显眼的一环,根子还是那颗寄生电感。所以隔离方案里那颗给现场侧供电的 B0505S 必须是专用的,绝不能从 MCU 的同一路 5 V 再分一支过去,否则隔离栅只挡了信号、电源地还是通的,地弹照样顺着电源线爬回逻辑侧。回头看,"假隔离"的另一种变形就是"信号隔了、电源没专",记住这条。

二、凶手二号:静电,±8 kV 直冲裸接口

地弹是"慢刀子",静电是"一击毙命"。现场工人插拔接插件、线缆蹭过金属机架,±8 kV 的接触放电(IEC 61000-4-2 等级 4)会顺着裸接口打进来;空气放电更狠,能到 ±15 kV。如果 CANH/CANL 直接连到收发器 IO、中间没有任何泄放路径,这几 kV 的脉冲纳秒级就灌穿 ESD 保护二极管,收发器当场报废。更坑的是它往往"打一下坏一片"——同总线上的相邻节点也被耦合进来。

这里有个常见误解要澄清:收发器 datasheet 里写的"ESD 保护 ±2 kV / ±4 kV"指的是芯片制造和搬运时的 HBM(人体模型)等级,是给产线防静电用的,不是给现场 IEC 接触放电 ±8 kV 用的。现场等级比 HBM 严酷一个数量级,靠芯片内部那点 ESD cell 扛现场放电,等于拿雨衣挡高压水枪。必须外挂 TVS 阵列。

接触放电和空气放电机理还不一样:接触放电是放电枪直接怼在金属端子上,能量几乎全部灌进 TVS 回路,路径可控;空气放电是枪头靠近端子拉弧,弧径随机、前沿更陡,更容易从缝隙耦合进板子内部而非只走端子。所以防护不能只守端子——连接器金属外壳要接机壳地(通过那颗 1 nF/2 kV 电容耦合高频),让空气放电的弧也优先走外壳泄放,而不是钻进信号层。这也是为什么前面强调 GND_ISO 与机壳之间要有那颗电容:它既给 ESD 高频回流,又给空气放电一个受控的就近泄放点。

两个凶手定位完毕,下面开始逐个制伏。第一刀砍向根因:把"地"和"电"一起切断,这就是隔离。

怎么一眼看出一块板子是真隔离还是假隔离?上电后用万用表二极管档或绝缘电阻档量 GND_LOGIC 和 GND_ISO 之间:真隔离应该是开路(兆欧级以上,靠隔离栅的介质撑着);假隔离会量到一个低阻值(共地或通过电源地连着)。我见过最隐蔽的一种假隔离——信号用了 ISO7721,电源却从同一颗 AMS1117 的 5 V 分两路出去,设计者以为"分了两路就是隔离",其实两地在源端就已经焊死,地弹顺着电源地长驱直入。隔离是端到端的:信号路径和电源路径必须同时断开,漏一条都不算数。

调试时怎么确认隔离真生效了?最直观的办法是把示波器一个通道接 GND_LOGIC、另一个通道接 GND_ISO,电机满载启动看两地波形——真隔离下,现场侧的共模尖峰应该被死死挡在栅那一侧,GND_LOGIC 上几乎看不到地弹的影子。如果你在 GND_LOGIC 上还看到 5 V 级的同步尖峰,说明隔离没做干净,八成是电源地或那颗 4.7 nF 电容把两地又连上了。这个观测比任何"理论上应该隔离了"都管用,投板回来第一件事就量它。

隔离和 TVS 也分系统级和板级两层。板级就是本篇讲的这些器件;系统级是机柜里把通信电缆的屏蔽层单端接机壳、把各节点机壳统一搭到一条低阻抗保护地、走线远离动力线——这些"土办法"往往比板上的 TVS 更能决定现场 survive 不 survive。板级防护是下限,系统级布线是上限,两者都做,通信口才真的"烧不坏"。别把板子焊完就觉得万事大吉,线怎么走、屏蔽怎么接,同样是这道防线的一部分。

最后泼盆冷水:隔离不是银弹,也不是凡事都得上。如果你做的是桌面上两块板子之间、共地、走线半米、周围没有大电机,那不隔离也大概率跑得欢——地弹和共模噪声的源头(大电流地回路、强干扰源)根本不存在,隔离是多余的成本和面积。隔离是给"现场"用的:驱动板共地、线缆拉到机壳外、身边有继电器/变频器/电焊机,这种工况下隔离是从"偶尔通信"到"可靠通信"的分水岭。判断标准就一条——现场侧的地会不会被大电流或强干扰抬起来。会,就隔离;不会,就省。 别把实验室结论直接搬进工厂,也别把工厂方案无脑塞进桌面项目。

三、隔离的本质:斩断信号还不够,电源地也得断

很多人以为"加个隔离器就安全了",这是第一个大坑——假隔离。只用一颗 ISO7721 数字隔离器隔开 TX/RX 信号,但隔离两侧还共用同一个 5 V、同一根地。隔离器确实挡住了信号层的地环流,可电源地线没断,地弹照样沿着 5 V 回流路径灌进现场侧。信号隔离了、电源没隔离,等于门栓了窗没关,地弹该进来还进来。真隔离必须信号和电源同时斩断,让两侧地彻底变成两个互不相干的域。

实现真隔离有两条路:

  • 方案 A(分立):用 B0505S 隔离 DC-DC(5 V→5 V,原副边不共地)给现场侧单独供电,信号侧用 CA-IS3050G 数字隔离器,或干脆上 ISO1042 这种内部已含信号隔离的 CAN FD 收发器。器件便宜、可复用,适合多路总线。
  • 方案 B(高集成):ADM3055E / CA-IS3052W 单芯片把隔离电源也做进去了,信号隔离 + 隔离 DC-DC 一次搞定,外围最少、最省心,代价是单颗成本高。

两条路的拓扑逻辑完全一致,下面是一个把隔离栅两侧域画清楚的骨架:

隔离技术本身也有两派:TI 的 ISO1042 用电容耦合(片上微型电容穿过隔离栅传信号),ADI 的 iCoupler 和川土微的器件多用磁耦合(片上变压器)。两派都能达到加强绝缘等级,差别在抗共模瞬态能力(CMTI)和寿命,选型时看 CMTI 指标(典型 >50 kV/µs 才算稳)。无论哪派,隔离栅的**爬电距离(creepage)和电气间隙(clearance)**才是物理安全的根本——按 IEC 60664,现场总线可能碰到 24–48 V 甚至更高,加强绝缘的爬电距离要 ≥3.5 mm,这跟后面 PCB 布局的"隔离沟掏空"是同一件事的两个表述。

还要分清两个容易混的额定:**隔离耐压(kV rms,比如 2.5 kV / 5 kV rms)**是出厂验证的绝缘强度,代表栅能扛多大的击穿电压;**最大重复工作电压(VRMS / VIOWM)**才是日常能长期加在两侧之间的电压,通常只有几十到一百多伏。选型时后者更关键——你不会因为隔离耐压标到 5 kV 就敢把 48 V 现场侧长期怼上去,长期共模得看工作电压额定。CAN 现场侧常驻共模 ±12 V,远在安全区,但如果你把隔离收发器用在 ±48 V 以上的电源耦合场景,就得重新核算工作电压,别被那个漂亮的 kV rms 数字晃花了眼。

===== 逻辑侧 (GND_LOGIC, 5V) =====   ||   ===== 现场侧 (GND_ISO) =====
                                     ||
MCU  CAN_TX / CAN_RX                ||     CAN 收发器 (TCAN1042 / ISO1042 侧)
      │                             ||           │
 CA-IS3050G 数字隔离器 === 隔离栅 === 隔离电源 B0505S 供 5V_ISO
 磁耦/容耦穿过栅            ||        反激穿过栅
      │                             ||           │
 逻辑地 GND_LOGIC           ||           隔离地 GND_ISO
                                     ||
            ┌──── 现场侧继续往前走 ────┴────────────┐
            │ 共模电感 ACT45B-510                   │
            │ TVS  PESD1CAN  (先接,泄放 ESD)       │
            │ 分裂终端 60Ω + 60Ω 中点 4.7nF→GND_ISO │
            │ D-SUB / 端子 ──► 拉到总线             │
            └──────────────────────────────────────┘

两条路怎么选,一张表说清:

维度 方案 A 分立(B0505S + CA-IS3050G/ISO1042) 方案 B 高集成(ADM3055E / CA-IS3052W)
隔离电源 外置 B0505S 反激模块 片内集成 DC-DC
器件数量 隔离器 + 收发器 + 电源,三颗起 单芯片
空载坑 需并 470 Ω 假负载稳压 内部已稳压,无此坑
成本 低,可多路复用同一电源 高,但省外围
适用 多路总线、成本敏感 紧凑空间、少路数

B0505S 的坑必须单独点名:这类反激隔离模块空载稳压极差,标称 5 V,轻载能飘到 6–7 V 甚至更高,直接超收发器 VCC 上限。解法是**必须并联一颗 470 Ω 假负载(约 10 mA)**把空载拉进稳压区,或者换成内部带稳压的隔离电源。我见过不止一块板子,调了一周通信,最后发现是隔离电源空载把收发器喂死了——这个坑记下。

四、凶手二号的上半身:共模噪声,靠共模电感滤掉

地弹压下去后,还剩电机、继电器辐射进来的共模干扰。CAN 的数据在 CANH/CANL 的差值里传,而干扰是以共模形式叠加到两根线上的(同相、等大、不携带信息)。既然数据走差分、噪声走共模,就能用共模电感把它们拆开:ACT45B-510 在 100 MHz 下共模阻抗高达 1000–2200 Ω,对共模电流是堵墙;对差模数据电流(两根线反向)它只呈现漏感,阻抗极小,几乎不挡。

为什么差分本身还不够、非得加这颗电感?因为差分线的**共模抑制比(CMRR)**是有限的——理想差分接收机只认差值、完全无视共模,但真实收发器的两个输入脚不可能完全对称,共模电压会有一部分泄漏進差分判决,这就是共模噪声能误码的根源。共模电感干的事,就是先把共模噪声明着压低 20–40 dB,让进入收发器的共模分量远低于它的 CMRR 容限,等于给差分接收机又加了一道"前置滤网"。差分是底子,共模电感是把底子用满的放大器。 注意它只对共模有效,对已经变成差模的噪声(比如两根线耦合不对称)无能为力,所以走线时 CANH/CANL 必须等长、紧耦、平行,别让共模在传输途中变成差模。

这一点在接插件和线缆上同样成立:用双绞线(CAN 专用双绞线或超五类线的一对)而不是两根并行飞线,绞合让外界磁场在相邻节距上抵消,共模噪声还没到板子就被绞合削弱了一截。板级共模电感是第二道,线缆绞合是第一道,两道叠加才稳。

关键是漏感要小。CAN-FD 跑到 5 Mbps 时边沿只有几十 ns,漏感大了会让边沿变缓、振铃、码间串扰。所以选型盯着两个指标:共模阻抗高、漏感低——ACT45B-510 漏感典型 < 0.4 µH,正是为高速总线调的。

漏感危害可以量化一下:共模电感的漏感会和总线负载电容(线缆 + 节点输入电容,几十 pF 量级)形成一个差分谐振回路,漏感 0.4 µH 配 50 pF,谐振频率约 1/(2π√(LC)) ≈ 35 MHz。这个谐振峰如果落在数据谐波附近,就会在边沿上叠振铃;漏感再大一个数量级,振铃直接吃进建立时间,bit 采样点错位。所以别贪共模阻抗高而忽略漏感规格——共模阻抗和漏感是一对矛盾指标,高速总线优先压漏感。

共模电感还有两个常被忽略的额定值。一是额定电流——共模电感受到了大的共模电流(比如地电位差驱动的持续电流)会磁饱和,饱和后共模阻抗断崖下跌,滤波直接失效,所以额定电流要留够余量,别只看阻抗曲线。二是DCR(直流电阻)——它串在信号回路里,DCR 大了会在 CANH/CANL 上引入额外的差分压降和功耗,长线、多节点时这个压降会蚕食噪声裕量。选型时把"共模阻抗 / 漏感 / 额定电流 / DCR"四个数一起看,缺一就会在某一工况翻车。

顺着这个提醒,CAN-FD 的边沿和位时间也得心里有数。CAN-FD 把报文分成仲裁段(≤1 Mbps,沿用经典 CAN 的位时间)和数据段(最高 8 Mbps,边沿陡得多)。数据段边沿几十 ns,对共模电感的漏感和 TVS 结电容极其敏感——漏感一大、边沿振铃,采样点(通常设在位时间的 60–80%)就可能落在振铃峰上,bit 错;结电容一大、边沿被 RC 拖缓,建立时间不够,同样误码。所以 CAN-FD 比经典 CAN 更挑这两颗料:共模电感漏感要压到 <0.4 µH 量级、TVS 结电容要 <15 pF 甚至更低。如果你只跑 500 kbps 经典 CAN,这些余量可以放宽;一旦上 FD,参数卡紧,别拿经典 CAN 的经验值直接套。

五、凶手二号的下半身:分裂式终端,给共模开条泄放道

标准终端是 120 Ω 跨接在 CANH-CANL 两端。进阶打法叫分裂式终端:两颗 60 Ω 串联,中点经 4.7 nF 电容接到隔离地 GND_ISO。

为什么有效,拆成两看:

  • 差分看中点=虚拟地,两颗 60 Ω 串起来还是 120 Ω,数据该匹配还是匹配,边沿不受影响;
  • 共模看中点经 4.7 nF 接地,对高频共模噪声这是一条低阻泄放通道,把叠加在信号上的共模分量直接拽到 GND_ISO,实测能再压 10–15 dB。

死规矩:这 4.7 nF 的中点必须接隔离侧地 GND_ISO,绝不能接逻辑地 GND_LOGIC——否则你前面辛辛苦苦做的隔离,被这颗电容悄悄桥接回去了,前功尽弃。

配套提醒一个现实约束:分裂终端解决的是共模泄放,不解决长线反射。CAN 总线长度和波特率强相关——1 Mbps 建议 ≤40 m,500 kbps 约 ≤100 m,125 kbps 可到 500 m 以上,本质是信号上升时间相对线缆传输延迟的比例。线越长、波特率越高,越要靠两端的 120 Ω(或分裂式)终端把反射吃掉;中途随便挂个无端接的节点,就会在该分支形成 stub 反射,CAN-FD 的高速边沿对这种反射尤其敏感。隔离、共模、TVS 是抗干扰三件套,终端匹配是另一件必须同时做对的事,两件事不分先后。

这个 4.7 nF 也不是随便选的。中点经电容到地的回路等效一个 RC 低通,截止频率 fc = 1/(2π × R × C),其中 R 取半边终端电阻约 30 Ω,算下来 fc ≈ 1.1 MHz。低于这个频率的共模分量走的是高阻,主要被泄放的是 >几 MHz 的高频共模(正好是电机 PWM、继电器电弧的谐波区);而对 CAN-FD 2–5 MHz 的差分数据,中点看的是对称虚拟地,RC 对它没有影响。电容值定在 nF 级,就是为了"放过高频共模、不碰数据频带"这个窗口。 选成 µF 级反而会把数据共模也短路,选成 pF 级则泄放太弱。

六、凶手二号的补刀:TVS 与 PCB 布局铁律

最后一刀留给静电和浪涌,靠 TVS 阵列,但选型和布局都有硬性约束。

结电容必须低(<15 pF)。CAN 是高速差分线,TVS 并联在信号对上,本质是个电容。结电容一大,高速边沿被它分压、畸变,等于你刚用的共模电感白搭。PESD1CAN(针对 CAN,结电容典型 7 pF)、SM712(针对 RS485/CAN,低电容双向)都是为这个场景调的。普通电源 TVS 结电容动辄几十 pF,用在信号线上必翻车。

走线顺序铁律:端子 → TVS → 共模电感 → 终端 → 收发器。 含义是:从外部接口进来的第一站必须是 TVS,先把纳秒级 ESD/浪涌泄放到地,再往后走。如果你先让信号接到收发器芯片、再从芯片拉一根支线去接 TVS,那脉冲会先到芯片 IO、TVS 还没来得及动作(寄生电感 + 走线延迟),芯片已经击穿了——顺序反了,TVS 形同虚设。

TVS 怎么选,给一组硬指标。VRWM(反向工作电压)必须高于总线正常工作共模范围——CAN 共模窗口 ±12 V,所以选双向 VRWM ≥ 24 V 才不会被正常共模误触发;VCLAMP(钳位电压)在峰值脉冲电流 IPP 下必须低于收发器 IO 的绝对最大额定(通常 ±25~40 V),否则 TVS 钳住了芯片还是过压;峰值脉冲功率 PPP 要覆盖现场浪涌等级(IEC 61000-4-5 差模浪涌常见 ±1 kV/2 Ω,对应数百 W 瞬态)。PESD1CAN 正是按这套窗口定的:双向 VRWM = 24 V、结电容 7 pF、VCLAMP 在 24 A 下约 40 V 量级,刚好卡在"不误触发、又护得住芯片"的中间。选 TVS 别只看钳位低,工作电压选低了会在正常共模下自己导通发热,选高了则钳不住——窗口匹配比绝对值更重要。

TVS 摆在板子上还有一条布局铁律:地引脚的回流面积要最小。 TVS 泄放 ESD 是靠它把电流迅速导到地平面,如果 TVS 的地脚走一根长线绕到 GND_ISO 平面,这根线本身就是电感,ESD 脉冲会先在这段电感上产生压降、再顺带耦合进信号——等于你花大价钱买的低钳位被自己的走线吃掉了。正确做法是 TVS 地脚紧挨着打一个过孔直连 GND_ISO 平面,信号进 TVS 的路径和 TVS 到地的路径构成一个尽量小的回路。共模电感、终端电阻同理:它们和地之间的回路面积越小,高频防护越有效。防护器件的地,永远就近、就短、就平面。

另外别忘差模浪涌(IEC 61000-4-5)。ESD 是纳秒级高频,浪涌是微秒级、能量大得多的脉冲,TVS 的峰值脉冲功率 PPP 要能吞下它。总线在现场还可能在两根线之间感应到差模浪涌,这时候靠 TVS 的钳位 + 收发器的耐受共同扛,选型时把浪涌等级也写进 spec,别只看 ESD。

收发器本身也有讲究。现场侧那颗隔离收发器,要么选 ISO1042 这种"信号隔离内置、但仍需外部隔离电源"的,要么选 ADM3055E/CA-IS3052W 这种"信号+电源都内置"的,两者都自带符合 ISO 11898 的 CAN PHY;别图便宜拿一颗不带隔离的 TCAN1042 直接怼现场侧——它再好也只是经典收发器,没有隔离栅,地弹照样长驱直入。换句话说,隔离是系统级决策,收发器选型要为隔离让路:要么它自己带栅,要么它待在隔离电源供出来的 GND_ISO 域里、前面再配数字隔离器。把"非隔离收发器"直接焊到现场总线,是这篇所有防护归零的最快方式,切记。

隔离沟 ≥3.5 mm,全层掏空。 隔离栅两侧的铜箔,信号层、电源层、地层,所有层在隔离带上全部挖空,不留任何铜桥。CAN 总线在现场可能碰到 24–48 V,按加强绝缘爬电距离,≥3.5 mm 是稳妥下限。留一丝铜连着,隔离就破了。

GND_ISO 与机壳地之间:1 MΩ + 1 nF/2 kV 并联。 1 nF 安规电容给高频 ESD 提供低阻回流路径(静电要的是瞬间泄放),1 MΩ 电阻给直流电位差一个缓慢泄放通道、同时把持续电流限制在安全值——这是"功能地"连接,不是把隔离短接掉。

七、RS485:同一套思路,换张料号表

RS485 和 CAN 是亲兄弟,都是差分、都吃共模噪声、都怕静电,防护思路完全复用,只是参数窗口不同:

  • 共模工作范围 -7 V ~ +12 V,比 CAN 略窄;
  • 终端 120 Ω 跨 A/B 线,高干扰场景同样可上共模电感 + 分裂终端;
  • 隔离用 ADM2483 / ISO3080 这类隔离收发器;
  • TVS 针对性选 SM712——它是按 RS485 的 ±12 V 工作窗设计的双向低电容阵列,比通用 TVS 更贴合,不会在正常工作共模下误钳。
RS485 现场侧防护链(与 CAN 同源):
端子 A/B → SM712 (TVS, 先接) → 共模电感 → 120Ω终端 → ADM2483 (隔离收发器)
                                                     ↑ 隔离电源供 5V_ISO

RS485 在机器人系统里常出现在哪里?伺服驱动器的位置反馈、变频器的状态回读、长距离传感器轮询——凡是"一主多从、链路长、噪声杂"的场景,RS485 比 CAN 更常见。所以它和 CAN 是互补而非替代:控制面用 CAN/CAN-FD,遥测与参数面用 RS485,两套总线各守一段。防护套路完全通用,这就是为什么本篇把 RS485 压缩成一段——你吃透了 CAN 那套,RS485 只是换张料号表。

RS485 比 CAN 多一个坑:失效保护偏置(fail-safe bias)。RS485 是半双工,总线空闲时 A/B 差分接近 0 V,接收机可能把噪声当成起始位。标准做法是在总线两端给 A 经 1 kΩ 上拉到 VCC_ISO、B 经 1 kΩ 下拉到 GND_ISO,强制空闲时 A 比 B 高约 200 mV,接收机稳定判为"逻辑 1"。这个偏置电阻和 120 Ω 终端同一对线,注意别让偏置电流把终端分压搞偏——偏置用 1 kΩ 量级、终端用 120 Ω,电流分配是安全的。CAN 物理层自带隐性/显性差分,不需要这套偏置,别混用。

一句话记住:RS485 不用重新发明轮子,把 CAN 那套"隔离 + 共模电感 + 低电容 TVS + 走线顺序"照搬,料号换成 SM712/ADM2483、再补一对 1 kΩ 偏置即可。

RS485 终端有个和 CAN 一样的易错点:120 Ω 终端只放在总线的物理两端,中间的节点绝不挂终端。 半双工 RS485 是一主多从的菊花链,只有最远两个节点各放一颗 120 Ω,中途从站都是高阻挂接;要是中途也随手焊一颗 120 Ω,总线特征阻抗就被并联拉低,信号在该分支反射、幅值塌陷,远端节点直接收不到。现场最典型的"末端正常、中间掉站"就是这么来的。还有一点:RS485 的 A/B 别和 CANH/CANL 搞混极性,接反了能通但误码率飙升——接线时拿标签机把 A/B 标死,别信"差不多"。现场接线的"差不多",最后都会变成示波器上那几个莫名其妙的误码。

八、上电前的排查清单:照着打钩,少熬三夜

设计完别急着投板,按这张清单过一遍,能挡掉八成现场翻车:

  1. 隔离是真还是假? 两侧地是否真的分成了 GND_LOGIC 和 GND_ISO?隔离电源有没有?只放信号隔离器、地还连着,等于白做。
  2. B0505S 挂假负载了吗? 隔离电源轻载端并了 470 Ω 没有?没并,空载电压可能飙到 6–7 V 喂死收发器。
  3. 走线顺序对吗? 从端子出来第一站是 TVS,然后共模电感、终端,最后才到收发器。顺序反了 TVS 是摆设。
  4. TVS 选型窗口对吗? VRWM 高于总线共模、VCLAMP 低于芯片耐压、结电容 <15 pF。电源 TVS 别往信号线上焊。
  5. 分裂终端中点接的是 GND_ISO 吗? 接成 GND_LOGIC 就悄悄把隔离桥接回去了。
  6. 隔离沟 ≥3.5 mm 全层掏空吗? 所有层(信号/电源/地)在隔离带都挖空,没留铜桥。
  7. GND_ISO 与机壳间 1 MΩ + 1 nF/2 kV 并联了吗? 给 ESD 高频回流、给直流电位泄放。
  8. 示波器先量地弹再上电机。 投板前用差分探头确认两地间尖峰幅度,别等 Bus-Off 了才回头查。

九、软硬联动:通信口死不了,整车的可靠性才立得住

隔离、共模、TVS 这三刀下去,通信口从"一转电机就 Bus-Off"变成"烧不坏"。但单看通信板是片面的——现场噪声的源头在电源,地弹正来自驱动板的大电流地回路。前一篇《工业级机器人电源板》讲了怎么用理想二极管、缓启动、eFuse 把供电侧的浪涌和地弹源按住,那是本篇的地基:工业级机器人电源板:防反接、缓启动与 eFuse。

往上层走,硬件桥接稳了,ROS 2 的通信栈才能发挥——自定义消息接口、零拷贝、硬件时间戳桥接,这些软件优化建立在一个"不掉帧的总线"之上才有意义。举个量化的例子:CAN-FD 数据段跑到 8 Mbps、一帧带几十字节的传感器/控制报文,ROS 2 节点靠硬件桥接把报文零拷贝喂进 rclcpp 回调;如果物理层每启动一次电机就 Bus-Off、重同步要几十毫秒,这套"高性能"架构的实时性会被物理层一口吞掉。软件优化的天花板,是硬件给的。 软件侧的上层建筑在这里:ROS 2 高性能通信架构:自定义接口、零拷贝与硬件桥接;环境底座见 ROS 2 工业级环境构建:Docker 容器化与 PREEMPT_RT 实时内核。

把三篇的关系说透:电源板篇管的是"能量怎么干净地进来"——不让反接、浪涌、短路把整车带崩,也从源头压住地弹的幅度;本篇管的是"信号怎么干净地传出去"——隔离斩地弹、共模电感滤噪声、TVS 扛静电,让物理层不掉帧;软件篇管的是"掉帧归零之后,数据怎么高效地进 ROS 2"——零拷贝、自定义接口、硬件时间戳。任何一篇单拎出来都不构成"工业级":电源没稳住,通信隔离再好也扛不住持续地弹;通信掉帧,软件再快也是空转。工业级的可靠性是分层的,缺一层就塌。 这也是为什么这三篇要连着看,而不是各自为政。

一句话记住:电源板按住浪涌源、通信硬件焊死物理层、ROS 2 软件栈才能跑满吞吐——三层合起来,才是"工业级"三个字的分量。

十、本篇要点回顾

把制伏的三个凶手和对应的刀法压缩成一句话清单,方便投板前对照:

  1. 地弹(V = L × dI/dt,5–15 V) → 真隔离,信号和电源地一起斩断,逻辑侧 / 现场侧分成两个域。
  2. 假隔离(只隔信号不隔电源) → 等于没隔离;用 B0505S 或 ADM3055E/CA-IS3052W 把电源也隔离,轻载记得给 B0505S 并 470 Ω 假负载。
  3. 共模噪声 → ACT45B-510 共模电感(共模阻抗高、漏感 <0.4 µH 不畸变 CAN-FD 边沿)。
  4. 共模泄放 → 分裂终端 60 Ω + 60 Ω,中点 4.7 nF 接 GND_ISO,降 10–15 dB,且绝不接回逻辑地。
  5. 静电 ±8 kV → PESD1CAN/SM712 低结电容(<15 pF)TVS,走线顺序端子 → TVS → 共模电感 → 终端 → 收发器。
  6. PCB 铁律 → 隔离沟 ≥3.5 mm 全层掏空;GND_ISO 与机壳间 1 MΩ + 1 nF/2 kV 并联。
  7. RS485 → 同思路,料号换 SM712/ADM2483,补 1 kΩ 失效保护偏置。

这套清单的价值不在"照抄",而在它把三个凶手和对应的刀法一一绑定了:看到 Bus-Off 先怀疑地弹(隔离),看到偶发误码先怀疑共模(共模电感 + 分裂终端),看到芯片莫名报废先怀疑静电(TVS + 走线顺序)。按凶手对号入座,别乱试。 大多数现场通信故障,翻来覆去就是这三件事没做全。

参考文献

  1. Texas Instruments. ISO1042 Isolated CAN FD Transceiver with Flexible Data Rate, Datasheet, SLLSF58, 2020.(集成信号隔离的 CAN FD 收发器,共模范围与隔离耐压)
  2. Analog Devices. ADM3055E 5 kV rms Signal and Power Isolated CAN FD Transceiver, Datasheet, 2019.(单芯片内置隔离 DC-DC,方案 B 代表)
  3. 川土微电子. CA-IS3052G / CA-IS3050G 隔离式 CAN 收发器与数字隔离器, Datasheet.(分立方案料号)
  4. NXP Semiconductors. PESD1CAN CAN bus ESD protection diode, Datasheet, 2018.(7 pF 低结电容 TVS)
  5. TDK Corporation. ACT45B Series Common-mode Chokes for CAN, Specifications.(100 MHz 共模阻抗 1000–2200 Ω、低漏感)
  6. Semtech / Littelfuse. SM712 TVS Diode Array for RS-485/RS-422/CAN, Datasheet.(针对差分总线窗口的低电容双向保护)