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

电器工程 Arduino 引领 电阻器
2022-01-03 02:56:58

我只是第一次在面包板上用 2 个闪烁的 LED 试用 Arduino Uno。网上所有的教程好像都用了电阻。我确实知道电阻器的功能,但这真的很重要吗?这些 LED 在没有电阻的情况下工作得很好。

4个回答

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

电阻器用于限制 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。的内阻然后 Ω

I=5V2V25Ω=120mA

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

40情节,

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

为什么要驱动没有电阻的 LED?很简单,让您的电路更节能。

您是否应该将 PWM 设置为恒定占空比来驱动 LED(即 34% 占空比下的 5V PWM 以实现 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,如果我可以一直以 40mA 的电流运行 LED(40mA 是最大稳定电流额定值)并且我可以以 200mA 的电流运行 LED 10us。然后,我可以 99.99999% 确定我可以在 100mA 下安全地操作 LED 超过 10us 的时间,可能接近 20us。

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

  1. PWM 的电压很重要。我将通过示例而不是通过解释来证明我的观点。如果我们使用我之前提到的 LED,我们知道 34% 占空比、33.3kHz、5V 是安全的。但是,如果我们的电压为 12V,我们将不得不重新计算以保持相同数量的电流流过 LED。我们的占空比需要降至 14.167%(1.7V 除以 12V),我们的最小 PWM 频率将降至 14.285kHz([10us 除以 14.167%] 的倒数)。然而!,这令人担忧。在 5V 场景中,我们为 10us 施加 5V,在 12V 场景中,我们为 10us 施加 12V。在这 10 微秒内,我们将电压增加了一倍多,肯定会产生一些后果。是的,有!我的 LED 数据表没有提供必要的数据,让我知道在损坏 LED 之前我可以使用多高的电压 10us。10us 的 1000V 肯定会炸掉我的 LED。但是,我怎么知道 10us 的 5V 是否会烧坏我的 LED?还是12V 10us?如果没有它的规格,那么你就是在冒险。所以...... 10us 的 5V 是有风险的,但很可能是安全的。

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

  1. 您还需要了解连接 LED 的输出引脚的功能。最重要的参数是最大输出电流。对于 Arduino Uno,我相信是 40mA。您应该选择一个 PWM 占空比,其平均电压使通过 LED 的电流保持在 40mA 以下。为了知道什么电压会产生这么大的电流,您需要查看 LED 的 IV 曲线(电流与电压图)。对于典型的 LED,0.7V(从 LED 发光所需的典型最小电压)和 1.25V 之间的电压几乎肯定是安全的。为什么1.25V可能是安全的?好吧,即使没有限流电阻,大多数 LED 在 1.25V 时也不会超过 40mA。在某人施加过多电压的情况下有助于保护某人的另一件事,是Arduino的数字输出电路将有自己的输出阻抗,输出阻抗会很低,但即使是20欧姆的输出阻抗也会提供不可忽略的保护量。arduino uno 的数字输出阻抗约为 250 欧姆。长话短说,如果您使用 1.0V 的 PWM 以高频驱动 LED,对于典型的 LED,您在 Arduino Uno 上损坏数字输出的可能性为零。

  2. 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 下油炸。

湾。电源电压的变化。如果您的电源是电池怎么办。随着电池电量耗尽,电压会大幅下降。如果您将电路设计为与稍微使用过的 9V 电池一起工作,但随后又添加了新的 9V 电池会怎样。全新的 9V 铅酸电池通常具有 9.5V 的实际电压。根据提供用于 PWM 的 5V 的电路,额外的 0.5V 可能会将您的 5V PWM 提高到 5.3V。如果您使用的是可充电电池怎么办?它们在整个放电周期中具有更大的电压范围。

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

拥有一个限流电阻可以让您避免许多这些问题。

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

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

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

缺点:您需要一个电流控制器,并且您将电路的复杂性提高了 10 倍。不过不要气馁。您可以购买电流控制器 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 频率)。不要太害怕将您的电子设备推到其通常的操作条件之外,只要在您这样做时被告知,知道您所承担的风险。

享受!

仅供参考:我很惊讶有多少人立即跳到答案,“你必须使用限流电阻”。这是出于好意,但过于安全的建议。

奥尔特

您可以按照此处的建议使用内置上拉电阻

上拉电阻器提供足够的电流来微弱地点亮连接到已配置为输入的引脚的 LED。

简短的回答是,是与否,这取决于您的 arduino 并且取决于您的 LED 的颜色。例如,一个 3.3V 的电路板不需要一个电阻与一个小的绿色 LED 串联,因为 LED 的正向电压非常高,请参阅这个. 内部电阻约为 25 欧姆,取 (3.3 - 3)/25 = 12mA,所以这仍然没问题,对于 UNO 板上使用的 328p atmel 处理器,您不应超过每个引脚的最大电流 40mA(除非您使用 328p 的衍生产品,这可能是另一回事)。但是,对于在 5V 下运行的 arduino,红外 LED 会出现问题,其正向电压低得多,通常为 1.2V,(5-1.2)/25 = 150mA,这绝对是太多了,所以使用限流器,例如作为驱动这些类型的 LED 的电阻器。Arduino 板上的引脚 13(或变体上的另一个引脚)已经串联了一个 LED 和一个电阻器。此外,电路板的电源有一个最大额定值,通常为 200mA,你必须保持在这个水平以下,并且每组引脚不能消耗超过一定量的 mA,这是解释在这里如果您想驱动多个 LED,请考虑使用矩阵 LED 驱动器来为您进行多路复用,例如,请参阅我的 youtube 区域,我在其中演示了 MAX7219CNG 驱动器。但 Arduino Uno 也可以为您进行多路复用,请在 youtube 上查看我的带有 4 个七段 LED 的红外温度计。快乐的黑客。