WiFi-ESP8266入門開發(十一)-使用PWM
阿新 • • 發佈:2019-01-25
注:對於ESP8266開源技術感興趣的可以加群,我們一起探索交流學習,群號:579932824。群名:ESP8266開源技術交流群。
介紹
脈寬調製(Pulse Width Modulation,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)
例
我們來編寫一個Arduino程式,在NodeMCU的6腳上設定PWM,並使用連線到NodeMCU的ADC引腳的電位器改變佔空比。在這裡我們連線PWM引腳上的LED來顯示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);
}