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一致
參考資料
沒有留言:
發佈留言