• 249查看
  • 0回复

[芯片硬件] 【硬件设计】如何利用少的IO口控制多个LED

[复制链接]


该用户从未签到

发表于 10-5-2024 19:15:10 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


在项目中经常会遇到单片机IO口资源不够用的情况,那么如何让单片机的IO口利用最大化呢,这里分享一下几种方法。

一、如何使用1个GPIO口控制2个LED灯显示四种状态

1、LED的两大特性:

1).单向导电性

2).阈值特性:在LED两端加压到一定的阀值电压后才能导通(材料不同,阀值电压不同)

2、电路设计

并联

【硬件设计】如何利用少的IO口控制多个LEDw1.jpg

3、原理详解

1).IO口为高阻态时,两个LED均熄灭

2).IO口为高电平的时候,红色LED点亮

3).IO口为低电平的时候,黄色LED点亮

4).IO口输出方波信号(频率大于100Hz),两个LED交替点亮,根据人眼视觉惰性,两个灯相当于都点亮

限制:电源电压只有5V,只有部分低阀值的LED可点亮

解决方法:

串联

【硬件设计】如何利用少的IO口控制多个LEDw2.jpg

1).IO口为高阻态时,两个LED均熄灭(两个LED导通所需电压大于电源电压)

2).IO口为高电平的时候,蓝色LED点亮

3).IO口为低电平的时候,绿色LED点亮

4).IO口输出方波信号(频率大于100Hz),两个LED交替点亮,根据人眼视觉惰性,两个灯相当于都点亮

总结:当两个LED导通电压大于电源电压时,串联

当两个LED导通电压小于电源电压时,并联

LED灯驱动

使用NPN和PNP三极管

如果是一个IO口,IO口驱动电流很小。控制两个LED灯时不能同时发光也就是一个发光一个不发光,则可以使用如下电路;两个三极管一个NPN一个PNP来实现LED灯控制。

【硬件设计】如何利用少的IO口控制多个LEDw3.jpg

使用NPN和NPN

如果是一个IO口,IO口驱动电流很小。控制两个LED灯时不能同时发光也就是一个发光一个不发光,则可以使用如下电路;两个三极管都是NPN三极管,因为NPN从集电极拿出来信号,刚好是和基极信号相位相反的。

【硬件设计】如何利用少的IO口控制多个LEDw4.jpg

直接驱动无需放大

如上所示,LED灯直接可以用IO口驱动,此时一个接成IO口上拉的形式;一个接成IO口下拉的形式,此时IO口高低状态会驱动不同颜色的了的LED灯发光。

【硬件设计】如何利用少的IO口控制多个LEDw5.jpg

两个NPN使用两个IO口

IO口无法驱动而且需要使用两种不同颜色的LED灯时,我们可以直接使用两个NPN三极管来驱动;当然也可以使用PNP三极管。

【硬件设计】如何利用少的IO口控制多个LEDw6.jpg

以上两种灯需要交替亮起来一般很常见,例如系统正常工作时需要红色指示灯亮起来,但是待机时,需要绿色指示灯亮起来。

请注意红色、绿色、蓝色LED灯除了颜色不一致,正常发光时的压降也是不一致的;如下所示:

红色:1.6~2.0V

绿色:2.2~2.5V

蓝色:2.5~3.1V

小知识:2014年诺贝尔物理学奖,被授予日本名古屋大学、名城大学教授赤崎勇,名古屋大学教授天野浩,以及美国加州大学圣芭芭拉分校教授、美籍日裔科学家中村修二,以表彰他们发明了蓝色发光二极管(LED),并因此带来的新型节能光源。

二、如何使用两个IO口控制三个LED灯

方法一:

【硬件设计】如何利用少的IO口控制多个LEDw7.jpg

【硬件设计】如何利用少的IO口控制多个LEDw8.jpg

S1和S2分别接单片机两个IO口,这里通过一个单刀双掷按键模拟IO口输出高低电平。

S1和S2同时为低电平时,LED灯全灭。

S1为低电平,S2为高电平时,LED2亮。

S1为高电平,S2为低电平时,LED3亮。

S1为高电平,S2为高电平时,LED1亮。

方法二:

【硬件设计】如何利用少的IO口控制多个LEDw9.jpg

【硬件设计】如何利用少的IO口控制多个LEDw10.jpg

S3和S4分别接单片机两个IO口,这里通过一个单刀双掷按键模拟IO口输出高低电平。

S3和S4同时为低电平时,LED4亮。

S3为低电平,S4为高电平时,LED6亮。

S3为高电平,S4为低电平时,LED5亮。

S3为高电平,S4为高电平时,LED5、LED6同时亮。

方法三:

【硬件设计】如何利用少的IO口控制多个LEDw11.jpg

【硬件设计】如何利用少的IO口控制多个LEDw12.jpg

S1和S2分别接单片机两个IO口,这里通过一个单刀双掷按键模拟IO口输出高低电平。

S1和S2同时为低电平时,LED灯全灭。

S1为低电平,S2为高电平时,LED3亮。

S1为高电平,S2为低电平时,LED2亮。

S1为高电平,S2为高电平时,LED1亮。

方法四:

【硬件设计】如何利用少的IO口控制多个LEDw13.jpg

【硬件设计】如何利用少的IO口控制多个LEDw14.jpg

S3和S4分别接单片机两个IO口,这里通过一个单刀双掷按键模拟IO口输出高低电平。

S3和S4同时为低电平时,LED灯全灭。

S3为低电平,S4为高电平时,LED6亮。

S3为高电平,S4为低电平时,LED5亮。

S3为高电平,S4为高电平时,LED4亮。

通过两个IO口的高低电平4种组合方式,结合外部电路就可以控制3个LED灯的亮灭。

三、如何用3个IO口控制6个LED灯

【硬件设计】如何利用少的IO口控制多个LEDw15.jpg

这个电路用到了单片机GPIO的三种状态:高电平 低电平 高阻态

所谓“高阻态”,是指GPIO对外部电路表现出极大的阻抗。因阻抗很大,几乎不会吸入电流,也不会对外输出电流。

各个LED灯单独亮起,分为六种情况。

1、当只有LED1亮起时,单片机各GPIO的状态如下:(带箭头的红线为电流回路)

【硬件设计】如何利用少的IO口控制多个LEDw16.jpg

2、当只有LED2亮起时,单片机各GPIO的状态如下:

【硬件设计】如何利用少的IO口控制多个LEDw17.jpg

3、当只有LED3亮起时,单片机各GPIO的状态如下:

【硬件设计】如何利用少的IO口控制多个LEDw18.jpg

4、当只有LED4亮起时,单片机各GPIO的状态如下:

【硬件设计】如何利用少的IO口控制多个LEDw19.jpg

5、当只有LED5亮起时,单片机各GPIO的状态如下:

【硬件设计】如何利用少的IO口控制多个LEDw20.jpg

6、当只有LED6亮起时,单片机各GPIO的状态如下:

【硬件设计】如何利用少的IO口控制多个LEDw21.jpg

整理如下:

【硬件设计】如何利用少的IO口控制多个LEDw22.jpg

就是这么简单!

使用该方法,n个GPIO可以驱动 n*(n-1) 个LED,所以:

使用2个GPIO可以驱动2个LED。

使用3个GPIO可以驱动6个LED。

使用4个GPIO可以驱动12个LED。

以此类推。

这种方式能够实现的基础是:

单片机GPIO的三个状态:高电平、低电平、高阻态。

LED具有单向导电性。

查理复用设计的方法:

任意两个GPIO引脚之间串入两个LED,这两个LED为并联,且LED方向相反。

当你想要点亮某个特定的LED时,就将其两端所连接到的GPIO引脚分别设定为高电平和低电平,其它剩余的GPIO引脚设定为高阻态。

下面从最简单的开始,一步一步体会查理复用的电路设计。

1、使用2个GPIO时最简单:

【硬件设计】如何利用少的IO口控制多个LEDw23.jpg

LED1亮起时:

【硬件设计】如何利用少的IO口控制多个LEDw24.jpg

LED2亮起时:

【硬件设计】如何利用少的IO口控制多个LEDw25.jpg

这里只用到高电平、低电平的状态,不需要用高阻态的状态。

2、使用3个GPIO时,前面已经分析过:

【硬件设计】如何利用少的IO口控制多个LEDw26.jpg

可以等效为下图:

【硬件设计】如何利用少的IO口控制多个LEDw27.jpg

可以看出,确实是任意两个GPIO之间均串入了两个并联的LED,且LED方向相反。

查理复用这样的电路接法也会引发一些问题。

首先,LED亮起时完全由单片机的GPIO输出电流,所以对于GPIO的电流驱动能力有一定的要求。设计电路时要注意查询自己使用的MCU的电流驱动能力,下图是STM32单片机中对GPIO电流驱动能力的说明:

【硬件设计】如何利用少的IO口控制多个LEDw28.jpg

其次,如果出现了某个LED开路或短路的情况,电流的流向会被打乱,LED亮起来的逻辑会变得错乱。最坏的情况下,电路会对GPIO索取大电流,导致单片机损坏。下图是假设LED1短路,那么在点亮LED5时,LED3也会亮起:

【硬件设计】如何利用少的IO口控制多个LEDw29.jpg

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 27-12-2024 11:10 , Processed in 0.209565 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.