WiFi-ESP8266入门开发(十一)-使用PWM

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/solar_Lan/article/details/79249083

注:对于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);
}

 


 

展开阅读全文

没有更多推荐了,返回首页