14845浏览
查看: 14845|回复: 6

Makeblock搬运遥控车之夹持器控制

[复制链接]
本帖最后由 Ricky 于 2014-4-19 11:40 编辑

    这次制作的Makeblock搬运车,我想详细写写它的技术说明书。这样一个作品涉及了机械、电子、软件方方面面,内容还不少,另外我做个作品,也不是马上直达目的,而是把作品涉及的各个部分先单独拿出来进行测试,各部分搞定了,再把它们连起来,这样的制作过程思路清晰,不容易出错,而且研制周期也能得到保证。所以这次写文章是按照研制进程,分成一篇篇来写。
一、Makeblock搬运车机械结构
搬运车的机械构架是由金属结构件组建而成,它底盘驱动系统由两个直流电机,四个同步带轮和橡胶履带组成的,以实现前后进退和左右转弯的动作,如图1所示。
Makeblock搬运遥控车之夹持器控制图1
1、搬运遥控车各部分注释图
    为了让搬运遥控车的宽度限制在160mm内,我选用了两个短尺寸的电机并排放置在小车的后轮位置,如图2所示。两个电机由一块MC33886电机双路驱动板驱动。
Makeblock搬运遥控车之夹持器控制图2
2 搬运遥控车底部图
    车身前部安装了直线导轨装置,该装置由两根细长导轨、滑座、若干个小型滚轮以及直流伺服电机和同步传动带组成。位于装置顶部的电机1通过同步带驱动滑座,在滚轮的约束下,相对导轨上下运动。滑座前端固定了一个用于搬运物料块的夹持器,可以跟随滑座一起运动,以实现抬起和放下物料的任务。
    夹持器上具备一个180度标准舵机,舵机的输出轴在0~180度角度范围转动时,可以通过夹持器中的连杆机构,驱使它的爪子夹紧或松开物料。
Makeblock搬运遥控车之夹持器控制图3
3 搬运遥控车全景图
二、Makeblock搬运车电控结构
    搬运车的控制器是基于AVR单片机的 ArduinoMEGA 2560电控板,如图4,它是搬运车的智能核心,不仅能采样传感器提取的外部环境信息,和对信息进行分析处理,而且通过逻辑运算生成驱动器的控制信号,以控制电机的转速和转向。
Makeblock搬运遥控车之夹持器控制图4
4 搬运遥控车电控系统
    看图4,搬运遥控车电控系统采用层叠式结构,叠加了四个电路板,底下一层是Arduino Mega2560控制板,它上面是DFRobotMEGA传感器扩展板,再上面是DFRobot大电流供电稳压扩展板,最上面一层是Xbee传感器扩展板。
    Arduino Mega2560是采用USB接口的核心控制板,处理器核心是ATmega2560,同时具有54路数字输入/输出口(其中16路可作为PWM输出),16路模拟输入,4路TTL串口,其中串口0与内部 ATmega8U2USB-to-TTL 芯片相连,6路外部中断,有IIC、SPI和TWI通信接口。相比 ArduinoUNO,Mega2560运算速度更快、内存更大,接口资源更丰富,就是板子尺寸大些、价格略高。
    从图4看到,有一块用于遥控的Xbee无线数传模块插到了MEGA传感器扩展板的串口1安装插槽里,这样做得好处是当通过USB线下载程序时,不需要拔下这个Xbee模块,因为程序是经过串口0下载的,而Xbee模块占用的是串口1,所以不会出现串口资源冲突的现象。
    对于既有舵机,又有直流电机的作品中,我们已经形成了固定的电源配置套路,25W DC-DC降压模块+大电流供电稳压扩展板的组合。
    具体方法是:车载一块12V 2000mAH锂聚合物电池,采用25W DC-DC降压模块,把12V电压稳压到8.5V,8.5V电压再供给Arduino控制板和直流电机驱动板,Arduino控制板本身有一个小容量稳压芯片会把8.5V稳压到5V,供给控制板逻辑电路。不把锂聚合物电池12V电压直接供给直流电机驱动板的好处是若电池能量消耗一些时,电压会下降,进而导致驱动小车的直流电机力道下降,想用程序延时的方法来控制小车行进距离和转弯角度,这样会不准确。而通过25W DC-DC降压模块,把12V电压稳压到8.5V,这个8.5V电压不太会因电池能量消耗而下降,这样就保证了小车行动控制的精确性。这个模块上还有一个好处,它有自锁按键,可以开启或关闭小车整个电源系统。25W DC-DC降压模块见图7,它位于小车后端直流电机驱动板的上方。
    对于小车上还有其它行动装置,并且采用舵机控制,就要用到大电流供电稳压扩展板,如图6所示,它不是单独分立的模块,而是可以直接叠加到Arduino控制板上,这样不占小车有限的布局空间。这个稳压扩展板再把8.5V稳压到6V,直接供应给舵机,使位于Arduino数字端口的舵机供电电源可以不经过Arduino控制板小容量稳压电路,而使用这个板子的大电流稳压电路。注意若没这个稳压扩展板,用Arduino控制板小容量稳压电路来给标准舵机供电,加上负载后,控制板上的稳压芯片会很烫,以致于烧掉。大电流供电稳压扩展板见图6所示。
    DFRobot大电流供电稳压扩展板用法是:只要您的输入电压在4.5-35V以内,就可以随意调节1.25-12V的输出电压,比如需要给5V的舵机供电,则可把输入端接在12V电池上,调节输出微调电位器,使板子上的5V指示灯刚好亮启,这时输出电压就为5V。
    25W DC-DC降压模块该电源管理模块是一块小体积的降压模块。是一块小体积的降压模块,不能层叠到Arduino控制板上,要分立放置,也是用电位器来调节电压。有一个自锁按钮可以开启和关闭锂电池的供电电源。
说明书网址:(复制网址到浏览器)
https://wiki.dfrobot.com.cn/index.php/%E9%A6%96%E9%A1%B5
Makeblock搬运遥控车之夹持器控制图5
图6 DFRobot大电流供电稳压扩展板
    该搬运车的驱动电机有两个短尺寸直流电机和一个带编码器的直流伺服电机,一共三个直流电机,它们用了两块MC33886电机驱动板驱动,驱动板安装位置位于图7所示控制器的后端。
Makeblock搬运遥控车之夹持器控制图6
7搬运遥控车电控系统和电机驱动系统
   由于这个智能车的三个电机都是12V电机,采用298N驱动板可能带不动,所以采用了含有飞思卡尔公司MC33886芯片的驱动板。这个驱动板是一款大电流电机驱动模块,两路电机输出,可实现 PWM调速、正反转、制动功能等。外观图见图8所示。
Makeblock搬运遥控车之夹持器控制图7
8 MC33886直流电机驱动板接口功能图
    从图8中应该可以看出,12V锂电池的两根电源线接在哪?两个直流电机接在哪?关键是控制接口的五根公头引脚,如何用杜邦线连接到Arduino传感器扩展板的数字端口上?这五根引脚分别标注了引脚名称,分别为IN11、IN12、IN21、IN22、GND。
Makeblock搬运遥控车之夹持器控制图8
9 MC33886直流电机驱动板控制端口
   如图9所示,信号引脚IN11、IN12控制电机1的转速和转向,IN21、IN22控制电机2的转速和转向,GND引脚接地。信号引脚接线方法:如果要让电机1正转,Arduino的数字端口应给IN11和IN12发出PWM信号,电机转速由IN11的PWM值大小确定,同时IN12的PWM值为0。如果电机1制动,则信号引脚IN11、IN12的PWM值都为0,其他控制按照图9所示,以此类推。
三、Makeblock搬运车的夹持器调试程序编制
    机械和电子硬件组装完毕后,我一步步通过LabVIEW软件来调试各执行部件的动作,并确定出来重要参数。例如夹持器两个爪子松开到最大张角时,180度标准舵机的角度位置是多少,还有舵机转动到多少角度,爪子能夹紧物料。
不能认为只有项目中直接涉及上位机测控,才想到用LabVIEW。其实,作为虚拟仪器软件的LabVIEW用在项目研制过程中的提取某些重要参数时,也会事半功倍的。用LabVIEW可视化界面,可以方便直观高效地确定出Arduino编程时所需的参数。如果不借助LabVIEW,直接用Arduino程序确定那些参数,那就要一点点修改参数值,一遍遍烧写程序,这样太麻烦了。
    对于搬运遥控车夹持器的舵机角度控制,我编制了LabVIEW测试程序,其人机界面前面板如图10所示。
Makeblock搬运遥控车之夹持器控制图9
10 舵机角度控制前面板
     位于上位PC机中的LabVIEW程序与搬运车上Arduino控制器的通信,采用的无线数传Xbee也是串口通信,所以在图10前面板上,要设置串口号,这个串口号与Xbee模块的USB适配器在设备管理器中生成的串口号要一致,而波特率设置与Arduino程序中设置的波特率也要一致。
    上位机LabVIEW程序与Arduino控制板无线通信联机成功后,用鼠标拖动前面板中旋钮控件指针转动,这时夹持器的两个爪子在舵机的带动下,也会相应张合,由此可直观地确定出爪子张开和夹紧两个状态下的舵机角度位置。然后把这两个参数记录下来,以便引用到下一步Arduino编程中。
    由于舵机角度范围为0~180度,所以旋钮控件的标尺范围也相应设置为0~180度。
    框图程序是前面板的输入、输出控件的逻辑,如图11所示。
Makeblock搬运遥控车之夹持器控制图10
10 舵机角度控制框图程序
    Labview 程序的“Visa写入”函数功能是向Arduino控制板发送字符串数据,它前面的“字节数组至字符串转换”函数功能是把数据数组转换为字符串格式,实际上这个数组包含了两个字节,前面一个字节“FF”为标识字节,标识启动数据传送,后个字节就是舵机驱动命令字节,即角度值。“Visa写入”函数包含在While循环结构里,每100ms发送一次数据。
    “VISAConfigure Serial Port”函数的功能是完成串口参数的初始化设置,包括了串口号,波特率等,VISA关闭函数VISAClose的作用是当程序停止之前,必须要把使用的串口设备关闭,若不关闭,其他程序就不能使用该设备。
    与LabVIEW程序相配合的Arduino程序:


  1. /*Arduino程序任务:接受上位机下达的字节命令,并驱动连在数字端口4上
  2. 的舵机转动到相应角度。*/
  3. #include<Servo.h>  
  4. Servoclamper_servo;
  5. int pos1;
  6. //初始化
  7. voidsetup()
  8. {
  9.   Serial1.begin(9600);    //启动串口通信,波特率9600b/s
  10.   clamper_servo.attach(4);
  11.   clamper_servo.write(90);  
  12. }
  13. //主程序
  14. voidloop()
  15. {
  16.   if (Serial1.available()>0) //如果Arduino控制板的读缓冲区中存在上位机下达的字节
  17.   {
  18.     delay(30);
  19.     if( Serial1.read()==0xff)//如果读取到启动数据传送的标识字节0xff
  20.     {
  21.      pos1 = Serial1.read(); //读出舵机驱动命令字节
  22.      delay(10);
  23.      clamper_servo.write(pos1);  //舵机转动到相应角度   
  24.     }
  25.   }
  26. }
复制代码




Makeblock搬运车的夹持器动作调试程序介绍完了,下篇文章继续介绍升降导轨控制调试程序的编制。

bobo  NPC

发表于 2014-4-21 16:57:58

酷!
回复

使用道具 举报

Rockets  NPC

发表于 2014-4-21 19:50:00

这种教程是精华的节奏啊。
回复

使用道具 举报

Phoebe  高级技匠

发表于 2014-4-22 18:26:07

哇哦,果断加入精华:lol
回复

使用道具 举报

lauren  高级技师

发表于 2014-4-24 14:43:26

我擦,labview+makeblock+dfrobot电子模块,楼主大神级别的制作啊!已经是中高端机器人完整配置了!
回复

使用道具 举报

盖世吴双  学徒

发表于 2014-7-7 14:49:26

makeblock
回复

使用道具 举报

盖世吴双  学徒

发表于 2014-7-7 14:50:23

这个教程非常好,好好学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail