扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

查理复用:用极简 GPIO 驱动大量 LED 的实用技术

22小时前
250
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

查理复用是一种利用单片机 GPIO 三态特性,实现少量 IO 口驱动超多 LED的实用方案。其核心是利用 GPIO 的三种状态:输出高电平、输出低电平、高阻输入,用 n 个 GPIO 最多可以驱动 n×(n−1) 个 LED,相比传统点阵方式能大幅节省引脚,非常适合驱动数码管、LED 矩阵等场景。

举例:

    3 个 GPIO → 最多驱动 6 个 LED4 个 GPIO → 最多驱动 12 个 LED

一、查理复用核心原理

电路上,LED 需要两两反向并联,即一组两个 LED 方向相反地接在任意两个 GPIO 之间。

工作逻辑:

任意两个 GPIO,一个输出高、一个输出低 → 形成电流回路,点亮对应方向的一颗 LED其余 GPIO 全部设置为高阻输入模式,不参与驱动、不产生干扰无有效回路时,LED 熄灭,基本无串扰

二、引脚与 LED 数量关系

最大可驱动 LED 数量公式:

最大 LED 数量 = GPIO 数量 × (GPIO 数量 − 1)

    3 个 IO:3×2 = 6 个 LED4 个 IO:4×3 = 12 个 LED5 个 IO:5×4 = 20 个 LED

在消费类电子产品设计中,经常会遇到单片机 IO 资源紧张、不够驱动 LED 的问题。而查理复用正是利用 IO 口双向推挽驱动 LED 的特性,在相同引脚数量下点亮更多 LED,理论上 N 个 IO 即可驱动 N×(N−1) 个 LED。

下面从简单到复杂,一步步说明原理:

1)2 个 IO 驱动 2 个 LED

两个 LED 反向并联,红色 LED 阳极接绿色 LED 阴极

    IO1 高、IO2 低 → 点亮红色 LEDIO1 低、IO2 高 → 点亮绿色 LED

2)3 个 IO 驱动更多 LED

在此基础上增加一个 IO,即可实现 3 个 IO 控制更多 LED。合理布局后,3 个端口即可独立控制 6 个 LED,每个 IO 都会接入两组灯。

工作逻辑举例:

IO1 高、IO2 低、IO3 高阻会形成 IO1→LED1→IO2 以及并联支路 IO1→(LED6+LED4)→IO2。由于并联支路电压被钳位在单颗 LED 点亮电压(如 2.8V),不足以点亮两颗 LED 串联,因此只有 LED1 点亮。

IO1 高、IO2 高阻、IO3 低回路 IO1→LED6→IO3 导通,LED6 点亮;并联支路 LED1+LED3 因电压不足无法点亮。

IO1 高阻、IO2 高、IO3 低同理点亮 LED3,LED2+LED6 因电压不足不亮。LED4、LED2、LED5 的点亮逻辑与此类似。

理解以上原理后,再看数码管就很简单。一个 8 字数码管只需要 7 段 LED,因此用 5 个 IO 就可以驱动 188 型多位数码管。为方便 PCB 布局和软件编程,原理图可以按段和位分别简化示意。

这个明白后,咱们再加一个IO就能实现3个IO控制4个LED如下图二。这个也好理解,如果再升级一下呢,如下图,MCU仅通过3个端口即可单独控制6个LED。那么其和IO1、IO2、IO3 都会接入各2个灯。那么如何工作呢?

1.IO1=高电平,IO2=低电平,IO3=高阻态;那么上述中 IO1->LED1->IO2和 IO1->(LED6+LED4)->IO2能各形成一个回路,由于两路形成并联,(LED6+LED4)和 LED1是并联,所以当电压被钳位到LED1的点亮电压(例如2.8v),那么此时就只有 LED1点亮。LED6+LED4无法点亮。

2.IO1=高电平,IO2=高阻态(输入模式),IO3=0V;IO1->LED6->IO3同理LED6点亮;LED1+LED3 由于并联;LED6原因电压被钳位到比如2.4V,电压太低不足以点亮(LED1+LED3)2个灯。

3.IO1=高阻态(输入模式),IO2=高电平,IOP3=低电平;同理LED3点亮。(LED2+LED6)电压太低不足以点亮2个灯。以此类推,LED4,LED2,LED5点亮同理论。

上面如果你明白了,下面就好理解了,我们知道驱动一个1个8字数码管需要7个LED如下图。

那么我们用5个IO就能控制188型的数码管。

为了更好的让layout画PCB,原理图还可以这样示意。

为了更好理让软件更好的编写程序原理图还可以这样,如第一个8字数码管示意。

第二个8字数码管示意。

硬件部分讲完了,咱们再讲解下软件部分--程序的编写思路

三、软件编程思路

使用查理复用的 LED 驱动电路,程序基本流程如下:

初始化所有 IO 为高阻输入状态选中要点亮的 LED,将其对应的两个 IO 设置为推挽输出控制这两个 IO 一高一低,点亮对应 LED循环重复以上三步,实现持续显示

四、查理复用的四个主要缺点

1)LED 刷新频率要求

查理复用本质是逐颗点亮、轮流刷新,同一时刻只亮一颗 LED。必须保证刷新频率足够快,人眼才会感觉常亮。一般要求每个LED刷新频率 >50Hz,否则会明显闪烁。

2)峰值电流问题

由于是分时驱动,为保证亮度,LED 的峰值电流需要比常亮方式更大。同时,如果程序跑飞或死机,已点亮的 LED 可能承受较大电压,存在一定过流风险。

3)必须支持三态 IO

该方案严格依赖单片机 GPIO 的三态能力(高、低、高阻)。若 IO 驱动能力有限(一般单片 IO 限流约 20mA),会限制整体亮度和 LED 数量;若需要外加驱动电路,往往会抵消省 IO 的优势。

4)正向电压差异带来的复杂性

不同颜色 LED 正向压降不同:

    红光:1.8V~2.2V黄光:2.0V~2.4V绿光:2.2V~2.8V蓝光 / 白光:2.8V~3.5V

当使用多种颜色或电源电压较高(如 5V)时,若目标 LED 损坏,可能出现串联导通、意外点亮其他 LED的现象,即 “二极管连锁效应”。而 3V 系统一般不易出现该问题,因为电压不足以让两颗 LED 串联导通。此外,查理复用电路的 PCB 布线通常更复杂、走线更绕。

五、设计经验与注意事项

硬件设计

每路 LED 必须串联限流电阻,常用 220Ω~1kΩ,防止过流损坏LED 反向耐压较低,必要时可并联反向保护二极管严格控制单引脚电流,不超过 MCU 额定值(常见 20mA / 引脚)

软件优化

扫描频率建议 >60Hz,单帧时间 ≤16ms,避免闪烁切换显示时加入消隐处理,减少鬼影现象空闲 IO 保持高阻态,降低静态功耗

常见问题与解决

交叉干扰、微亮

    • 多由高阻态漏电导致,可缩短扫描间隔、优化 PCB 布线拉开间距

亮度不均

    • 调整每位 / 每段的扫描占空比,统一点亮时间

驱动能力不足

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录

嵌入式开发工程师,创客教师,芯片应用工程师,主要致力于芯片应用解决方案设计、嵌入式硬件设计、嵌入式软件设计、51单片机、STM32单片机、Arduino单片机、ESP32单片机、FPGA等主流控制器的开发,以及创客、开源硬件设计等领域研究。

微信公众号