文章目录[隐藏]
3个IO口控制6个LED灯
这个电路用到了单片机GPIO的三种状态:
-
高电平
-
低电平
-
高阻态
所谓“高阻态”,是指GPIO对外部电路表现出极大的阻抗。因阻抗很大,几乎不会吸入电流,也不会对外输出电流。
各个LED灯单独亮起,分为六种情况。
1、当只有LED1亮起时,单片机各GPIO的状态如下:(带箭头的红线为电流回路)
2、当只有LED2亮起时,单片机各GPIO的状态如下:
3、当只有LED3亮起时,单片机各GPIO的状态如下:
4、当只有LED4亮起时,单片机各GPIO的状态如下:
5、当只有LED5亮起时,单片机各GPIO的状态如下:
6、当只有LED6亮起时,单片机各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时最简单:
LED1亮起时:
LED2亮起时:
这里只用到高电平、低电平的状态,不需要用高阻态的状态。
2、使用3个GPIO时,前面已经分析过:
可以等效为下图:
可以看出,确实是任意两个GPIO之间均串入了两个并联的LED,且LED方向相反。
查理复用这样的电路接法也会引发一些问题。
首先,LED亮起时完全由单片机的GPIO输出电流,所以对于GPIO的电流驱动能力有一定的要求。设计电路时要注意查询自己使用的MCU的电流驱动能力,下图是STM32单片机中对GPIO电流驱动能力的说明:
其次,如果出现了某个LED开路或短路的情况,电流的流向会被打乱,LED亮起来的逻辑会变得错乱。最坏的情况下,电路会对GPIO索取大电流,导致单片机损坏。下图是假设LED1短路,那么在点亮LED5时,LED3也会亮起:
版权声明:本文为CSDN博主「芒果520」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lx123010/article/details/122857724
暂无评论