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. 頻率

程式碼

  1. #define PWM_CHANNEL_0 0 // use first channel of 16 channels (started from zero)
  2. #define PWM_TIMER_12_BIT 12 // use 12 bit precission for LEDC timer
  3. #define PWM_BASE_FREQ 5000 // use 5000 Hz as a LEDC base frequency
  4. #define PWM_PIN 5 // fade LED PIN (replace with LED_BUILTIN constant for built-in LED)
  5.  
  6. int Value = 0; // how bright the LED is
  7. int Step = 5; // how many points to fade the LED by
  8.  
  9. // Arduino like analogWrite
  10. // value has to be between 0 and valueMax
  11. void PWMAnalogWrite(uint8_t channel, uint32_t value, uint32_t valueMax = 255) {
  12. // calculate duty, 4095 from 2 ^ 12 - 1
  13. uint32_t duty = (4095 / valueMax) * min(value, valueMax);
  14. ledcWrite(channel, duty);// write duty to PWM Pin
  15. }
  16.  
  17. void setup() {
  18. // Setup timer and attach timer to a led pin
  19. ledcSetup(PWM_CHANNEL_0, PWM_BASE_FREQ, PWM_TIMER_12_BIT);
  20. ledcAttachPin(PWM_PIN, PWM_CHANNEL_0);
  21. }
  22.  
  23. void loop() {
  24.  
  25. PWMAnalogWrite(PWM_CHANNEL_0, Value); // set the Value on channel 0
  26. Value = Value + Step;// add the Value
  27. if (Value <= 0 || Value >= 255) {
  28. Step = -Step;
  29. }
  30. delay(50);
  31. }
執行結果


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

參考資料



沒有留言:

發佈留言

打賞按讚