使用Arduino控制LED时,我真的需要电阻吗?


47

我只是在面包板上用2个闪烁的LED第一次尝试Arduino Uno。互联网上的所有教程似乎都使用电阻。我确实知道电阻的功能,但这真的重要吗?这些LED在没有电阻的情况下工作正常。


8
这取决于您是否希望LED熔化。如果您不介意,则忽略电阻。:-)。
Dan Sheppard 2015年

Answers:


78

淘气!:-)。如果他们说要使用电阻器,那是有充分理由的!立即关闭!

电阻在那里限制LED的电流。如果您忽略它,则电流限制必须来自Arduino的输出,并且它不会喜欢它。您如何找出电阻器的需求?你知道欧姆定律吗?如果不这样做,则用大写字母写下来:

V=IR

电压等于电流乘以电阻。或者你可以说

R=VI

这是同一件事。您知道的电压:Arduino以5V运行。但并非所有这些都会流经电阻。LED还具有压降,对于红色LED通常为2V左右。因此,电阻仍有3V电压。典型的指示灯LED的标称电流为20mA,然后

R=5V2V20mA=150Ω

Arduino Uno使用ATmega328微控制器。数据手册指出,任何I / O引脚的电流均不应超过40mA,这就是所谓的绝对最大额定值。由于您没有任何限制电流的内容,因此输出晶体管只有(低!)电阻。电流可能会超过40mA,并且您的微控制器会受到损坏。

编辑
ATmega的数据表中的下图显示了如果不使用限流电阻驱动LED将会发生什么情况:

在此处输入图片说明

空载时,输出电压为预期的5V。但是,汲取的电流越高,输出电压越低,每增加4mA的负载,它就会下降约100mV。这是25的内部电阻。然后 Ω

I=5V2V25Ω=120mA

该图没有走太远,电阻会随着温度的升高而上升,但电流将保持很高。请记住,数据表给出了40mA的绝对最大额定值。你有三倍。这将肯定,如果你这样做了很长一段时间损坏I / O端口。可能还有LED。20mA指示灯LED通常具有30mA的绝对最大额定值。


2
并不是的。3,您将不会得到任何光,因为3 x 2V> 5V,而2您将遇到相同的问题,只有1V的压降而不是3V。我添加了答案以立即将其关闭!
stevenvh 2012年

21
我没有指望我在这里的答案中写了多少次该计算。我应该有一个脚本:-)
stevenvh 2012年

2
LED设计为在一定的最大电流下运行。电压驱动它们意味着电流不受控制。使端口提供一定的最大电流。短路或使它们过载可能会损坏引脚或整个IC,或者仅引起细微的操作问题。或不。
罗素·麦克马洪

4
@ JohnR.Strohm我不会称其为行业标准。
m.Alin,2012年

2
@ JohnR.Strohm-就像m.Alin所说,这不是行业标准。Digikey列出了10mA标称LED,范围从0.4mcd到1000 mcd,以及20mA LED范围从0.1 mcd到54000 mcd。其中没有任何一行,也无法保证10mA LED清晰可见。红色LED电压通常 1.8V至2.2V的范围内。对于红色LED,1.6V异常低。
stevenvh 2012年

22

40图

我不得不说,不建议您在没有电阻的情况下驱动LED,除非您知道自己在做什么。但是,如果您了解LED的行为,则可以在没有电阻的情况下安全地驱动它。实际上,在没有电流限制电阻的情况下驱动LED通常会更好。

为什么不使用电阻器来驱动LED?简单,使您的电路更节能。

您是否应该在将PWM设置为恒定占空比的情况下驱动LED(即5V PWM,占空比为34%,以实现1.7V的平均电压)?

是的,没有。使用PWM可以和施加特定电压一样有效(如果您小心的话),但是有更好的方法。采用PWM方法时需要担心的事情。

  1. PWM的频率很重要。在这种情况下使用PWM时,您依赖于电路组件暂时处理高电流的能力。您最担心的是LED如何处理暂时的大电流以及芯片的输出电路如何处理暂时的大电流。如果该数据表中未指定该信息,则数据表作者会很懒。但!!!如果该数据表上注明了该信息,那么您可以放心地利用它。例如,我旁边的LED的最大额定电流为40mA。但是,它的“峰值正向电流”额定值也为200mA,请注意,电流不能在200mA保持超过10us的时间。太...我可以用1.7V的电压驱动LED(数据手册中的LED典型正向电压)。在占空比为34%且电源为5V的情况下(5V的34%= 1.7V)将产生1.7V的平均电压,我只需要确保PWM导通时间为10us或更短即可。在导通时间内,流经LED的电流可能会上升到58mA左右(58mA =我的二极管在1.7V时的典型电流除以34%)。58mA比我的LED的最大稳定电流40mA高出18mA。最后...我需要33.3kHz或更高的PWM频率来安全地驱动我的LED(33.3kHz = [10us导通时间除以34%得到PWM周期]的倒数)。在现实中,我可以安全地使用PWM以较低的PWM频率为我的LED供电。原因是:数据表通常不指定组件的所有有效操作方案。他们不指定那些方案,因为供应商没有 您想花时间在确定和支持将其组件用于角落用例中。例如,对于我的LED,如果我可以将LED永远以40mA的电流运行(40mA是稳定的最大电流额定值),并且我可以以200mA的电流将LED运行10us。然后,我可以确定99.99999%可以在100mA的电流下安全地操作LED超过10us,可能接近20us。

注意:只要电流峰值的持续时间很小,所有组件都可以安全地处理超过其最大额定值的临时电流峰值。有些组件会比其他组件更宽容,并且,如果您幸运的话,该组件的数据表将指定其处理峰值电流的能力。

  1. PWM的电压很重要。我将通过示例而不是通过解释来说明我的观点。如果我们使用我之前提到的LED,我们知道5V时33.3kHz的34%占空比是安全的。但是,如果我们的电压为12V,则必须重新计算以保持流过LED的电流量相同。我们的占空比需要降至14.167%(1.7V除以12V),而我们的最小PWM频率将降至14.285kHz([10us除以14.167%]的倒数)。然而!,这是值得关注的。在5V场景中,我们将5V施加10us,在12V场景中,我们将12V施加10us。在这10us内,我们将电压提高了一倍以上,这必然会带来一些后果。是的,有!我的LED数据表没有提供给我必要的数据,这些数据不知道在损坏LED之前我能在10us内使用多高的电压。10us的1000V肯定会油炸我的LED。但是,我怎么知道10us的5V会炒我的LED?还是10us的12V?如果没有针对它的规范,那么您将承担风险。因此... 10us的5V有风险,但很可能是安全的。

注意:您可以在电路中添加一个电容器以使PWM平均化,从而消除此问题。

  1. PWM方法以开环方式驱动LED(使用不带PWM的1.7V电源也是如此)。您正在向LED施加平均电压,该电压恰好是打开LED 的正确值,但还不足以损坏LED。不幸的是,从导通(足够亮以至可见)到损坏的LED的电压范围很小(我的LED上的电压范围约为0.7V)。有多种原因导致您认为要施加的1.7V并非总是1.7V ...

一种。环境温度的变化。如果您在装有LED的密闭盒中装有电动机驱动器,稳压器等怎么办。这些其他组件将机箱内部的环境温度从25C升高到50C并不少见。温度的升高改变您的LED,稳压器等的行为。您曾经安全的1.7V将不再是1.7V,而以前以2.5V进行油炸的LED现在将以2.2V进行油炸。

b。电源电压变化。如果您的电源是电池怎么办。随着电池电量的消耗,电压会大大下降。如果您将电路设计为可以使用略微用完的9V电池正常工作,但是又添加了一块新的9V电池该怎么办。全新的9V铅酸电池的实际电压通常为9.5V。根据提供用于PWM的5V的电路的不同,额外的0.5V可能会使您的5V PWM上升到5.3V。如果您使用充电电池怎么办?它们在整个放电周期内的电压范围更大。

C。还有其他情况,例如来自EMI的感应电流(电机会这样做)。

拥有限流电阻器可帮助您避免许多此类问题。

使用PWM驱动LED并不是一个很好的解决方案,是否有不需要电流限制电阻的更好方法?

是! 做他们在家里用LED灯泡所做的事情。用电流控制器驱动LED。设置电流控制器以驱动您的LED额定电流。

使用适当的电流控制器,可以大大增加电流,并且您可以安全地驱动LED,而不必担心驱动LED开环所涉及的大多数问题。

缺点:您需要一个电流控制器,电路的复杂度提高了10倍。但是不要气our。您可以购买电流控制器IC,LED驱动器IC,或制作自己的电流控制升压转换器。没那么难。花点时间摆脱繁忙的日程安排,了解升压和降压转换器。了解有关开关电源的信息。它们是为您的计算机提供动力的工具,并且它们非常节能。然后,要么从头开始构建,要么购买廉价的IC为您完成大部分工作。

当然,与所有电子设计一样,总有很多事情可以做,以使电路更好。请查看以下PDF中的图3,以查看这些天甚至家用LED灯泡的复杂程度。

http://www.littelfuse.com/~/media/electronics/design_guides/led_protectors/littelfuse_led_lighting_design_guide.pdf.pdf

总结: 您必须自己决定愿意承担多大的风险。使用5V PWM驱动LED可能会很好地工作(特别是如果添加电容器来平滑PWM方波并最大化PWM频率)。不要太害怕将您的电子设备推到正常的工作条件之外,只是在执行操作时被告知,要知道自己承担的风险。

请享用!

仅供参考:令我惊讶的是,有多少人立即回答“您必须使用电流限制电阻”。这是好主意,但建议过于安全。

奥尔特


我很惊讶地看到有多少人认为这个答案是有价值的设计建议。使用PWM在没有电流限制的情况下驱动LED对LED的影响与OP所做的一样好,而且还会产生EMI和VCC纹波,如发疯般。
德米特里·格里戈里耶夫

1

您可以使用内置的上拉电阻的建议在这里

上拉电阻器提供足够的电流,以使连接到已配置为输入的引脚的LED变暗。


不适用于LED,它可以用于按钮,但是对于LED而言,存在断开输出的危险
Menelaos Vergis

如果不安全,为什么官方文档会这样说?(我也已经尝试过自己,并且按照说明进行了工作。)
eadmaster

请阅读至OUTPUT,其中提到它需要一个串联电阻:“例如,此电流足以照亮LED(不要忘记串联电阻),或运行许多传感器,但电流不足以运行大多数继电器,螺线管或电动机。”
Menelaos Vergis

0

stevenvh的答案解释了您需要做的事情,但是您还必须计算LED上的功耗,以免烧坏压降电阻。例如,如果电源电压为5V,电阻的正向电压为1.0V,那么您将下降4V。使用220欧姆电阻器将导致18mA的电流(I = V / R)和72mW的功耗(P = IV)。

0402英制(1005公制)电阻通常为1 / 16W,即62.5mW。因此,在这种情况下,这是行不通的;否则会使电阻过热并缩短其使用寿命。因此,您需要更改为具有1 / 10W额定值的0402电阻或更大的0603电阻。

无论何时进行此类计算,都应将其添加到原理图中,以便审阅者可以轻松地再次检查您的工作。

请注意,正向电压(因此,电阻值)是LED的函数,并且不同颜色的LED将具有不同的值。特别是蓝色LED具有较高的正向电压(典型值为〜3.0V)。因此,如果您要使四个不同的LED具有相同的亮度,则需要为每个LED重复计算。要真正做到这一点,请查看每个LED在其额定电流下的光学特性,然后进行相应调整。


0

简短的答案是,是和不是,这取决于您的arduino,并且取决于您的led的颜色。例如,3.3V板并不需要串联一个绿色的小LED电阻,因为LED的正向电压是相当高的,看到。内部电阻约为25欧姆,取(3.3-3)/ 25 = 12mA,所以这还是可以的,对于UNO板上使用的328p atmel处理器,每个引脚的最大电流不应超过40mA。您可以使用328p的派生词,而可能是另外一个故事)。但是,对于以5V运行的arduino,红外LED会出现问题,该LED的正向电压要低得多,通常为1.2V,(5-1.2)/ 25 = 150mA,这肯定太大了,因此请使用限流器作为驱动这些类型的LED的电阻。Arduino板上的引脚13(或变体上的另一个引脚)已经串联了一个LED和一个电阻。另外,电路板上的电源具有最大额定值,通常为200mA,您必须保持在此水平以下,并且每组引脚的消耗电流不能超过一定量的mA。在这里。如果要驱动许多LED,请考虑使用为您多路复用的矩阵LED驱动器,例如,在我的youtube区域演示MAX7219CNG驱动器。但是Arduino Uno也可以为您执行多路复用,请在youtube上查看我的带有4个七段LED的IR温度计。骇客入侵。


-3

是!可以办到。

即使所说的是正确的...。还有另一种方法。以5v驱动LED的更节能方式。

这一点没有记载,并且解决方案是否会磨损LED尚不清楚,但是可以做到。我实际上是在做。

通过硬件使用PWM:这是一个示例

#include <avr/io.h>
#include <util/delay.h>
void pwm_init()
{
    // initialize TCCR0 as per requirement, say as follows
    TCCR0 |= (1<<WGM00)|(1<<COM01)|(1<<WGM01)|(1<<CS00);

    // make sure to make OC0 pin (pin PB3 for atmega32) as output pin
    DDRB |= (1<<PB3);
}

void main()
{
    uint8_t duty;
    duty = 1;       // duty cycle = 0.39% of the time (depends on the oscillator.)

    // initialize timer in PWM mode
    pwm_init();

    // run forever
    while(1)
    {
        OCR0 = duty;
    }
}

PWM也可以使用软件和avrs计时器进行仿真。您可以在lufa库中找到一个名为的示例LEDNotifier.c

我的结论是:可以驱动5V的LED。

优点:不需要电阻。也节省一些能源(〜50%)

缺点:我不知道该组件是否受力及其使用寿命的缩短。

有一个人也在斯坦福大学做过这个实验,并在他的网站上发布了一些信息。


2
这似乎不是一个好主意。即使您长时间不使用控制器,也可能从控制器获得的电流超过了额定值。
斯科特·塞德曼

如前所述,这是毫无保留的。Arduino UNO输出IO可以驱动大约40ma-50ma。那是不变的。我肯定可以处理更大电流的非常短的脉冲。请看看维基百科
加斯帕·德·埃里亚斯

在Arduino环境中,使用analogWrite()相应的引脚可以更容易地获得PWM 。仍然不确定这是一个好主意,但至少对于IR LED而言,数据手册通常会在占空比小于100%时允许较高的峰值电流。
microtherion 2014年

我非常确定,与基于电阻的解决方案相比,节能将是负面的,因为随着电流的增加,LED效率会降低。
德米特里·格里戈里耶夫
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.