示例7:直流电机控制
大约 3 分钟
示例7:直流电机控制
实验概述
通过 GPIO 输出配合电机驱动模块(如 L298N、L9110)控制直流电机的启停和方向。ESP32 的 GPIO 无法直接驱动电机,需要通过驱动芯片放大电流。
硬件接线
| 开发板标识 | GPIO引脚 | 连接设备 |
|---|---|---|
| IN1 | GPIO15 | L298N/L9110 输入1(正转) |
| IN2 | GPIO2 | L298N/L9110 输入2(反转) |
| ENA | GPIO0 | L298N 使能端(PWM调速) |
L298N 模块需外接电源(6-12V),逻辑供电接 3.3V/5V。
JSON 配置示例
{
"peripherals": [
{
"id": "motor_in1",
"name": "电机-正转",
"type": 12,
"enabled": false,
"pins": [15],
"params": { "initialState": 0 }
},
{
"id": "motor_in2",
"name": "电机-反转",
"type": 12,
"enabled": false,
"pins": [2],
"params": { "initialState": 0 }
},
{
"id": "motor_speed",
"name": "电机-调速",
"type": 17,
"enabled": false,
"pins": [0],
"params": {
"pwmChannel": 2,
"pwmFrequency": 1000,
"pwmResolution": 8,
"defaultDuty": 0
}
}
]
}外设执行联动
场景1:电机正转(平台触发)
功能:通过云平台指令控制电机正转,速度为200/255(约78%)
Web界面配置步骤
步骤1:创建规则
- 点击左侧菜单 外设配置 → 切换到 外设执行管理 标签
- 点击 新增规则 按钮
- 填写基础配置:
- 规则名称:
电机正转 - 上报数据:✅ 启用
- 启用:✅ 启用
- 规则名称:
步骤2:配置触发器
点击 添加触发 按钮
填写触发器配置:
字段 填写内容 说明 触发类型 选择 平台触发 接收云平台指令 操作符 选择 匹配模式 匹配指令 比较值 {"cmd":"forward"}正转指令
步骤3:配置动作(需要3个动作)
动作1:设置正转方向
- 点击 添加动作 按钮
- 填写:
- 动作类型:选择 高电平
- 目标外设:选择
motor_in1
动作2:设置反转方向为低
- 再次点击 添加动作 按钮
- 填写:
- 动作类型:选择 低电平
- 目标外设:选择
motor_in2
动作3:设置PWM速度
第三次点击 添加动作 按钮
填写:
- 动作类型:选择 设置PWM
- 目标外设:选择
motor_speed - 动作参数:
200(占空比,0-255)
点击 保存 按钮
执行流程:
收到正转指令
↓
IN1 = HIGH(正转方向)
↓
IN2 = LOW
↓
ENA = 200/255(78%速度)
↓
电机正转场景2:电机停止(平台触发)
功能:通过云平台指令停止电机
Web界面配置步骤
步骤1:创建规则
- 点击 新增规则
- 填写基础配置:
- 规则名称:
电机停止 - 上报数据:✅ 启用
- 启用:✅ 启用
- 规则名称:
步骤2:配置触发器
- 点击 添加触发 按钮
- 填写:
- 触发类型:选择 平台触发
- 操作符:选择 匹配模式
- 比较值:
{"cmd":"stop"}
步骤3:配置动作(需要3个动作)
动作1:低电平 →
motor_in1动作2:低电平 →
motor_in2动作3:设置PWM →
motor_speed,参数0点击 保存 按钮
电机控制真值表
| IN1 | IN2 | ENA(PWM) | 状态 |
|---|---|---|---|
| HIGH | LOW | 0-255 | 正转(速度由PWM决定) |
| LOW | HIGH | 0-255 | 反转(速度由PWM决定) |
| LOW | LOW | 0 | 自由停转 |
| HIGH | HIGH | 0-255 | 制动(快速停止) |
注意事项
- 外接电源:电机需独立电源供电,不要从 ESP32 的 3.3V 取电
- PWM 调速:占空比 0~255(8bit),值越大转速越快
- 刹车模式:IN1=IN2=1 为制动,IN1=IN2=0 为自由停转
- 反向电动势:电机断电瞬间的反向电压可能损坏驱动芯片,确保模块有保护二极管
- GPIO0:作为 ENA 使用时注意启动时序,避免影响 ESP32 启动
