ULN2803达林顿驱动阵列电路设计:继电器电磁阀与感性负载驱动全解析

八路达林顿阵列+内置续流二极管,一颗芯片解决MCU到继电器/电磁阀的功率接口

2026-09-03
ULN2803达林顿阵列继电器驱动感性负载续流二极管低边驱动STM32嵌入式开发

ULN2803是八路 NPN 达林顿驱动阵列:单路可连续灌入 500mA、输出耐压 50V,且每路内置续流钳位二极管,专门用于MCU/TTL/CMOS 逻辑电平到继电器线圈、电磁阀、步进电机等感性负载之间的低边功率接口。嵌入式物联网控制器(RTU/PLC 扩展板)要驱动 8 路继电器,用一颗 ULN2803 加 10 个电阻都不到的外围即可完成,输入侧 3.3V 逻辑在负载不超 200mA 时可直连驱动;但它的发热预算并不宽裕——DIP 封装热阻 55℃/W、结温上限 125℃,70℃ 环境下整颗芯片只允许约 1W 总功耗,八路同时重载时必须核算降额,这是本文要讲透的核心。

一、问题:GPIO 为什么不能直接驱动继电器

继电器线圈的典型电流为 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,这是整颗芯片设计中最关键、也最容易被接错的一根引脚。

极限参数(每路)数值说明
输出集电极电压 VO50 V集电极开路输出耐压上限
输入电压 VI30 V输入脚允许电压(2801 除外)
集电极连续电流 IC500 mA单路绝对最大连续电流
基极连续电流 IB25 mA对应输入驱动电流上限
工作环境温度 TA0 ~ +70 ℃塑封 A 后缀 DIP-18
存储温度 / 结温-55~+150℃ / 125℃结温上限决定热预算
热阻 RθJA55 ℃/WDIP-18 封装自然散热
输入/输出兼容TTL、5V CMOSULN2804 兼容 6~15V CMOS

三、关键电参数与导通条件

设计驱动级前要读准三组数据:导通压降 VCE(sat)、保证导通的输入电压 VI(on)、输入电流 II(on)。VCE(sat) 直接决定器件功耗,VI(on) 决定 3.3V GPIO 能否直驱。手册实测数据如表 2 所示。

参数测试条件典型值最大值
VCE(sat) 饱和压降IC=100mA0.85 V1.1 V
VCE(sat) 饱和压降IC=200mA0.95 V1.3 V
VCE(sat) 饱和压降IC=350mA1.1 V1.6 V
VI(on) 导通输入电压VCE=2V, IC=200mA2.4 V
VI(on) 导通输入电压VCE=2V, IC=300mA3.0 V
II(on) 输入导通电流VI=3.85V(ULN2803)0.93 mA1.35 mA
输出漏电流 ICEXVO=50V, 25℃50 µA
直流增益 hFEVCE=2V, IC=350mA≥1000
开关延时 ton / toff50%输入到50%输出0.25 µs1.0 µs
钳位二极管 VFIF=350mA1.5 V2.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 不适合高频斩波。

四、典型电路与 COM 脚的正确接法

标准低边驱动接法:负载(继电器线圈)一端接负载电源正极,另一端接 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 配置为推挽输出低电平之后再操作继电器。

五、功耗与热设计:八路满载真的能到 8×500mA 吗

数据手册的 500mA 是"单路电气极限",不是"八路同时可用的热极限"。每路功耗 P = IC × VCE(sat),DIP-18 热阻 55℃/W、结温上限 125℃,按 70℃ 环境温度计算,整颗芯片允许总功耗仅 (125-70)/55 ≈ 1W。以表 2 的最大压降核算典型负载场景如表 3。

负载场景(举例)单路电流单路功耗(按最大VCE(sat)估)同时导通路数合计功耗设计结论
8×小型继电器,线圈12V/40mA40mA≈44mW(1.1V档估)8≈0.35W安全,70℃环境仍有裕量
8×继电器,线圈24V/60mA60mA≈66mW8≈0.53W安全
8×电磁阀,24V/120mA120mA≈156mW(1.3V档估)8≈1.25W超预算,需≤6路或加强散热/降额
2×步进电机相绕组350mA350mA≈560mW(1.6V档估)2≈1.12W临界,持续双相导通不建议
单路极限500mA持续500mA≈0.8~1.0W1≈1W单路即达预算,禁止持续满载

工程对策:一是给 PCB 预留大面积铺铜并加过孔辅助散热,可显著降低实际热阻;二是重负载路数多时改用 ULN2803 的 SOIC 封装版本、双片分摊或直接换低边 N-MOSFET;三是继电器吸合后可用"低电压保持"技巧降功耗——但 ULN2803 是纯开关器件,此功能需要外部电路配合,属于进阶话题。多数 RTU 远程终端与智能继电器板的实际负载是 8 路 24V/60mA 以下的中间继电器,ULN2803 处于完全舒适区,这也是它在工业 I/O 板卡上几十年长盛不衰的原因。

六、STM32 驱动代码与软件互锁

驱动逻辑很简单: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小时内响应