Nodemcu PWM控制原理

  • 内容
  • ....
  • 相关

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

脉冲宽度调制
脉冲宽度调制

PWM产生

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

占空比公式
占空比公式

释义:

DutyCycle:占空比
percenttage:百分数
Ton:高电平持续时间
TotalPeriod:周期时间

例如,一个周期为10毫秒的脉冲将高电平持续了2毫秒,它的占空比为: D = 2ms / 10ms = 20%,详细阅读:什么是PWM:脉冲宽度调制

我们可以通过PWM技术,利用高低电平(开关信号)来控制传输负载的信号。基于PWM的这个特性,PWM信号可以用来控制直流电机的转速(如何使用555定时器制作直流电机PWM调速器),舵机的角度(伺服电机是如何工作的?)和改变LED的亮度等场合。此外,它还可以用来产生正弦信号。不同占空比的脉宽调制信号如下图所示。

不同占空比的PWM信号波形
不同占空比的PWM信号波形

Nodemcu的PWM控制原理

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

NodeMCU的PWM针脚
NodeMCU的PWM针脚

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的信号变化。

采用NodeMCU PWM  控制LED亮度
采用NodeMCU PWM 控制LED亮度

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舵机