在做消费类电子产品设计时,常因单片机的IO不够驱动LED而发愁,有一种电路利用了单机IO正反推驱动LED,其查理复用算法可让相同针脚数量的IO口点亮更多LED灯。理论上能达到N个I0口可以驱动 N*(N-1)个LED灯。
今天分享下,只需要5个IO就能驱动188数码管。其实现原理,利用IO口三态控制及程序编写控制正反推驱动LED,为了更方便理解后面电路工作原理,咱们由浅入深一步步来,先从简单的2个IO来说其工作原理吧。
图一,两个LED反并联连接,红色LED的阳极连接到绿色LED的阴极。
当IO1变为高电平,IO2 变为低电平时,则红色LED点亮,
当IO1变为低电平,IO2 变为高电平时,则绿色LED点亮。
这个明白后,咱们再加一个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如下图,
对于使用了“查理复用算法”的LED控制电路,程序开发基本思路步骤:
1.初始化所有端口为高阻态:
2.初始化指定LED灯对应的两个针脚为推挽输出:
3.设置两个针脚的高低电平变化:
如是重复 1、2、3步骤即可:
1、LED 显示频率
“查理复用” 技术的原理就是每次点亮一个发光二极管,然后再设置点亮另一个,周期重复。(LED二极管是单极性的)但如果频率足够快,人眼会认为LED是一直亮着的。每个LED的刷新速率必须大于50HZ。
2、峰电流
“查理复用”当显示的数量变大,通过LED的平均电流必须(大约)大于一个维持它持续点亮的常数(不是每个MCU都适用),这要求增加相应的电流峰值,这将导致限制了使用“查理复用”显示数量的问题。如果MCU代码崩溃,已点亮的LED比传统的复用处在一个非常大的电压下,增加了一个危险故障隐患。
3、三态要求.
“查理复用” 要求单片机的IO必须有三态。如果电流足够低以至于不能直接驱动微控制器的 I/O引脚显示,但如果必须使用外部状态,每个三态一般需要两个输出线,以控制消除了一个“查理复用”显示优势。由于来自微控制器引脚的电流通常仅限于20mA,因此这严重限制了一个 “查理复用”显示的实际功耗。
4、正向电压的复杂性
“查理复用”矩阵比传统的复合矩阵明显更加复杂,无论是在所需的PCB板布局和微控制器编程,这增加了设计时间。当使用不同正向的电压的颜色LED,可能存在的问题就是我们不期望亮的LED会亮起。原因如下:
红色 LED:通常是 1.8V->2.2V。黄色 LED:通常是 2.0V->2.4V。
绿色 LED:大概在 2.2V->2.8V。白/蓝色 LED:通常是 2.8V->3.5V。
例如我们想点亮 LED1,可以让IO1=高,IO2=低,IO3=高阻(输入模式),这样LED1就亮起来了,但是如果LED1损坏时呢?当电源电压较高时(例如5V),会形成图中箭头所示电流回路,造成LED4+LED5两只LED被意外点亮,然而用3V电压为什么没事呢?因为3V电压还没达到大部分LED压降的两倍,所以不会导致两只二极管串联导通(称之为二极管连锁现象)。同时所需的PCB板布局布线更绕。
硬件设计方面:
-
限流电阻:每个LED或段需串联电阻,防止过流(通常220Ω~1kΩ)。
-
二极管特性:LED反向耐压较低,避免反向电压(可并联反向保护二极管)。
-
引脚电流限制:确保单引脚电流不超过MCU额定值(如20mA/引脚)。
软件优化方面:
-
扫描频率:建议>60Hz(每帧≤16ms),避免闪烁。
-
消隐处理:防止“鬼影”,切换数码管时短暂关闭所有段。
-
低功耗优化:其他空闲时引脚设为高阻态,减少静态功耗。
常见问题
-
交叉干扰:因高阻态漏电导致相邻LED微亮,可通过降低扫描间隔或优化PCB布局加大距离解决。
-
亮度不均:扫描占空比不一致时,需调整每位数码管的显示时间。
-
驱动能力不足:对于大尺寸数码管,需增加晶体管或专用驱动芯片(如74HC595)。
