失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > arduino步進電機_Arduino电机驱动器说明

arduino步進電機_Arduino电机驱动器说明

时间:2018-12-01 03:59:10

相关推荐

arduino步進電機_Arduino电机驱动器说明

一、概述

电机驱动器分两个不同的版本:

注:以下有些是老版图片,新版布局有所调整。

示例代码下载:点击下载

这是基于Arduino开发运动机器人非常完美的解决方案,这款电机驱动器足够强大,可以驱动4个直流电机或2个步进电机,并且额外提供4路全速PWM控制,可以控制4路舵机。支持PS2无线手柄,充分发挥PS2手柄的强大功能。

最大限度的减少Arduino引脚的占用,所以使用基于I2C通讯的专用PWM驱动芯片(PCA9685)控制电机的速度和方向。只用2根GPIO引脚(SDA&SCL)就可以驱动多个电机,也可以多个驱动器叠加使用(可级联),并且不干扰其他I2C设备的使用。

支持蓝牙,实现蓝牙通信

支持超声波传感器,可以轻松对接智能小车或者其他电机控制的应用。

新版电机驱动器:

参数说明:

使用东芝高性能驱动芯片,提供每路2.2A(3.6A峰值)输出,可运行4.5-13.5V直流电机;

可以驱动4个直流电机或2个步进电机;

额外提供8路PWM输出,可以控制8路舵机;

支持PS2无线手柄;

支持蓝牙模块和超声波传感器;

可自定义I2C地址,支持多个驱动器叠加级联;

提供完整的代码库和丰富示例程序,支持图形编程,简单易用。

大功率电机驱动器:

参数说明:

左侧使用TB6612芯片组,提供每路1.2A(3A峰值)输出,可运行4.5-13.5V直流电机;

右侧使用汽车大电流电机驱动芯片,提供每路14A(30A峰值)输出,可运行5.5-24V直流电机;

可以驱动4个直流电机,前进和后退,提供PWM调速;

额外提供4路PWM输出,可以控制4路舵机;

支持PS2无线手柄;

支持蓝牙模块和超声波传感器;

可自定义I2C地址,支持多个驱动器叠加级联;

提供完整的代码库和丰富示例程序,支持图形编程,简单易用。

二、PS2无线手柄连接

PS2手柄为非热插拔,在实际项目用,需要编写重连检测,如无法找到设备,请重启Arduino控制器。

*手柄一段时间不操作会自动休眠,按start或analog唤醒。

三、电源说明

驱动器设计了不同颜色的跳线,通过跳线帽可以提供多种供电方案。

四、软件代码讲解

我们提供Arduino类库和相关示例代码。含两组类库文件:PS2X_Lib和Motor_Shield_Library examples目录下的示例。

*如果提示没有找到类库,请配置相关的库文件,或者直接拷贝列库文件到当前项目目录下。

1、控制直流电机(DC motor)

a)连接电机

驱动器有4组电机接线柱分别为M1,M2,M3, 和M4。

注意:请仔细查看电机参数,电机尺寸过大(功率太大)会使驱动器超负荷,导致驱动器损坏。(实测370电机可用)

b)直流电机(DC motor) 示例详解

#include

#include "Adafruit_MotorShield.h"

#include "utility/Adafruit_MS_PWMServoDriver.h"

// Create the motor shield object with the default I2C address

Adafruit_MotorShield AFMS = Adafruit_MotorShield();

// Select which 'port' M1, M2, M3 or M4. In this case, M1

Adafruit_DCMotor *myMotor = AFMS.getMotor(3);

void setup() {

AFMS.begin(); // create with the default frequency 1.6KHz

// Set the speed to start, from 0 (off) to 255 (max speed)

myMotor->setSpeed(150);

myMotor->run(FORWARD);

// turn on motor

myMotor->run(RELEASE);

}

void loop() {

myMotor->run(FORWARD);

myMotor->setSpeed(150);

delay(3000);

myMotor->run(RELEASE);

myMotor->run(BACKWARD);

myMotor->setSpeed(180);

delay(2000);

myMotor->run(RELEASE);

delay(1000);

}

创建一个MotorShield对象:

Adafruit_MotorShield AFMS = Adafruit_MotorShield();

从MotorShield创建DCMotor对象,对应M3端口的电机:

Adafruit_DCMotor *myMotor = AFMS.getMotor(3);

getMotor(port#)

port#:1~4,对应M1~M4接线柱

在setup()函数里加入初始化代码:

AFMS.begin();

设置电机速度:

myMotor->setSpeed(100);

setSpeed(speed)

speed:0 (stopped) ~255 (full speed).

启动电机(正转、反转、停止)

myMotor->run(FORWARD);

run(direction)

direction:FORWARD,BACKWARDorRELEASE.

*注:电机旋转方向跟接线有关,如果转向不正确,请对调电机正负极接线柱。

2、使用步进电机(Stepper Motors)

a)驱动板可以同时接2个步进电机,单极和双极都适用。

b)连接电机

上图中左为双极驱动Bipolar stepper motors(4线),右为单极驱动Unipolar Stepper Motor(6线)

单极驱动Unipolar Stepper Motor(6线):首先需要知道哪根线是中心线,然后将中心线都接到接线柱的GND(右图白色和黄色),剩下的两组端线(黑和绿,红和蓝)分别接到M1、M2或M3、M4。

双极驱动Bipolar stepper motors(4线):跟单极驱动类似,GND留空不接就可以。

C)步进电机(Stepper motor)控制示例详解

#include

#include

#include "utility/Adafruit_MS_PWMServoDriver.h"

// Create the motor shield object with the default I2C address

Adafruit_MotorShield AFMS = Adafruit_MotorShield(); ;

// Connect a stepper motor with 200 steps per revolution (1.8 degree)

// to motor port #2 (M3 and M4)

Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2);

void setup() {

AFMS.begin(); // create with the default frequency 1.6KHz

myMotor->setSpeed(10); // 10 rpm

}

void loop() {

//Single coil steps

myMotor->step(100, FORWARD, SINGLE);

myMotor->step(100, BACKWARD, SINGLE);

//Double coil steps

myMotor->step(100, FORWARD, DOUBLE);

myMotor->step(100, BACKWARD, DOUBLE);

//Interleave coil steps

myMotor->step(100, FORWARD, INTERLEAVE);

myMotor->step(100, BACKWARD, INTERLEAVE);

//Microstep steps

myMotor->step(50, FORWARD, MICROSTEP);

myMotor->step(50, BACKWARD, MICROSTEP);

}

创建一个MotorShield对象:

Adafruit_MotorShield AFMS = Adafruit_MotorShield();

从MotorShield创建StepperMotor对象:

Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2);

getStepper(steps, stepper#)

steps:每转步数,建议35~200之间

stepper#:1~2, M1、M2为1,M3、M4 为2

设置旋转速度:

setSpeed(rpm):每分钟旋转速度

运转电机:

step(#steps, direction, steptype)

#steps:步数

direction:FORWARD or BACKWARD

steptype:SINGLE, DOUBLE, INTERLEAVEorMICROSTEP

*关于步进电机工作特性请参考网上资料。

3、舵机控制(Servo)

驱动板的舵机控制通过PWM专用芯片PCA9685实现,对应的编号分别为0,1,14,15。由于市面上普通舵机通常只支持50Hz的信号。

驱动器内嵌稳压电路,可以输出5V,3A的电流给舵机供电。尽量比较舵机堵转或超负荷,以免影响系统稳定性或损坏舵机。

注意:对于大功率的舵机(电源要求超过5V3A),请拔掉红色跳线帽,再使用跟舵机匹配的电源通过“舵机辅助电源”接口独立供电。

在驱动板右上角有2个传感器接口,可以插三线传感器,也可以插舵机。此接口对应Arduino D5,D6引脚。

舵机代码解析(非完整代码,请勿直接拷贝)

//获取舵机 1、2、3、4分别对应机械臂底部、左边、右边、爪子

Adafruit_Servo *Servo1 = AFMS.getServo(1);

Adafruit_Servo *Servo2 = AFMS.getServo(2);

Adafruit_Servo *Servo3 = AFMS.getServo(3);

Adafruit_Servo *Servo4 = AFMS.getServo(4);

Servo1->writeServo(90);//1#舵机旋转到90度位置

Servo2->writeServo(90);

Servo3->writeServo(90);

Servo4->writeServo(60);

int deg=Servo1->readDegrees()//读取1#舵机当前角度

4、无线手柄控制

无线手柄代码解析(非完整代码,请勿直接拷贝)

//导入库文件

#include "PS2X_lib.h"

//定义ps2手柄

PS2X ps2x;

int error;

void setup() {

//配对接收器

do {

error = ps2x.config_gamepad(13, 11, 10, 12, true, true);

if (error == 0) { break; }

else { delay(100); }

} while (1);

}

void loop(){

ps2x.read_gamepad(false, 0);//读入手柄状态信息

//键位码请看上面对应图

if (ps2x.Button(PSB_PAD_UP)) {}//如果“上”按钮按下

if (ps2x.Analog(PSS_RY) > 240) {}//如果摇杆RY返回值大于240

delay(10);//延迟10ms

}

五、叠加级联

每个驱动器需要设置唯一的I2C地址,默认地址是0x60。地址范围从0x60~0x63总共4个地址。

驱动板上有A0,A1总共2个跳线,焊接不同的跳线可以设置不同的地址。规则如下

Board 0: Address = 0x60 Offset = binary 0000 (默认全部为空)

Board 1: Address = 0x61 Offset = binary 0001 (只焊接A0)

Board 2: Address = 0x62 Offset = binary 0010 (只焊接A1)

Board 3: Address = 0x63 Offset = binary 0011 (同时焊接A0 & A1)

六、原理图

七、演示作品

驱动器示例代码下载:点击下载

如果觉得《arduino步進電機_Arduino电机驱动器说明》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。