CHAPTER 14 / FIELD GUIDE
电机与供电
先控制一个轮子,再装整车。
GPIO 发命令,驱动器提供电流
电机启动和堵转时电流可能远大于正常运行值。DRV8833 用 H 桥切换电机端子极性,从而正反转;板子的持续电流能力由芯片封装、散热和布局共同决定。选购时用真实电机电压和堵转电流匹配。
接线基线
| 接点 | 连接 |
|---|---|
| 电池正极经物理开关 | DRV8833 VM / VIN,按模块丝印 |
| 电池负极 | 驱动 GND |
| ESP32 GND | 驱动 GND,共地 |
| ESP32 供电 | 单独 USB,不把电池正极连到开发板 |
| AIN1 / AIN2 | GPIO10 / GPIO11 |
| BIN1 / BIN2 | GPIO12 / GPIO13,单轮实验暂不接电机 |
| AOUT1 / AOUT2 | 左电机两根线 |
| BOUT1 / BOUT2 | 右电机两根线,后续使用 |
| nSLEEP(若引出) | 核对模块电路,拉到有效高电平;可用 10 kΩ 上拉到 3V3 |
| AIN1/2、BIN1/2 | 各加 10 kΩ 下拉到 GND,使复位期间输入确定为低 |
电机电流不要经过面包板细小电源轨和开发板。电池、驱动、马达用可靠接线端子和适当线径;地线尽量让电机大电流回路直接返回电池。VM 附近按模块要求放去耦电容;加电解电容时核对极性和耐压。
| IN1 | IN2 | 结果(DRV8833) |
|---|---|---|
| 0 | 0 | 滑行停止,高阻输出 |
| 1 | 0 | 一个方向 |
| 0 | 1 | 相反方向 |
| 1 | 1 | 制动 |
实验工程 · 09_motor
先把轮子架空。按一下按钮,仅左电机以约 29% 指令运行 500 ms 后停止。若低占空比无法克服静摩擦,不要把轮子卡住长时间通电。
打开 main.c · 查看公共驱动 lab.c · 下载全部工程
#include "lab.h"
#include "esp_log.h"
void app_main(void) {
button_init();
motor_init();
motor_set(0,0);
int64_t stop_at=0;
bool running=false;
for(;; ) {
if(button_pressed()&&!running) {
motor_set(300,0);
running=true;
stop_at=now_ms()+500;
}
if(running&&now_ms()>=stop_at) {
motor_set(0,0);
running=false;
ESP_LOGI("motor","stopped");
}
vTaskDelay(pdMS_TO_TICKS(10));
}
}停下来想一想
为什么电机一启动,ESP32 就重启,但单独运行屏幕正常?
查看推导与答案
优先检查供电压降、回流路径和电机噪声。先把电机电源与逻辑供电分开并共地,检查接线与去耦,再考虑软件;仅修改延迟通常不能修复电源问题。
本章验收
本章一手资料
卡住时可以直接向我提问:附上章节号、工程名、接线和第一条错误日志。