前言:
此时朋友们对“pwm 程序”大概比较看重,咱们都需要知道一些“pwm 程序”的相关文章。那么小编在网上搜集了一些关于“pwm 程序””的相关文章,希望朋友们能喜欢,咱们一起来了解一下吧!具有Arduino IDE的ESP32 PWM
在本教程中,我们将向您展示如何使用Arduino IDE通过ESP32生成PWM信号。作为示例,我们将构建一个简单的电路,使用ESP32的LED PWM控制器使LED变暗。我们还将向您展示如何在不同的GPIO上同时获得相同的PWM信号。
在继续本教程之前,您应该在Arduino IDE中安装ESP32插件。
所需部件
要使用本教程,您需要以下部分:
ESP32 DOIT DEVKIT V1 开发板
3个5毫米LED3个330欧姆电阻面包板跳线
ESP32 LED PWM控制器
ESP32的LED PWM控制器具有16个独立通道,可配置为生成具有不同属性的PWM信号。
这是您必须使用Arduino IDE通过PWM使LED变暗的步骤:
1.首先,您需要选择一个PWM通道。从0到15有16个频道。
2.然后,需要设置PWM信号频率。对于LED,可以使用5000 Hz的频率。
3. 您还需要设置信号的占空比分辨率:分辨率为1到16位。我们将使用8位分辨率,这意味着您可以使用0到255之间的值来控制LED亮度。
4. 接下来,您需要指定信号将出现在哪个GPIO上。为此,您将使用以下功能:
ledcAttachPin(GPIO, channel)
该函数接受两个参数。第一个是将输出信号的GPIO,第二个是将生成信号的通道。
5. 最后,要使用PWM控制LED亮度,请使用以下功能:
ledcWrite(channel, dutycycle)
此函数接受生成PWM信号的通道和占空比作为参数。
调光LED
让我们看一个简单的示例,了解如何通过Arduino IDE使用ESP32 LED PWM控制器。
原理图
如下图所示,将LED线连接到ESP32。LED应该连接到GPIO 16。
(此原理图使用带有30个GPIO的ESP32 DEVKIT V1模块版本–如果您使用的是其他型号,请检查所用电路板的引脚排列。)
注意:您可以使用所需的任何引脚,只要它可以用作输出即可。所有可用作输出的引脚都可用作PWM引脚。
程序代码
打开您的Arduino IDE并复制以下代码。
// the number of the LED pin
const int ledPin = 16; // 16 corresponds to GPIO16
// setting PWM properties
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
// configure LED PWM functionalitites
ledcSetup(ledChannel, freq, resolution);
// attach the channel to the GPIO to be controlled
ledcAttachPin(ledPin, ledChannel);
}
void loop(){
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
// decrease the LED brightness
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}
首先定义LED所连接的引脚。在这种情况下,LED连接到GPIO 16。
const int ledPin = 16; // 16 corresponds to GPIO16
然后,设置PWM信号属性。您定义的频率为5000 Hz,选择通道0生成信号,并将分辨率设置为8位。您可以选择不同于这些的其他属性来生成不同的PWM信号。
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
在setup()中,您需要通过使用ledcSetup()函数将LEDPWM配置为先前定义的属性,该函数接受ledChannel,频率和分辨率作为参数,如下所示:
ledcSetup(ledChannel, freq, resolution);
接下来,您需要选择将从其获取信号的GPIO。为此,请使用ledcAttachPin()函数,该函数接受要获取信号的GPIO以及生成信号的通道作为参数。在此示例中,我们将在ledPin GPIO中获取信号,该信号对应于GPIO 16。产生信号的通道是ledChannel,它对应于通道0。
ledcAttachPin(ledPin, ledChannel);
在循环中,您将在0到255之间改变占空比,以增加LED亮度。
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
然后,在255和0之间降低亮度。
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
要设置LED的亮度,您只需要使用ledcWrite()函数,该函数接受生成信号的通道和占空比作为参数。
ledcWrite(ledChannel, dutyCycle);
当我们使用8位分辨率时,将使用0到255之间的值来控制占空比。请注意,在ledcWrite()函数中,我们使用的是生成信号的通道,而不是GPIO。
测试示例
将代码上传到ESP32。确保选择了正确的板和COM端口。看你的电路。您应该有一个调光器LED,它可以增加和减少亮度。
在不同的GPIO上获得相同的信号
您可以在不同的GPIO中从同一通道获得相同的信号。为此,您只需要将这些GPIO附加到setup()的同一通道上即可。
让我们修改前面的示例,以使用来自同一通道的相同PWM信号使3个LED变暗。
原理图
遵循下一个原理图,在电路中再增加两个LED:
(此原理图使用带有30个GPIO的ESP32 DEVKIT V1模块版本–如果您使用的是其他型号,请检查所用电路板的引脚排列。)
程序代码
将以下代码复制到您的Arduino IDE。
// the number of the LED pin
const int ledPin = 16; // 16 corresponds to GPIO16
const int ledPin2 = 17; // 17 corresponds to GPIO17
const int ledPin3 = 5; // 5 corresponds to GPIO5
// setting PWM properties
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
// configure LED PWM functionalitites
ledcSetup(ledChannel, freq, resolution);
// attach the channel to the GPIO to be controlled
ledcAttachPin(ledPin, ledChannel);
ledcAttachPin(ledPin2, ledChannel);
ledcAttachPin(ledPin3, ledChannel);
}
void loop(){
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
// decrease the LED brightness
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}
该代码与上一个代码相同,但有一些修改。我们为两个新的LED定义了另外两个变量,分别引用GPIO 17和GPIO 5。
const int ledPin2 = 17; // 17 corresponds to GPIO17
const int ledPin3 = 5; // 5 corresponds to GPIO5
然后,在setup()中,添加了以下几行以将两个GPIO分配给通道0。这意味着我们将在两个GPIO上获得在通道0上生成的相同信号。
ledcAttachPin(ledPin2, ledChannel);
ledcAttachPin(ledPin3, ledChannel);
测试项目
将程序上传到ESP32。确保选择了正确的板和COM端口。现在,看看您的电路:
所有GPIO都输出相同的PWM信号。因此,所有三个LED同时增加和减少亮度,从而产生同步效果。
总而言之,在本文中,您学习了如何将ESP32的LED PWM控制器与Arduino IDE配合使用来使LED变暗。通过为信号设置正确的属性,可以将学习到的概念用于PWM的其他输出控制。
标签: #pwm 程序