第3章 物理隔离技术:独立电源、接地隔离、光耦、继电器等硬件方案
物理隔离,说白了就是在电路之间挖一条「鸿沟」。
电流过不去,干扰过不去,高压浪涌也过不去。但信号还得过去。这就得靠一些特殊的器件和手段了。
我这些年做嵌入式系统,遇到过不少通信异常、设备烧毁的案子。追根溯源,八成都是隔离没做够。今天就把我常用的几招摊开聊聊。
3.1 物理隔离的本质
物理隔离不是简单地把两个电路分开。它要解决三个核心问题:
- 电气隔离——没有直接的电流通路
- 信号传输——信息能穿过去
- 能量隔离——干扰和浪涌被挡在外面
你想想看,如果两个系统共地,那么地线上的噪声就会互相串。这就是为什么很多工业现场通信老出问题——地环路在捣鬼。
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 常见接地隔离方案
| 方案 | 做法 | 优点 | 缺点 |
|---|---|---|---|
| 星形接地 | 各子系统单独拉地线,汇聚到一点 | 结构简单,低频效果好 | 高频时阻抗偏高 |
| 地线分离 | 模拟地、数字地、功率地分开走线 | 减少串扰 | 需要仔细规划布局 |
| 浮地 | 系统地与大地完全隔离 | 彻底切断地环路 | 静电积累有风险 |
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)→ 数字隔离器更合适
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);
}
}
3.6 隔离方案选型框架
下面这张图是我自己总结的选型逻辑。遇到隔离需求,按这个流程走,基本不会出错。
3.7 四种方案怎么选
我直接给结论:
- 电源隔离——只要两端供电不共地,就必须上。没有替代方案。
- 接地隔离——通信不稳定、有共模干扰时,优先检查地环路。
- 光耦隔离——数字信号、中低速通信、成本敏感,首选光耦。
- 继电器隔离——需要通断大电流、或者要求断开后完全隔离,用继电器。
好了,这一章的内容就这些。隔离是个实践经验活,光看书没用。多动手测一测,拿示波器看看波形,你会有更深的理解。