如何在微控制器上用相对较少的引脚驱动多个LED

第1步:两个led
charlieplexing背后的基本思想最好只用两个引脚和两个led来说明。随意使用此simulation - 切换开关,看看会发生什么(模拟中使用的开关用于将中间引脚连接到+或 - )。
如果你已经完成了模拟游戏,或者你只是想要一种不那么互动的学习方式,请继续阅读。
与标准灯泡不同,led仅在一个方向上传导电流。这意味着当您“正确”连接时led将发光,并在连接“错误”时充当开路。如果以不同方向并联连接两个led,则无论极性如何,其中一个led都会发光。要选择哪个led发光,您可以调制哪个引脚为+和哪个 - (图像2 )。如果您将booth设置为+或 - ,则当前将无法流动,关闭两个led(图像3 )。
您可能已经注意到我只使用了一个电阻用于两个led。这可以做到,因为无论极性如何,电都“看到”只有一个led。要计算电阻值,请使用标准公式或使用此在线计算器。请记住,arduino的最大电流输出为40ma(推荐20ma)。
步骤2:三个led
用两个引脚进行查询是没用的。它消耗两个引脚来驱动两个led,并取消了同时打开它们的选项。
幸运的是,当你添加第三个引脚时,它会好得多。使用三个引脚进行charlieplexing可以控制6个led。如果您打算使用simulation进行此设置,请在阅读之前进行。
您已经看到,只要您翻转一个开关,两个led就会亮起。无论你做什么,都没有两个led点亮。这是因为+和 - 端子之间总是有两个led(图像2 )。
此模拟中显示了此问题的解决方案。您将看到唯一的区别是我添加了三个断开终端的交换机。我再次建议您在阅读之前先完成模拟。
新增加的开关的唯一目的是防止不需要的电流流动。现在你可以只打开你想要的led,但突然间我们看到鬼影。在运行于5v的arduino上,当使用红色或绿色led时,重影很明显。这是因为这两者上的电压降小于2.5v,因此一些小电流流过+和 - (图像3 )之间的两个led。如果你要在一个运行在3.3伏特上的微控制器上实现charlieplexing,就不会出现重影。
现在关于电阻器的说法:charlieplexing通常使用与用于驱动led的引脚一样多的电阻器来进行。每个电阻的值是以“经典”方式驱动单个led所需电阻的一半。
最后解决房间里的大象:我在原理图中使用了三个符号:+, - 和x。他们如何翻译成arduino? +和 - 很简单。将arduino的引脚配置为output并写入high(+)或low( - )。断开连接(x)状态有点不太直观。如果将引脚配置为input,它将进入所谓的高阻抗模式(高阻态),这意味着电流不能流入或流出该引脚,有点像断开的引脚。更多关于我谈论arduino实现的步骤。
步骤3:n个led
直到现在可以很容易地绘制原理图而不需要任何交叉线。对于任何超过三个引脚,这是不可能的。
您可以尝试弄清楚上图中的电路如何工作,或者您可以尝试此模拟。请注意,我省略了开关和arduino。
您将看到原理图中的led(图像1 )排列在nxn网格中。省略了灰色的led,因为它们将与阴极和阳极连接到相同的引脚。第一行中所有led的阳极(+)连接到pin1,因此第一行中的所有阴极都连接。其他二极管也是如此。
如果你想知道你可以用这种led安排做什么,不要害怕。这只是一个原理图,仅用于简单布线。 pcb布局可能非常不同。在这个模拟中,我采用了与之前完全相同的项目并重新排列led以形成一个圆圈(我还更改了代码,以便led复制电位计的旋转)。查询复用的另一个常见用途是led立方体 - 6个引脚允许您驱动30个led,足以容纳3x3x3立方体,而9个引脚足以容纳4x4x4版本!
步骤4:代码
在向您展示如何为charlieplexing应用程序制作电路之前,我想谈谈这样的arduino代码项目。我将通过4个引脚进行示例,与上一步中的simulation中使用的代码相同。随意玩它,看看会发生什么。
如前所述,所有引脚都需要设置为三种可能状态之一:high(+),low( - )和high-z(未连接)。前两个很容易。将引脚配置为output并使用digitalwrite(引脚,状态)在high和low之间进行选择。 high-z(高阻抗)稍微不那么直观,但不再困难。无论何时将引脚配置为输入,它都会进入high-z模式,这意味着引脚无法吸收或提供任何电流。
最好通过定义哪个arduino引脚来启动代码对应哪个charlieplexing pin。默认情况下,所有引脚都配置为数字输入引脚,这意味着它们处于high-z模式。
接下来是配置引脚以打开所选led的功能 - charliewrite(led)。它首先将所有引脚设置为high-z。然后是switch语句,将正确的引脚配置为正确的电平输出。将引脚配置为数字输出时,默认设置为low,这就是为什么我只将电平值写入要设置为high的引脚。
最后要做的是填充setup()和loop()函数。如果您不需要任何其他功能,setup()可以保留为空,而loop()的内容取决于所需的操作模式。
在第一个demo中,代码设置为通过所有带有for语句的led并按顺序打开它们。
第二个demo更先进一点。它经历了所有led和伪造效应,其中任意数量的led同时打开。 loop()首先测量电位计值。通过for循环,将该测量值与对应于每个led的阈值进行比较。如果值高于阈值,则led亮起,否则忽略。无论发生什么,都会调用相同的delay()。这可确保led亮度不会随着点亮的led数量而变化。请注意,比较“while(micros() - time 《1000){}”将是一个更好的方法,但我不会折磨模拟器会好得多。附加的arduino代码写得正确。
步骤5:eagle cad
制作电路。最后。
您可以始终遵循步骤3中的原理图,并将所有led和电线放在首选电路cad程序的原理图上。这就是我做的方式,直到我想制作一个240 led显示屏(16针)。要放置240个led,重命名它们,连接它们。..。..让我们说它会耗费时间。..。..
幸运的是我去了pcb cad程序,eagle cad(免费最多2个)图层和80cm2区域以xml格式保存文件。这意味着,我可以使用python几乎自动生成我想要的文件!
我的python代码生成一个led网格以及所有需要的布线。您需要将输出 .sch 文件放在项目文件夹中,并按照您认为合适的方式完成原理图。您需要至少添加电阻和连接端子。
从那时起它非常直接。转到电路板编辑器,放置所有组件并激活自动路由器:)
python脚本和支持文件必须在同一个文件夹中才能工作。您将需要python版本3.x来运行它。该脚本生成一个“schematic.sch”文件,您可以将其放入您的eagle项目文件夹中。您可以通过打开python脚本并更改“package”索引来更改要使用的led类型(有关详细信息,请参阅代码注释,默认为5mm led)。
我还包括两个eagle cad一个简单的charlieplexed时钟的文件 - 与我用于解释如何为一个charlieplexing工作编程arduino相同。请随意查看它们。
第6步:时钟
我为12个led时钟做了模拟,我为12个led时钟制作了原理图,我为12个led时钟制作了一个pcb文件,然后我制作了驱动12个led时钟的代码。如果我没有完全循环并制作一个12 led时钟,那将是一种耻辱,现在不会这样:)
我制作pcb有一些问题,因为我非常想要用激光切割机制作它。最后,我不得不放弃那个梦想,回到可信赖的照片转移。如果您知道使用co2激光器制作pcb的方法,请在评论中告诉我,因为我现在还不想放弃这个梦想。
除此之外,我做了pcb尽可能容易制造。蚀刻铜,钻孔,修补板的形状,放在表盘上,最后焊接在led中(如果你错过极性,它仍然会“工作”,不是你想要的),电阻和跳线。请注意,在选择颜色时我选择了红色和绿色led,以避免重影效果。
步骤7:备忘单
如前言所述,charlieplexing允许您仅使用微控制器上的n个引脚驱动n *(n-1)个led。请记住,您总是可以使用更少的。
同时几乎点亮的led数量受微控制器的限制。您需要每秒至少刷新所有led 60次。如果您的微控制器没有足够的处理能力,那么在更高的led数量下您将无法实现这一点。如果你在低级别编程,就很难在arduino上实现240个led(16个引脚)。
明智地选择电阻。您将找到led的最大额定电流。如果您希望它们持续点亮(不是虚拟),请选择电阻将电流限制为该值。如果您同时有多个点亮,您可以选择电阻将电流限制在最高40ma(arduino的限制)。确保刷新周期内的平均电流不会超过led的额定值(例如:12个led,imax = 2ma | ioverclock/12 《2ma ==》 ioverclock = 24ma)
不要忘记电阻应该具有驱动单个led的一半电阻,因为电流流过两个电阻。

哈苏X1DII50c体验 不到四万的中画幅买不买
应用笔记 | TSMaster——图形编辑面板功能模块简介
兆易创新GD32 MCU联手Amazon AWS共建嵌入式云平台
工信部:将重点检查 5G 基站 “最低价中标”现象
别迷信低价山寨电子书 那只是传说
如何在微控制器上用相对较少的引脚驱动多个LED
关于自动驾驶出租车的性能分析和应用
1MORE水晶耳机怎么样 值不值得买
华为云发布政企战略,华为云Stack系列新品正式上市
储能新星—高速充放电铝离子电池
小米6发布会精彩盘点回顾:小米6配置、外观、跑分、性能、价格全揭晓,性能怪兽小米6全球首发
造车新势力1-4月上牌量达到2.36万辆,同比增长43%
iPad遥控器详细介绍
dhcp服务异常怎么修复
华大北斗上榜“深圳知名品牌”
Nature Comm.:为反铁磁自旋电子器件的设计提供了新思路
联网汽车成CES新话题 Gartner如何解读?
线下培训 | 瑞萨电子RA MCU应用开发培训课程报名开启![野火电子]
PC机中的串行通信技术上详解
ldo线性稳压电源是什么_LDO线性稳压器详解