Arduino MotorShiled电机驱动器说明

《Arduino MotorShiled图形化编程》

访问基于Mixly的图形化编程,请访问以上链接

一、概述

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

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

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

Arduino MotorShiled电机驱动器说明
V5.0版电机驱动器

参数说明:

  • 使用东芝高性能驱动芯片,提供每路2.2A(3.6A峰值)输出,可运行4.5-13.5V直流电机;
  • 可以驱动4个直流电机或2个步进电机;
  • 额外提供8路PWM输出,可以控制8路舵机;
  • 支持PS2无线手柄;
  • 支持蓝牙模块和超声波传感器;
  • 可自定义I2C地址,支持多个驱动器叠加级联;
  • 提供完整的代码库和丰富示例程序,支持图形编程,简单易用。

大功率电机驱动版V4.0

Arduino MotorShiled电机驱动器说明
  • 左侧使用TB6612芯片组,提供每路1.2A(3A峰值)输出,可运行4.5-13.5V直流电机;
  • 右侧使用汽车大电流电机驱动芯片,提供每路14A(30A峰值)输出,可运行5.5-24V直流电机;
  • 可以驱动4个直流电机,前进和后退,提供PWM调速;
  • 额外提供4路PWM输出,可以控制4路舵机;
  • 支持PS2无线手柄;
  • 支持蓝牙模块和超声波传感器;
  • 可自定义I2C地址,支持多个驱动器叠加级联;
  • 提供完整的代码库和丰富示例程序,支持图形编程,简单易用。

二、接口与接线

Arduino MotorShiled电机驱动器说明
V5.0版接口示意图

1、PS2无线手柄连接

驱动器内置PS2接收器插座,将接收器直接插入使用。

Arduino MotorShiled电机驱动器说明

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

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

三、电源说明

电源供电方案选择

Arduino MotorShiled电机驱动器说明

单电源供电特性:

  • 单电源可同时为驱动器和开发板供电
  • 板载内嵌5V稳压器,可为舵机端口提供5V3A电源。
  • 电源输出功率(放电电流)要够大,否则会影响稳定性
Arduino MotorShiled电机驱动器说明

舵机独立供电

当需要接入多个舵机或大功率舵机的时候,请选择此方案供电

  • 先拔掉左上角跳线帽,断开板载电源
  • 接上跟舵机匹配电压匹配的电源,注意匹配参数,大多数舵机耐压是5-6V,电压太高会使舵机烧毁
Arduino MotorShiled电机驱动器说明

开发板独立供电

  • 首先需要拔掉黄色跳线帽,断开主电源与开发板的供电线路
  • 分别给主电源和底下开发板电源端口供电
  • 此方案将逻辑部分和动力部分电压分离,可增加系统稳定性和安全性
  • 主电源功率不够,推荐此方案

电源选择

电机驱动器主电源适用电压6-12V,需要跟接的电机匹配。电源的选择很重要,供电不足会使系统工作不稳定。推荐使用动力型电池。动力电池具有更大的放电电流,瞬间输出功率更强。

四、软件程序库详解

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

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

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

a)连接电机

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

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

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

#include <Wire.h>
#include "QGPMaker_MotorShield.h"

// Create the motor shield object with the default I2C address
QGPMaker_MotorShield AFMS = QGPMaker_MotorShield();

// Select which 'port' M1, M2, M3 or M4. In this case, M3
QGPMaker_DCMotor *DCMotor_3 = AFMS.getMotor(3);

void setup(){
  AFMS.begin(50); // create with the default frequency 50Hz
}

void loop(){
  DCMotor_3->setSpeed(200);
  DCMotor_3->run(FORWARD);
  delay(3000);
  DCMotor_3->setSpeed(0);
  DCMotor_3->run(RELEASE);
  delay(2000);
  DCMotor_3->setSpeed(200);
  DCMotor_3->run(BACKWARD);
  delay(3000);
  DCMotor_3->setSpeed(0);
  DCMotor_3->run(RELEASE);
  delay(2000);
}

创建一个MotorShield对象:

QGPMaker_MotorShield AFMS = QGPMaker_MotorShield();

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

QGPMaker_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(正转), BACKWARD(反转) ,BRAKE (刹车急停)or RELEASE(关闭电机).

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

BRAKERELEASE的区别:V5.0版本新增了BRAKE选项,原理上是通过短接电机的正负极,实现有限的电机急停功能,对于大功率电机,慎用此选项,可能会损坏电机驱动芯片。RELEASE是断开电机电源,实现电机的自然停止(带惯性停止)。

2、舵机控制(Servo)

驱动板的舵机控制通过PWM专用芯片PCA9685实现,对应的编号分别为0-7接口。

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

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

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

舵机代码解析(代码需要导入库文件)

#include <Wire.h>
#include "QGPMaker_MotorShield.h"

QGPMaker_MotorShield AFMS = QGPMaker_MotorShield(); //创建驱动器对象
QGPMaker_Servo *Servo3 = AFMS.getServo(3); //获取3号舵机

void setup(){
  AFMS.begin(50);
}

void loop(){
  Servo3->writeServo(10); //3#舵机转到10度位置
  delay(1000);
  Servo3->writeServo(120); //3#舵机转到120度位置
  delay(1000);

  int deg=Servo3->readDegrees();//读取3#舵机当前角度
}

3、编码器电机

a)编码器电机接线

Arduino MotorShiled电机驱动器说明

b)AB相正交编码器简单介绍

AB相编码器通过2个传感器检测90度的异相波形,用正交编码计算电机的移动变化。基本原理图下图所示:

Arduino MotorShiled电机驱动器说明

c)编码器库文件和示例说明

编码器库采用AB相4倍频算法:比如编码器磁环基础脉冲数是12(PPR),则连接磁环的电机转动一圈得到的脉冲数是12*4=48。如果减速电机齿数比是1:90,则轮子旋转一周的脉冲数(CPR)=12(PPR)*4*90(齿数比)=4320。

编码器库的基本用法

导入编码器库文件

#include "QGPMaker_Encoder.h"

创建3号编码器

QGPMaker_Encoder  encoder3(3); //对应M3电机口

获取编码器数值

int32_t position3= encoder3.read(); //读取3号编码器的数值

写入编码器数值(初始值),一般用于校准或者清零复位

encoder3.write(0); //编码器设置为0

#include <Wire.h>
#include "QGPMaker_MotorShield.h"
#include "QGPMaker_Encoder.h"

QGPMaker_MotorShield AFMS = QGPMaker_MotorShield();
QGPMaker_DCMotor *DCMotor_3 = AFMS.getMotor(3);
QGPMaker_Encoder Encoder3(3); //创建3号编码器(对于M3电机)

void setup(){
  AFMS.begin(50);
  Serial.begin(9600);

  DCMotor_3->setSpeed(200);
  DCMotor_3->run(FORWARD); //启动电机
}

void loop(){
  Serial.println(Encoder3.read()); //输出编码器数值
}

4、步进电机(更新中…)

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

b)连接电机

Arduino MotorShiled电机驱动器说明

上图中左为双极驱动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)控制示例详解

5、无线手柄控制

Arduino MotorShiled电机驱动器说明

非完整代码,请勿直接复制编译

//导入库文件 
#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 
}

6、电子开关/继电器控制

a)接线

将电子开关、继电器或者相关模块控制端接到舵机接口对应的PWM引脚。

Arduino MotorShiled电机驱动器说明

b)程序示例说明

#include <Wire.h>
#include "QGPMaker_MotorShield.h"

QGPMaker_MotorShield AFMS = QGPMaker_MotorShield();

void setup(){
  AFMS.begin(50);
}

void loop(){
  AFMS.setPin(2,HIGH); //2#舵机口输出高电平(电子开关打开)
  AFMS.setPWM(3,4000); //3#舵机口输出PWM值4000(可作为PWM控制,电机调速,LED亮度调节等)
}
  • PWM输出,可作为PWM控制,电机调速,LED亮度调节等:

AFMS.setPWM(n,pwm);

n:0~7 对应舵机端口的0~7号端口

pwm:取值范围(0~4096)

  • 开关量输出,可以用于控制电子开关或者继电器等

AFMS.setPin(n,HIGH/LOW);

n:0~7 对应舵机端口的0~7号端口

HIGH/LOW:HIGH或LOW 输出高低电平

7、无刷电机控制(待完善)

五、原理图

Arduino MotorShiled电机驱动器说明
V5.0版电机驱动器原理图

六、演示作品和示例代码

1、4WD小车

2、麦克纳姆轮小车


原创文章,作者:奇果派工坊,如若转载,请注明出处:https://www.7gp.cn/archives/308