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

▲ 本文要分析的电路
事情是这样开始的。 买了个电动牙刷,几十块钱那种:
收到的实物长这样:
牙刷手柄上有1个按键和6个led灯
拆开看看电路板:
可以看出,电路板上用的单片机,只有8个脚,却要控制1个按键、6个led灯、1个震动的马达电机:
初看之下,gpio应该是不够用的。 单片机除去电源脚(正极)和gnd脚(负极),只剩最多6个gpio脚。 那么是怎么做到够用的? 原来,经过巧妙的电路设计,这款电动牙刷实现了用3个gpio控制6个led灯,节省了gpio。
这个巧妙的电路如下:
6个led灯为相同的型号,为方便查看,用红绿两种颜色区分两种不同的方向。   一、原理分析 这个电路用到了单片机gpio的三种状态:
高电平
低电平
高阻态
所谓“高阻态”,是指gpio对外部电路表现出极大的阻抗。因阻抗很大,几乎不会吸入电流,也不会对外输出电流。 各个led灯单独亮起,分为六种情况。 1、当只有led1亮起时,单片机各gpio的状态如下:(带箭头的红线为电流回路)
2、当只有led2亮起时,单片机各gpio的状态如下:
3、当只有led3亮起时,单片机各gpio的状态如下:
4、当只有led4亮起时,单片机各gpio的状态如下:
5、当只有led5亮起时,单片机各gpio的状态如下:
6、当只有led6亮起时,单片机各gpio的状态如下:
整理如下:
就是这么简单!   二、总结提升 以上其实是用了一种叫“查理复用”(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时最简单:
led1亮起时:
led2亮起时:
这里只用到高电平、低电平的状态,不需要用高阻态的状态。 2、使用3个gpio时,前面已经分析过:
可以等效为下图:
可以看出,确实是任意两个gpio之间均串入了两个并联的led,且led方向相反。 3、同样的原理,使用4个gpio时:
点亮led1时:
其他led亮起的情况不再列举。 查理复用这样的电路接法也会引发一些问题。 首先,led亮起时完全由单片机的gpio输出电流,所以对于gpio的电流驱动能力有一定的要求。设计电路时要注意查询自己使用的mcu的电流驱动能力,下图是stm32单片机中对gpio电流驱动能力的说明:
其次,如果出现了某个led开路或短路的情况,电流的流向会被打乱,led亮起来的逻辑会变得错乱。最坏的情况下,电路会对gpio索取大电流,导致单片机损坏。下图是假设led1短路,那么在点亮led5时,led3也会亮起:
三、继续进阶
如果要同时亮起两个以上的led,怎么办?
交替点亮他们就行,只要交替切换的速度够快,由于人眼的视觉暂留效应,看起来就是同时亮起的。
值得一提的是,如果要同时亮起的led较多,比如大规模的led点阵,那么还要注意一些新的问题,颇有门道。
本文不再展开,感兴趣的读者可以自行查询修炼,继续进阶。


荣耀10青春版的提前官宣 在外观方面主打变色
多频段连接,Semtech推出可实现全球覆盖的物联网芯片LR1120
我们召唤了华为nova 2 Plus全家拍摄了一组全家福
我们如何利用自动化和物联网来改善室内空气质量?
解读拓扑流体二极管在多种工业生产应用技术研究
怎么做到用3个IO口控制6个LED灯的?
触发器的基本原理、应用场景及优缺点
Zenoah Engines G380PU飞机发动机
用电设备组的计算负荷
人工智能语音鉴黄,高科技助力净化网络环境
2020年中国芯片出口金额再创新高
DevOps 相关调查数据、结果汇总
Vernier阳极探测器电子读出电路的设计
基于LH0032构建的视频放大器电路
vocs在线监测系统大气污染的重要保障设备
有源晶振和无源晶振能够互换吗?
Diodes 推出2款车规格降压LED驱动器 适用于驱动汽车内外部LED照明
RK3399开源主板-性能达到intel凌动级别
iphone8要在手机侧面跟背面“做文章”?
区块链项目需要避免的常见错误和解决方法