| 参数分类 | 项目 | 规格详情 |
|---|---|---|
| 基础信息 | 产品型号 | A045 |
| 基础信息 | 模块名称 | 四路电机驱动模组 (A045) |
| 基础信息 | 核心功能 | 同时控制 4 路直流电机正反转、能耗刹车、PWM 无级调速 |
| 基础信息 | PCB 尺寸 | 53.00mm × 34.00mm,板载 4 个标准安装固定孔 |
| 基础信息 | 产品重量 |
带壳重量:20克——裸板重量:10克 |
| 基础信息 | 适配场景 | 4WD 四轮智能小车、多关节机器人、云台、自动化多电机设备 |
| 电气参数 | 电机供电电压 | 3V~10V DC,支持锂电池、稳压电源供电 |
| 电气参数 | 逻辑控制电压 | 3.3V~5V DC,兼容 Arduino/STM32/ESP32 全系列单片机 |
| 电气参数 | 单路持续输出电流 | 最大 1.5A,峰值电流更高,重载需加装散热片 |
| 电气参数 | 控制方式 | IN1~IN8 八路逻辑电平输入,支持 PWM 调速 |
| 板载元器件 | 核心芯片 | U1/U2 双 H 桥驱动芯片 |
| 板载元器件 | 外围器件 | C5/C6 大容量滤波电容、PWR 电源指示灯、C1~C4/R1~R3 滤波限流元件 |
| 控制接口 CN1 引脚 | GND | 电源公共地,必须与单片机系统共地 |
| 控制接口 CN1 引脚 | VCC | 逻辑供电正极,接入 3.3V/5V 电源 |
| 八路控制输入引脚 | IN1/IN2 | 1 号电机逻辑输入,控制转向、刹车 |
| 八路控制输入引脚 | IN3/IN4 | 2 号电机逻辑输入,控制转向、刹车 |
| 八路控制输入引脚 | IN5/IN6 | 3 号电机逻辑输入,控制转向、刹车 |
| 八路控制输入引脚 | IN7/IN8 | 4 号电机逻辑输入,控制转向、刹车 |
| 四路电机输出端子 | OUT1/OUT2(CN6) | 通道 1 电机驱动输出,直连电机两端 |
| 四路电机输出端子 | OUT3/OUT4(CN7) | 通道 2 电机驱动输出,直连电机两端 |
| 四路电机输出端子 | OUT5/OUT6(CN8) | 通道 3 电机驱动输出,直连电机两端 |
| 四路电机输出端子 | OUT7/OUT8(CN9) | 通道 4 电机驱动输出,直连电机两端 |
| 通用控制逻辑 - 正转 | INx 高 / INy 低,对应 OUTx 正极、OUTy 负极 | |
| 通用控制逻辑 - 反转 | INx 低 / INy 高,对应 OUTx 负极、OUTy 正极 | |
| 通用控制逻辑 - 刹车模式 | INx 高 / INy 高,对应通道两路输出短接能耗制动 | |
| 通用控制逻辑 - 自由滑行 | INx 低 / INy 低,电机断电无驱动,惯性滑行 | |
| 调速实现方式 | 向 IN1~IN8 输入 PWM 信号,通过调整占空比调节电机转速 | |
| 包装方案 | 可选包装 | ①防静电袋软包 ②白卡挂孔盒 ③牛皮纸盒 |





//DEMO1:四路电机正反转演示程序
#define IN1 2
#define IN2 3
#define IN3 4
#define IN4 5
#define IN5 6
#define IN6 7
#define IN7 8
#define IN8 9
void setup() {
for(int i=2;i<=9;i++) pinMode(i,OUTPUT);
}
void loop() {
// 四路电机正转
digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW);
digitalWrite(IN5,HIGH);digitalWrite(IN6,LOW);
digitalWrite(IN7,HIGH);digitalWrite(IN8,LOW);
delay(2000);
// 刹车
digitalWrite(IN1,HIGH);digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);digitalWrite(IN4,HIGH);
digitalWrite(IN5,HIGH);digitalWrite(IN6,HIGH);
digitalWrite(IN7,HIGH);digitalWrite(IN8,HIGH);
delay(1000);
// 四路电机反转
digitalWrite(IN1,LOW);digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);digitalWrite(IN4,HIGH);
digitalWrite(IN5,LOW);digitalWrite(IN6,HIGH);
digitalWrite(IN7,LOW);digitalWrite(IN8,HIGH);
delay(2000);
// 停止滑行
digitalWrite(IN1,LOW);digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);digitalWrite(IN4,LOW);
digitalWrite(IN5,LOW);digitalWrite(IN6,LOW);
digitalWrite(IN7,LOW);digitalWrite(IN8,LOW);
delay(1000);
}
/****DEMO2:四路电机演示:每通道2引脚(DIR方向 + PWM调速)
* DIR数字IO控制转向;PWM引脚调速;串口打印状态
* DIR:HIGH = 正转,LOW = 反转(逻辑可自行调换)
* PWM:analogWrite 输出 0‑255 调速;0 电机停止
* 4 路电机:M1~M4,每一路:DIRx、PWMx
* - M1:DIR1 →2;PWM1 →9
* M2:DIR2 →4;PWM2 →10
* M3:DIR3 →7;PWM3 →11
* M4:DIR4 →8;PWM4 →6
*/
//引脚定义
#define M1_DIR 2
#define M1_PWM 9
#define M2_DIR 4
#define M2_PWM 10
#define M3_DIR 7
#define M3_PWM 11
#define M4_DIR 8
#define M4_PWM 6
//演示计时变量
unsigned long previousMillis = 0;
const long stageTime = 2200; //每个演示阶段维持时间ms
uint8_t demoStage = 0;
//电机状态保存数组
// dir: 1=FWD(HIGH), -1=REV(LOW), 0=停止
// speed:0~255
int motorDir[5] = {0, 1, 1, 1, 1};
int motorSpeed[5]= {0,150,150,150,150};
//电机控制函数
// num:1‑4 ; dir:1正转 -1反转 0停止; speed 0‑255
void motorControl(uint8_t num, int dir, uint8_t speed)
{
uint8_t dirPin, pwmPin;
switch(num)
{
case 1: dirPin=M1_DIR; pwmPin=M1_PWM; break;
case 2: dirPin=M2_DIR; pwmPin=M2_PWM; break;
case 3: dirPin=M3_DIR; pwmPin=M3_PWM; break;
case 4: dirPin=M4_DIR; pwmPin=M4_PWM; break;
default: return;
}
if(dir == 1)
{
digitalWrite(dirPin, HIGH);
}
else if(dir == -1)
{
digitalWrite(dirPin, LOW);
}
// dir=0的时候方向电平保留,PWM置0直接刹车停止
analogWrite(pwmPin, speed);
}
//串口打印全部电机状态
void printAllMotorStatus()
{
for(uint8_t i=1;i<=4;i++)
{
Serial.print("M");
Serial.print(i);
Serial.print(":");
if(motorDir[i]==1 && motorSpeed[i]>0){
Serial.print("FWD ");
}else if(motorDir[i]==-1 && motorSpeed[i]>0){
Serial.print("REV ");
}else{
Serial.print("STOP");
}
Serial.print(" PWM=");
Serial.print(motorSpeed[i]);
if(i<4) Serial.print(" | ");
}
Serial.println();
}
void setup()
{
Serial.begin(9600);
pinMode(M1_DIR,OUTPUT);
pinMode(M1_PWM,OUTPUT);
pinMode(M2_DIR,OUTPUT);
pinMode(M2_PWM,OUTPUT);
pinMode(M3_DIR,OUTPUT);
pinMode(M3_PWM,OUTPUT);
pinMode(M4_DIR,OUTPUT);
pinMode(M4_PWM,OUTPUT);
Serial.println("==== 四路DIR+PWM电机演示启动 ====");
}
void loop()
{
unsigned long now = millis();
//状态切换
if(now - previousMillis >= stageTime)
{
previousMillis = now;
demoStage++;
if(demoStage >=6) demoStage = 0;
switch(demoStage)
{
case 0:
Serial.println("\n[Stage0] All FWD fast");
for(int i=1;i<=4;i++){ motorDir[i]=1; motorSpeed[i]=200; }
break;
case 1:
Serial.println("\n[Stage1] All FWD slow");
for(int i=1;i<=4;i++){ motorDir[i]=1; motorSpeed[i]=70; }
break;
case 2:
Serial.println("\n[Stage2] All STOP");
for(int i=1;i<=4;i++){ motorSpeed[i]=0; }
break;
case 3:
Serial.println("\n[Stage3] All REV fast");
for(int i=1;i<=4;i++){ motorDir[i]=-1; motorSpeed[i]=190; }
break;
case 4:
Serial.println("\n[Stage4] All REV slow");
for(int i=1;i<=4;i++){ motorDir[i]=-1; motorSpeed[i]=65; }
break;
case 5:
Serial.println("\n[Stage5] M1/M2 FWD ; M3/M4 REV");
motorDir[1]=1;motorSpeed[1]=160;
motorDir[2]=1;motorSpeed[2]=160;
motorDir[3]=-1;motorSpeed[3]=140;
motorDir[4]=-1;motorSpeed[4]=140;
break;
}
}
//实时输出控制
for(uint8_t m=1;m<=4;m++)
{
motorControl(m, motorDir[m], motorSpeed[m]);
}
printAllMotorStatus();
delay(120);
}