SKU:RB-01C107A MotorDriver Shield

来自ALSROBOT WiKi
2016年11月17日 (四) 15:41Arduino77讨论 | 贡献的版本

跳转至: 导航搜索
RB01C115010.png

目录

产品概述

MotorDriver Shield 是基于 L298 的双路全桥电机驱动板。可以驱动电机、四线两相步进电机、舵机,外观是 Arduino 盾板,排座设计,Arduino 控制器连接电机驱动板的同时,不影响传感器扩展板的连接,板载串行、IIC等常用通信接口,电机转向指示灯,解决 Arduino UNO 控制器 IO 接口驱动能力弱,不能直接驱动电机或大扭力舵机的问题,MotorDriver Shield 的 Arduino 控制器引出 IO 最大输出的电流可达3A,再与传感器 V5.0 组合最多可同时驱动 10 个65CS 舵机。电机及外部供电接口采用防插反接头,避免由于接线错误造成的产品损坏。

规格参数

  1. 产品货号:RB - 01C115
  2. 电机驱动芯片:L298P
  3. 外部供电范围:7V - 35V
  4. 逻辑电压:5V
  5. 外形特点:Arduino UNO 盾板
  6. 外形尺寸:6.68.5mm * 56mm
  7. 接口类型:直插、KF2510
  8. 扩展接口
  • 电机接口 * 2 个
  • 外部供电接口 * 1 个
  • UART 接口 * 1 个
  • IIC 接口 * 1 个
  • 数字接口 * 14 个
  • 模拟接口 * 6 个
  1. 电源指示灯:红色
  2. 电机转向指示灯:4 个(红色 * 2 个,绿色 * 2 个)
  3. 产品重量:25g

接口示意图

RB01C11502.png
  • 接口说明:
RB01C11503.png

(1)Vin 接口
当外部供电范围在 7V - 12V 之间时,将此处连接,Arduino UNO 可以直接从电机驱动板上取电,默认为连接状态。
当外部供电范围在 12V - 35V 之间时,需要将 Vin 断开,Arduino UNO 控制器需要单独供电,不能从电机驱动板上取电。
当 Arduino UNO 控制器使用 DC 接口供电 7V - 12V 之间时,将此处连接,电机驱动板可以直接从 Arduino UNO 控制器上取电。

(2)SNS0、SNS1 接口
将两组排针分别连接时,A0、A1 接口会被占用,分别读取 L298 的输出电流。
将两组排针分别断开时,A0 、 A1 不会被占用。






使用方法

驱动两路电机

  • 实验硬件
  1. 直流减速电机 * 2个
  2. Arduino UNO 控制器 * 1个
  3. 7.4V 1200mAh 锂电池 * 1个
  4. Arduino 程序下载线 * 1条
  • 实物连接图
RB01C11504.png
  • 例子程序
#define PWA 3
#define PWB 11
#define DIRA 12
#define DIRB 13
#define BRAKEA 9
#define BRAKEB 8                 
void setup(){
  Serial.begin(9600);           
  pinMode(PWA,OUTPUT);
  pinMode(PWB,OUTPUT);
  pinMode(DIRA,OUTPUT);
  pinMode(DIRB,OUTPUT);
  pinMode(BRAKEA,OUTPUT);
  pinMode(BRAKEB,OUTPUT);
}

void loop(){
  head();
  delay(3000);
  back();
  delay(3000);
  left();
  delay(3000);
  right();
  delay(3000);
  breaka();
  delay(3000);
  stopt();
  delay(3000);
}

void head(){
  analogWrite(PWA,180);
  analogWrite(PWB,180);
  digitalWrite(DIRA,HIGH);
  digitalWrite(BRAKEA,LOW);
  digitalWrite(DIRB,HIGH);
  digitalWrite(BRAKEB,LOW);
}

void back(){
  analogWrite(PWA,180);
  analogWrite(PWB,180);
  digitalWrite(DIRA,LOW);
  digitalWrite(BRAKEA,LOW);
  digitalWrite(DIRB,LOW);
  digitalWrite(BRAKEB,LOW);
}

void left(){
  analogWrite(PWA,180);
  analogWrite(PWB,180);
  digitalWrite(DIRA,HIGH);
  digitalWrite(BRAKEA,LOW);
  digitalWrite(DIRB,LOW);
  digitalWrite(BRAKEB,LOW);
}

void right(){
  analogWrite(PWA,180);
  analogWrite(PWB,180);
  digitalWrite(DIRA,LOW);
  digitalWrite(BRAKEA,LOW);
  digitalWrite(DIRB,HIGH);
  digitalWrite(BRAKEB,LOW);
}

void breaka(){
  analogWrite(PWA,180);
  analogWrite(PWB,180);
  digitalWrite(DIRA,HIGH);
  digitalWrite(BRAKEA,HIGH);
  digitalWrite(DIRB,HIGH);
  digitalWrite(BRAKEB,HIGH);
}

void stopt(){
  analogWrite(PWA,0);
  analogWrite(PWB,0);
  digitalWrite(DIRA,LOW);
  digitalWrite(BRAKEA,HIGH);
  digitalWrite(DIRB,LOW);
  digitalWrite(BRAKEB,HIGH);
}
  • 程序效果

连接在A口和B口电机以下面的顺序运动

  • A口电机顺时针、B口电机逆时针
  • A口电机逆时针、B口电机顺时针
  • A口、B口电机顺时针
  • A口、B口电机顺时针
  • A口、B口电机制动 - 电机指示灯全部亮起
  • A口、B口电机停止 - 电机指示灯全部熄灭

驱动舵机

  • 准备硬件
  1. 金属齿舵机 * 1个
  2. Arduino UNO 控制器 * 1个
  3. 7.4V 1200mAh 锂电池 * 1个
  4. Arduino 程序下载线 * 1条
  • 硬件连接
RB01C11505.png
  • 例子程序
#include <Servo.h> 
 
Servo myservo;  
 
int pos = 0;   
 
void setup() 
{ 
  myservo.attach(10);  
} 
 
void loop() 
{ 
  for(pos = 0; pos <= 180; pos += 1)  
  {                                 
    myservo.write(pos);            
    delay(15);                    
  } 
  for(pos = 180; pos>=0; pos-=1)  
  {                                
    myservo.write(pos);           
    delay(15);                   
  } 
} 
  • 程序效果

连接在 D10 引脚的舵机,从0度开始顺时针旋转180度,然后再逆时针旋转180度,循环执行。

UART 接口测试

  • 准备硬件
  1. LCD1602 串行液晶 * 1个
  2. Arduino UNO 控制器 * 1个
  3. 7.4V 1200mAh 锂电池 * 1个
  4. Arduino 程序下载线 * 1条
  5. 4P 传感器连接线 * 1个
  • 硬件连接

注意接线时,串行液晶的TX,连接控制器的RX;串行液晶RX,连接控制器TX

RB01C11506.png
  • 例子程序

注意:程序上传时,不能连接 LCD1602 串行液晶

void setup()
{ 
Serial.begin(9600);                //设置波特率为 9600 
Serial.print("$CLEAR\r\n");            //清屏 
}
void loop()
{ 
Serial.print("$GO 1 4\r\n");             //显示的地址为第 1 行第 4 列 
Serial.print("$PRINT Welcome to\r\n"); //打印字符 Welcome to 
Serial.print("$GO 2 1\r\n");            //显示的地址为第 2 行第 1 列 
Serial.print("$PRINT www.robotbase.cn\r\n");//打印字符 www.robotbase.cn 
}
  • 程序效果

将程序上传至 UNO 控制器后,连接电机驱动板和串行液晶,液晶第一行显示"Welcome to",第二行显示"www.robotbase.cn"

IIC 接口测试

  • 准备硬件
  1. 4 - Digital Display * 1个
  2. Arduino UNO 控制器 * 1个
  3. 7.4V 1200mAh 锂电池 * 1个
  4. Arduino 程序下载线 * 1条
  5. 4P 传感器连接线 * 1个
  • 硬件连接
RB01C11507.png
  • 例子程序
#include <EEPROM.h>
#include <TimerOne.h>
#include <avr/pgmspace.h>
#include "TM1637.h"
#define ON 1
#define OFF 0

int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
unsigned char ClockPoint = 1;
unsigned char Update;
unsigned char microsecond_10 = 0;
unsigned char second;
unsigned char _microsecond_10 = 0;
unsigned char _second;
unsigned int eepromaddr;
boolean Flag_ReadTime;

#define CLK A5     
#define DIO A4
TM1637 tm1637(CLK,DIO);

void setup()
{
  Serial.begin(9600);
  tm1637.set(BRIGHT_TYPICAL);
  tm1637.init();
  Timer1.initialize(10000);
  Timer1.attachInterrupt(TimingISR);
  Serial.println("Please send command to control the stopwatch:");
  Serial.println("S - start");
  Serial.println("P - pause");
  Serial.println("L - list the time");
  Serial.println("W - write the time to EEPROM ");
  Serial.println("R - reset");
}
void loop()
{
  char command;
  command = Serial.read();
  switch(command)
  {
    case 'S':stopwatchStart();Serial.println("Start timing...");break;
    case 'P':stopwatchPause();Serial.println("Stopwatch was paused");break;
    case 'L':readTime();break;
    case 'W':saveTime();Serial.println("Save the time");break;
    case 'R':stopwatchReset();Serial.println("Stopwatch was reset");break;
    default:break;
  }
  if(Update == ON)
  {
    TimeUpdate();
    tm1637.display(TimeDisp);
  }
}

void TimingISR()
{
  microsecond_10 ++;
  Update = ON;
  if(microsecond_10 == 100){
    second ++;
    if(second == 60)
    {
      second = 0;
    }
    microsecond_10 = 0;  
  }
  ClockPoint = (~ClockPoint) & 0x01;
  if(Flag_ReadTime == 0)
  {
    _microsecond_10 = microsecond_10;
    _second = second;
  }
}
void TimeUpdate(void)
{
  if(ClockPoint)tm1637.point(POINT_ON);
  else tm1637.point(POINT_ON); 
  TimeDisp[2] = _microsecond_10 / 10;
  TimeDisp[3] = _microsecond_10 % 10;
  TimeDisp[0] = _second / 10;
  TimeDisp[1] = _second % 10;
  Update = OFF;
}
void stopwatchStart()//timer1 on
{
  Flag_ReadTime = 0;
  TCCR1B |= Timer1.clockSelectBits; 
}
void stopwatchPause()
{
  TCCR1B &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12));
}
void stopwatchReset()
{
  stopwatchPause();
  Flag_ReadTime = 0;
  _microsecond_10 = 0;
  _second = 0;
  microsecond_10 = 0;
  second = 0;
  Update = ON;
}
void saveTime()
{
  EEPROM.write(eepromaddr ++,microsecond_10);
  EEPROM.write(eepromaddr ++,second);
}
void readTime()
{
  Flag_ReadTime = 1;
  if(eepromaddr == 0)
  {
    Serial.println("The time had been read");
    _microsecond_10 = 0;
    _second = 0;
  }
  else{
  _second = EEPROM.read(-- eepromaddr);
  _microsecond_10 = EEPROM.read(-- eepromaddr);
  Serial.println("List the time");
  }
  Update = ON;
}
  • 程序效果

程序上传后,数码管显示模块开始计时,最大计时时间1分钟,1分钟后,清零,重新再计时。

产品相关推荐

Erweima.png

产品购买地址