八路达林顿阵列+内置续流二极管,一颗芯片解决MCU到继电器/电磁阀的功率接口
ULN2803是八路 NPN 达林顿驱动阵列:单路可连续灌入 500mA、输出耐压 50V,且每路内置续流钳位二极管,专门用于MCU/TTL/CMOS 逻辑电平到继电器线圈、电磁阀、步进电机等感性负载之间的低边功率接口。嵌入式与物联网控制器(RTU/PLC 扩展板)要驱动 8 路继电器,用一颗 ULN2803 加 10 个电阻都不到的外围即可完成,输入侧 3.3V 逻辑在负载不超 200mA 时可直连驱动;但它的发热预算并不宽裕——DIP 封装热阻 55℃/W、结温上限 125℃,70℃ 环境下整颗芯片只允许约 1W 总功耗,八路同时重载时必须核算降额,这是本文要讲透的核心。
继电器线圈的典型电流为 30~120mA,电磁阀更高,而 STM32 等 MCU 的 GPIO 灌/拉电流能力只有 8~25mA,直接驱动会烧毁引脚或压降过大导致继电器吸合不可靠。更致命的是感性负载的关断瞬态:继电器线圈在导通时储存磁场能量 E=½·L·I²,达林顿管关断瞬间电流不能突变,集电极电压会上冲到电源电压之上数十至数百伏,足以击穿任何没有保护的驱动管。因此驱动接口必须具备两个能力:足够的电流放大能力,以及给电感储能提供"续流回路"。ULN2803 把这两件事集成到了一颗 18 脚芯片里。
ULN2803 的每一路都是"输入串阻 + 两级 NPN 达林顿 + 集电极开路输出",并在输出级并联一只共阳极续流二极管。ULN2803A 输入串阻约 2.7kΩ,专为 TTL/5V CMOS 逻辑优化;ULN2804A 输入串阻约 10.5kΩ,为 6~15V CMOS/PMOS 高电平逻辑优化(数据来源:《ULN2803/ULN2804 Octal Peripheral Driver Arrays》数据手册,Motorola/ON Semiconductor)。达林顿结构使直流电流增益 hFE 高达 1000 倍以上,MCU 只需提供约 1mA 输入电流,就能开关 300mA 级负载。八只续流二极管的公共阳极引出到 10 脚 COM,这是整颗芯片设计中最关键、也最容易被接错的一根引脚。
| 极限参数(每路) | 数值 | 说明 |
|---|---|---|
| 输出集电极电压 VO | 50 V | 集电极开路输出耐压上限 |
| 输入电压 VI | 30 V | 输入脚允许电压(2801 除外) |
| 集电极连续电流 IC | 500 mA | 单路绝对最大连续电流 |
| 基极连续电流 IB | 25 mA | 对应输入驱动电流上限 |
| 工作环境温度 TA | 0 ~ +70 ℃ | 塑封 A 后缀 DIP-18 |
| 存储温度 / 结温 | -55~+150℃ / 125℃ | 结温上限决定热预算 |
| 热阻 RθJA | 55 ℃/W | DIP-18 封装自然散热 |
| 输入/输出兼容 | TTL、5V CMOS | ULN2804 兼容 6~15V CMOS |
设计驱动级前要读准三组数据:导通压降 VCE(sat)、保证导通的输入电压 VI(on)、输入电流 II(on)。VCE(sat) 直接决定器件功耗,VI(on) 决定 3.3V GPIO 能否直驱。手册实测数据如表 2 所示。
| 参数 | 测试条件 | 典型值 | 最大值 |
|---|---|---|---|
| VCE(sat) 饱和压降 | IC=100mA | 0.85 V | 1.1 V |
| VCE(sat) 饱和压降 | IC=200mA | 0.95 V | 1.3 V |
| VCE(sat) 饱和压降 | IC=350mA | 1.1 V | 1.6 V |
| VI(on) 导通输入电压 | VCE=2V, IC=200mA | — | 2.4 V |
| VI(on) 导通输入电压 | VCE=2V, IC=300mA | — | 3.0 V |
| II(on) 输入导通电流 | VI=3.85V(ULN2803) | 0.93 mA | 1.35 mA |
| 输出漏电流 ICEX | VO=50V, 25℃ | — | 50 µA |
| 直流增益 hFE | VCE=2V, IC=350mA | ≥1000 | — |
| 开关延时 ton / toff | 50%输入到50%输出 | 0.25 µs | 1.0 µs |
| 钳位二极管 VF | IF=350mA | 1.5 V | 2.0 V |
| 钳位二极管漏电流 | VR=50V, 25℃ | — | 50 µA |
结论一:3.3V GPIO 直接驱动时,负载电流建议限制在 200mA 以内(VI(on)≤2.4V,3.3V 高电平余量约 0.9V);若负载达 300mA,VI(on) 上限 3.0V 已逼近 3.3V,不同批次与温度下可能导通不充分,应改用 5V 逻辑驱动或加一级缓冲。结论二:开关延时仅微秒级,用于继电器(毫秒级动作)绰绰有余,但不要指望它做高频 PWM——达林顿结构开关损耗大,ULN2803 不适合高频斩波。
标准低边驱动接法:负载(继电器线圈)一端接负载电源正极,另一端接 ULN2803 输出脚;输入脚接 MCU GPIO;10 脚 COM 必须接负载电源正极。续流路径为:达林顿关断瞬间,线圈电流经输出脚→内置二极管→COM→负载电源正极回流,电感储能被电源吸收,输出脚电压被钳位在电源电压加一个二极管压降以内(约 VCC+2V),远低于 50V 耐压。接线示意如下。
负载电源 +24V(+12V/+5V) ──┬─────────────── COM(10脚) ← 关键!
│
继电器K1线圈 ── 输出1(18脚) ULN2803
继电器K2线圈 ── 输出2(17脚)
继电器K3线圈 ── 输出3(16脚) 输入1(1脚) ←─ GPIO(3.3V)
... 输入2(2脚) ←─ GPIO
GND ────── GND(9脚) 输入3(3脚) ←─ GPIO
...
注:输入高电平 → 达林顿导通 → 线圈得电吸合(低边灌电流)
常见接错点:只接输出脚、忘记把 COM 接负载电源正极,此时续流二极管悬空失效,继电器关断瞬间的反电动势会直接打穿输出级;或把 COM 误接地,导致每次关断时二极管正向导通把电源正极短路到地。另外上电瞬间 MCU 的 GPIO 处于高阻/复位态,若输入悬空,达林顿虽不导通,但为杜绝意外吸合,建议每路输入对地并联 10kΩ 下拉电阻,并让 MCU 初始化代码在 GPIO 配置为推挽输出低电平之后再操作继电器。
数据手册的 500mA 是"单路电气极限",不是"八路同时可用的热极限"。每路功耗 P = IC × VCE(sat),DIP-18 热阻 55℃/W、结温上限 125℃,按 70℃ 环境温度计算,整颗芯片允许总功耗仅 (125-70)/55 ≈ 1W。以表 2 的最大压降核算典型负载场景如表 3。
| 负载场景(举例) | 单路电流 | 单路功耗(按最大VCE(sat)估) | 同时导通路数 | 合计功耗 | 设计结论 |
|---|---|---|---|---|---|
| 8×小型继电器,线圈12V/40mA | 40mA | ≈44mW(1.1V档估) | 8 | ≈0.35W | 安全,70℃环境仍有裕量 |
| 8×继电器,线圈24V/60mA | 60mA | ≈66mW | 8 | ≈0.53W | 安全 |
| 8×电磁阀,24V/120mA | 120mA | ≈156mW(1.3V档估) | 8 | ≈1.25W | 超预算,需≤6路或加强散热/降额 |
| 2×步进电机相绕组350mA | 350mA | ≈560mW(1.6V档估) | 2 | ≈1.12W | 临界,持续双相导通不建议 |
| 单路极限500mA持续 | 500mA | ≈0.8~1.0W | 1 | ≈1W | 单路即达预算,禁止持续满载 |
工程对策:一是给 PCB 预留大面积铺铜并加过孔辅助散热,可显著降低实际热阻;二是重负载路数多时改用 ULN2803 的 SOIC 封装版本、双片分摊或直接换低边 N-MOSFET;三是继电器吸合后可用"低电压保持"技巧降功耗——但 ULN2803 是纯开关器件,此功能需要外部电路配合,属于进阶话题。多数 RTU 远程终端与智能继电器板的实际负载是 8 路 24V/60mA 以下的中间继电器,ULN2803 处于完全舒适区,这也是它在工业 I/O 板卡上几十年长盛不衰的原因。
驱动逻辑很简单:GPIO 推挽输出高电平→导通→负载得电。难点在安全策略:上电默认全关、正反转/双稳态负载的软件互锁、动作后状态回读。示例代码如下。
/* ULN2803 八路继电器驱动(STM32 HAL,推挽输出) */
#define RELAY_PORT GPIOB
#define RELAY_PIN0 GPIO_PIN_0 /* 输入1 -> 输出1 -> 继电器K1 */
/* ... RELAY_PIN7 对应 输入8 -> 输出8 */
void relay_gpio_init(void) {
GPIO_InitTypeDef g = {0};
__HAL_RCC_GPIOB_CLK_ENABLE();
g.Pin = RELAY_PIN0|RELAY_PIN1|RELAY_PIN2|RELAY_PIN3
| RELAY_PIN4|RELAY_PIN5|RELAY_PIN6|RELAY_PIN7;
g.Mode = GPIO_MODE_OUTPUT_PP; /* 推挽输出 */
g.Pull = GPIO_PULLDOWN; /* 内部下拉,复位/启动期保持关断 */
g.Speed = GPIO_SPEED_FREQ_LOW; /* 继电器毫秒级,低速即可 */
HAL_GPIO_Init(RELAY_PORT, &g);
HAL_GPIO_WritePin(RELAY_PORT,
RELAY_PIN0|RELAY_PIN1|RELAY_PIN2|RELAY_PIN3
| RELAY_PIN4|RELAY_PIN5|RELAY_PIN6|RELAY_PIN7,
GPIO_PIN_RESET); /* 上电强制全关,防误动作 */
}
void relay_set(uint8_t ch, uint8_t on) { /* ch:0~7 */
uint16_t pin = RELAY_PIN0 << ch;
HAL_GPIO_WritePin(RELAY_PORT, pin,
on ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
/* 互锁示例:K1/K2 控制电机正反转,严禁同时吸合 */
uint8_t motor_dir_set(uint8_t dir) { /* 0=停 1=正转 2=反转 */
if (dir == 0) { relay_set(0,0); relay_set(1,0); return 1; }
if (dir == 1) { relay_set(0,1); relay_set(1,0); return 1; }
if (dir == 2) { relay_set(0,0); relay_set(1,1); return 1; }
return 0; /* 非法方向拒绝执行 */
}
软件侧还需注意:切换互锁负载时先关后开并留 10ms 以上间隔(继电器机械释放时间通常 5~10ms),防止触头电弧与机械卡死;动作次数可累计到 EEPROM 用于继电器寿命管理(机械继电器典型寿命 10 万次级,定期更换提醒可避免产线突发停机)。
| 对比维度 | ULN2803 达林顿阵列 | 低边 N-MOSFET(如逻辑电平管) | 智能高边开关/光耦MOS(SSR) |
|---|---|---|---|
| 通道数/集成度 | 8路单片集成 | 每路1管,需配栅极电阻 | 单/双路为主 |
| 驱动能力 | 单路500mA | 数A级,视封装 | 0.5~数A |
| 导通压降 | 0.85~1.6V偏高 | 低压差(RDS(on)×I) | 低压差 |
| 感性续流 | 内置二极管,接COM即可 | 需外置二极管 | 部分内置 |
| 故障诊断/保护 | 无 | 无 | 过流/过温/开路诊断(见IPS专题) |
| 适用场景 | 多路中小电流继电器板、RTU输出 | 单路大电流、PWM调速 | 汽车/高可靠场合、无触点开关 |
总结:ULN2803 的价值在于"八路集成 + 输入串阻简化接口 + 内置续流二极管"三者合一,把最常见的多路继电器/电磁阀驱动从十几颗分立元件压缩成一颗芯片,非常适合 RTU 远程终端、物联网执行器板卡与工控扩展 I/O;设计时把握三条主线——COM 必须接负载电源正极、3.3V 直驱限流 200mA、整片功耗控制在 1W 以内(按 70℃ 环境估算)。超过这些边界,就应切换到低边 MOSFET 或带诊断的智能功率开关方案。对需要更大电流与 PWM 的应用,可进一步参考本站 MOSFET 损耗与电机驱动系列文档。
设计速查清单
- ① COM(10脚) 接负载电源正极,接错或悬空会烧输出级;
- ② 3.3V GPIO 直驱限 200mA/路,5V 逻辑可放宽至 300mA 级;
- ③ 单路极限 500mA 不可持续,整片功耗预算约 1W(70℃ 环境);
- ④ 输入侧加 10kΩ 下拉,GPIO 初始化先全关再使能;
- ⑤ 互锁负载软件先关后开,间隔≥10ms,计数管理继电器寿命。
总结:MCU 驱动继电器与电磁阀的正解是"低边开关 + 续流回路",ULN2803 以八路达林顿阵列将两者单片化,输入侧 1mA 级电流即可开关 500mA 级感性负载,配 3.3V 逻辑 MCU 时注意 200mA 直驱边界与 COM 脚接法,配齐下拉电阻与软件互锁后即可稳定驱动 8 路执行器,是 RTU 与物联网控制板输出级的可靠选择。
本文基于《ULN2803/ULN2804 Octal Peripheral Driver Arrays 数据手册》等资料整理优化。
沧州艾诺威电子 — 国家高新技术企业,20+项国家专利
嵌入式系统开发 · 物联网方案 · AI智能硬件 · 一站式交付
电话:13930711029 | 邮箱:tech@czinv.com | 24小时内响应