Answers:
淘气!:-)。如果他们说要使用电阻器,那是有充分理由的!立即关闭!
电阻在那里限制LED的电流。如果您忽略它,则电流限制必须来自Arduino的输出,并且它不会喜欢它。您如何找出电阻器的需求?你知道欧姆定律吗?如果不这样做,则用大写字母写下来:
电压等于电流乘以电阻。或者你可以说
这是同一件事。您知道的电压:Arduino以5V运行。但并非所有这些都会流经电阻。LED还具有压降,对于红色LED通常为2V左右。因此,电阻仍有3V电压。典型的指示灯LED的标称电流为20mA,然后
Arduino Uno使用ATmega328微控制器。数据手册指出,任何I / O引脚的电流均不应超过40mA,这就是所谓的绝对最大额定值。由于您没有任何限制电流的内容,因此输出晶体管只有(低!)电阻。电流可能会超过40mA,并且您的微控制器会受到损坏。
编辑
ATmega的数据表中的下图显示了如果不使用限流电阻驱动LED将会发生什么情况:
空载时,输出电压为预期的5V。但是,汲取的电流越高,输出电压越低,每增加4mA的负载,它就会下降约100mV。这是25的内部电阻。然后
该图没有走太远,电阻会随着温度的升高而上升,但电流将保持很高。请记住,数据表给出了40mA的绝对最大额定值。你有三倍。这将肯定,如果你这样做了很长一段时间损坏I / O端口。可能还有LED。20mA指示灯LED通常具有30mA的绝对最大额定值。
40图
我不得不说,不建议您在没有电阻的情况下驱动LED,除非您知道自己在做什么。但是,如果您了解LED的行为,则可以在没有电阻的情况下安全地驱动它。实际上,在没有电流限制电阻的情况下驱动LED通常会更好。
为什么不使用电阻器来驱动LED?简单,使您的电路更节能。
您是否应该在将PWM设置为恒定占空比的情况下驱动LED(即5V PWM,占空比为34%,以实现1.7V的平均电压)?
是的,没有。使用PWM可以和施加特定电压一样有效(如果您小心的话),但是有更好的方法。采用PWM方法时需要担心的事情。
注意:只要电流峰值的持续时间很小,所有组件都可以安全地处理超过其最大额定值的临时电流峰值。有些组件会比其他组件更宽容,并且,如果您幸运的话,该组件的数据表将指定其处理峰值电流的能力。
注意:您可以在电路中添加一个电容器以使PWM平均化,从而消除此问题。
一种。环境温度的变化。如果您在装有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灯泡的复杂程度。
总结: 您必须自己决定愿意承担多大的风险。使用5V PWM驱动LED可能会很好地工作(特别是如果添加电容器来平滑PWM方波并最大化PWM频率)。不要太害怕将您的电子设备推到正常的工作条件之外,只是在执行操作时被告知,要知道自己承担的风险。
请享用!
仅供参考:令我惊讶的是,有多少人立即回答“您必须使用电流限制电阻”。这是好主意,但建议过于安全。
奥尔特
您可以使用内置的上拉电阻的建议在这里:
上拉电阻器提供足够的电流,以使连接到已配置为输入的引脚的LED变暗。
OUTPUT
,其中提到它需要一个串联电阻:“例如,此电流足以照亮LED(不要忘记串联电阻),或运行许多传感器,但电流不足以运行大多数继电器,螺线管或电动机。”
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在其额定电流下的光学特性,然后进行相应调整。
简短的答案是,是和不是,这取决于您的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温度计。骇客入侵。
是!可以办到。
即使所说的是正确的...。还有另一种方法。以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%)
缺点:我不知道该组件是否受力及其使用寿命的缩短。
有一个人也在斯坦福大学做过这个实验,并在他的网站上发布了一些信息。
analogWrite()
相应的引脚可以更容易地获得PWM 。仍然不确定这是一个好主意,但至少对于IR LED而言,数据手册通常会在占空比小于100%时允许较高的峰值电流。