遥控机器人设计.docx
《遥控机器人设计.docx》由会员分享,可在线阅读,更多相关《遥控机器人设计.docx(25页珍藏版)》请在冰点文库上搜索。
遥控机器人设计
目录
内容摘要1
一、课题分析与方案论证……………………………………2
1.课题分析2
2.各模块设计方案……………………………………………… 3
二、硬件系统设计3
1整机系统构成…………………………………………………3
2系统各模块电路的设计………………………………………4
三、软件系统设计……………………………………………9
红外接收模块
1、红外解码程序设计…………………………………………9
2、控制器控制程序……………………………………………10
四.系统各模块制作、整机测试………………………15
五、结束语………………………………………………16
轮式机器人控制器设计
[内容摘要]毕业设计中采用轮式机器人控制器做为制作课题,遥控器发出红外学号,控制通过红外接收器接收倒红外信号后,对信号进行解码,并以存储的代码进行比较,确定指令的含义,采用PWM技术动态控制电机的转速和转向,利用继电器接触电阻基本为零来提高电机的运动能力,以实现前进、后退、左转、右转及发声等功能。
控制系统采用的是AT89S51单片机,编程语言使用的是汇编语言,动力系统使用的是伺服马达,能源系统使用的是9V电池。
[关键词]PWMAT89S51伺服马达能源系统
一、课题分析与方案论证
1.课题分析:
根据课题要求基于自动控制的基本原理,利用红外遥控与传感器的协调配合,以实现前进、后退、左转、右转及发声等功能的机器人控制器。
依据课题本设计中应该具有电机模块,电机驱动模块,转速测量模块,电源模块以及单片机模块。
由于本设计属于移动性高精度实时控制领域,因此各模块必须具有精度高,智能控制等诸多性能要求
系统整体框图
2.各模块设计方案
(1)电机模块
采用直流电机控制,只要两个电机电压相等即可基本上实现直线运动,采用PWM技术动态控制电机的转速和转向,以实现前进、后退、左转、右转及发声等功能。
(2)电机驱动模块
采用脉冲宽度调节来控制电机,通过H桥驱动电路来驱动电机,达到电机旋转方向和旋转速度的控制,满足控制器调速,变向的需要。
(3)转速测量模块
采用红外发射-接收管。
通过测量车轮在行驶过程中所转的圈数,在乘以车轮的周长,就可以得到车的行驶距离,在车轮上描绘黑白两种颜色,两者对红外的反射程度不同,则可以得到高低不平的脉冲信号,通过单片机记数,就可得到车轮所转的圈数,从而得到车速和距离。
(4)红外遥控模块
用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路
二 硬件系统设计
1.整机系统构成
经过以上分析和各模块的方案论证,得出系统的基本硬件结构,在结合AT89S51单片机的控制,即可得到系统框图。
2.系统各模块电路的设计
(1)控制器单片机模块
遥控器器端单片机选择的AT89S51为ATMEL所生产的可烧录清除的与8051相兼容的单片机芯片,其内部程序代码容量为4KB,电路详见附图。
✧片内部具时钟振荡器(传统最高工作频率可至12MHz)
✧内部程式存储器(ROM)为4KB
✧外部数据存储器可扩充至64KB
✧32条双向输入输出线,且每条均可以单独做I/O的控制
✧5个中断向量源
✧2组独立的16位定时器
✧1个全多工串行通信端口
✧8751及8752单芯片具有数据保密的功能
✧单芯片提供位逻辑运算指令
A/D时钟可由两种方式提供:
MCU时钟和RC振荡时钟。
考虑到RC振荡会产生25%的误差,我们选择了以MCU时钟作为时钟源。
外部晶振选择的是11.0529MHz,A/D转换时间可以达到16.8μs。
A/D转换精度还被应用中其它处产生的噪声电源噪声和电源调节噪声所影响,由于的电源端还用作A/D的电源和参考电压,因此电源对A/D读取精度有着非常直接的影响。
我们选用了右图的7805作为稳压器,它能提供稳定的5V电压,完全可以满足A/D转换对电源的要求。
单片机I/0资源分配表:
P1.0
控制左电机转速
P1.1
控制右电机转速
P3.2
控制红外线IR信号输入位引脚定义
P3.4
控制压电喇叭引脚定义
P3.7
控制发光二极管引脚定义
(2)电机驱动模块
电机驱动采用的是由MOSFET管构成的H桥驱动,使用门电路实现互锁,从而避免造成MOSFET短路。
因为需要支持12V的电机工作电压,互锁逻辑输出差一级反向,所以控制MOSFET使用双极性三极管9013(如果不使用9013,则需要选用逻辑电平控制的MOSFET)。
如下图所示,PWM控制电机的转速,考虑到电机的启动需要一定的占空比(设对应的CCAPH为T3),当启动电机时我们送入CCAPH的值必须大于T3。
T3的取值需要我们在实际的试验中确定,这也是我们制定速度表的最小值。
TURN控制电机的正反转,值为0时正转,为1时反转。
(3)伺服马达结构和工作原理
1、伺服马达内部结构
一个伺服马达内部包括了一个直流马达和一组变速器;其中,高速转动的直流马达提供了原始动力,带动变速(减速)齿轮组,使之产生高扭力的输出,齿轮组的变速比愈大,伺服马达的输出扭力也愈大,也就是说越能承受更大的重量,但转动的速度也愈低。
2、微行伺服马达的工作原理
一个微型伺服马达是一个典型闭环反馈系统,其原理可由下图表示:
伺服马达工作原理图
减速齿轮组由马达驱动,其终端(输出端)带动一个线性的比例电位器作位置检测,该电位器把转角坐标转换为一比例电压反馈给控制线路板,控制线路板将其与输入的控制脉冲信号比较,产生纠正脉冲,并驱动马达正向或反向地转动,使齿轮组的输出位置与期望值相符,令纠正脉冲趋于为0,从而达到使伺服马达精确定位的目的。
3、伺服马达的控制
标准的伺服马达有三条控制线,分别为:
电源、地及控制。
电源线与地线用于提供内部的直流马达及控制线路所需的能源,电压通常介于4V—6V之间,该电源应尽可能与处理系统的电源隔离(因为伺服马达会产生噪音)。
甚至小伺服马达在重负载时也会拉低放大器的电压,所以整个系统的电源供应的比例必须合理。
输入一个周期性的正向脉冲信号,这个周期性脉冲信号的高电平时间通常在1ms—2ms之间,而低电平时间应在5ms到20ms之间,并不很严格,下表表示出一个典型的20ms周期性脉冲的正脉冲宽度与微型伺服马达的输出臂位置的关系。
4、选用的伺服马达
其主要技术参数如下:
●ZYJ系列直流永磁减速电动机系ZY系列直流永磁电动机配蜗轮蜗杆减速器而成
控制周期脉冲宽度为20ms。
送出不同的正脉冲宽度是,就可以得到不同的控制效果。
控制正脉冲宽度如下:
●正脉冲宽度为0.3ms时,伺服马达反转。
●正脉冲宽度为2.5ms时,伺服马达正转。
●正脉冲宽度为1.4ms时,伺服马达回到中点。
(4)、红外遥控
本设计以红外遥控的方式进行遥控。
遥控器由玩具小车的遥杆改造而成。
+通过遥杠可实现控制机器人的前进、后退、左转、右转等动作。
控制电路见附图1。
1、红外遥控系统
通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。
发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
2、遥控发射器及其编码
遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以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),并送出接收到的信号。
当红外线合成信号进入红外接收模块,在其输出端便可以得到原先发射器发出的数字编码,只要经过单片机解码程序进行解码,便可以得知按下了哪一个按键,而做出相应的控制处理,完成红外遥控的动作。
(5)、车速检测模块
在车速检测模块中通过LM319比较器出来的脉冲波形的上跳沿中含有较大的尖刺杂波,对单片机的记数造成很大的干扰,因此在后面加了有积分电路和比较电路构成的迟滞环节来解决此干扰问题,该电路使得单片机记数后,利用软件算法算出小车起跑点的距离更加准确。
三、软件系统设计
红外接收模块
(1)、红外解码程序设计
红外解码程序主要工作为等待红外线信号出现,并跳过引导信号,开始收集连续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寄存器间接寻址存入内存中。
(2)、控制器控制程序
;红外遥控机器人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;压电喇叭引脚定义
DJLEQUP1.0;左侧伺服马达引脚定义
DJREQUP1.1;右侧伺服马达引脚定义
;----------------------------------------------------------------------------------------------------------------------------------------
ORG0H;程序代码由地址0开始执行
JMPBEGIN;进入主程序
;----------------------------------------------------------------------------------------------------------------------------------------
BEGIN:
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;对解码进行比较,看是否是右转指令,否就转至下一项比较
CALLBZ;压电喇叭发出嘀的一声
CALLGO_R;执行右转
RET
A5:
MOVA,COM
CJNEA,#CODE_K6,A6;对解码进行比较,看是否是行走启动指令,否就转至下一项
CALLLED_BL;发光二极管闪烁
CALLBZ;压电喇叭发出嘀的一声
CALLQD;执行行走启动
CALLLED_BL;发光二极管闪烁
CALLBZ;压电喇叭发出嘀的一声
RET
A6:
RET;返回
;----------------------------------------------------------------------------------------------------------------------------------------
HOME1:
SETBDJZ;各伺服电机回中点控制子程序
SETBDJL
SETBDJR
MOVR4,#HOME
G1:
CALLDEL
DJNZR4,G1
CLRDJZ
CLRDJL
CLRDJR
MOVR4,#(200-HOME)
G2:
CALLDEL
DJNZR4,G2
RET
;----------------------------------------------------------------------------------------------------------------------------------------
GO_HOME:
MOVR3,#15;机器人回中点子程序
H1:
CALLHOME1
DJNZR3,H1
RET
;----------------------------------------------------------------------------------------------------------------------------------------
DJL_FOR:
SETBDJL;左侧电机正转子程序
MOVR4,#FOR
FL1:
CALLDEL
DJNZR4,FL1
CLRDJL
MOVR4,#(200-FOR)
FL2:
CALLDEL
DJNZR4,FL2
RET
;--------------------------------------