如何仅使用无源元件通过两个uC引脚控制三个LED?


8

我在微控制器上只有2个(3状态)引脚可用,并且需要控制3个红色LED,uC以5V运行。另外,我只能使用无源组件。


定义“控件”。您是否需要同时完全点亮所有LED,或者一次只点亮一个LED,或其他?为什么说只能使用无源组件?
Joe Hass 2014年

谷歌“ charlieplexing”。
约翰U

1
@JohnU:Charlieplexing对于少于三个引脚没有任何帮助。两个引脚仅给您两个LED。
Dave Tweed

显然,一个I2C端口扩展器甚至是一些简单的移位寄存器都将允许您控制任意数量的LED。为什么排除这些?
Dave Tweed 2014年

1
@DaveTweed-谷歌搜索它的行为很可能会提供很多信息;)
John U

Answers:


10

要控制四个LED:

原理图

模拟此电路 –使用CircuitLab创建的原理图

要使特定引脚上的两个LED均点亮,请以几百Hz的频率切换该引脚。

请注意,此设置要求 LED的正向电压小于Vcc / 2。

还要注意,电阻器始终在消耗功率,而不仅仅是在LED点亮时。


R1仅连接到D1且R2仅连接到D2等,只要LED压降组合到VDD,将大大减少LED熄灭时的静态电流消耗。
supercat 2014年

@supercat:是的,但对于OP指定的红色LED很少如此。请参阅Will的图
Dave Tweed 2014年

在R1-D1和D2-D2节点之间添加一个额外的LED,并将其隐藏在某个地方。
supercat 2014年

@supercat:请参阅Spehro的答案
Dave Tweed 2014年

6

该解决方案取决于5V不会点亮三个串联的LED的事实。如有必要,您可以添加一个与一个或多个LED串联的硅二极管,以增加总的正向压降。

原理图

模拟此电路 –使用CircuitLab创建的原理图

  • 如果引脚A和引脚B均为三态,则所有LED均熄灭。
  • 如果引脚A被驱动为低电平,则D1导通。
  • 如果将引脚A驱动为高电平并将引脚B驱动为低电平,则D2接通。
  • 如果引脚B被驱动为高电平,则D3导通。

要一次点亮一个以上的LED,您必须进行多重处理:一次快地打开它们,使其看上去持续点亮。


相对于Michael Karas的方法,这有什么优势吗?
2014年

这与LED的正向压降较低有关。他的解决方案只是此产品的一针/两灯版本的两个副本。
Dave Tweed 2014年

嗯,如果您有2个电阻,那么您要通过1个电阻降低一些电压,而另一个则使电压降低,并且必须消耗更少的输入电阻?
威尔

1
@Will:嗯,不。通过这种方案,一次仅一个LED点亮,并且一次仅一个电阻降低电压。当两个引脚均为三态时,根本没有电流流过,因为它被串联的三个LED的累积正向压降所阻止。
Dave Tweed 2014年

如果您的三态引脚b可以按照您的方案驱动2个LED,对不对?
威尔

3

使用两个引脚,您实际上可以控制四个LED。要控制两个LED,请在MCU引脚上放置一个电阻以限制电流,并将其与两个LED相连-一个LED的阴极和另一个LED的阳极。第一个LED的自由阳极端通过另一个电阻器连接到MCU板的VCC。第二个LED的自由阴极端(通过另一个电阻器)连接到GND。现在,当MCU引脚设置为高电平或低电平时,LED将交替点亮。以同样的方式连接第二个MCU引脚,现在您可以控制总共四个LED。

为了使一对端口中的每个LED都具有独立控制的外观,需要以下一些软件工作。

如果LED1是阳极连接到端口引脚的LED,LED2是阴极连接到端口引脚的LED,请执行以下操作为两个LED建立四种状态。

LED2  LED1    Action
OFF   OFF     Set the port pin to tristate level.
OFF   ON      Set the port pin low.
ON    OFF     Set the port pin high.
ON    ON      Toggle the port pin high and low at a frequency over about 120 Hz. 

对另一个端口引脚重复相同的操作,您将看起来好像两个端口引脚上有四个独立的LED。

该方案对正向压降超过VCC电平一半的LED效果很好。例如,如果VCC为5V,则具有2.1 VF的红色LED将无法正常工作。另一方面,VF为2.5V的绿色LED可以在VCC为3.3V的系统上正常工作。


3
这是完全控制吗?您如何将它们全部打开或全部关闭?
斯坦里2014年

当电流从引脚流出时,一个LED点亮,当电流流入引脚时,另一个LED点亮。因此,只需将端口引脚置于三态即可关闭它们,没有电流流入或流出,因此没有LED。电流不能同时流入和流出,因此不能使两个LED完全同时点亮。但是,您可以通过将引脚从高到低依次从高到低然后从高到低再从高到低等驱动引脚来创建它们同时开启的效果

2

2个LED一根针,绘制不好

这样一来,关断时就不会有电流流过,您可以根据需要驱动尽可能多的正向电压


这与Michael Karas的解决方案相同。它要求LED的V_f大于Vcc / 2,否则您将无法完全关闭它们。
Dave Tweed 2014年

+1是为了展示Michael Karas的解决方案而进行的工作,该解决方案复制了Dave Tweed的CircuitLabs原理图,并使用MS Paint(或类似工具)在其中绘制了徒手的线条
里卡多

而且它是在油漆:)
威尔

1
啊,我明白你现在在说什么戴夫。电流流经r1 d1 d2 r2,引脚上的任何东西都不需要进去
2014年

2

EDN 在此处发布了一些相关的“设计思想”

这是其中之一:-

在此处输入图片说明

对于D1的典型值,黄色LED(2.2V导通),D2红色LED(1.9V导通),截止电压分别为1.2V和1.1V,导通电流分别为8mA,Vcc = 5.0V,最佳值是

R1 = 300欧姆R2 = 330欧姆R3 = 1.2K欧姆

静态电流为2.7mA。要使两个LED均亮起,请以100Hz或更高的频率切换输出引脚。

我在原始文章中使用了Excel求解器,但EDN可能仍提供该代码。

电阻器R3提供的额外自由度可以避免Dave Tweed和Michael Karas电路的局限性,尽管对于2个红色LED在5V电源下工作的特定情况,Dave Tweed的电路可能是可接受的,但请检查Vf小心一点,这对于某些红色的LED不太合适,如果端口引脚没有完全向下或向上拉,则对于其他红色LED可能不重要。


注意:OP要求使用全无源电路。同样,如果MCU引脚为高阻态,则逆变器将被迫进入线性工作模式,这通常会浪费功率。
Dave Tweed 2014年

@DaveTweed是的,我的原始帖子中指定了ST逆变器,因此我进行了编辑以使其清晰可见。它不是全部是被动的,而是简单的零智商。第二个电路的Iq较高,但全无源。感谢您的评论。
Spehro Pefhany 2014年

我看不到施密特触发器输入有什么帮助;相反,我认为这会迫使电路振荡。当然,LED将熄灭,但逆变器本身将消耗大量功率。
Dave Tweed 2014年

好吧,由于它不符合没有活动部件的原始要求,因此我将其删除,但我相信它可以正常工作。
Spehro Pefhany 2014年

R3的+1可能是个有用的技巧。一个便宜的东西
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.