红外遥控六足机器人设计.docx
《红外遥控六足机器人设计.docx》由会员分享,可在线阅读,更多相关《红外遥控六足机器人设计.docx(28页珍藏版)》请在冰点文库上搜索。
红外遥控六足机器人设计
六足机器人设计
前言2
(一)、机器人的大脑2
(二)、机器人的眼睛耳朵2
(三)、机器人的腿——驱动器与驱动轮3
(四)、机器人的手臂——机械传动专制4
(五)、机器人的心脏——电池4
一、AT89S51单片机简介5
(一)、AT89S51主要功能列举如下:
5
(二)、AT89S51各引脚功能介绍:
5
二、控制系统电路图7
三、微型伺服马达原理与控制8
(一)、微型伺服马达内部结构8
(二)、微行伺服马达的工作原理8
(三)、伺服马达的控制9
(四)、选用的伺服马达9
四、红外遥控11
(一)、红外遥控系统11
(二)、遥控发射器及其编码11
(三)、红外接收模块11
(四)、红外解码程序设计11
五、控制程序12
六、六足爬虫机器人结构设计图18
前言
(一)、机器人的大脑
它可以有很多叫法,可以叫做:
可编程控制器、微控制器,微处理器,处理器或者计算器等,不过这都不要紧,通常微处理器是指一块芯片,而其它的是一整套控制器,包括微处理器和一些别的元件。
任何一个机器人大脑就必须要有这块芯片,不然就称不上机器人了。
在选择微控制器的时候,主要要考虑:
处理器的速度,要实现的功能,ROM和RAM的大小,I/O端口类型和数量,编程语言以及功耗等。
其主要类型有:
单片机、PLC、工控机、PC机等。
单有这些硬件是不够的,机器人的大脑还无法运行。
只有在程序的控制下,它才能按我们的要求去工作。
可以说程序就是机器人的灵魂了。
而程序是由编程语言所编写的。
编程语言是一个控制器能够接受的语言类型,一般有C语言,汇编语言或者basic语言等,这些通常能被高级一点的控制器直接执行,因为在高级控制器里面内置了编译器能够直接把一些高级语言翻译成机器码。
微处理器将执行这些机器码,并对机器人进行控制。
(二)、机器人的眼睛耳朵
传感器,是机器人的感觉器官,是机器人和现实世界之间的纽带,使机器人能感知周围的环境情况。
其主要有:
光电传感器、红外传感器、力传感器、超声波传感器、位置和姿态传感器等等。
下面我将就几种常用传感器进行介绍:
1、光电传感器:
光电传感器的原理是光电效应。
其主要用途是颜色识别(机器人就可以沿着地上的线条行进了)和光电编码等。
2、红外传感器:
红外传感器是用来测量距离和感知周围情况的。
因为发射出去的红外信号在一定距离内遇到物体就会反射回来。
通过发送红外线信号,并接收反射回来的信号,机器人就可以感知前方或身体周围的情况,做出相应的调整(如:
倒退或绕行等)。
3、力传感器:
力传感器是用来检测碰撞或者接触信号的,比如机械手的应用,当你放一个东西到机械手的时候,机械手自动抓住它,它就需要力传感器检测东西抓的紧不紧。
典型的力传感器是微动开关和压敏传感器。
微动开关其实就是一个小开关,通过调节开关上的杠杆长短,能够调节触动开关的力的大小。
用来做碰撞检测这是最好不过了。
但是这种传感器必须事先确定好力的阀值,也就是说只能实现硬件控制(开还控制)。
而压敏传感器是能根据受力大小,自动调节输出电压或者电流,从而可以实现软件控制(闭环控制)。
4、超声波传感器:
超声波传感器是从蝙蝠那里学来的,通过把发射出的信号与接收到的信号进行对比,就可以测定周围是否有障碍物,及障碍物的距离,也属于距离探测传感器,能提供交远的探测范围,而且还能提供在一个范围内的探测而不是一条线的探测。
5、位置和姿态传感器:
机器人在移动或者动作的时候必须时时刻刻知道自己的姿态动作,否则就会产生控制中的一个开环问题,没有反馈,无法获知运动是否正确。
位置传感器和姿态传感器就是用来解决这个问题的。
常用的有光电编码器,由于机器人的执行机构一般是电机驱动,通过计算电机转的圈数,可以得出电机带动部件的大致位置,编码器就是这样一种传感器,它一般和电机轴或者转动部件直接连接,电机或者转动部件转了多少圈或者角度能够通过编码器读出,控制软件再根据读出数据进行位置估计计算。
还有一种是陀螺仪,这是利用陀螺原理制作的传感器,主要可以测得移动机器人的移动加速度,转过的角度等信息。
(三)、机器人的腿——驱动器与驱动轮
驱动器就是驱动机器人的动的部件。
最常用的是电机了。
当然还有液压,气动等别的驱动方式。
一个机器人最主要的控制量就是控制机器人的移动,无论是自身的移动还是手臂等关节的移动,所以机器人驱动器中最根本和本质的问题就是控制电机,控制电机转的圈数,就可以控制机器人移动的距离和方向,机械手臂的弯曲的程度或者移动的距离等。
所以,第一个要解决的问题就是如何让电机能根据自己的意图转动。
一般来说,有专门的控制卡和控制芯片来进行控制的。
有了这些控制卡和芯片,我们所要做的就是把微控制器和这些连接起来,然后就可以用程序来控制电机了。
第二个问题是控制电机的速度,在机器人上的实际表现就是机器人或者手臂的实际运动速度了,机器人走的快慢全靠电机的转速,这样,我们就要求控制卡对电机有速度控制。
电机目前常用的有两种,步进电机和直流电机。
下面我将就这两种电机进行介绍:
1、直流电机:
这是最最普通的电机了。
直流电机最大的问题是你没法精确控制电机转的圈数,也就前面所说的位置控制。
你必须加上一个编码盘,来进行反馈,来获得实际转的圈数。
但是直流电机的速度控制相对就比较简单,用一种叫PWM(脉宽调速)的调速方法可以很轻松的调节电机速度。
现在也有很多控制芯片带调速功能的。
选购时要考虑的参数是电机的输出力矩,电机的功率,电机的最高转速。
2、步进电机:
看名字就知道了,它是一步一步前进的。
也就是说,它可以一个角度一个角度旋转,不象直流电机,你可以很轻松的调节步进电机的转角位置,如果你发一个转10圈的指令,步进电机就不会转11圈,但是如果是直流电机,由于惯性作用,它可能转11圈半。
步进电机的调速是通过控制电机的频率来获得的。
一般控制信号频率越高,电机转的越快,频率越低,转的越慢。
选购时要考虑的参数是电机的输出力矩,电机的功率,每个脉冲电机的最小转角。
还有就是关于输出的动力,要说明一下:
一般情况下,电机都没法直接带动轮子或者手臂,因为速度过高力矩不够大,所以我们需要加上一个减速箱来增加电机的输出力矩,但是代价是电机速度的减小,比如一个1:
250的齿轮箱,会让你电机的输出力矩增大250倍,但是速度只有原来的1/250了。
首先计算出机器人所需要的速度与力矩大小,然后根据速度与力矩去选择电机与减速器。
(四)、机器人的手臂——机械传动专制
机械传动专制就是,由电机驱动的一些杆件和机构(如:
凸轮机构、螺杆机构等),用以实现机械手臂的上升、下降、伸缩、弯曲等动作。
通常运用的机构有四杆机构、凸轮机构、螺杆机构、摇臂等。
(五)、机器人的心脏——电池
电池为机器人的控制系统与驱动系统提供能源供应。
主要有:
电瓶及可充电电池
一、AT89S51单片机简介
AT89S51为ATMEL所生产的可电气烧录清洗的8051相容单芯片,其内部程序代码容量为4KB
(一)、AT89S51主要功能列举如下:
1、为一般控制应用的8位单芯片
2、晶片内部具时钟振荡器(传统最高工作频率可至12MHz)
3、内部程式存储器(ROM)为4KB
4、内部数据存储器(RAM)为128B
5、外部程序存储器可扩充至64KB
6、外部数据存储器可扩充至64KB
7、32条双向输入输出线,且每条均可以单独做I/O的控制
8、5个中断向量源
9、2组独立的16位定时器
10、1个全多工串行通信端口
11、8751及8752单芯片具有数据保密的功能
12、单芯片提供位逻辑运算指令
二、控制系统电路图
控制系统电路图
三、微型伺服马达原理与控制
(一)、微型伺服马达内部结构
一个微型伺服马达内部包括了一个小型直流马达;一组变速齿轮组;一个反馈可调电位器;及一块电子控制板。
其中,高速转动的直流马达提供了原始动力,带动变速(减速)齿轮组,使之产生高扭力的输出,齿轮组的变速比愈大,伺服马达的输出扭力也愈大,也就是说越能承受更大的重量,但转动的速度也愈低。
微型伺服马达内部结构图
(二)、微行伺服马达的工作原理
一个微型伺服马达是一个典型闭环反馈系统,其原理可由下图表示:
微行伺服马达工作原理图
减速齿轮组由马达驱动,其终端(输出端)带动一个线性的比例电位器作位置检测,该电位器把转角坐标转换为一比例电压反馈给控制线路板,控制线路板将其与输入的控制脉冲信号比较,产生纠正脉冲,并驱动马达正向或反向地转动,使齿轮组的输出位置与期望值相符,令纠正脉冲趋于为0,从而达到使伺服马达精确定位的目的。
(三)、伺服马达的控制
标准的微型伺服马达有三条控制线,分别为:
电源、地及控制。
电源线与地线用于提供内部的直流马达及控制线路所需的能源,电压通常介于4V—6V之间,该电源应尽可能与处理系统的电源隔离(因为伺服马达会产生噪音)。
甚至小伺服马达在重负载时也会拉低放大器的电压,所以整个系统的电源供应的比例必须合理。
输入一个周期性的正向脉冲信号,这个周期性脉冲信号的高电平时间通常在1ms—2ms之间,而低电平时间应在5ms到20ms之间,并不很严格,下表表示出一个典型的20ms周期性脉冲的正脉冲宽度与微型伺服马达的输出臂位置的关系:
(四)、选用的伺服马达
我选用的伺服马达为TowPro的,型号为SG303。
其主要技术参数如下:
●转速:
0.23秒/60度。
●力矩:
3.2kg·cm。
●尺寸:
40.4mm×19.8mm×36mm。
●重量:
37.2g。
●5V电源供电。
控制周期脉冲宽度为20ms。
送出不同的正脉冲宽度是,就可以得到不同的控制效果。
控制正脉冲宽度如下:
●正脉冲宽度为0.3ms时,伺服马达反转。
●正脉冲宽度为2.5ms时,伺服马达正转。
●正脉冲宽度为1.4ms时,伺服马达回到中点。
四、红外遥控
家中许多的电器产品都有遥控的功能,例如电视机、录像机、VCD、空调等家电产品,它们都是以红外遥控的方式进行遥控。
(一)、红外遥控系统
通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。
发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
(二)、遥控发射器及其编码
遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理。
当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。
这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。
上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。
然后再通过红外发射二极管产生红外线向空间发射。
遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。
该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。
UPD6121G最多额128种不同组合的编码,如图3所示。
遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。
一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图4为发射波形图。
(三)、红外接收模块
左图为一常用的红外接收模块。
其内部含有高频的滤波电路,专门用来滤除红外线合成信号的载波信号(38KH),并送出接收到的信号。
当红外线合成信号进入红外接收模块,在其输出端便可以得到原先发射器发出的数字编码,只要经过单片机解码程序进行解码,便可以得知按下了哪一个按键,而做出相应的控制处理,完成红外遥控的动作。
红外接收模块
(四)、红外解码程序设计
红外解码程序主要工作为等待红外线信号出现,并跳过引导信号,开始收集连续32位的表面数据,存入内存的连续空间。
位信号解码的原则是:
以判断各个位的波宽信号来决定高低信号。
位解码原理如下:
●解码为0:
低电平的宽度0.56ms+高电平的宽度0.56ms。
●解码为1:
低电平的宽度1.68ms+高电平的宽度0.56ms。
程序中必须设计一精确的0.1ms延时时间作为基础时间,以计数实际的波形宽度,若读值为5表示波形宽度为0.5ms,若读值为16表示波形宽度为1.6ms,以此类推。
高电平的宽度1.12ms为固定,因此可以直接判断低电平的宽度的计数值5或时16,来确定编码为0或是1。
程序中可以减法指令SUBB来完成判断,指令“SUBBA,R2”中若R2为计数值,A寄存器设为8,就可如下:
●当“8-R2”有产生借位,借位标志C=1,表示编码为1。
●当“8-R2”无产生借位,借位标志C=0,表示编码为0。
将借位标志C经过右移指令“RRCA”转入A寄存器中,再经由R0寄存器间接寻址存入内存中。
详细解码程序请参看“红外遥控爬虫机器人ASM程序”中的“红外解码子程序”。
五、控制程序
;红外遥控爬虫机器人ASM程序
;-----------------------------------------------------------------------------------------------------------------------------------------
HOMEEQU14;伺服马达回到中点时间常数
BACKEQU3;伺服马达反转时间常数
FOREQU25;伺服马达正转时间常数
;----------------------------------------------------------------------------------------------------------------------------------------
;遥控器按键1~6比较码
CODE_K1EQU19H;机器人前进比较码
CODE_K2EQU18H;机器人后退比较码
CODE_K3EQU0AH;机器人左转比较码
CODE_K4EQU09H;机器人右转比较码
CODE_K5EQU0BH;机器人回到中点比较码
CODE_K6EQU14H;机器人行走启动进比较码
;----------------------------------------------------------------------------------------------------------------------------------------
IRCOMEQU30H;红外线信号解码数据放置变量起始地址
COMEQU32H;比较第3字节变量
;----------------------------------------------------------------------------------------------------------------------------------------
IRINEQUP3.2;红外线IR信号输入位引脚定义
WLEDEQUP3.7;发光二极管引脚定义
SPKEQUP3.4;压电喇叭引脚定义
DJZEQUP1.0;中间伺服马达引脚定义
DJLEQUP1.1;左侧伺服马达引脚定义
DJREQUP1.2;右侧伺服马达引脚定义
;----------------------------------------------------------------------------------------------------------------------------------------
ORG0H;程序代码由地址0开始执行
JMPBEGIN;进入主程序
;----------------------------------------------------------------------------------------------------------------------------------------
BEGIN:
CLRDJZ;关闭中间伺服马达
CLRDJL;关闭左侧伺服马达
CLRDJR;关闭右侧伺服马达
CLRSPK;关闭压电喇叭
CALLLED_BL;发光二极管闪烁,表示程序开始执行
CALLBZ;压电喇叭发出嘀的一声
CALLGO_HOME;全部伺服马达回到中点
CALLLED_BL;发光二极管闪烁,表示机器人准备完毕
CALLBZ;压电喇叭发出嘀的一声
CALLQD;运行行走启动子程序,摆好行走姿态
SETBIRIN;红外线信号IR输入位设为高电平,准备接收红外信号
LOOP:
MOVR0,#IRCOM;设置IR解码起始地址
CALLIR_IN;进行IR解码
CALLOP;进行解码比较,并控制机器人动作
JMPLOOP;继续循环执行
;----------------------------------------------------------------------------------------------------------------------------------------
DELAY:
MOVR6,#50;10ms延时子程序
D1:
MOVR7,#99
DJNZR7,$
DJNZR6,D1
DJNZR5,DELAY
RET
;----------------------------------------------------------------------------------------------------------------------------------------
LED_BL:
MOVR1,#4;发光二极管闪烁子程序
LE1:
CPLWLED;发光二极管反向
MOVR5,#10
CALLDELAY;进行100ms延时
DJNZR1,LE1
RET
;----------------------------------------------------------------------------------------------------------------------------------------
BZ:
MOVR6,#0;压电喇叭发声子程序
B1:
SETBSPK;压电喇叭得电,开始发声
DJNZR6,B1
MOVR5,#5
CALLDELAY;进行50ms延时
CLRSPK;关闭压电喇叭
RET
;----------------------------------------------------------------------------------------------------------------------------------------
DEL:
;0.1ms延时子程序
MOVR5,#1
DELAY1:
MOVR6,#2
E1:
MOVR7,#22
E2:
DJNZR7,E2
DJNZR6,E1
DJNZR5,DELAY1
RET
;----------------------------------------------------------------------------------------------------------------------------------------
IR_IN:
;红外解码子程序
I1:
JNBIRIN,I2;等待红外IR信号出现
JMPI1
I2:
MOVR4,#20;发现红外IR信号,延时一下
I20:
CALLDEL
DJNZR4,I20
JBIRIN,I1;确认红外IR信号出现
I21:
JBIRIN,I3;等待IR变为高电平
CALLDEL
JMPI21
I3:
MOVR3,#0;8位数清0
LL:
JNBIRIN,I4;等待IR变为低电平
CALLDEL
JMPLL
I4:
JBIRIN,I5;等待IR变为高电平
CALLDEL
JMPI4
I5:
MOVR2,#0;0.1ms计数
L1:
CALLDEL
JBIRIN,N1;等待IR变为高电平
MOVA,#8;设置减数为8
CLRC;清除借位标志C
SUBBA,R2;判断高低位
MOVA,@R0;取出内存中原先数据
RRCA;右移指令,将借位标志C右移进入A寄存器中
MOV@R0,A;将数据写入内存中
INCR3;处理完成一位,R3+1(R3计数)
CJNER3,#8,LL;循环处理8位
MOVR3,#0;R3清0
INCR0;处理完成1个字节,R0+1(R0计数)
CJNER0,#34H,LL;循环收集到4个字节
JMPOK;至完成返回
N1:
INCR2;R2+1(R2计数)
CJNER2,#30,L1;0.1ms计数过长,时间到自动离开
OK:
RET;完成返回
;----------------------------------------------------------------------------------------------------------------------------------------
OP:
执行解码动作子程序
MOVA,COM
CJNEA,#CODE_K5,A1;对解码进行比较,看是否是回到中点指令,否就转至下一项比较
CALLLED_BL;发光二极管闪烁
CALLBZ;压电喇叭发出嘀的一声
CALLGO_HOME;执行回到中点
CALLLED_BL;发光二极管闪烁
CALLBZ;压电喇叭发出嘀的一声
RET
A1:
MOVA,COM
CJNEA,#CODE_K1,A2;对解码进行比较,看是否是前进指令,否就转至下一项比较
CALLBZ;压电喇叭发出嘀的一声
CALLGO_FOR;执行前进
RET
A2:
MOVA,COM
CJNEA,#CODE_K2,A3;对解码进行比较,看是否是后退指令,否就转至下一项比较
CALLBZ;压电喇叭发出嘀的一声
CALLGO_BACK;执行后退
RET
A3:
;L
MOVA,COM
CJNEA,#CODE_K3,A4;对解码进行比较,看是否是左转指令,否就转至下一项比较
CALLBZ;压电喇叭发出嘀的一声
CALLGO_L;执行左转
RET
A4:
;R
MOVA,COM
CJNEA,#CODE_K4,A5;对解码进行比