为什么工业 IO 需要隔离
工业现场设备分散,地电位差异可达数十伏。直接连接会导致地环路电流,引起信号失真、设备损坏。光耦隔离通过光电转换实现电气隔离,切断地环路。
共地干扰
不同设备地电位不等,形成地环路。地环路电流流过信号线,产生共模噪声,导致误触发或通讯失败。
浪涌保护
雷击、感性负载开关产生浪涌电压,直接耦合到 IO 口损坏 MCU。光耦隔离承受浪涌,保护后级电路。
电位差匹配
24V 工业信号与 3.3V MCU 电平不兼容,需电平转换。光耦同时实现隔离和电平转换。
光耦工作原理
光耦由发光二极管(LED)和光敏三极管组成。输入电流驱动 LED 发光,光敏三极管接收光信号导通,实现电-光-电转换。
关键参数
- 电流传输比(CTR,Current Transfer Ratio):输出电流与输入电流之比,通常 50%-600%
- 响应时间:导通延迟和关断延迟,典型值 3-10μs
- 隔离电压:输入输出间耐压,通常 2500V-5000V
- 带宽:信号传输频率上限,低速光耦约 10kHz,高速可达 10MHz
CTR 计算
CTR 决定输出驱动能力:
#define INPUT_CURRENT 5.0f // 输入电流 5mA
#define CTR_MIN 0.5f // 最小 CTR 50%
float output_current = INPUT_CURRENT * CTR_MIN; // 2.5mA
TLP281-4 四通道光耦
TLP281-4 是四通道光耦,每通道独立隔离,适合多路 IO 隔离。
引脚定义
Pin 1-4: LED 阳极(输入+)
Pin 5-8: LED 阴极(输入-)
Pin 9-12: 三极管集电极(输出+)
Pin 13-16: 三极管发射极(输出-)
电气特性
| 参数 | 最小值 | 典型值 | 最大值 | 单位 |
|---|---|---|---|---|
| CTR | 50 | 100 | 600 | % |
| 隔离电压 | 2500 | - | - | V |
| 响应时间 | - | 4 | 10 | μs |
| 工作温度 | -30 | - | 100 | ℃ |
输入侧限流电阻计算
LED 限流电阻决定输入电流,需平衡功耗和 CTR。
计算公式
R = (Vin - Vf) / If
- Vin:输入电压
- Vf:LED 正向压降,典型 1.2V
- If:LED 正向电流,通常 5-10mA
24V 输入计算
#define INPUT_VOLTAGE 24.0f
#define LED_FORWARD_VOLTAGE 1.2f
#define LED_CURRENT 0.005f // 5mA
float resistor_value = (INPUT_VOLTAGE - LED_FORWARD_VOLTAGE) / LED_CURRENT;
// 结果 4560Ω,选用 4.7kΩ 或 5.1kΩ
电阻功耗计算
#define RESISTOR_VALUE 4700.0f
float power_loss = (INPUT_VOLTAGE - LED_FORWARD_VOLTAGE) *
(INPUT_VOLTAGE - LED_FORWARD_VOLTAGE) / RESISTOR_VALUE;
// 结果 0.11W,选用 1/4W 电阻
输出侧上拉电阻选择
光耦输出为开路集电极,需上拉电阻到电源。
上拉电阻计算
#define VCC 3.3f
#define OUTPUT_CURRENT 0.002f // 输出电流 2mA
float pullup_resistor = VCC / OUTPUT_CURRENT;
// 结果 1650Ω,选用 1.5kΩ 或 2.2kΩ
上拉电阻越小,响应越快但功耗越大。高速信号选小阻值,低速信号选大阻值。
NPN 与 PNP 接法差异
NPN 接法(共发射极)
输入+ --- 限流电阻 --- LED --- 输入-
输出+ --- 上拉电阻 --- 集电极
输出- --- 发射极 --- GND
输出低电平有效(LED 导通时输出低)。
PNP 接法(共集电极)
输入+ --- 限流电阻 --- LED --- 输入-
输出+ --- 集电极 --- VCC
输出- --- 发射极 --- 下拉电阻 --- GND
输出高电平有效(LED 导通时输出高)。
选择建议
- MCU 输入检测:NPN 接法(低电平触发)
- 继电器驱动:NPN 接法(低电平吸合)
- 高电平有效场景:PNP 接法
高速脉冲场景光耦选型
TLP281 响应时间约 4μs,仅适合 <10kHz 信号。高速脉冲需选用高速光耦。
6N137 高速光耦
6N137 为高速光耦,带宽 10Mbps,响应时间 75ns,适合 SPI、UART 等高速信号。
选型对比
| 型号 | 带宽 | 响应时间 | CTR | 适用场景 |
|---|---|---|---|---|
| TLP281 | 10kHz | 4μs | 100% | 开关量 IO |
| 6N137 | 10Mbps | 75ns | 20% | SPI、UART |
| HCPL-2630 | 10Mbps | 50ns | 7% | 高速差分 |
实际电路设计
数字量输入隔离
24V 工业信号输入,3.3V MCU 检测:
24V 输入+ --- 4.7kΩ --- LED --- 输入-
3.3V --- 2.2kΩ --- 集电极 --- MCU GPIO
发射极 --- GND
MCU GPIO 配置为输入上拉或外部上拉。
数字量输出隔离
MCU 输出控制 24V 继电器:
3.3V GPIO --- 1kΩ --- LED --- GND
24V --- 继电器线圈 --- 集电极
发射极 --- GND
继电器线圈并联续流二极管(1N4007),防止反向电动势。
完整四通道电路
使用 TLP281-4 实现四路输入输出:
// 通道 1:输入
#define IN1_RESISTOR 4700
#define OUT1_PULLUP 2200
// 通道 2:输出
#define IN2_RESISTOR 1000
#define OUT2_LOAD 100 // 继电器线圈电阻
// 通道 3:输入
// 通道 4:输出
PCB 注意事项
布局原则
- 输入输出分区布局,避免交叉
- 光耦横跨隔离区
- 限流电阻靠近输入连接器
- 上拉电阻靠近 MCU
隔离间距
输入输出间保持足够间距,满足爬电距离要求。
24V 系统:
- 基本绝缘:2.5mm
- 加强绝缘:5mm
接地处理
输入侧地(GND_IN)与输出侧地(GND_OUT)完全隔离,不共地。
完整代码示例
输入检测
#include "stm32f1xx_hal.h"
#define OPTO_INPUT_PIN GPIO_PIN_0
#define OPTO_INPUT_PORT GPIOA
void Opto_Input_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = OPTO_INPUT_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(OPTO_INPUT_PORT, &GPIO_InitStruct);
}
uint8_t Opto_Input_Read(void) {
return HAL_GPIO_ReadPin(OPTO_INPUT_PORT, OPTO_INPUT_PIN) == GPIO_PIN_RESET;
}
输出控制
#define OPTO_OUTPUT_PIN GPIO_PIN_1
#define OPTO_OUTPUT_PORT GPIOA
void Opto_Output_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = OPTO_OUTPUT_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(OPTO_OUTPUT_PORT, &GPIO_InitStruct);
HAL_GPIO_WritePin(OPTO_OUTPUT_PORT, OPTO_OUTPUT_PIN, GPIO_PIN_RESET);
}
void Opto_Output_Set(uint8_t state) {
HAL_GPIO_WritePin(OPTO_OUTPUT_PORT, OPTO_OUTPUT_PIN,
state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
常见问题
输出电平不稳定
原因:上拉电阻过大或 CTR 过小。
解决:减小上拉电阻或选用高 CTR 光耦。
响应慢
原因:光耦响应时间长或上拉电阻过大。
解决:选用高速光耦(6N137)或减小上拉电阻。
隔离失效
原因:PCB 隔离间距不足或布局不当。
解决:增加隔离间距,优化布局。
功耗过大
原因:输入电流过大或上拉电阻过小。
解决:增大限流电阻或上拉电阻。
测试验证
隔离电压测试
使用耐压测试仪验证隔离电压:
#define ISOLATION_VOLTAGE 2500 // 2500V
#define TEST_DURATION 60 // 60秒
// 测试步骤
// 1. 输入输出间施加 2500V AC
// 2. 保持 60 秒
// 3. 检查漏电流 < 1mA
响应时间测试
使用示波器测量响应时间:
// 测试步骤
// 1. 输入施加阶跃信号
// 2. 测量输出 10%-90% 上升时间
// 3. 测量输出 90%-10% 下降时间
// 4. 确认满足设计要求
总结
光耦隔离电路设计关键点:
- TLP281-4 适合低速数字量 IO 隔离
- 输入限流电阻根据输入电压计算(24V 用 4.7kΩ)
- 输出上拉电阻根据输出电流选择(2-10kΩ)
- NPN 接法低电平有效,PNP 接法高电平有效
- 高速信号选用 6N137 等高速光耦
- PCB 布局注意输入输出分区和隔离间距
- 继电器输出需并联续流二极管
按此设计可实现可靠的工业 IO 隔离。