如何巧妙利用4个IO口驱动12个LED灯
Posted 三明治开发社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何巧妙利用4个IO口驱动12个LED灯相关的知识,希望对你有一定的参考价值。
在电路设计过程中有时经常遇到单片机的IO口不够用的情况。对于这样的问题,我们可以选择换单片机,也可以尝试一些巧妙的设计来避免IO口不够用的问题。例如当我们在设计中遇到许多LED灯需要控制的时候,而单片机的IO口又不够用,我们又不希望增加成本,此时我们可以采用“查理复用”(Charlieplexing)的方式去解决这个问题。
“查理复用”(Charlieplexing)作为一种LED显示器多路复用的方法,能够使人们利用少量的IO口控制很多的LED灯,在LED领域应用广泛。
当使用 Charlieplexing 方法,n引脚可以有nx(n-1)个组合。也就是说,它可以用n个引脚驱动nx(n-1)个LED二极管。而传统的行列复用则需要更多的引脚来驱动相同的LED二极管,也就是说要驱动6个LED,用行列式需要5个口,而这种方法只要3个IO口。LED越多,节省的IO越多。比方说驱动20个LED,行列式要用9个,而这种只要5个。
下面我们来看看设计的原理吧!!!!!
一、原理图分析
这个电路用到了单片机GPIO的三种状态:
-
高电平
-
低电平
-
高阻态
所谓“高阻态”,是指GPIO对外部电路表现出极大的阻抗。因阻抗很大,几乎不会吸入电流,也不会对外输出电流。
各个LED灯单独亮起,分为12种情况。(原理图中的二极管为LED灯)
1、当只有D1亮起时,单片机各GPIO的状态如下:(带箭头的红线为电流回路)
2、当只有D2亮起时,单片机各GPIO的状态如下:
3、当只有D3亮起时,单片机各GPIO的状态如下:
4、当只有D4亮起时,单片机各GPIO的状态如下:
5、当只有D5亮起时,单片机各GPIO的状态如下:
6、当只有D6亮起时,单片机各GPIO的状态如下:
7、当只有D7,D8,D9,D10,D11,D12任意一个亮起时,单片机各GPIO的状态如上分析,这里不在叙述了。
二、设计要求
这种方式能够实现的基础是:
-
单片机GPIO的三个状态:高电平、低电平、高阻态。
-
GPIO能承受的电流要大于LED灯流过的电流。
-
LED具有单向导电性。
查理复用设计的方法:
-
任意两个GPIO引脚之间串入两个LED,这两个LED为并联,且LED方向相反。
-
当你想要点亮某个特定的LED时,就将其两端所连接到的GPIO引脚分别设定为高电平和低电平,其它剩余的GPIO引脚设定为高阻态。
程序的编写和控制简介:
对于使用了 查理复用算法的LED控制电路,程序开发步骤如下:
-
初始化所有端口为高阻态。
-
初始化指定LED 灯对应的两个管脚为推挽输出。
-
设置两个管脚的高低电平。
三、设计中的问题
”查理复用“这样的电路接法也会引发一些问题如下:
首先,LED亮起时完全由单片机的GPIO输出电流驱动,所以对于GPIO的电流驱动能力有一定的要求。设计电路时要注意查询自己使用的MCU的电流驱动能力,下图是GD32和STM32单片机中对GPIO电流驱动能力的说明:
GD32E230C8T6单片机GPIO最大输出电流如下:
STM32F105,STM32F107单片机GPIO输出电流如下:
其次,如果出现了某个LED开路或短路的情况,电流的流向会被打乱,LED亮起来的逻辑会变得错乱。最坏的情况下,电路会对GPIO索取大电流,导致单片机损坏。下图是假设D1和D3短路,那么在点亮D11时,D5也会亮起:
四、进阶设计
问题:如果要同时亮起两个以上的LED,怎么办?
方法:交替点亮他们就行,只要交替切换的速度够快,由于人眼的视觉暂留效应,看起来就是同时亮起的。
注意:如果要同时亮起较多LED灯,比如大规模的LED点阵,还要注意一些新的问题,这里不在展开叙述了。
要求:在任意时刻只要有一个端口高电平,一个端口低电平,其余两个端口高阻态,那么就只有一个LED发光。依次循环扫描就成流水灯,速度快了就达到视觉全亮。想控制任意几个LED亮灭就与控制多位数码管动态显示一样。唯一的前提条件是MCU的端口可以设置为推挽和高阻模式。
拓展:有了上述方法之后,我们可以利用1个GPIO控制2个LED显示4种状态。
要实现4种状态:
-
红灯亮,绿灯灭
-
红灯灭,绿灯亮
-
都灭
-
都亮
分析同上,这里不在叙述了。(也是需要单片机IO口模式能设置为推挽模式和高阻态)
注意;两个LED灯总的导通压降要求大于3.3V。若总压降小于3.3V可能会出现当Port设为浮空高阻态时,出现两个LED灯同时点亮的风险。(当Port设为浮空高阻态时,需要同时灭)
以上是关于如何巧妙利用4个IO口驱动12个LED灯的主要内容,如果未能解决你的问题,请参考以下文章
单片机的IO驱动LED灯电路,需要用到三极管,求原理图,并说明