查看SKU:RB-01C107A MotorDriver Shield的源代码
←
SKU:RB-01C107A MotorDriver Shield
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
[[文件:RB01C115010.png|500px|缩略图|右]] ==产品概述== MotorDriver Shield 是基于 L298 的双路全桥电机驱动板。可以驱动电机、四线两相步进电机、舵机,外观是 Arduino 盾板,排座设计,Arduino 控制器连接电机驱动板的同时,不影响传感器扩展板的连接,板载串行、IIC等常用通信接口,电机转向指示灯,解决 Arduino UNO 控制器 IO 接口驱动能力弱,不能直接驱动电机或大扭力舵机的问题,MotorDriver Shield 的 Arduino 控制器引出 IO 最大输出的电流可达3A,再与传感器 V5.0 组合最多可同时驱动 10 个65CS 舵机。电机及外部供电接口采用防插反接头,避免由于接线错误造成的产品损坏。 ==规格参数== # 产品货号:RB - 01C115 # 电机驱动芯片:L298P # 外部供电范围:7V - 35V # 逻辑电压:5V # 外形特点:Arduino UNO 盾板 # 外形尺寸:6.68.5mm * 56mm # 接口类型:直插、KF2510 # 扩展接口 * 电机接口 * 2 个 * 外部供电接口 * 1 个 * UART 接口 * 1 个 * IIC 接口 * 1 个 * 数字接口 * 14 个 * 模拟接口 * 6 个 # 电源指示灯:红色 # 电机转向指示灯:4 个(红色 * 2 个,绿色 * 2 个) # 产品重量:25g ==接口示意图== [[文件:RB01C11502.png|700px|缩略图|居中]] * 接口说明: [[文件:RB01C11503.png|300px|缩略图|左]] (1)Vin 接口<br/> 当外部供电范围在 7V - 12V 之间时,将此处连接,Arduino UNO 可以直接从电机驱动板上取电,默认为连接状态。<br/> 当外部供电范围在 12V - 35V 之间时,需要将 Vin 断开,Arduino UNO 控制器需要单独供电,不能从电机驱动板上取电。<br/> 当 Arduino UNO 控制器使用 DC 接口供电 7V - 12V 之间时,将此处连接,电机驱动板可以直接从 Arduino UNO 控制器上取电。<br/> (2)SNS0、SNS1 接口<br/> 将两组排针分别连接时,A0、A1 接口会被占用,分别读取 L298 的输出电流。<br/> 将两组排针分别断开时,A0 、 A1 不会被占用。<br/> <br/> <br/> <br/><br/><br/> ==使用方法== ===驱动两路电机=== * 实验硬件 # 直流减速电机 * 2个 # Arduino UNO 控制器 * 1个 # 7.4V 1200mAh 锂电池 * 1个 # Arduino 程序下载线 * 1条 * 实物连接图 [[文件:RB01C11504.png|600px|缩略图|居中]] * 例子程序 <pre style='color:blue'>#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); }</pre> * 程序效果 连接在A口和B口电机以下面的顺序运动 * A口电机顺时针、B口电机逆时针 * A口电机逆时针、B口电机顺时针 * A口、B口电机顺时针 * A口、B口电机顺时针 * A口、B口电机制动 - 电机指示灯全部亮起 * A口、B口电机停止 - 电机指示灯全部熄灭 ===驱动舵机=== * 准备硬件 # 金属齿舵机 * 1个 # Arduino UNO 控制器 * 1个 # 7.4V 1200mAh 锂电池 * 1个 # Arduino 程序下载线 * 1条 * 硬件连接 [[文件:RB01C11505.png|600px|缩略图|居中]] * 例子程序 <pre style='color:blue'>#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); } } </pre> * 程序效果 连接在 D10 引脚的舵机,从0度开始顺时针旋转180度,然后再逆时针旋转180度,循环执行。 ===UART 接口测试=== * 准备硬件 # LCD1602 串行液晶 * 1个 # Arduino UNO 控制器 * 1个 # 7.4V 1200mAh 锂电池 * 1个 # Arduino 程序下载线 * 1条 # 4P 传感器连接线 * 1个 * 硬件连接 注意接线时,串行液晶的TX,连接控制器的RX;串行液晶RX,连接控制器TX [[文件:RB01C11506.png|600px|缩略图|居中]] * 例子程序 注意:程序上传时,不能连接 LCD1602 串行液晶 <pre style='color:blue'>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 }</pre> * 程序效果 将程序上传至 UNO 控制器后,连接电机驱动板和串行液晶,液晶第一行显示"Welcome to",第二行显示"www.robotbase.cn" ===IIC 接口测试=== * 准备硬件 # 4 - Digital Display * 1个 # Arduino UNO 控制器 * 1个 # 7.4V 1200mAh 锂电池 * 1个 # Arduino 程序下载线 * 1条 # 4P 传感器连接线 * 1个 * 硬件连接 [[文件:RB01C11507.png|600px|缩略图|居中]] * 例子程序 <pre style='color:blue'>#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; }</pre> * 程序效果 程序上传后,数码管显示模块开始计时,最大计时时间1分钟,1分钟后,清零,重新再计时。 ==产品相关推荐== [[文件:erweima.png|230px|无框|右]] ===产品购买地址=== * [http://www.alsrobot.com.cn/goods-769.html 多功能电机驱动板]<br/> * [http://pan.baidu.com/s/1eSFS0VK L298 Datasheet]
返回
SKU:RB-01C107A MotorDriver Shield
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面
页面信息