0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎么做到用3个IO口控制6个LED灯的?

GReq_mcu168 ? 来源:电路啊 ? 作者:电路啊 ? 2021-05-13 11:18 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

7909e236-b328-11eb-bf61-12bb97331649.png

▲本文要分析的电路

事情是这样开始的。 买了个电动牙刷,几十块钱那种:

收到的实物长这样:

牙刷手柄上有1个按键和6个LED

拆开看看电路板:

可以看出,电路板上用的单片机,只有8个脚,却要控制1个按键、6个LED灯、1个震动的马达电机

初看之下,GPIO应该是不够用的。 单片机除去电源脚(正极)和GND脚(负极),只剩最多6个GPIO脚。 那么是怎么做到够用的? 原来,经过巧妙的电路设计,这款电动牙刷实现了用3个GPIO控制6个LED灯,节省了GPIO。

这个巧妙的电路如下:

7909e236-b328-11eb-bf61-12bb97331649.png

6个LED灯为相同的型号,为方便查看,用红绿两种颜色区分两种不同的方向。 一、原理分析 这个电路用到了单片机GPIO的三种状态:

高电平

低电平

高阻态

所谓“高阻态”,是指GPIO对外部电路表现出极大的阻抗。因阻抗很大,几乎不会吸入电流,也不会对外输出电流。 各个LED灯单独亮起,分为六种情况。 1、当只有LED1亮起时,单片机各GPIO的状态如下:(带箭头的红线为电流回路)

7c0332da-b328-11eb-bf61-12bb97331649.png

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

7c36faf2-b328-11eb-bf61-12bb97331649.png

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

7c438ae2-b328-11eb-bf61-12bb97331649.png

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

7c5179ea-b328-11eb-bf61-12bb97331649.png

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

7c773efa-b328-11eb-bf61-12bb97331649.png

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

7cb4fc36-b328-11eb-bf61-12bb97331649.png

整理如下:

7ce6930e-b328-11eb-bf61-12bb97331649.png

就是这么简单! 二、总结提升 以上其实是用了一种叫“查理复用”(Charlieplex)的方法。 为什么叫查理复用?

很简单,因为这个方法来源于美信半导体公司的工程师Charlie Allen。

查理复用是一种能够在驱动LED,特别是驱动大量LED时有效地节约GPIO的方法。 使用该方法,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引脚设定为高阻态。

前面电动牙刷中6个LED灯的电路,就是这么设计的。

下面从最简单的开始,一步一步体会查理复用的电路设计。 1、使用2个GPIO时最简单:

7d1c3040-b328-11eb-bf61-12bb97331649.png

LED1亮起时:

7d4cc8b8-b328-11eb-bf61-12bb97331649.png

LED2亮起时:

7d69915a-b328-11eb-bf61-12bb97331649.png

这里只用到高电平、低电平的状态,不需要用高阻态的状态。 2、使用3个GPIO时,前面已经分析过:

7909e236-b328-11eb-bf61-12bb97331649.png

可以等效为下图:

7d9b361a-b328-11eb-bf61-12bb97331649.png

可以看出,确实是任意两个GPIO之间均串入了两个并联的LED,且LED方向相反。 3、同样的原理,使用4个GPIO时:

7da60fc2-b328-11eb-bf61-12bb97331649.png

点亮LED1时:

7db59be0-b328-11eb-bf61-12bb97331649.png

其他LED亮起的情况不再列举。 查理复用这样的电路接法也会引发一些问题。 首先,LED亮起时完全由单片机的GPIO输出电流,所以对于GPIO的电流驱动能力有一定的要求。设计电路时要注意查询自己使用的MCU的电流驱动能力,下图是STM32单片机中对GPIO电流驱动能力的说明:

7dc47520-b328-11eb-bf61-12bb97331649.png

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

7df06996-b328-11eb-bf61-12bb97331649.png

三、继续进阶

如果要同时亮起两个以上的LED,怎么办?

交替点亮他们就行,只要交替切换的速度够快,由于人眼的视觉暂留效应,看起来就是同时亮起的。

值得一提的是,如果要同时亮起的LED较多,比如大规模的LED点阵,那么还要注意一些新的问题,颇有门道。

本文不再展开,感兴趣的读者可以自行查询修炼,继续进阶。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    242

    文章

    23910

    浏览量

    676769
  • 单片机
    +关注

    关注

    6069

    文章

    45086

    浏览量

    653974
  • 电流
    +关注

    关注

    40

    文章

    7150

    浏览量

    135480
  • GPIO
    +关注

    关注

    16

    文章

    1289

    浏览量

    54421

原文标题:用3个IO口控制6个LED灯,怎么做到的?

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    KT142C-SOP16 语音芯片:6 段音乐 IO 控制与纽扣电池供电选型方案

    文档围绕 6 段音乐需独立 IO 控制且由纽扣电池供电的语音芯片选型展开。指出需求关键在于芯片需 SOP16 封装以满足 6
    的头像 发表于 06-23 09:33 ?318次阅读
    KT142C-SOP16 语音芯片:<b class='flag-5'>6</b> 段音乐 <b class='flag-5'>IO</b> <b class='flag-5'>控制</b>与纽扣电池供电选型方案

    MCU是否可以使用普通IO和数据总线控制cy7c68013a,异步slavefifo模式增加一与PC通信的USB?

    cy7c68013a的固件已经配置成异步slave模式,是否有MCUIO控制cy7c68013a通过数据总线来实现与PC的USB通信,
    发表于 05-30 06:32

    拆了才知道的秘密——为啥这款飞利浦LED(10)动不动就翘?

    1、为啥这款LED动不动就不亮了 这个是知名品牌,做工精致,我一批买10。还好,每个能坚持一段时间。但是,最终,还是全部休息了,这个是最后一。没扔,留着拆一下。
    的头像 发表于 05-08 13:47 ?389次阅读
    拆了才知道的秘密——为啥这款飞利浦<b class='flag-5'>LED</b><b class='flag-5'>灯</b>(10<b class='flag-5'>个</b>)动不动就翘?

    HTR3306 6LED驱动器和GPIO控制器中文手册

    ? ? HTR3306是一款6路多功能LED驱动器和GPIO控制器,2.5V~5.5V电源供电。10IO端口中的任何一
    发表于 04-14 17:41 ?1次下载

    安信可Ai-WB2-01S做一可用网页控制的简易

    以下作品由安信可社区用户 KevinLi制作 01简介 使用2不同功率的Led通过GPIO的PWM通道+三极管控制亮度 ●供电:5V或3V ●控制
    的头像 发表于 03-26 13:59 ?429次阅读
    <b class='flag-5'>用</b>安信可Ai-WB2-01S做一<b class='flag-5'>个</b>可用网页<b class='flag-5'>控制</b>的简易<b class='flag-5'>灯</b>

    STM32F030P4F6为什么无法初始化IO输出高电平?

    你好,我STM32F030P4F6这个作为主控芯片控制LED亮灭(LED是共阳接法)的时候发
    发表于 03-11 07:15

    Labview写一电子称的485串程序

    关键词:Labview + 串口程序 232、485串通讯是最常见的仪器仪表通讯方式之一,本文详细介绍,Labview编写一电子秤的485串程序.
    的头像 发表于 03-06 09:54 ?900次阅读
    <b class='flag-5'>用</b>Labview写一<b class='flag-5'>个</b>电子称的485串<b class='flag-5'>口</b>程序

    SN74LVC4245A DIR和/OE两控制信号的高低电平可以28027的3.3V通用IO引脚控制吗?

    现在用28027的IO与外围5V器件进行双向数据交换。LVC4245A芯片DIR和/OE两控制信号的高低电平可以28027的3.3V
    发表于 12-30 08:34

    HTR3306 6LED驱动器和GPIO控制

    HTR3306是一款6路多功能LED驱动器和GPIO控制器,2.5V~5.5V电源供电。10IO端口中的任何一
    的头像 发表于 11-20 15:57 ?627次阅读
    HTR3306  <b class='flag-5'>6</b>路<b class='flag-5'>LED</b>驱动器和GPIO<b class='flag-5'>控制</b>器

    AIC3254要怎么做才能够做到反馈抑制呢?

    今天我研究了一天了,发现AEC怎么做都无法做到只用单个MIC输入。TI提供的例程,我也仔细地研究过了,那种例程,只适用于互相通话的情况。也就是说,那些例子都存在着两音源,很明显,这样是符合回波
    发表于 11-08 07:49

    双开关控制怎么接线

    双开关控制的接线方法主要有以下几种,每种方法都有其特定的应用场景和接线方式: 一、串联接线法 接线步骤 : 将电源线的火线(L)与一开关的一
    的头像 发表于 10-09 15:57 ?1.5w次阅读

    io和串口的区别 单片机有多少io

    IO和串口的区别 IO,即输入输出端口(Input/Output Port),是单片机或其他微控制器与外部设备之间进行数据交换的接口。它
    的头像 发表于 10-06 10:06 ?4554次阅读

    MCU IO的作用和特点

    MCU(微控制器)的IO(Input/Output Port,输入输出端口)是单片机与外界进行信息交互的关键接口。这些IO在微
    的头像 发表于 09-30 11:52 ?3115次阅读

    单片机io怎么配置成输出口

    单片机IO配置成输出口的过程通常涉及对单片机内部寄存器的操作。不同型号的单片机在寄存器配置和编程方式上可能有所不同,但基本原理是相似的。以下是一通用的步骤,用于将单片机IO
    的头像 发表于 09-14 14:33 ?1685次阅读

    光纤收发器6指示含义是什么

    光纤收发器是一种将电信号转换为光信号,或将光信号转换为电信号的设备,广泛应用于网络通信、数据传输等领域。光纤收发器通常具有多个指示,用于显示设备的工作状态和故障信息。以下是对光纤收发器6指示
    的头像 发表于 08-23 09:54 ?4695次阅读