六自由度机械手实验报告 (2)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
六自由度机械手实验报告
学院:机械工程学院专业:机械设计制造及其自动化班级:机自114
学号:********
学生姓名:郭
2014年12月30日
六自由度机械手实验报告
一、机械手介绍
六自由度机器手是由六个关节组成,每个关节上安装一个电动机,通过控制每个电动机旋转,就可以实现机械手臂的空间运动。
本实验做的六自由度的机械手臂是能实现物品的抓取和移位的机械自动控制
机构。
该六自由度机械手臂的底座能进行大角度转动,实现机械抓取物体的移位;关节的俯仰和摆动能实现机械手臂不同位置的抓取物体;手部关节部分关节的变换,手腕的末端安装一机械手,机械手具有开闭能力,能实现物体的抓取和放下。
每个关节自由度都是用电动机转动来实现机械手臂的转动、俯仰和摆动等运动。
六自由度机械手臂每个关节处都有一个小型电机控制,分别能实现个关节的转动、俯仰等动作。
各个电机用采用AT89S52单片机片控制,通过单片机输出程能实现六个电机按照规定角度运动,从而带动关节的运动。
二、机械手的结构
1、机械部分
本实验中六自由度机械手的机械系统包括机身、臂部、手腕、手部。
图1机械手臂的实物图
图2机械手臂的结构简图
系统共有6个自由度,分别是a.基座的回转、b.连杆一转动、c.连杆二转动、d..手腕转动、e.手腕旋转、f..手部开合。
前面三个关节确定手部的空间位置,后面三个关节确定手部的姿态。
图3 自由度
2、控制部分
1、人机通信模块
控制系统是机器人的大脑,它的性能优劣直接影响到机器人的先进程度和功能强弱。
机械人控制涉及自动控制,计算机,传感器、人工智能、电子技术和机械等多学科的内容,是一项跨多个学科的综合性技术。
本实验机器人控制系统的硬件由单片机AT89S52、运动控制模块、驱动模块和通讯模块组成。
其单片机AT89S52模块如下图3.1所示,该模块由一块AT89S52单片机、串行口通信接口、转串口下载线连接接头、电源接口、开关、信号输出口Q等组成。
图4 单片机AT89S52模块图
2、舵机驱动模块
该舵机驱动模块采用的是parallax公司生产的16路舵机控制模块,其包括16路舵机控制线接口、单片机通信接口、舵机驱动电源接口、开关、复位键、控制芯片等部分组成。
具体如图3.2所示:
图5 舵机控制模块
3、工作方式为
(1)在PC机上用keil软件编号程序,并调试正确输出.hex文件格式。
这就得到了可供下载到单片机的源程序。
(2) 用转串口下载线将计算机USB口与单片机ISP下载接口连接,用progisp 下载软件将编号的.hex格式文件下载到单片机上(ISP下载接口如图3.3)。
图6 ISP下载接口
(3)运行程序,单片机产生控制信号,经P1.2口传输到舵机控制芯片的信号输入端口,经P8X32A-M44对信号的分析,然后产生6个舵机控制信号,通过个YE08芯片将其电压放大,进入各个舵机控制口,控制各个舵机的动作,从而实现机械手的动作控制,完成预定的动作。
具体控制电路如图3.4所示:
图7 控制模块的类似原理图
三、运动程序
运动程序如下,要实现不同的运动,修改对应的黑体字参数即可。
#include<BoeBot.h>
#include<uart.h>
#define uchar unsigned char
#define RXD P12
#define TXD P12
#define WRDYN 44 //写延时
#define RDDYN 43 //读延时
//延时程序*
void Delay2cp(unsigned char i)
{
while(--i); //刚好两个指令周期。
}
//往串口写一个字节
void WByte(uchar in )
{
uchar i=8;
TXD=(bit)0; //发送启始位
Delay2cp(183); //发送8位数据位
while(i--)
{
TXD=(bit)(in &0x01); //先传低位
Delay2cp(176);
in =in >>1;
}
//发送校验位(无)
TXD=(bit)1; //发送结束位
Delay2cp(190);
}
//从串口读一个字节
uchar RByte(void)
{
uchar Out =0;
uchar i=8;
uchar temp=RDDYN; //发送8位数据位
while ( RXD );
Delay2cp(187); //此处注意,等过起始位
Delay2cp(94);
while(i--)
{
Out >>=1;
if(RXD)
Out |=0x80; //先收低位
Delay2cp(179); //(96-26)/2,循环共占用26个指令周期}
while(--temp) //在指定的时间内搜寻结束位。
{
Delay2cp(1);
if(RXD)
break; //收到结束位便退出
}
return Out ;
}
int motormove(char channel, char ramp, int position)
{
unsigned char i;
uchar cmd[8] ="!SC";
cmd[3] = channel;
cmd[4] = ramp;
cmd[5] = position;
cmd[6] = position>>8;
cmd[7] = 0x0D;
for(i=0; i<8; i++)
{
WByte(cmd[i]);
}
}
// Bse Bcpt elbw wrst wrstR grppr int code armdata[] = { 750, 800, 800, 540, 750, 1250,
750, 800, 800, 540, 750, 1250,
930, 800, 800, 540, 750, 550,
930, 800, 800, 540, 750, 550,
930, 800, 800, 540, 750, 550,
940, 800, 800, 540, 750, 550,
940, 800, 800, 540, 750, 550,
940, 800, 800, 540, 750, 550,
940, 800, 800, 540, 750, 550,
750, 800, 800, 540, 750, 1250,
750, 800, 800, 540, 750, 1250,
750, 800, 800, 540, 750, 1250,
800, 800, 800, 540, 750, 1250,
750, 800, 800, 540, 750, 1250,
750, 800, 800, 540, 750, 1250,0xff}; int code delay[] = { 20,20,15,20,30,10,10,10,30,20,10,30,10,10,10};
int robotmove(int i, int* movedata)
{
uchar j;
while(*movedata!=0xff)
{
for(j=0; j<i; j+=6)
{
motormove(0x00,15,*movedata++);
delay_nms(delay[j/6]);
motormove(0x01,15,*movedata++);
delay_nms(delay[j/6]);
motormove(0x02,15,*movedata++);
delay_nms(delay[j/6]);
motormove(0x03,12,*movedata++);
delay_nms(delay[j/6]);
motormove(0x04,15,*movedata++);
delay_nms(delay[j/6]);
motormove(0x05,15,*movedata++);
delay_nms(delay[j/6]);
delay_nms(2000); //让所有动作执行完
}
}
}
int main(void)
{
uart_Init();
robotmove(90,armdata);
delay_nms(100);
四.总结
今年我们开了《工业机器人》这门课,所以这个实验也就加深了我们对工业机器人的了解和控制。
无论是在关节布置上,还是在手部设计上,应该说对机械手臂有了一个比较具体的认识。
这次设计性实验同时也涉及单片机的运用和控制,主要涉及到的是编程,需要我们对编程语言的了解和认识,还有对单片机的通信有一点的了解,这里面还涉及到了舵机控制,对舵机控制性能的了解,以及各个关节间的相互协调动作,所以这个设计实验对我们来说是一个比较综合的实验,同时锻炼了我们很多知识。