首页

Arduino脉宽调制(PWM)

在前面的教程中,我们已经了解了串行通信的概念,以及如何使用一些预定义的函数在Arduino UNO和计算机之间传输数据。在本教程中,我们将讨论一个名为PWM的新概念,以及如何将这个概念用于控制不同的设备,如led,电机等。

为了本教程的目的,我们需要构建一个小电路。此电路所需的元件如下所示。

  • Arduino UNO [在这里买
  • 领导
  • 1 KΩ电阻器
  • 100 KΩ电位计
  • 案板(原型)
  • 连接电线

在这个项目中,我们将通过PWM技术来控制连接到Arduino UNO板上的LED的亮度。项目实施所需的示意图如下图所示。

arduino pwm

在Electronicshub中选择您想学习的下一组Arduino项目 Arduino项目»

在这个电路中,LED的阳极必须连接到Arduino UNO的任何一个PWM引脚。因此,它通过1 KΩ限流电阻连接到Arduino的引脚11。LED的阴极与面包板上的地面相连。

Arduino UNO的5V电源和接地连接到面包板的正负轨上。

电位器的末端端子分别接在面包板上的5V和接地端子上。电位器的雨刷端必须连接到Arduino UNO的任何模拟输入引脚。

通过调节电位器的任意方向(顺时针或逆时针),Arduino的模拟输入引脚将得到一个可变电压,即0到5V之间的电压。的模拟到数字Arduino UNO的转换功能用于将这些电压转换为0到1023的数字范围(因为Arduino有一个10位ADC)。借助这个转换值,我们可以控制LED的亮度。

既然我们已经成功地设计了电路,下一步就是为电路编写一个合适的程序。在进入编程部分之前,我们需要了解什么是PWM信号。

脉冲宽度调制

脉宽调制(简称PWM)是一种数字技术,通过这种技术可以改变设备的功率。它提供了一种用数字信号提供模拟结果的方法。

在PWM技术中,方波在开和关状态之间切换。通过改变信号花在“开”状态上的时间与花在“关”状态上的时间,我们可以模拟0V到5V之间的电压范围。当这种开关在开和关状态之间非常快时,那么结果就好像输出信号处于0V和5V之间的稳定电压水平。

在处理PWM时,我们需要讨论的一个重要术语是占空比。定义为信号处于HIGH状态的时间(on time)与信号总时间段(on time + off time)的比值。

在Arduino中,有6个引脚能够产生这样的PWM信号。下图显示了不同占空比及其对应电压水平的比较。

arduino pwm

从图中可以清楚地看出,当占空比增加时,输出电压(或输出功率)也会增加。对于100%占空比,可用电压为5V,对于50%占空比,可用电压为2.5V。

进入我们的教程,为了生成PWM信号,我们需要学习Arduino库中的两个函数:analogRead和analogWrite。

analogRead是一个函数,用于从Arduino的模拟引脚读取模拟值。Arduino UNO板有6通道,10位模拟数字转换器(ADC)。这意味着Arduino UNO中的ADC将把0 - 5V之间的输入电压映射为0到1023之间的整数值。

因此,analogRead函数将返回0到1023之间的任何值。类比函数的语法是模拟引脚号;

由于我们正在从A0引脚上的电位器读取模拟电压,我们需要写入analog (A0);在草图。当它返回一个整型值时,就会用它创建一个整型数据类型的临时变量。

下一个函数是analogWrite。它是一个函数,用于为任何给定的PWM引脚设置PWM信号的占空比。

类比写函数的语法是类比写(PWM引脚编号,值);

占空比,取值范围为0 (0V) ~ 255 (5V)。

接下来是LED亮度控制电路的实际草图。最终的草图如下图所示。

arduino pwm

从上面的示意图中,我们可以很容易地理解analogRead函数返回的值存储在temp变量中。该值将用于使用类比写功能控制PWM信号的占空比。

但是类比写函数接受的值范围在0到255之间。因此,我们需要执行一些数学计算,以便在analogWrite函数中放入合适的值。

最后,将计算值与PWM引脚一起放入类比写函数中产生PWM信号。

当电路搭建好并将草图上传到Arduino上,我们可以看到通过改变电位器的位置,LED的亮度也会发生变化。

2反应

  1. 我有10k电位器。
    所以,我应该用哪个电阻与led?
    还有,代码有什么变化吗
    请提及所有…
    提前谢谢。

  2. 非常感谢,非常容易跟随,真的帮助我开始了
    (我使用了一个10k的电位器,LED和PIN 11之间有一个10k的电阻。)

留下一个回复

您的电邮地址将不会公布。

Electronicshub图标
Baidu
map