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
相关产品推荐
相关产品推荐

