ESP32 使用PWM转换电压(0-10V)模块
目录
凌顺实验室(lingshunlab.com)在本文中分享ESP32如何使用PWM转电压输出的模块。
实现效果
通过ESP32的PWM最大3.3V的输出,转换成电压更大10V的输出,从而增加esp32可以控制的设备。有点类似MOS管的作用。
元件说明
本模块是一款能够将电压和PWM转换模块。PWM数字信号转换成0到10V模拟量信号。通过调整PWM的占空比来调节输出电压,模块尺寸小,易于应用在不同的地方。
- 模块工作电压: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,所以在校准中间电压时需要注意多尝试
引脚说明
VCC: 工作电源12V-30V。
GND: 工作电源地。
PWM: 输入PWM信号正端。
GND: 输入信号负端。
VOUT: 输出电压0-10V。
GND: 输出电压地。
BOM表
ESP32 x1
PWM转电压模块 x1
面包板 x1
跳线(杜邦线) 若干
接线图
程序代码
示例代码使用回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)的电压,即可看到电压会从小到大然后又从大到小地输出。