2022年8月23日 星期二

NodeMCU PWM 與 Arduino IDE

 

介紹

脈衝寬度調製 (PWM)是一種在保持波頻率恆定的同時改變脈衝寬度的技術。

LED 脈寬調製

 

PWM 生成

一個脈衝的周期由一個ON週期 (VCC) 和一個OFF週期 (GND) 組成。信號在一段時間內為 ON 的部分稱為佔空比

 

\mathbf{佔空比(百分比)= \frac{噸}{總週期} \ast 100}

 

例如,一個週期為 10ms 的脈衝將保持 ON(高)2ms。因此,佔空比將為

D = 2ms / 10ms = 20%

通過 PWM 技術,我們可以使用 ON-OFF 信號來控制傳遞給負載的功率。PWM 信號可用於控制直流電機的速度和改變 LED 的亮度。此外,它還可用於生成正弦信號。不同佔空比的脈寬調製信號如下所示。

PWM佔空比波形

PWM 佔空比

基於 NodeMCU 的 ESP8266 通過軟件編程具有 PWM 接口的功能。它是通過定時器中斷方法實現的。ESP8266 的 PWM 頻率範圍可調至 1KHz。

NodeMCU 套件上的 PWM 引腳

NodeMCU PWM 引腳

NodeMCU PWM 引腳

NodeMCU PWM 的 Arduino 功能

analogWrite(pin, dutycycle)在指定引腳上啟用軟件 PWM。佔空比在 0 到 PWMRANGE 的範圍內,默認為 1023。

analogWrite(pin, 0)禁用指定引腳上的 PWM。

analogWriteRange(new_range)此功能用於更改 PWM 範圍(佔空比)。

analogWriteFreq(new_frequency) PWM 頻率默認為 1kHz。調用此函數可以將其更改為新的頻率。PWM 頻率範圍為 1 – 1000Khz。

例子

讓我們編寫一個 Arduino 草圖,在 NodeMCU 的第 6 個引腳上設置 PWM,並通過連接到 NodeMCU 的 ADC 引腳的電位器來改變其占空比。在這裡,我們將 LED 連接到 PWM 引腳上,以可視化 PWM 變化的效果(LED 的亮度)。

NodeMCU PWM LED 亮度控制

使用 NodeMCU PWM 控制 LED 亮度

 

用於 PWM 的 Arduino 草圖

uint8_t LEDpin = D6;

/* By default PWM frequency is 1000Hz and we are using same 
   for this application hence no need to set */

void setup(){
  Serial.begin(9600);
  analogWrite(LEDpin, 512);  /* set initial 50% duty cycle */
}

void loop(){
  uint16_t dutycycle =  analogRead(A0); /* read continuous POT and set PWM duty cycle according */
  if(dutycycle > 1023) dutycycle = 1023;/* limit dutycycle to 1023 if POT read cross it */
  Serial.print("Duty Cycle: ");  Serial.println(dutycycle);
  analogWrite(LEDpin, dutycycle);
  delay(100);
}

 

資料來源:https://www.electronicwings.com/nodemcu/nodemcu-pwm-with-arduino-ide

沒有留言: