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 "Adafruit_MotorShield.h"
#include "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, BACKWARD or RELEASE.

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

2、舵机控制(Servo)

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

驱动器内嵌稳压电路,可以输出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#舵机当前角度

3、编码器电机(更新中…)

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、电子开关/继电器控制(待完善)

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

五、原理图

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

六、演示作品和示例代码

1、4WD小车

2、麦克纳姆轮小车


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