第3章 物理隔离技术:独立电源、接地隔离、光耦、继电器等硬件方案

物理隔离,说白了就是在电路之间挖一条「鸿沟」。

电流过不去,干扰过不去,高压浪涌也过不去。但信号还得过去。这就得靠一些特殊的器件和手段了。

我这些年做嵌入式系统,遇到过不少通信异常、设备烧毁的案子。追根溯源,八成都是隔离没做够。今天就把我常用的几招摊开聊聊。

3.1 物理隔离的本质

物理隔离不是简单地把两个电路分开。它要解决三个核心问题:

  • 电气隔离——没有直接的电流通路
  • 信号传输——信息能穿过去
  • 能量隔离——干扰和浪涌被挡在外面

你想想看,如果两个系统共地,那么地线上的噪声就会互相串。这就是为什么很多工业现场通信老出问题——地环路在捣鬼。

物理隔离的核心指标:隔离电压(VISO)、爬电距离、漏电流、传输速率。

3.2 独立电源隔离

隔离的第一步,往往是电源先分开。

最简单的办法:两个系统各自用独立的电源模块。但很多场景下,你只有一个输入电源,那就得用隔离电源方案。

3.2.1 隔离电源拓扑

拓扑 隔离电压 功率范围 典型场景
反激式(Flyback) 1kV ~ 5kV 1W ~ 50W 工业控制、辅助电源
推挽式(Push-Pull) 1kV ~ 3kV 5W ~ 200W 通信模块、隔离DCDC
谐振式(LLC) 3kV ~ 6kV 50W ~ 500W 医疗设备、高功率隔离

我个人习惯在要求不高的场合直接用成品隔离模块,比如B0505S这种。省事,还过了认证。

选隔离电源时,别光看隔离电压。还要看隔离电容——电容大了,高频噪声会耦合过去,隔离效果大打折扣。

3.2.2 布局要点

隔离电源的布局,我踩过坑。有一次板子回来,隔离电源效率只有70%,怎么查都查不出问题。后来发现是变压器底下铺了地铜皮,涡流损耗把效率吃掉了。

  • 变压器下方禁止铺铜
  • 原边和副边的地要彻底分开,中间留出隔离带
  • 反馈回路走线要远离变压器磁芯

3.3 接地隔离

接地隔离,很多人会忽略。总觉得「地嘛,连在一起就行了」。其实不是这么回事。

3.3.1 地环路问题

两个系统通过信号线连接,如果各自的地电位不一样,就会有电流在地线上流动。这个电流会叠加在信号上,造成干扰。

我曾经在一个项目中,RS485通信总是间歇性丢包。用示波器一抓,地线上有50mV的工频噪声。后来把两端的电源地隔离,噪声消失,通信恢复。

3.3.2 常见接地隔离方案

方案 做法 优点 缺点
星形接地 各子系统单独拉地线,汇聚到一点 结构简单,低频效果好 高频时阻抗偏高
地线分离 模拟地、数字地、功率地分开走线 减少串扰 需要仔细规划布局
浮地 系统地与大地完全隔离 彻底切断地环路 静电积累有风险
浮地系统一定要加ESD保护器件,否则静电积累到一定程度,可能会击穿隔离器件。

3.4 光耦隔离

光耦是我用得最多的隔离手段。便宜、可靠、带宽够用。

3.4.1 工作原理

电信号进去,LED发光,光敏三极管接收,再变回电信号。电-光-电的转换,实现了物理上的完全隔离。

关键参数:

  • CTR(Current Transfer Ratio):电流传输比。说白了就是输出侧能给出多少电流。选型时要留余量
  • 隔离电压:常见的是3.75kV、5kV
  • 传输速率:普通光耦只有几十kbps,快速光耦能做到Mbps级

3.4.2 选型避坑

我曾经为了省钱,选了个CTR只有50%的光耦。结果LED驱动电流要很大,功耗超标。后来换CTR 200%的型号,电流减了一半。

选型建议:

  • 低速数字信号(GPIO、按键)→ PC817、TLP521
  • 中速通信(UART、I2C)→ 6N137、HCPL0630
  • 高速通信(SPI、CAN)→ 数字隔离器更合适
光耦的CTR会随温度变化。高温下CTR下降明显。做高温环境的产品,CTR余量至少要留30%。

3.4.3 典型驱动电路

// 光耦输入侧驱动配置示例(GPIO控制)
// 假设使用PC817,IF = 10mA,VF = 1.2V
// R = (3.3V - 1.2V) / 10mA = 210Ω,选220Ω标准值

#define OPTO_GPIO_PIN   GPIO_PIN_5
#define OPTO_GPIO_PORT  GPIOA

void opto_init(void) {
    // 配置GPIO为推挽输出
    GPIO_InitTypeDef gpio = {0};
    gpio.Pin = OPTO_GPIO_PIN;
    gpio.Mode = GPIO_MODE_OUTPUT_PP;
    gpio.Pull = GPIO_NOPULL;
    gpio.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(OPTO_GPIO_PORT, &gpio);
}

void opto_send(uint8_t state) {
    HAL_GPIO_WritePin(OPTO_GPIO_PORT, OPTO_GPIO_PIN,
        state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}

3.5 继电器隔离

继电器是另一种经典隔离手段。它的优势在于——导通电阻小、能过大的电流、而且断开后是真的断开。

3.5.1 机械继电器 vs 固态继电器

特性 机械继电器 固态继电器(SSR)
隔离方式 线圈与触点物理分离 光耦隔离
导通电阻 mΩ级 几十mΩ到几Ω
寿命 机械磨损,有限次 超长寿命
开关速度 ms级 μs级
适用负载 交直流均可 阻性负载为主

3.5.2 驱动电路设计要小心

继电器线圈是感性负载。断开瞬间会产生反电动势。不处理的话,会把驱动管打穿。

我建议:线圈两端一定要并联续流二极管。而且二极管要紧贴线圈引脚放置。

// 继电器驱动配置示例(带续流保护)
// 使用NPN三极管驱动,基极串联电阻限流

#define RELAY_GPIO_PIN   GPIO_PIN_8
#define RELAY_GPIO_PORT  GPIOC

void relay_init(void) {
    GPIO_InitTypeDef gpio = {0};
    gpio.Pin = RELAY_GPIO_PIN;
    gpio.Mode = GPIO_MODE_OUTPUT_PP;
    gpio.Pull = GPIO_NOPULL;
    gpio.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(RELAY_GPIO_PORT, &gpio);

    // 初始状态:断开
    HAL_GPIO_WritePin(RELAY_GPIO_PORT, RELAY_GPIO_PIN, GPIO_PIN_RESET);
}

void relay_control(uint8_t on) {
    if (on) {
        HAL_GPIO_WritePin(RELAY_GPIO_PORT, RELAY_GPIO_PIN, GPIO_PIN_SET);
    } else {
        HAL_GPIO_WritePin(RELAY_GPIO_PORT, RELAY_GPIO_PIN, GPIO_PIN_RESET);
    }
}
继电器触点有「 bouncing 」现象——闭合瞬间会弹跳几次。做计数或状态检测时,一定要做软件消抖。我曾经没做消抖,导致计数器一秒钟跳了十几次。

3.6 隔离方案选型框架

下面这张图是我自己总结的选型逻辑。遇到隔离需求,按这个流程走,基本不会出错。

物理隔离技术选型流程 需要物理隔离? 独立电源隔离 DC-DC隔离模块 LDO + 变压器方案 接地隔离 星形接地 / 地线分离 浮地 + ESD保护 光耦隔离 低速 → PC817 / TLP521 高速 → 6N137 / 数字隔离器 继电器隔离 机械继电器(大电流、工频) 固态继电器(高频、长寿命) 选型原则 1. 隔离电压满足要求 2. 带宽/速率足够 3. 成本与体积可接受

3.7 四种方案怎么选

我直接给结论:

  • 电源隔离——只要两端供电不共地,就必须上。没有替代方案。
  • 接地隔离——通信不稳定、有共模干扰时,优先检查地环路。
  • 光耦隔离——数字信号、中低速通信、成本敏感,首选光耦。
  • 继电器隔离——需要通断大电流、或者要求断开后完全隔离,用继电器。
没有任何一种隔离方案是万能的。我始终坚持一个原则:根据威胁路径选隔离——干扰从哪来,就在哪隔离。

好了,这一章的内容就这些。隔离是个实践经验活,光看书没用。多动手测一测,拿示波器看看波形,你会有更深的理解。