8.PWM(Pulse Width Modulation)
1. āļāļēāļĢāđāļāļ°āļāļģāļāļąāļāļāđāļāļąāļ PWM āļāļ BiBoard (ESP32)
ESP32 āļāļĩāđāđāļāđāđāļāļĒ BiBoard āļāļąāđāļāđāļāļāļāđāļēāļāļāļēāļ 328P āļāļĩāđāđāļāđāđāļāļĒ UNO āđāļāļ·āđāļāļāļāļēāļ PWM āļāļāļ ESP32 āđāļāđāđāļĄāļāļĢāļīāļāļāđāļāļąāļŠ āļāļķāļāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļąāļāļāļīāļāļāļĩāđāđāļĄāđāđāļāđāļĢāļ°āļāļļāđāļāđ
PWM āļāļāļ ESP32 āđāļĢāļĩāļĒāļāļ§āđāļēāļāļąāļ§āļāļ§āļāļāļļāļĄ LED (LEDC) āļāļąāļ§āļāļ§āļāļāļļāļĄ LED PWM āļŠāđāļ§āļāđāļŦāļāđāļāļ°āđāļāđāđāļāļ·āđāļāļāļ§āļāļāļļāļĄ LED āđāļĨāļ°āļĒāļąāļāļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāļŠāļąāļāļāļēāļ PWM āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļ§āļāļāļļāļĄāļāļļāļāļāļĢāļāđāļāļ·āđāļāđ āļāļąāļ§āļāļ§āļāļāļļāļĄāļĄāļĩāļāļąāļ§āļāļąāļāđāļ§āļĨāļē 8 āļāļąāļ§ āļāļķāđāļāļŠāļāļāļāļĨāđāļāļāļāļąāļāļāđāļāļāļāļ§āļēāļĄāđāļĢāđāļ§āļŠāļđāļ 8 āļāđāļāļ āđāļĨāļ°āļāđāļāļāļāļ§āļēāļĄāđāļĢāđāļ§āļāđāļģ 8 āļāđāļāļ āļĢāļ§āļĄāđāļāđāļ 16 āļāđāļāļ

āđāļĄāļ·āđāļāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāļāļąāļ UNO āđāļŦāđāđāļāđ "analogWrite()" āđāļāļĒāļāļĢāļāđāļāļ·āđāļāļāđāļāļāļāļąāļāļĢāļēāļŠāđāļ§āļāļāļģāļāļēāļāļĢāļ°āļŦāļ§āđāļēāļ 0-255 āļāļēāļĢāļāļ§āļāļāļļāļĄ PWM āļāļāļ ESP32 āļāļ BiBoard āļāļąāđāļāļĒāļļāđāļāļĒāļēāļāļāļ§āđāļē āļāļēāļĢāļēāļĄāļīāđāļāļāļĢāđāļāļĩāđāļāđāļāļāļāļ§āļāļāļļāļĄāļĄāļĩāļāļąāļāļāļĩāđ:
āļāļēāļĢāđāļĨāļ·āļāļāļāđāļāļ PWM āļāđāļ§āļĒāļāļāđāļāļ (0-15) āļĒāļąāļāļāđāļ§āļĒāđāļāļīāđāļĄāļāļ§āļēāļĄāļĒāļ·āļāļŦāļĒāļļāđāļāđāļāļāļēāļĢāđāļāđāļāļīāļ
āļāļģāļāļ§āļāļāļīāļāļāļāļāļĢāļđāļāļāļĨāļ·āđāļ PWM āļāļ°āļāļģāļŦāļāļāļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļāļāļāļāļĢāļāļāļāļēāļĢāļāļģāļāļēāļāļāļāļāļĢāļđāļāļāļĨāļ·āđāļ PWM āļāļģāļāļ§āļāļāļīāļāļĒāļīāđāļāļĄāļēāļ āļāļ§āļēāļĄāđāļĄāđāļāļĒāļģāļĒāļīāđāļāļŠāļđāļ
āļāļ§āļēāļĄāļāļĩāđāļāļāļāļĢāļđāļāļāļĨāļ·āđāļ PWM āļāļ°āļāļģāļŦāļāļāļāļ§āļēāļĄāđāļĢāđāļ§āļāļāļāļĢāļđāļāļāļĨāļ·āđāļ PWM āļĒāļīāđāļāļāļ§āļēāļĄāļāļĩāđāļŠāļđāļ āļāļ§āļēāļĄāđāļĢāđāļ§āļĒāļīāđāļāđāļĢāđāļ§āļāļķāđāļ
āļāļ§āļēāļĄāļāļĩāđāļāļāļāļĢāļđāļāļāļĨāļ·āđāļ PWM āđāļĨāļ°āļāļģāļāļ§āļāļāļīāļāļāļąāđāļāļŠāļąāļĄāļāļąāļāļāđāļāļąāļ āļĒāļīāđāļāļāļģāļāļ§āļāļāļīāļāļĄāļēāļ āļāļ§āļēāļĄāļāļĩāđāļĒāļīāđāļāļāđāļģ āļāļąāļ§āļāļĒāđāļēāļāļāđāļāđāļāļāļĩāđāļĒāļāļĄāļēāļāļēāļāļāļđāđāļĄāļ·āļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄ ESP32:
āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ āđāļĄāļ·āđāļāļāļ§āļēāļĄāļāļĩāđ PWM āļāļ·āļ 5 kHz āļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļāļĢāļāļāļāļēāļĢāļāļģāļāļēāļāļŠāļđāļāļŠāļļāļāļāļ°āđāļāđāļ 13 āļāļīāļ āļāļķāđāļāļŦāļĄāļēāļĒāļāļ§āļēāļĄāļ§āđāļēāļĢāļāļāļāļēāļĢāļāļģāļāļēāļāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāđāļēāđāļāļāđāđāļāđāļĢāļ°āļŦāļ§āđāļēāļ 0 āļāļķāļ 100% āđāļāļĒāļĄāļĩāļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļ ~0.012% (2 ** 13 = 8192 āļĢāļ°āļāļąāļāļāļ§āļēāļĄāļŠāļ§āđāļēāļ LED āđāļāļāđāļĒāļāļŠāđāļ§āļ)
āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļąāļ§āļāļ§āļāļāļļāļĄ LED PWM āđāļāļ·āđāļāļŠāļĢāđāļēāļāļŠāļąāļāļāļēāļāļāļ§āļēāļĄāļāļĩāđāļŠāļđāļ āļāļķāđāļāđāļāļĩāļĒāļāļāļāļāļĩāđāļāļ°āļŠāđāļāļŠāļąāļāļāļēāļāļāļēāļŽāļīāļāļēāđāļāļĒāļąāļāļāļļāļāļāļĢāļāđāļāļ·āđāļāđ āđāļāđāļ āđāļĄāļāļđāļĨāļāļĨāđāļāļāļāļīāļāļīāļāļąāļĨ āļāļĩāđāļāļĩāđāļāļ§āļēāļĄāļāļĩāđāļŠāļđāļāļŠāļļāļāļŠāļēāļĄāļēāļĢāļāđāļāđāļ 40 MHz āđāļĨāļ°āļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļāļĢāļāļāļāļēāļĢāļāļģāļāļēāļāļāļ·āļ 1 āļāļīāļ āļāļĨāđāļēāļ§āļāļĩāļāļāļąāļĒāļŦāļāļķāđāļ āļĢāļāļāļāļēāļĢāļāļģāļāļēāļāļāļ°āļāļāļāļĩāđāļāļĩāđ 50% āđāļĨāļ°āđāļĄāđāļŠāļēāļĄāļēāļĢāļāļāļĢāļąāļāđāļāļĨāļĩāđāļĒāļāđāļāđ
API āļāļāļāđāļāļĢāļĨāđāļĨāļāļĢāđ LED PWM āļŠāļēāļĄāļēāļĢāļāļĢāļēāļĒāļāļēāļāļāđāļāļāļīāļāļāļĨāļēāļāđāļĄāļ·āđāļāļāļ§āļēāļĄāļāļĩāđāļāļĩāđāļāļąāđāļāđāļ§āđāđāļĨāļ°āļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļāļĢāļāļāļāļēāļĢāļāļģāļāļēāļāđāļāļīāļāļāđāļ§āļāļŪāļēāļĢāđāļāđāļ§āļĢāđāļāļāļāļāļāļāđāļāļĢāļĨāđāļĨāļāļĢāđ LED PWM āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ āļŦāļēāļāļāļļāļāļāļĒāļēāļĒāļēāļĄāļāļąāđāļāļāđāļēāļāļ§āļēāļĄāļāļĩāđāđāļāđāļ 20 MHz āđāļĨāļ°āļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļāļĢāļāļāļāļēāļĢāļāļģāļāļēāļāđāļāđāļ 3 āļāļīāļ āļāđāļāļāļīāļāļāļĨāļēāļāļāļ°āļāļđāļāļĢāļēāļĒāļāļēāļāļāļāļāļāļ āļēāļāļāļāļĢāđāļāļāļĩāđāļĢāļĩāļĒāļĨ
2. Configure the PWM frequency on BiBoard in Arduinoin Arduino
āļāļąāļāļāļĩāđāđāļŠāļāļāđāļ§āđāļāđāļēāļāļāļ āđāļĢāļēāļāļģāđāļāđāļāļāđāļāļāļāļģāļŦāļāļāļāđāļēāļāđāļāļāļŠāļąāļāļāļēāļ āļāļ§āļēāļĄāļāļĩāđ āđāļĨāļ°āļāļģāļāļ§āļāļāļīāļ āđāļĨāļ°āđāļĨāļ·āļāļāļāļīāļāđāļāļēāļāđāļāļļāļ
āļāļąāđāļāļāļāļāļāļĩāđ 1: āļāļģāļŦāļāļāļāđāļēāļāļąāļ§āļāļ§āļāļāļļāļĄ PWM
const int freq = 5000; // PWM frequency
const int ledcChannel = 0; // ledc channel, 0-15
const int resolution = 8; // resolution of PWMïž8bitïž0ï―255ïž
ledcSetup(ledcChannel, freq, resolution);āļāļąāđāļāļāļāļāļāļĩāđ 2: āļāļģāļŦāļāļāļāđāļēāļāļīāļāđāļāļēāļāđāļāļļāļ PWM
ledcAttachPin(ledPin, ledcChannel);āļāļąāđāļāļāļāļāļāļĩāđ 3: āđāļāļēāļāđāļāļļāļāļĢāļđāļāļāļĨāļ·āđāļ PWM
ledcWrite(ledcChannel, dutyCycle);āđāļāļāļēāļĢāļŠāļēāļāļīāļ āđāļĢāļēāđāļĨāļ·āļāļ IO2 āđāļāđāļāļāļīāļāđāļāļēāļāđāļāļļāļ āđāļāļ·āđāļāļĄāļāđāļ IO2 āđāļāđāļēāļāļąāļ LED āđāļĨāļ°āļāļļāļāļŠāļēāļĄāļēāļĢāļāļŠāļąāļāđāļāļāđāļāļāđāļāļāļāđāļāļāļāđāļ LED āļāļĢāļ°āļāļĢāļīāļāļāđāļēāđāđāļāđ
3. Complete code:
/* In this demo, we show how to use PWM in BiBoard(ESP32)
* It's different from the Arduino UNO based on the ATMega328P
*/
// define the PWM pin
const int ledPin = 2; // 16 corresponds to GPIO16
// setting PWM properties
const int freq = 5000; // PWM frequency
const int ledcChannel = 0; // ledc channel, in ESP32 there're 16 ledc(PWM) channels
const int resolution = 8; // resolution of PWM
void setup(){
// configure ledc functionalitites
// channels 0-15, resolution 1-16 bits, freq limits depend on resolution
// ledcSetup(uint8_t channel, uint32_t freq, uint8_t resolution_bits);
ledcSetup(ledcChannel, freq, resolution);
// attach the channel to the GPIO to be controlled
ledcAttachPin(ledPin, ledcChannel);
}
void loop(){
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
ledcWrite(ledcChannel, dutyCycle);
delay(15);
}
// decrease the LED brightness
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
ledcWrite(ledcChannel, dutyCycle);
delay(15);
}
}Last updated
Was this helpful?