📅  最后修改于: 2020-12-27 09:51:58             🧑  作者: Mango
PWM(脉冲宽度调制)是一种控制平均电压的方法。这是电压脉冲流,可减少电信号提供的电功率。有效电压由PWM信号的电压脉冲流中单个脉冲的宽度控制。
PWM引脚的常见用途包括控制LED和直流电动机。
LED中的PWM控制光的频率。这意味着LED将以我们的眼睛可以检测到的频率打开/关闭。
直流电动机中的PWM的作用类似于直流信号的脉冲序列。直流电动机根据PWM脉冲的宽度接收高或低电功率输入。
我们还可以将PWM用于电压调节,音频信号生成,设备控制(泵,液压系统等),伺服电机等。
Arduino中的数字输入/输出引脚的状态为HIGH(1)或LOW(0)。
这里,
高电平表示电压约为5V。
LOW表示电压等于0伏。
PWM是一个方波信号,表示为:
矩形脉冲的占空比如下所示:
这里,
t o :信号为高电平时的信号持续时间。
t c :这是信号的总持续时间,即高电平和低电平的总和。
如上所述,占空比是脉冲宽度与信号总宽度之比。
考虑下图:
上图显示了不同占空比下的波形。
我们可以通过调节PWM占空比来控制Arduino中直流电动机的有效电压。
例如,
Arduino UNO板包含14个数字输入/输出引脚,其中引脚11、10、9、6、5和3是PWM引脚。 pinMode(),digitalRead(),digitalWrite()函数控制非PWM引脚的操作。
pinMode()函数用于将特定的引脚声明为输入/输出。 digitalRead用于读取引脚的高电平或低电平状态。
我们需要使用analogWrite()来设置PWM(脉冲宽度调制)脉冲的占空比。
让我们详细讨论analogWrite()。
它将PWM值或模拟值写入引脚。我们可以借助AnalogWrite()来点亮亮度变化的LED。它也可用于以不同的速度驱动电动机。
当调用analogWrite()函数,指定的PWM引脚会生成特定占空比的稳定矩形波,直到在该引脚上调用下一个analogWrite()为止。
每个Arduino板上都有PWM引脚。对于特定板上存在的某些PWM引脚,频率也可能有所不同。
例如,
Arduino Leonardo / Micro的PWM引脚为3、5、6、9、10、11和13。引脚3和11的频率为980Hz,而其他PWM引脚的频率为490Hz。
语法为:
analogWrite(pin, value)
哪里,
引脚:板上指定的PWM引脚
value :确定占空比的值,介于0到255之间。
此处使用的数据类型为int 。
注意:analogWrite()函数与analogRead()或模拟引脚无关。
下面列出了AnalogRead()和analogWrite()之间的主要区别:
让我们看一个例子。
对于PWM引脚,我们将指定该值,而不是HIGH或LOW。
例如,
高= 255
低= 0
考虑下面的代码:
void setup()
{
pinMode(10, OUTPUT); // the declared pin must be among the PWM pins.
}
void loop()
{
analogWrite(10, 255); // 255 is the highest value.
//We can modify the value as per the required brightness.
delay(1000);
analogWrite(10, 0);
delay(1000); // time delay of 1 second or 1000 milliseconds
}
在此,LED将以全亮度点亮。
让我们讨论一个控制LED亮度的示例。
上面讨论的AnalogWrite()函数用于在Arduino中生成PWM信号。
与模拟信号关联的值是从0到255。它表示256个级别的值。
Arduino读取的最大电压为5V。
我们可以使用以下公式确定输出PWM电压:
让我们讨论一种控制连接到PWM引脚的LED亮度的方法。
在这里,我们已将LED连接到PWM引脚6。
考虑下面的代码。
void setup()
{
pinMode(6, OUTPUT); // the declared pin must be among the PWM pins.
}
void loop()
{
analogWrite(6, 255); // brightness increases as value increases
delay(1000);
analogWrite(6, 180);// brightness level
delay(1000);
analogWrite(6, 80);
delay(1000);
analogWrite(6, 20); // brightness decreases as value decreases
delay(1000);
}
在上面的示例中,LED的亮度将根据指定的亮度值降低。