ESP32 LED PWM 控制器

ESP32 具有 LED PWM 控制器,具有 16 个独立通道,可配置为生成具有不同属性的 PWM 信号。

使用 Arduino IDE 通过 PWM 对 LED 进行调光时必须遵循以下步骤:

1.首先,您需要选择一个PWM通道。从 0 到 15 有 16 个通道,一个led或一个马达需要占用一个通道。

2.然后,需要设置PWM信号频率。对于 LED,使用 5000 Hz 的频率就可以了。

3. 您还需要设置信号的占空比分辨率:分辨率为 1 至 16 位。我们将使用 8 位分辨率,这意味着您可以使用 0 到 255 之间的值来控制 LED 亮度。

4. 接下来,您需要哪个 GPIO使用指定信号。为此,您将使用以下函数:

ledcAttachPin(GPIO, channel)

该函数接受两个参数。第一个是输出信号的管脚,第二个是生成信号的通道。

5. 最后,要使用 PWM 控制 LED 亮度,请使用以下函数:

ledcWrite(channel, dutycycle)

该函数接受生成 PWM 信号的通道和占空比作为参数。

让我们通过一个简单的示例来了解如何通过 Arduino IDE 使用 ESP32 LED PWM 控制器。

示意图

将 LED 连接到 ESP32,如下图所示。 LED 应连接到GPIO 16

esp32-pwm-调光-led

(此原理图使用具有 30 个 GPIO 的 ESP32 DEVKIT V1 模块版本 - 如果您使用其他型号,请检查您正在使用的板的引脚排列。)

注意:您可以使用任何您想要的引脚,只要它可以充当输出即可。所有可作为输出的引脚均可用作 PWM 引脚。有关 ESP32 GPIO 的更多信息请查看:ESP32 引脚分配参考。

打开 Arduino IDE 并复制以下代码。led将逐渐变亮,然后逐渐熄灭。

const int ledPin = 16;  
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;

void setup(){
  ledcSetup(ledChannel, freq, resolution); //设置通道的频率和分辨率。
  ledcAttachPin(ledPin, ledChannel);        //引脚和通道关联。
}
 
void loop(){
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    ledcWrite(ledChannel, dutyCycle);        //向通道(引脚)发送pwm值
    delay(15);
  }
  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    ledcWrite(ledChannel, dutyCycle);   
    delay(15);
  }
}

 以上实例可以更改成驱动马达转动:

const int pin1=26;
const int pin2=27;
const int ledPin = 16;  
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;

void setup(){
  ledcSetup(ledChannel, freq, resolution); 
  ledcAttachPin(ledPin, ledChannel);
}
 
void loop(){
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    digitalWrite(pin1,HIGH);
    digitalWrite(pin2,LOW);//利用pin1和pin2的高低变化控制马达的旋转方向。
    ledcWrite(ledChannel,dutyCycle);//控制马达旋转的速度。
    delay(15);
  }
  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    digitalWrite(pin1,HIGH);
    digitalWrite(pin2,LOW);//反向旋转马达。
    ledcWrite(ledChannel,dutyCycle);  
    delay(15);
  }
}

小结:

在 ESP32 上使用 PWM 与使用 Arduino 不同。可以将 16 个独立的 PWM 通道分配给 GPIO 引脚(GPIO36、GPIO39、GPIO34 和 GPIO35 引脚除外,这几个引脚只能输入),每一路都可以单独控制一个引脚的输出电压,电压高了连接在这个引脚上的led等就亮,否则就暗。

ESP32 上的 PWM 配置稍微复杂一些,但功能更强大。该 ledc  模块负责 PWM,并且允许使用它的三个主要功能:  

ledcSetup(ledChannel, freq, resolution);  选择 PWM 通道 (0 - 15);选择脉宽调制频率 ;选择 1 到 16 位之间的脉冲宽度分辨率

ledcAttachPin(ledPin, ledChannel)  选择将生成 PWM 信号的 GPIO 引脚;

ledcWrite(ledChannel,dutyCycle)在输出端指定所需的电压值;

警告:

analogWrite() 功能不适用于 ESP32。你应该改用ledcWrite() 。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值