PWM 输出
大约 3 分钟
PWM 输出
功能说明
PWM(脉冲宽度调制)输出用于控制LED亮度、舵机角度、电机调速等。通过改变占空比实现模拟控制效果。
支持的外设类型
| 类型 | type值 | 说明 |
|---|---|---|
| GPIO_PWM_OUTPUT | 17 | 通用PWM输出(LED调光/电机调速) |
| PWM_SERVO | 41 | 舵机控制(50Hz固定频率) |
参数说明
PWM 输出参数
| 参数 | 说明 | 默认值 |
|---|---|---|
| pwmChannel | PWM通道(0-15) | 0 |
| pwmFrequency | PWM频率(Hz) | 1000 |
| pwmResolution | 分辨率(位数,1-16) | 8 |
| defaultDuty | 默认占空比 | 0 |
Servo 参数
| 参数 | 说明 | 默认值 |
|---|---|---|
| frequency | PWM频率 | 50 |
| minPulse | 最小脉宽(μs) | 544 |
| maxPulse | 最大脉宽(μs) | 2400 |
PWM 调试先从低占空比或中位角度开始,确认电源和负载响应正常后,再接入自动规则;舵机和电机建议使用独立供电并共地。
占空比范围
占空比范围由 pwmResolution 决定:
- 8位分辨率:0 ~ 255
- 10位分辨率:0 ~ 1023
- 12位分辨率:0 ~ 4095
配置方式
方式1:Web界面配置(推荐)
PWM 输出保存前重点核对引脚、频率、分辨率和初始占空比。
步骤1:进入外设管理页面
- 打开浏览器访问 ESP32 IP 地址
- 登录后点击左侧菜单 外设配置
步骤2:添加PWM输出外设
点击 新增外设 按钮
填写配置:
字段 填写内容 说明 外设ID led_pwm或motor_pwm唯一标识符 名称 LED调光灯或直流电机调速显示名称 外设类型 GPIO PWM输出 (type: 17) 通用PWM 引脚配置 5或18根据实际接线填写 PWM频率 1000LED用1000Hz,电机用5000Hz PWM分辨率 88位=0-255,12位=0-4095 默认占空比 0初始亮度/速度 点击 保存
步骤3:验证配置
- 在外设列表中找到刚添加的外设
- 点击 启用 开关
- 使用控制面板调整PWM值
💡 提示:舵机请选择 PWM舵机 (type: 41),频率固定50Hz
方式2:JSON配置文件导入
将以下配置添加到 data/config/peripherals.json 的 peripherals 数组中:
LED 调光(8位 PWM)
{
"id": "led_pwm",
"name": "LED调光灯",
"type": 17,
"enabled": false,
"pins": [5],
"params": {
"initialState": 0,
"pwmChannel": 0,
"pwmFrequency": 1000,
"pwmResolution": 8,
"defaultDuty": 0
}
}电机调速(12位 PWM)
{
"id": "motor_pwm",
"name": "直流电机调速",
"type": 17,
"enabled": false,
"pins": [18],
"params": {
"initialState": 0,
"pwmChannel": 1,
"pwmFrequency": 5000,
"pwmResolution": 12,
"defaultDuty": 0
}
}SG90 舵机
{
"id": "servo1",
"name": "SG90舵机",
"type": 41,
"enabled": false,
"pins": [16],
"params": {
"frequency": 50,
"minPulse": 544,
"maxPulse": 2400
}
}与外设执行联动
设置PWM占空比
{
"targetPeriphId": "led_pwm",
"actionType": 4,
"actionValue": "128",
"useReceivedValue": false,
"syncDelayMs": 0,
"execMode": 0
}Web界面配置步骤
创建PWM控制规则
- 切换到 外设执行管理 标签
- 创建规则并配置触发器(如定时触发、平台触发)
- 添加PWM动作:
- 动作类型:设置PWM
- 目标外设:led_pwm
- 动作值:128(50%占空比,8位分辨率)
- 点击 保存
💡 提示:呼吸灯效果可选择“呼吸灯”动作类型,actionValue为周期毫秒数
JSON配置示例
呼吸灯效果
{
"targetPeriphId": "led_pwm",
"actionType": 3,
"actionValue": "2000",
"useReceivedValue": false,
"syncDelayMs": 0,
"execMode": 0
}
actionValue为呼吸周期(毫秒)
舵机角度控制
舵机通过 ACTION_SET_PWM(4) 控制,actionValue 为角度对应的脉宽值。
脚本联动示例
使用命令脚本实现 PWM 渐变:
PERIPH led_pwm PWM 0
DELAY 500
PERIPH led_pwm PWM 1000
DELAY 500
PERIPH led_pwm PWM 2000
DELAY 500
PERIPH led_pwm PWM 4095注意事项
- 通道冲突:同一 PWM 通道不可被多个外设共用,配置时确保
pwmChannel唯一 - 频率选择:LED调光建议 1000Hz,电机驱动建议 5000-25000Hz,舵机固定 50Hz
- 分辨率与频率:高频率下可用分辨率降低(ESP32 限制:freq × 2^resolution ≤ 80MHz)
- 舵机供电:舵机需独立供电,不要直接从ESP32 3.3V引脚取电
- 平台下发:平台可通过
[{"id":"led_pwm","value":"128"}]设置占空比
