1. 程式人生 > >WiFi-ESP8266入門開發(十一)-使用PWM

WiFi-ESP8266入門開發(十一)-使用PWM

注:對於ESP8266開源技術感興趣的可以加群,我們一起探索交流學習,群號:579932824。群名:ESP8266開源技術交流群。

介紹

脈寬調製(Pulse Width Modulation,PWM)是在保持波的頻率不變的同時改變脈寬的技術。

LED PWM

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 - 1000hz。

我們來編寫一個Arduino程式,在NodeMCU的6腳上設定PWM,並使用連線到NodeMCU的ADC引腳的電位器改變佔空比。在這裡我們連線PWM引腳上的LED來顯示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); }