介紹
脈衝寬度調製 (PWM)是一種在保持波頻率恆定的同時改變脈衝寬度的技術。
PWM 生成
一個脈衝的周期由一個ON週期 (VCC) 和一個OFF週期 (GND) 組成。信號在一段時間內為 ON 的部分稱為佔空比。
例如,一個週期為 10ms 的脈衝將保持 ON(高)2ms。因此,佔空比將為
D = 2ms / 10ms = 20%
通過 PWM 技術,我們可以使用 ON-OFF 信號來控制傳遞給負載的功率。PWM 信號可用於控制直流電機的速度和改變 LED 的亮度。此外,它還可用於生成正弦信號。不同佔空比的脈寬調製信號如下所示。
PWM 佔空比
基於 NodeMCU 的 ESP8266 通過軟件編程具有 PWM 接口的功能。它是通過定時器中斷方法實現的。ESP8266 的 PWM 頻率範圍可調至 1KHz。
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 亮度
用於 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
沒有留言:
張貼留言