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
    +关注

    关注

    240

    文章

    23094

    浏览量

    657490
  • 单片机
    +关注

    关注

    6030

    文章

    44501

    浏览量

    632288
  • 电流
    +关注

    关注

    40

    文章

    6724

    浏览量

    131747
  • GPIO
    +关注

    关注

    16

    文章

    1189

    浏览量

    51854

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    MCU IO的作用和特点

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

    问一下一单片机的io分别控制板该怎么设计电路?

    各位大佬,我想问一下一单片机的io分别控制板该怎么设计电路,每个
    发表于 07-15 19:03

    请问esp32的io怎么做的ns的延时控制

    之前stm32都是自己NOP();语句拼凑出来的ns级延时,esp32是freertos任务会切换,想做到ns延时要怎么做?请大佬指点一下,谢谢!
    发表于 06-21 07:43

    STM32的IO连接到一起,其中一IO被烧坏的原因?

    如题:两STM32的IO连接到一起,一单片机IO设置为输出模式(发送数据),另一设置为外
    发表于 04-24 07:53

    STM32配置IO的频率时,为什么只给一IO配置?

    配置IO的频率时,为什么只给一IO配置?
    发表于 04-07 08:43

    简单的无线LED电路

    这篇文章解释了一简单的无线 LED 电路,可用于在夜间自动打开 LED 以照亮绘画。室内
    的头像 发表于 02-25 14:03 1134次阅读
    一<b class='flag-5'>个</b>简单的无线<b class='flag-5'>LED</b><b class='flag-5'>灯</b>电路

    led是什么意思有什么

    LED的原理 LED的原理是通过电流通过半导体材料时,电流与电子结合释放出光能。这种光能是通过半导体材料内的能级差产生的。LED
    的头像 发表于 02-01 17:27 2161次阅读

    求购两LED呼吸控制

    某宝某多买了几个控制器发现LED的亮度变化在低占空比的时候,变化很明显,而在高占空比的时候反而变化很小,导致呼吸表现呼吸不均匀的现象,我想要的是控制器能
    发表于 01-31 21:54

    能否使用普通IO模拟PWM波?该怎么做

    能否使用普通IO模拟PWM波?该怎么做? 使用普通IO模拟PWM波是一种常见的嵌入式系统应用技术,它通过
    的头像 发表于 01-15 14:43 5490次阅读

    STM32按键控制LED的亮灭

    使用一按键控制LED的亮灭,按键按下时LED亮起,按键松开时LED熄灭。通过按键控制实验来介绍
    的头像 发表于 12-11 14:19 3521次阅读
    STM32按键<b class='flag-5'>控制</b><b class='flag-5'>LED</b>的亮灭

    AD5423 nSYNC硬件上是否可以直接接GND,还是必须用IO控制

    1. nLDAC硬件上是否可以直接接GND ? 2. nSYNC 硬件上是否可以直接接GND,还是必须用IO控制3. 当有4片AD5423 的时候, 4片AD5423的nS
    发表于 12-05 07:25

    IO控制三级管控制USB5v

    随着现代科技的发展,USB接口已经成为我们日常生活中必不可少的一部分。无论是数据传输还是充电,大多数设备都需要通过USB接口来实现。然而,在某些特殊情况下,我们可能需要通过IO控制控制
    的头像 发表于 12-01 16:44 883次阅读

    如何通过PWM做一呼吸

    接下来我们就来试一试,通过PWM让一LED实现不同亮度的变化,也就是我们常见的呼吸了。 硬件接线 还是这个LED
    的头像 发表于 11-27 11:40 828次阅读
    如何通过PWM做一<b class='flag-5'>个</b>呼吸<b class='flag-5'>灯</b>

    6万兆光+24千兆光+24千兆以太网电机架式三层网管工业以太网交换机

    +48千兆以太网电;(2)6万兆光+8千兆光
    的头像 发表于 11-21 09:11 1081次阅读
    <b class='flag-5'>6</b><b class='flag-5'>个</b>万兆光<b class='flag-5'>口</b>+24<b class='flag-5'>个</b>千兆光<b class='flag-5'>口</b>+24<b class='flag-5'>个</b>千兆以太网电<b class='flag-5'>口</b>机架式三层网管工业以太网交换机