4-1-3 arduino驱动直流电机(电机专项教程)
- 4-1-3 arduino驱动直流电机
- XY-2.5AD电机控制模块
- 家用直流电源改装成项目制作电源
- 示例程序
- 效果演示
4-1-3 arduino驱动直流电机
Arduino控制直流有刷电机的话,通过H桥电路实现转向控制,以及PWM控制转速
H桥电路实现
1,自己实现,电子元件实现,初学者比较困难
2,使用电机控制模块(无需自己搭建电路,不仅控制电机旋转方向、速度,还能急停、待速等)
有很多电机控制模块,需要先确定自己的电机参数和型号,然后通过电机参数和型号适配电机控制模块
这里使用通用的电机130电机和相匹配的电机控制模块XY-2.5AD电机控制模块
XY-2.5AD电机控制模块
(双H桥模块,可以同时控制两个直流有刷电机)
虽然arduino引脚有5V电压,但不要使用其对电机控制模块供电,功率达不到,要单独给电机控制模块配备独立电源
这里使用3、5、6、9(PWM引脚)控制电机模块
GND要共地
左下角表格,六种旋转方式、两种调速方式
1/PWM表示使用高电平或者PWM信号
共有IN1、2、3、4共四个引脚,不同引脚输出不同信号达到不同效果
首先看第A个电机(通过IN1、IN2两个引脚控制),主要看表格所示
待机,IN1、IN2引脚低电平(若之前转速,则此时慢慢减速停止)
刹车,IN1、IN2引脚高电平(电机旋转时使其突然停止)
若引脚没有连接任何信号等效于引脚低电平
下面讲使用XY-2.5AD电机控制模块控制两个直流有刷电机
家用直流电源改装成项目制作电源
在太极创客搜索电源,有些可以将常见家用直流电源改装成项目制作电源
http://www.taichi-maker.com/?s=%E7%94%B5%E6%BA%90
http://www.taichi-maker.com/homepage/arduino-projects-index/dc-breadboard-power-supply/
示例程序
http://www.taichi-maker.com/homepage/arduino-tutorial-index/arduino-hardware/motor-3/
/* XY-2.5AD-Demo
* 太极创客 www.taichi-maker.com
* 2018-08-02
*
* 通过串行通讯使用XY-2.5AD控制两个DC电机
* 通过digitalWrite HIGH LOW 控制电机运行和停止。
*
* 如果需要获取更多有关XY-2.5AD控制电机的相关知识,请前往太极创客网站
* www.taichi-maker.com
*
* XY-2.5AD 控制电机简介
*
* DC电机 运行状态 IN1 IN2 IN3 IN4
* 电机A 正转(调速) 1/PWM 0
* 电机A 反转(调速) 0 1/PWM
* 空转 0 0
* 刹车 1 1
* 电机B 正转(调速) 1/PWM 0
* 电机B 反转(调速) 0 1/PWM
* 空转 0 0
* 刹车 1 1
* This example code is in the public domain.
*/
// XY-2.5AD 连接Arduino引脚编号
int IN1 = 3;
int IN2 = 5;
int IN3 = 6;
int IN4 = 9;
int pinNum; // 控制引脚号
int ctrlVal; // 电机运行控制
void setup() {
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
Serial.begin(9600);
Serial.println("++++++++++++++++++++++++++++++");
Serial.println("+ Taichi-Maker XY-2.5AD Demo +");
Serial.println("+ www.taichi-maker.com +");
Serial.println("++++++++++++++++++++++++++++++");
}
void loop() {
if (Serial.available()) { // 检查串口缓存是否有数据等待传输
char cmd = Serial.read(); // 获取电机指令中电机编号信息
switch(cmd){
case 'p': // 设置引脚编号
pinNum = Serial.parseInt();
Serial.print("Pin Number ");
Serial.print(pinNum);
Serial.print(" ,");
break;
case 'a': // 模拟模式控制电机
ctrlVal = Serial.parseInt();
analogWrite(pinNum, ctrlVal);
Serial.print("Set Value ");
Serial.print(ctrlVal);
Serial.println(".");
break;
case 'd': // 数字模式控制电机
ctrlVal = Serial.parseInt();
digitalWrite(pinNum, ctrlVal);
Serial.print("Set Value ");
Serial.print(ctrlVal);
Serial.println(".");
break;
default: // 未知指令
Serial.println("Unknown Command");
break;
}
}
}
效果演示
此实验通过向串口监视器输入控制arduino串口指令,控制电机
输入指令如下(引脚设置高低电平):
使得3号引脚高电平,5号引脚低电平(让电机A正传以最大速度)
输入指令如下时(引脚设置PWM信号)
使得6号引脚PWM信号200,5号引脚低电平(让电机A正传以PWM200)
旋转速度不是最大速度()
硬件如下:
可以看到A最快速度正向转
B以200速度正向旋转
B速度变慢
A轮立即停止
B反向快速旋转
B轮慢慢停下来