You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32-CAM搭配TB6612电机驱动器:如何降低电机转速?

问题描述

搭建小型机器人时遇到TB6612电机转速控制故障:

  • 硬件配置:2节串联3.7V锂电池(输出7.4V)、TB6612电机驱动器、2台6V直流电机、带天线的AI Thinker ESP32-CAM主控
  • 操作背景:为降低电机默认转速,因引脚12、13、14、15已用于电机方向控制,将PWMA和PWMB并联接至引脚16,代码变量定义如下:
#define MOTOR_PWR 16
const int motorSpeed = 30;
  • 异常现象:在setup函数中添加pinMode(MOTOR_PWR, OUTPUT);并上传代码后,Web服务器无法启动,设备反复输出启动日志:
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1448
load:0x40078000,len:14844
ho 0 tail 12 room 4
load:0x40080400,len:4
load:0x40080404,len:3356
entry 0x4008059c
etS Jul 29 2019 12:21:46
  • 需求:实现TB6612(或L298N)的电机转速控制。
解决方案

问题根源

ESP32-CAM的引脚16是PSRAM芯片的片选(CS)引脚,将其强制配置为普通输出引脚会直接干扰PSRAM的正常工作,导致系统启动异常、功能崩溃,这就是Web服务器无法启动的核心原因。


方法1:更换合规的PWM引脚

ESP32-CAM有多个无冲突的PWM可用引脚,避开16、17这类与PSRAM/Flash绑定的引脚,推荐选择GPIO2、GPIO4、GPIO5、GPIO18、GPIO19。

以更换到GPIO2为例,修改代码并初始化:

#define MOTOR_PWR 2
const int motorSpeed = 30;

void setup() {
  // 先完成Web服务器等其他初始化操作
  pinMode(MOTOR_PWR, OUTPUT);
  // Arduino框架下直接用analogWrite输出PWM信号调速
  analogWrite(MOTOR_PWR, motorSpeed);
}

方法2:复用现有电机引脚实现独立调速

如果不想新增引脚,可利用原本的电机方向控制引脚(12、13、14、15均支持PWM),分别给PWMA、PWMB独立接线,实现两台电机的单独转速调节:

// 引脚分配:PWMA控电机A转速,AIN1控电机A方向;PWMB控电机B转速,BIN1控电机B方向
#define PWMA 12
#define AIN1 13
#define PWMB 14
#define BIN1 15
const int motorASpeed = 30;
const int motorBSpeed = 35;

void setup() {
  pinMode(PWMA, OUTPUT);
  pinMode(AIN1, OUTPUT);
  pinMode(PWMB, OUTPUT);
  pinMode(BIN1, OUTPUT);
  
  // 电机A正转+调速
  digitalWrite(AIN1, HIGH);
  analogWrite(PWMA, motorASpeed);
  
  // 电机B正转+调速
  digitalWrite(BIN1, HIGH);
  analogWrite(PWMB, motorBSpeed);
}

方法3:硬件调压应急方案

如果暂时无法修改引脚配置,可在电机电源回路中串联功率匹配的电阻降低输入电压,从而固定降低转速。注意电阻功率需满足公式P=I²R(I为电机工作电流),避免过热烧毁。此方法仅适合固定低速需求,无法实现动态调速。


内容的提问来源于stack exchange,提问作者JoQuery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:12:41