ESP32 使用PWM转换电压(0-10V)模块

凌顺实验室(lingshunlab.com)在本文中分享ESP32如何使用PWM转电压输出的模块。

实现效果

通过ESP32的PWM最大3.3V的输出,转换成电压更大10V的输出,从而增加esp32可以控制的设备。有点类似MOS管的作用。

WX20230804-0840052

元件说明

本模块是一款能够将电压和PWM转换模块。PWM数字信号转换成0到10V模拟量信号。通过调整PWM的占空比来调节输出电压,模块尺寸小,易于应用在不同的地方。

p67o8i76pi4uh456j7k.pic

  • 模块工作电压:DC 12V-30V,(电源功率要求:大于100MA)
  • PWM信号接收频率范围:1KHZ-3KHZ
  • PWM信号输入电平范围:
    峰峰值4.5V到10V电平,跳针插在5V处。该类电平信号主要针对常规的工业控制卡(如MACH3板卡)5V的CPU接口。
    峰峰峰值12到24V电平,跳针插在24V处。该类电平信号主要针对常规的PLC接口。
  • 转换范围:0%-100%PWM转换为0-10V电压允许误差:5%

ESP32 的PWM电平峰值只有3.3V,所以在校准中间电压时需要注意多尝试

引脚说明

k2j34h5h6j5k4.pic

VCC: 工作电源12V-30V。
GND: 工作电源地。
PWM: 输入PWM信号正端。
GND: 输入信号负端。
VOUT: 输出电压0-10V。
GND: 输出电压地。

BOM表

ESP32 x1

PWM转电压模块 x1

面包板 x1

跳线(杜邦线) 若干

接线图

WX20230804-0833442x

程序代码

示例代码使用回PWM控制LED灯实现呼吸效果的代码:

ESP32 使用PWM控制板载的LED实现呼吸效果

// welcome to lingshunlab.com

const int LEDPin = 2;  /* GPIO16 */

int dutyCycle;
/* Setting PWM Properties */
const int PWMFreq = 5000; /* 5 KHz */
const int PWMChannel = 0;
const int PWMResolution = 10;
const int MAX_DUTY_CYCLE = (int)(pow(2, PWMResolution) - 1);

void setup()
{  
  // 配置PWM通道,频率,分辨率
  ledcSetup(PWMChannel, PWMFreq, PWMResolution);
  // 把配置好的PWM通道,分配引脚
  ledcAttachPin(LEDPin, PWMChannel);
}

void loop()
{
  // 用PWM增加LED亮度
  for(dutyCycle = 0; dutyCycle <= MAX_DUTY_CYCLE; dutyCycle++)
  {
    ledcWrite(PWMChannel, dutyCycle);
    delay(3);
  }
  // 用PWM降低LED亮度
  for(dutyCycle = MAX_DUTY_CYCLE; dutyCycle >= 0; dutyCycle--)
  {
    ledcWrite(PWMChannel, dutyCycle);
    delay(3);
  }
}

上传代码后,使用万用表测量电压输出端(VOUT)的电压,即可看到电压会从小到大然后又从大到小地输出。