
微型物联网直流电机&步进电机伺服驱动器
简介
长30mm宽30mm的驱动器,支持wifi、蓝牙遥控,兼容MQTT协议。可驱动一路步进电机、一路直流有刷电机。 直流电机支持最大电压11V、最大电流1.8A。步进电机支持最大电压35v,最大电流2A
简介:长30mm宽30mm的驱动器,支持wifi、蓝牙遥控,兼容MQTT协议。可驱动一路步进电机、一路直流有刷电机。 直流电机支持最大电压11V、最大电流1.8A。步进电机支持最大电压35v,最大电流2A开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
项目简介
本项目是基于ESP32S3的电机控制器,长30mm宽30mm,支持wifi、蓝牙遥控,兼容MQTT协议。可驱动一路步进电机、一路直流有刷电机。
项目功能
电机驱动:直流电机支持最大电压11V、最大电流1.8A。步进电机支持最大电压35v,最大电流2A。
外部接口:type-C、ESP32引脚触点引出
软件设计:局域网内web页面遥控、指令控制;广域网MQTT话题指令遥控;type-C接口串口指令控制
硬件设计:ESP32 S3,步进电机驱动电路、直流电机驱动电路,串口通信电路,5v-3v3 LDO电路
项目参数
-
本设计采用ESP32S3 支持WIFI 蓝牙,需要外接天线;
-
直流电机驱动DRV8837:
• H 桥电机驱动器
– 驱动直流电机或其他负载
– 低 MOSFET 导通电阻:HS + LS 280mΩ
• 1.8A 最大驱动电流
• 独立的电机和逻辑电源引脚:
– 电机 VM:0 至 11 V
– 逻辑 VCC:1.8 至 7 V
• 低功耗休眠模式,休眠电流最大值仅为 120nA
– nSLEEP 引脚
• 保护特性
– VCC 欠压闭锁 (UVLO)
– 过流保护 (OCP)
– 热关断 (TSD) -
步进电机驱动A4988
▪ 低 RDS(ON) 输出
▪ 自动电流衰减模式检测/选择
▪ 混合和慢速电流衰减模式
▪ 同步整流,实现低功耗
▪ 内部 UVLO
▪ 交叉电流保护
▪ 3.3 和 5 V 兼容逻辑电源
▪ 热关断电路
▪ 对地短路保护
▪ 短路负载保护
▪ 五种可选步进模式:全、1/2、1/4、1/8 和 1/16
原理解析(硬件说明)
此处使用0欧电阻来选择逻辑供电从5v引入或是直流电机、步进电机电源供电
......
软件代码
实现了通过web控制步进电机的例程
#include
#include
// 定义A4988驱动器的引脚
#define REST_PIN 16
#define MS1_PIN 18
#define MS2_PIN 19
#define MS3_PIN 20
#define STEP_PIN 8
#define DIR_PIN 9
#define EN_PIN 15
#define SLEEP_PIN 17
// 步进控制相关参数
int stepsPerRevolution = 200; // 设定每一转所需的步数
// Wi-Fi 相关参数
const char* ssid = "yj_lab";
const char* password = "809809809";
// 创建WebServer对象
WebServer server(80);
void setup() {
// 初始化串口通信
Serial.begin(115200);
// 配置引脚模式
pinMode(REST_PIN, OUTPUT);
pinMode(EN_PIN, OUTPUT);
pinMode(SLEEP_PIN, OUTPUT);
pinMode(MS1_PIN, OUTPUT);
pinMode(MS2_PIN, OUTPUT);
pinMode(MS3_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
// 设置初始状态
digitalWrite(REST_PIN, HIGH); // 禁用复位
digitalWrite(EN_PIN, LOW);
digitalWrite(SLEEP_PIN, HIGH);
digitalWrite(MS1_PIN, LOW); // 全步进
digitalWrite(MS2_PIN, LOW); // 全步进
digitalWrite(MS3_PIN, LOW); // 全步进
// 连接到Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Serial.println(WiFi.localIP());
// 设置处理根路径("/")的函数
server.on("/", handleRoot);
// 设置处理提交指令的函数
server.on("/submit", handleSubmit);
// 启动WebServer
server.begin();
}
void loop() {
// 处理客户端请求
server.handleClient();
}
// 处理根路径的函数,显示输入表单
void handleRoot() {
String html = ""
"Command: <input type="\" name="\" /><br />"
"<input type="\" value="\" />"
"";
server.send(200, "text/html", html);
}
// 处理提交指令的函数
void handleSubmit() {
if (server.hasArg("command")) {
String command = server.arg("command");
command.trim(); // 去除前后的空格和换行符
// 解析指令
if (command.startsWith("MOVE ")) {
int spaceIndex = command.indexOf(' ');
if (spaceIndex != -1) {
String stepsStr = command.substring(spaceIndex + 1);
int steps = stepsStr.toInt();
moveStepper(steps);
}
} else if (command.startsWith("DIR ")) {
int spaceIndex = command.indexOf(' ');
if (spaceIndex != -1) {
String dirStr = command.substring(spaceIndex + 1);
int dir = dirStr.toInt();
setDirection(dir);
}
} else if (command.startsWith("test ")) {
int spaceIndex = command.indexOf(' ');
if (spaceIndex != -1) {
String stepsStr1 = command.substring(spaceIndex + 1);
int test1 = stepsStr1.toInt();
test(test1);
}
} else {
server.send(200, "text/plain", "Invalid command");
return;
}
// 重定向回根路径
server.sendHeader("Location", "/", true);
server.send(302, "text/plain", "");
} else {
server.send(400, "text/plain", "Command not found");
}
}
void moveStepper(int steps) {
for (int i = 0; i < abs(steps); i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(500); // 控制步进电机的速度
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(500);
}
}
void test(int i) {
for (i; i > 0; i--) {
digitalWrite(DIR_PIN, LOW);
moveStepper(400);
digitalWrite(DIR_PIN, HIGH);
moveStepper(800);
digitalWrite(DIR_PIN, LOW);
moveStepper(400);
}
}
void setDirection(int dir) {
if (dir == 1) {
digitalWrite(DIR_PIN, HIGH); // 顺时针方向
Serial.println("Direction: Clockwise");
} else if (dir == 0) {
digitalWrite(DIR_PIN, LOW); // 逆时针方向
Serial.println("Direction: Counterclockwise");
} else {
Serial.println("Invalid direction value");
}
}
注意事项
注意供电方面不要把5v和电机电源同时接入LDO(不然会冒魔法烟雾)
注意烧录电路存在部分没有一键烧录,烧录时需要先按下IO0的按键,再按下EN按键进入烧录模式
实物图
设计图

BOM


评论