Nodemcu PWM控制原理
脉冲宽度调制(PWM)是一种在保持波形频率不变的情况下改变脉冲宽度的技术。

PWM产生
脉冲的周期包含了一个高电平(开)和低电平(关)的循环,信号在一段时间内处于高电平状态的部分称为占空比(duty cycle)。

释义:
DutyCycle:占空比
percenttage:百分数
Ton:高电平持续时间
TotalPeriod:周期时间
例如,一个周期为10毫秒的脉冲将高电平持续了2毫秒,它的占空比为: D = 2ms / 10ms = 20%,详细阅读:什么是PWM:脉冲宽度调制
我们可以通过PWM技术,利用高低电平(开关信号)来控制传输负载的信号。基于PWM的这个特性,PWM信号可以用来控制直流电机的转速(如何使用555定时器制作直流电机PWM调速器),舵机的角度(伺服电机是如何工作的?)和改变LED的亮度等场合。此外,它还可以用来产生正弦信号。不同占空比的脉宽调制信号如下图所示。

Nodemcu的PWM控制原理
基于NodeMCU具有可软件编程的PWM接口功能,这是通过内部定时器的中断来实现的。Nodemcu 的PWM频率范围是可调的,最高可达1KHz。

NodeMCU的PWM针脚如上图,因硬件版本不一致,针脚的实际布局与上图会存在一些差异,上图仅供参考。
NodeMCU PWM 控制函数
- analogWrite(pin, dutycycle):在指定的引脚上启用软件PWM功能,信号周期在0到PWM范围值之间,默认值为1023。
- analogWrite(pin, 0):禁用指定引脚上的PWM。
- analogWriteRange(new_range):该函数用于改变PWM的值(占空比)。
- analogWriteFreq(new_frequency):PWM频率默认为1kHz。调用这个函数可以修改为新的频率。PWM的频率范围在1 – 1000Khz范围内。
Nodemcu PWM的控制实例
下面是一个通过Arduino IDE编写示例,我们将PWM配置在NodeMCU的6号针脚上,通过连接到NodeMCU ADC 针脚上的电位计改变PWM的占空比,将LED连接到PWM引脚上,以可视化的效果(LED的亮度)来观察PWM的信号变化。

Arduino IDE代码
uint8_t LEDpin = D6; /* 程序使用默认的PWM频率1000Hz,不需要额外设置*/ void setup(){ Serial.begin(9600); analogWrite(LEDpin, 512); /* 设置初始占空比为50% */ } void loop(){ uint16_t dutycycle = analogRead(A0); /* 读取A0信号,并设置PWM占空比 */ if(dutycycle > 1023) dutycycle = 1023;/* 限制占空比至 1023 */ Serial.print("Duty Cycle: "); Serial.println(dutycycle); analogWrite(LEDpin, dutycycle); delay(100); }
扩展阅读:利用Nodemcu控制SG90舵机