• 注册 / 登录
  • 切换到窄版
  • 查看: 1753|回复: 1

    单片机如何用3个IO口控制6个LED灯

    [复制链接]

    668

    主题

    682

    帖子

    6599

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    6599
    发表于 2023-8-13 00:46:03 | 显示全部楼层 |阅读模式

    路线栈欢迎您!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    前言

    事情是这样开始的,买了个电动牙刷,几十块钱那种。收到的实物长得下图的样子,牙刷手柄上有1个按键和6个LED。

    1.png


    拆开看看电路板,如下图:

    2.png

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

    初看之下,GPIO应该是不够用的;单片机除去电源脚(正极)和GND脚(负极),只剩最多6个GPIO脚。

    那么是怎么做到够用的,原来经过巧妙的电路设计,这款电动牙刷实现了用3个GPIO控制6个LED灯,节省了GPIO。

    这个巧妙的电路如下:

    3.png

    6个LED灯为相同的型号,为方便查看,用红绿两种颜色区分两种不同的方向。

    一、原理分析

    这个电路用到了单片机GPIO的三种状态:高电平、低电平、高阻态。其中“高阻态”,是指GPIO对外部电路表现出极大的阻抗。因阻抗很大,几乎不会吸入电流,也不会对外输出电流。

    分析各个LED灯单独亮起的六种情况。

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

    4.png

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

    5.png

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

    6.png

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

    7.png

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

    8.png

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

    9.png

    整理如下:

    10.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具有单向导电性。

    查理复用设计的方法:

    1.任意两个GPIO引脚之间串入两个LED,这两个LED为并联,且LED方向相反。
    2.当你想要点亮某个特定的LED时,就将其两端所连接到的GPIO引脚分别设定为高电平和低电平,其它剩余的GPIO引脚设定为高阻态。
    3.前面电动牙刷中6个LED灯的电路,就是这么设计的。

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

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

    11.png

    LED1亮起时:

    12.png

    LED2亮起时:

    13.png

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

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

    14.png

    可以等效为下图:

    15.png

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

    3、同样的原理,使用4个GPIO时:

    16.png

    点亮LED1时:

    17.png

    其他LED亮起的情况不再列举。

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

    20.png

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

    19.png

    三、继续进阶

    如果要同时亮起两个以上的LED,就用到交替点亮,只要交替切换的速度够快,由于人眼的视觉暂留效应,看起来就是同时亮起的。

    如果要同时亮起的LED较多,比如大规模的LED点阵,那么还要注意一些新的问题;感兴趣的读者可以自行查询修炼,颇有门道,继续进阶。

    IO口可以做些什么用,大家可以看下GPIO就是芯片上的一根干啥都行的引脚

    作者:LR梁锐

    回复

    使用道具 举报

    0

    主题

    1

    帖子

    22

    积分

    新手上路

    Rank: 1

    积分
    22
    发表于 2023-12-13 08:21:37 | 显示全部楼层
    如果能把继续进阶的部分更为详尽的描述,此文会显得价非常高。
    回复

    使用道具 举报

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

    本版积分规则

    小黑屋|路丝栈 ( 粤ICP备2021053448号 )

    GMT+8, 2024-11-3 20:52 , Processed in 0.045312 second(s), 21 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表