2023年3月12日星期日

ESP32 PWM

ESP32 with PWM

    PWM 很常拿來控制馬達或是LED用,本篇文章單純紀錄如何透過Arduino IDE 開發使用ESP32的PWM。

目  標:

    使用Arduino IDE 控制ESP32 指定腳位輸出PWM

軟  體:

    Arduino IDE

硬  體:

    1. EP32

    2. USB TTL

    3. 杜邦線若干條

    4. 示波器 一台

說  明:

    跟平常使用的PWM 控制差不多,但是需要特別去注意以下幾點

    1. 需要特別去設定通道(只有0~16)

    2. 頻率

程式碼

#define PWM_CHANNEL_0     0    // use first channel of 16 channels (started from zero)
#define PWM_TIMER_12_BIT  12   // use 12 bit precission for LEDC timer
#define PWM_BASE_FREQ     5000 // use 5000 Hz as a LEDC base frequency
#define PWM_PIN            5  // fade LED PIN (replace with LED_BUILTIN constant for built-in LED)

int Value = 0;    // how bright the LED is
int Step = 5;    // how many points to fade the LED by

// Arduino like analogWrite
// value has to be between 0 and valueMax
void PWMAnalogWrite(uint8_t channel, uint32_t value, uint32_t valueMax = 255) {
  // calculate duty, 4095 from 2 ^ 12 - 1
  uint32_t duty = (4095 / valueMax) * min(value, valueMax);
  ledcWrite(channel, duty);// write duty to PWM Pin
}

void setup() {
  // Setup timer and attach timer to a led pin
  ledcSetup(PWM_CHANNEL_0, PWM_BASE_FREQ, PWM_TIMER_12_BIT);
  ledcAttachPin(PWM_PIN, PWM_CHANNEL_0);
}

void loop() {

  PWMAnalogWrite(PWM_CHANNEL_0, Value);  // set the Value on channel 0
  Value = Value + Step;// add the Value  
  if (Value <= 0 || Value >= 255) {
    Step = -Step;
  }
  delay(50);
}
執行結果


影片中可以看到,PWM波型的輸出及變化,在示波器右側量測到的頻率也與設定的5kHz一致

參考資料



沒有留言:

發佈留言

打賞按讚