PWM如何用于控制LED亮度?

时间:2017-06-29 07:20:09

标签: arduino led electronics

我试图通过PWM控制LED的亮度。我对PWM的工作方式几乎没有疑问,

  1. 如果给出占空比(50%),如果输出频率为500 Hz,则每个周期为2毫秒。那么50%占空比意味着在2 ms内,50%时间(1 ms)LED是否开启以及50%时间LED关闭(1 ms)?

  2. 我使用Analogwrite()创建一个特定的占空比,0.04%的占空比是指Analogwrite = 1,0.8%的占空比对应于Analogwrite = 2.为什么Analogwrite不会工作在0.5或者如果我想要0.02%的占空比,我该怎么办?

  3. 注释: 在使用Arduino测量LED强度之前,我只是通过改变LED连接的直流电压来测量强度。但是,随着时间的推移,我无法获得相同电压的一致亮度值。我被告知PWM是控制LED亮度的准确方法。我也得到了一致的价值观。但我不能用arduino低于0.4%的占空比,因为它对应于小于1的模拟写入值。任何建议都将受到高度赞赏

2 个答案:

答案 0 :(得分:0)

<强> 1

  

如果我给出一个占空比(50%),如果输出的频率是500   Hz,那么每个周期将是2毫秒。 50%的占空比也是如此   表示在2 ms内,50%的时间(1 ms)LED亮,50%的时间   LED熄灭(1 ms)?

这是完全正确的。

<强> 2

  

我正在使用Analogwrite()来创建一个特定的占空比,责任   0.04%的周期是指Analogwrite = 1,占空比为0.8%   对应于Analogwrite = 2.为什么Analogwrite不能在0.5下工作   或者如果我想要0.02%的占空比,我该怎么办?

查看analogWrite原型:

void analogWrite(uint8_t, int);

向我们显示该值是一个整数,这意味着您无法传递十进制值。这意味着使用analogWrite的最小占空比为0.04%,因为在后台使用了8位定时器。 您可以在this discussion获取有关此内容的更多信息。获得较小占空比的唯一方法是使用较低分辨率的16位定时器1。但是您需要执行自己的实现,并且需要检查是否存在与其他库的可能的计时器冲突。 this article中描述了实现PWM的方法。

编辑: 您是否考虑过在LED前面使用电阻来降低亮度?通过这种方式,您可以通过增加范围(当然也是最大亮度)来降低亮度

答案 1 :(得分:0)

乔治,

analogWrite() = 1/256 = 0.0039或0.4%的值为1。 您的计算是正确的。您还要写,此命令的PWM频率为〜490 Hz。值为0会关闭端口,因此占空比为0.0%。

你可以变得更小的唯一方法&#34;时间片&#34;是放弃使用各种设置的默认值的内置库,并使用定时器中断和/或使用您自己的设置设置的PWM模式之一。 获得小于1/256的片的唯一方法是使用16位Timer1,它可以被Arduino库中的其他函数使用。为此,您必须进入Atmega328数据表或使用部分settings on this cheatsheet