智能机器人跨专业公选实验_第1页
智能机器人跨专业公选实验_第2页
智能机器人跨专业公选实验_第3页
智能机器人跨专业公选实验_第4页
智能机器人跨专业公选实验_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

智能机器人跨专业公选实验实验指导书范守文吴献钢袁太文陈畅电子科技大学机械电子工程学院2021年9月

机器人自己做,也许你从小有这样的一个梦,在这里,我们让你梦想成真!

第一篇机器人控制电路基础图1复位电路一、复位电路图1复位电路任何单片机在工作之前都要有个复位的过程,复位是什么意思呢?它就象是我们上课之前打的预备铃。预备铃一响,大家就自动地从操场、其它地方进入教室了,在这一段时间里,是没有老师干预的,对单片机来说,是程序还没有开始执行,是在做准备工作。显然,准备工作不需要太长的时间,复位只需要5ms的时间就可以了。如何进行复位呢?只要在单片机的RST引脚上加上高电平,就可以了,按上面所说,时间不少于5ms。为了达到这个要求,可以用很多种方法,这里提供一种供参考,见图1。图2晶振电路这种复位电路的工作原理是:通电时,电容两端相当于是短路,于是RST引脚上为高电平,然后电源通过电阻对电容充电,RST图2晶振电路二、晶振电路图3机器人驱动芯片AS611单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶振,电容,连上就可以了,按图2接上即可。图3机器人驱动芯片AS611三、机器人驱动芯片AS611图3是机器人驱动芯片AS611与51单片机连接的电路原理图AS611内部包含4通道逻辑驱动电路,其额定工作电流为1A,最大可达1.5A,Vss电压最小4.5V,最大可达36V;Vs电压最大值也是36V。下表是其使能、输入引脚和输出引脚的逻辑关系(电路按图3连接):ENA(B)IN1(IN3)IN2(IN4)电机运行情况HHL正转HLH反转H同IN2(IN4)同IN1(IN3)快速停止LXX停止四、74LS21四输入与门图474LS21四输入与门引脚图74LS21四输入与门引脚如图4所示。图474LS21四输入与门引脚图五、LM324四运放集成电路图5LM324四运放的组成与引脚图LM324是四运放集成电路,它采用14脚双列直插塑料封装。它的内部包含四组形式完全相同的运算放大器,除电源共用外,四组运放相互独立。图5LM324四运放的组成与引脚图每一组运算放大器可用图5a所示的符号来表示,它有5个引出脚,其中“+”、“-”为两个信号输入端,“V+”、“V-”为正、负电源端,“Vo”为输出端。两个信号输入端中,Vi-(-)为反相输入端,表示运放输出端Vo的信号与该输入端的相位相反;Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同。LM324的引脚排列见图5b。图6碰撞开关引脚与尺寸图1图6碰撞开关引脚与尺寸图123当去掉运放的反馈电阻时,或者说反馈电阻趋于无穷大时(即开环状态),理论上认为运放的开环放大倍数也为无穷大。此时运放便形成一个电压比较器,其输出如不是高电平(V+),就是低电平(V-或接地)。当正输入端电压高于负输入端电压时,运放输出低电平。六、碰撞开关碰撞开关引脚与尺寸如图6所示。引脚1为信号输出脚,引脚2接地,引脚3接+5V。七、红外发射管图8红外接收头引脚与尺寸图图7红外发射管外形图8红外接收头引脚与尺寸图图7红外发射管外形与电路符号图9红外传感器测障原理红外发射管的主要优点是:体积小、寿命长、功耗小、响应速度快(可以调制到几十兆赫)等,因此在光电控制中被大量采用。其主要缺点是:有方向性、易受环境温度影响等。图9红外传感器测障原理红外发射管工作在正向电压下,其正向特征与普通二极管一样。对它施加几伏正向电压后,就会发出不可见的红外光,光敏元件接收到此红外光后,就会输出相应的信号。由于红外发射管在正向电流下工作,因此发光强度随正向电流的增加而增加,因此调整流过红外发射管的正向电流,便可以调整输出光功率(即发光强度),对应地达到调整有效检测距离的目的。八、红外接收头红外接收头引脚与尺寸如图8所示。引脚1为信号输出脚,引脚2接地,引脚3接+5V。当接收到红外信号时,其信号输出脚输出为低电平。九、红外传感器测障原理红外传感系统依靠发射并接收由障碍物反射回来的红外光来判断是否有障碍物。如图9所示,红外光以60°的散射角向外发射,阴影区域分别是左右两个红外发射管的反射区域,而红外接收模块正好处于左右两个反射区域内,能接收到左右两个红外发射管的反射光,从而可以判定前方、左边、右边有无障碍物。图10机器人控制板的电源十、机器人控制板的电源图10机器人控制板的电源机器人控制板的电源部分分两路,一路直接由充电电池提供,主要是提供给电机使用,另一路通过三端稳压芯片LM7805稳压成5伏直流电源提供给单片机系统使用,右边两个电容是5伏电源的滤波电容,电阻和发光二极管组成5伏电源的工作指示电路,只要电源部分正常,发光二极管组就会点亮,我们可以根据这个发光二极管组来判断整个电源部分是否工作正常,左侧的开关是整个机器人控制系统电源的总开关。第二篇机器人控制软件基础一、中断服务程序有关中断的概念什么是中断,我们从一个生活中的例子引入。你正在家中看书,突然铃响了,你放下书本,去接,和来的人交谈,然后放下,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。第一、什么可经引起中断,生活中很多事件可以引起中断:有人按了门铃了,铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的事件,我们把可以引起中断的称之为中断源,单片机中也有一些可以引起中断的事件,8031中一共有5个:两个外部中断,两个计数/定时器中断,一个串行口中断。第二、中断的嵌套与优先级处理:设想一下,我们正在看书,铃响了,同时又有人按了门铃,你该先做那样呢?如果你正是在等一个很重要的,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会了。如果不是这两者(即不等,也不是等人上门),你可能会按你通常的习惯去处理。总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接,有人按门铃的情况,或你正开门与人交谈,又有响了情况。考虑一下我们会怎么办吧。第三、中断的响应过程:当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不同的事情(因为处理完了,我们还要回来继续看书):铃响我们要到放的地方去,门铃响我们要到门那边去,也说是不同的中断,我们要在不同的地点处理,而这个地点通常还是固定的。计算机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。具体地说,中断响应可以分为以下几个步骤:保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址。以上工作是由计算机自动完成的,与编程者无关。在这5个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。执行中断处理程序。中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。究竟单片机是怎么样找到中断程序所在位置。中断请求源:外中断请求源:即外中断0和1,经由外部引脚引入的,在单片机上有两个引脚,名称为INT0、INT1,也就是P3.2、P3.3这两个引脚。在内部的TCON中有四位是与外中断有关的。IT0:INT0触发方式控制位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。IT1、IE1的用途和IT0、IE0相同。内部中断请求源TF0:定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。当CPU响应中断后,再由硬件将TF0清0。TF1:与TF0类似。TI、RI:串行口发送、接收中断。中断允许寄存器IE在MCS-51中断系统中,中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器IE来控制的。EA是总开关,如果它等于0,则所有中断都不允许。ES-串行口中断允许ET1-定时器1中断允许EX1-外中断1中断允许。ET0-定时器0中断允许EX0-外中断0中断允许。我们也可以用位操作指令SETBEASETBET1SETBEX1来实现它。五个中断源的自然优先级与中断服务入口地址外中断0:0003H定时器0:000BH外中断1:0013H定时器1:001BH串口:0023H它们的自然优先级由高到低排列。写到这里,大家应当明白,为什么前面有一些程序一始我们这样写:ORG0000HLJMPSTARTORG0030HSTART:…这样写的目的,就是为了让出中断源所占用的向量地址。图11按键接口电路图12按键的抖动波形图11按键接口电路图12按键的抖动波形按键是单片机最常用的输入设备,用户可以通过按键向计算机输入指令、地址和数据,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。按键开关的抖动问题组成键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的。在图11中,当按键未被按下时,P1.0输入为高电平,当按键闭合后,P1.0输入为低电平。由于按键是机械触点,当机械触点断开、闭合时,会有抖动动,P1.0输入端的波形如图12所示。这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全可以感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。前面我们讲到中断时曾有个问题,就是说按键有时灵,有时不灵,其实就是这个原因,你只按了一次按键,可是计算机却已执行了多次中断的过程,如果执行的次数正好是奇数次,那么结果正如你所料,如果执行的次数是偶数次,那就不对了。为使CPU能正确地读出P1口的状态,对每一次按键只作一次响应,就必须考虑如何去除抖动。单片机中常用软件法,软件法其实很简单,就是在单片机获得P1.0口为低的信息后,不是立即认定S1已被按下,而是延时10毫秒或更长一些时间后再次检测P1.0口,如果仍为低,说明S1的确按下了,这实际上是避开了按键按下时的抖动时间。而在检测到按键释放后(P1.0为高)再延时5-10个毫秒,消除后沿的抖动,然后再对键值处理。不过一般情况下,我们通常不对按键释放的后沿进行处理,实践证明,也能满足一定的要求。当然,实际应用中,对按键的要求也是千差万别,要根据不同的需要来编制处理程序,但以上是消除键抖动的原则。按键编程方法示例(通过按键控制小车前进、后退、左转、右转) ORG0000h AJMPL1 ORG0100hL1: MOVA,P1 JNBACC.0,L2 JNBACC.1,L3 JNBACC.2,L4 JNBACC.3,L5MOVA,#0h;停止MOVP2,A AJMPL1L2: ACALLDELY10msMOVA,P1JBACC.0,L1MOVA,#27h;前进MOVP2,AAJMPL1L3: ACALLDELY10msMOVA,P1JBACC.1,L1MOVA,#1bh;后退MOVP2,AAJMPL1 L4: ACALLDELY10msMOVA,P1JBACC.2,L1MOVA,#17h;左转MOVP2,AAJMPL1 L5: ACALLDELY10msMOVA,P1JBACC.3,L1MOVA,#2bh;右转MOVP2,AAJMPL1DELY10ms:MOVR6,#50;12M晶振,延时10msDL1:MOVR5,#100DL2:DJNZR5,DL2DJNZR6,DL1RET END第三篇机器人机械结构图13直流电机各种关系图一、机器人中的电机图13直流电机各种关系图电机在机器人驱动中起着重要的作用。直流电机的作用原理是建立在电与磁的相互转化和相互作用的基础上的。它主要由定子和转子两大部分组成。定子上有励磁绕组,由它产生磁场。转子与机械负载相联,上面安装有电枢绕组,并通过电刷与直流电源联接,电枢绕组上的电压称为电枢电压。电枢中由于电刷的作用,被通以交变的电流,使转子在磁场中连续相对运动,输出物理量转速和转矩。由此,转子便带动机械负载(如智能机器人中的主动轮)运动。T0T0T0:为一定的转矩图14直流电机转矩—转速关系图T(转矩)n1n2n(转速)U2=12vU1=6v直流电机在一定的电枢电压下,转速与转矩成反比。如果改变电压,则转矩/转速线随着电压的升降而升降(如图14)。在智能机器人负载一定时(即转矩一定时),提高电压,即电压由u1到u2,对应的转速为n1和n2,可见,n1<n2,即当电枢电压提高时,电机转子的转速便也提高。所以只要改变直流电机电枢电压的大小,就可以实现直流电机的调速。图15不同宽度的方波实现PWM控制图15不同宽度的方波实现PWM控制智能机器人采用的是改变电机电枢电压的方式来改变直流电机的转速,这种方式只是直流电机调速方式之一,有关详细资料可参考有关资料。提供给电机的信号是方波,不同的方波,它的平均电压不同如图15所示,u1<u2<u3,我们就利用这一点来进行智能机器人的速度控制。进而调节电机的转速,这就是脉宽调制技术(PWM,PulseWidthModulation)。二、机器人的传动系统图16齿轮机器人的运动由两个主动轮的运动来完成,而它们分别由两套完全一样的驱动装置来分别带动两个驱动轮。在机器人的驱动装置中,减速器是主要的机械部件,它构成了机器人的传动系统,下面对减速器进行介绍。图16齿轮1、齿轮齿轮机构是现在机械中应用最为广泛的一种传动机构。他可以用来传递空间任意两轴间的运动和力,而且传动准确、平稳、机械效率高,使用寿命长和工作安全可靠。1)齿轮各部分的名称齿轮上每个凸起部分称为齿,齿轮的齿数用z表示。其他参数为:齿顶圆过所有齿轮顶端的圆称为齿顶圆,用半径ra表示,直径用da表示。分度圆和齿轮圆之间的径向距离称为齿顶高,用ha表示。齿根圆过所有齿槽底部的圆称为齿根圆,用半径rf表示,直径用df表示。分度圆和齿根圆之间的径向距离称为齿根高,用hf表示。分度圆齿顶圆和齿根圆之间的一个特殊定圆,用半径r表示,直径用d表示。全齿高齿顶圆与齿根圆之间的径向距离称为全齿高,用半径h表示,h=ha+hf。基圆产生渐开线的圆称为基圆,用半径rb表示,直径用db表示。图17齿轮中心距齿厚每个齿轮上的圆周弧长称为齿厚。在半径为rk的圆周上度量的弧长称为该半径上的齿厚,用sk表示。在分度圆上度量弧长称为分度圆槽宽,用e表示。图17齿轮中心距槽宽两个齿间齿槽上的圆周弧长称为槽宽。在半径为rk的圆周上度量的弧长称为该半径上的槽宽,用ek表示。在分度圆上度量弧长称为分度圆齿厚,用S表示。齿距相邻两个齿轮同侧齿廓之间的圆周弧长称为齿距。在半径为rk的圆周上度量的弧长称为该半径的齿距,用pk表示,显然pk=sk+ek。在分度圆上度量的弧长称为分度圆齿距,用p=s+e表示。在基圆上度量的弧长称为基圆齿距,用pb表示,pb=sb+eb,sb和eb是基圆上的齿厚与槽宽。法向齿距相邻两个齿轮同侧齿廓之间在法线方向上的距离称为法向齿距,用pn表示。由渐开线性质可知:pn=pb。中心距中心距是指相互啮合的一对齿轮,两齿轮的圆心之间的距离,用a表示,a=r1+r2。如图17所示。2)基本参数为了计算齿轮各部分几何尺寸,需要规定若干基本参数,对于标准齿轮而言,有以下5个基本参数:齿数z分度圆模数m分度圆周长=πd=zp,于是可得:d=zp/π由于π是无理数,分度圆的直径也将为无理数,用一个无理数的尺寸作为设计标准,对设计是很不利的。为了方便设计、加工和检验,人为地把分度圆齿距与π的比值用m表示,并取其为一理数列,即:p/π=mm称为分度圆模数,也简称为模数,单位为mm。分度圆直径d=mz,分度圆齿距p=πm。分度圆压力角α过分度圆与渐开线交点作基圆切线得切点N,该交点与中心O的连线与NO线之间的夹角用α表示,其大小等于渐开线在分度圆圆周上压力角的大小。为方便起见,往往用这个中心角表示分度圆压力角。我过规定分度圆压力角标准值一般为20°。在某些装置中,也有用分度圆压力角为14.5°、15°、22.5°、和25°等的齿轮。至此,我们可以给分度圆下一个完整的定义:分度圆就是齿轮中具有标准模数和标准压力角的圆。齿顶高系数ha*齿顶高ha用齿顶高系数ha*与模数的乘积表示,ha=ha*m顶隙系数c*齿根高hf用齿顶高系数ha*与顶隙系数c*之和乘以模数表示,hf=(ha*+c*)m。我国定了齿顶高系数和顶隙系数的标准值:图18齿轮减速器正常齿制图18齿轮减速器当m≥1mm时,ha*=1,c*=0.25当m<1mm时,ha*=1,c*=0.35短齿制ha*=0.8,c*=0.33)渐开线标准直齿轮的几何尺寸和基本参数的关系渐开线标准直齿轮除了基本参数是标准值外,还有两个特征:分度圆齿厚与槽宽相等,即s=e=p/2=πm/2具有标准的齿顶高和齿根高,即ha=ha*mhf=(ha*+c*)m不具备上述特征的称为非标准齿轮。2、减速器减速器是指原动机与工作机之间独立的闭式传动装置,用来降低转速和相应的增大转距。此外,在某些场合,用来增速的。并名为增速器。减速器的种类很多,常用的减速器有齿轮及蜗杆减速器。按其传动和机构的特点,大致可以分为三类:1)齿轮减速器2)蜗杆减速器3)行星减速器。这里仅讨论齿轮减速器,按其减速齿轮的级数可以分为一级、二级、三级及多级,如图所示:按其轴在空间的相互配置可以分为立式和卧式;按其运动简图的特点可以分为展式、同轴式和分流式等。我国已将减速器系列化了,而且指定了某些类型减速器的标准系列。在指定标准系列时,对减速器的主要参数,如中心距,模数,齿宽系数及传动比等,还做了一系列的规定。在计算时须将数值转换成与其相近的标准值。现将减速器的常用参数计算公式列表如下:类型中心距符号总中心距传动比符号总传动比一级aa∑=a=1/2(d2+d1)ii=z从/z主二级高速级afa∑=af+as高速级ifi=if*is低速级as低速级is三级高速级afa∑=af+am+as高速级ifi=if*im*is中速级am中速级im低速级as低速级is减速器的每级有两个齿轮相互啮合传递动力,小齿轮为主动轮(Z1),大齿轮为从动轮(Z2),小齿轮转一周而大齿轮则转不到一周,故而减速(反之,便为增速)。二、机器人的总体结构机器人由机器人小车、手臂、手爪等部分组成,机器人小车、手臂、手爪通过螺纹连接件连接装配在一起。机器人总体三维结构如图19所示,零件之间的三维装配关系如图20所示,手臂和手爪通过电机带动拉绳来驱动。电机停止工作时,在弹簧或橡皮筋的拉动下,手臂和手爪将会回复原位。以上机器人手臂和手爪的总体结构图仅供同学们参考,同学们可以自己创意设计自己的机器人手臂和手爪的结构。三、机器人的手臂结构(若干零件图,用AutoCAD软件绘制)四、机器人的手爪结构(若干零件图,用AutoCAD软件绘制)图20机器人装配关系示意图图19机器人的总体结构图第四篇机器人实验图20机器人装配关系示意图图19机器人的总体结构图实验一基础实验按照图21的电路图连接各电子元器件,控制板上元器件参考布局如图22所示。上电之前请按照以下步骤做好电路检查工作:确保电源正负极之间没有短路(一定要慎重!)确保AT89C51芯片、AS611芯片相邻引脚之间没有短接。AT89C51芯片的引脚20与电源负极相连,AT89C51芯片的引脚31、40与电源正极相连。AS611芯片的引脚4、5、12、13与电源负极相连,AS611芯片的引脚8、16与电源正极相连。复位电路、晶振电路按照电路图正确连接。AT89C51芯片的引脚21、22、23、24分别与第一块AS611芯片的引脚2、7、10、15相连,AT89C51芯片的引脚25、26、27、28分别与第二块AS611芯片的引脚2、7、10、15相连。图21实验一电路图输入以下的汇编程序,编译后将十六进制代码程序烧写进AT89C51芯片,在电路检查正确的前提下,可以尝试着上电,观察运行结果。如果电机不动,请立即断电。再做进一步的检查或者请求教师帮助。图21实验一电路图ORG0000hAJMPMAINORG0100hMAIN:MOVA,#09h;二进制数00001001b小车右转MOVP2,AACALLDELYMOVA,#06h;二进制数00000110b小车左转MOVP2,AACALLDELYMOVA,#05h;二进制数00000101b小车后退MOVP2,AACALLDELYMOVA,#0ah;二进制数00001010b小车前进MOVP2,AACALLDELYMOVA,#20h;二进制数00100000b手臂前进MOVP2,AACALLDELYMOVA,#10h;二进制数00010000b手臂后退MOVP2,AACALLDELYMOVA,#80h;二进制数10000000b手爪松开MOVP2,AACALLDELYMOVA,#40h;二进制数01000000b手爪夹紧MOVP2,AACALLDELYMOVA,#0h;所有电机停MOVP2,ASJMPMAINDELY:MOVR7,#100;12M晶振,延时2秒DLY0:MOVR6,#100DLY1:MOVR5,#100DLY2:DJNZR5,DLY2DJNZR6,DLY1DJNZR7,DLY0RETAT89C51AT89C51AS611AS611碰撞传感器接口手爪驱动电机接口手臂驱动电机接口小车右电机接口小车左电机接口外接电池接口电源总开关红外接收头复位按钮手控手柄接口LM7805稳压芯片右红外发射管右发光二极管左发光二极管左红外发射管图22控制板上元器件参考布局示意图END以下是用单片机C语言编写的运动控制程序,其运动控制功能与上面的汇编语言程序相同。#include<reg51.h>#defineCOUNT0197#defineCOUNT1100unsignedcharbdatamotorctrl;/*底盘两个电机对应的控制位*/sbitIN1_Base=motorctrl^0;sbitIN2_Base=motorctrl^1;sbitIN3_Base=motorctrl^2;sbitIN4_Base=motorctrl^3;/*手臂电机对应的控制位*/sbitIN1_Arm=motorctrl^4;sbitIN2_Arm=motorctrl^5;/*手爪电机对应的控制位*/sbitIN3_Hand=motorctrl^6;sbitIN4_Hand=motorctrl^7;voiddelayL(unsignedcharcount2)smallreentrant;voiddelayM(unsignedcharcount1)smallreentrant;voiddelayS(unsignedcharcount0)smallreentrant;voidrun(bitmotor1,bitdir1,bitmotor2,bitdir2, bitmotor3,bitdir3,bitmotor4,bitdir4);voidstop(bitmotor1,bitmotor2,bitmotor3,bitmotor4);main(){do{run(1,0,1,1,0,0,0,0);/*右转*/delayL(20);/*2s*/run(1,1,1,0,0,0,0,0);/*左转*/delayL(20);run(1,0,1,0,0,0,0,0);/*后退*/delayL(20);run(1,1,1,1,0,0,0,0);/*前进*/delayL(20);stop(1,1,0,0);run(0,0,0,0,1,1,0,0);/*手臂前进*/delayL(20);run(0,0,0,0,1,0,0,0);/*手臂后退*/delayL(20);stop(0,0,1,0);run(0,0,0,0,0,0,1,1);/*手爪松开*/delayL(20);run(0,0,0,0,0,0,1,0);/*手爪夹紧*/delayL(20);stop(0,0,0,1);}while(1);}voiddelayS(unsignedcharcount0)smallreentrant/*****************************************************************************//*短延时函数*//*count0取值范围:0~256*//*延时计算方法:count0x5T+2T。*//*T:机器周期(振荡周期的1/12)。*//****************************************************************************/{while(--count0);/*对应的汇编代码000A150ADEC00AH;T000CAF0AMOVR7,00AH;T000EEFMOVA,R7;T000F70F9JNZ0000AH;2T001122RET;2T*/}voiddelayM(unsignedcharcount1)smallreentrant/*****************************************************************************//*中延时函数*//*count1取值范围:0~256*//*延时计算方法:count1x(11T+delayS(COUNT0))+2T。*//*T:机器周期(振荡周期的1/12)。*//****************************************************************************/{while(--count1)delayS(COUNT0);/*对应的汇编代码0109150BDEC00BH;T010BAF0BMOVR7,00BH;T010DEFMOVA,R7;T010E6008JZ00118H;2T0110750A64MOV00AH,#064H;2T011312021ALCALL0000AH;2T011680F1SJMP00109H;2T011822RET;2T*/}voiddelayL(unsignedcharcount2)smallreentrant/****************************************************************************//*长延时函数*//*count2取值范围:0~256*//*延时计算方法:count2x(11T+delayM(COUNT1))+2T。*//*T:机器周期(振荡周期的1/12)。*//****************************************************************************/{while(--count2)delayM(COUNT1);/*对应的汇编代码0119150CDEC00CH;T011BAF0CMOVR7,00CH;T011DEFMOVA,R7;T011E6008JZ00128H;2T0120750B32MOV00BH,#032H;2T0123120219LCALL00109H;2T012680F1SJMP00119H;2T012822RET;2T*/}voidrun(bitmotor1,bitdir1,bitmotor2,bitdir2, bitmotor3,bitdir3,bitmotor4,bitdir4)/****************************************************************************//*运行函数*//*电机选择(motor1,motor2,motor3,motor4):*//*为1表示对应的电机被选中进行“运转”操作,为0则表示没有被选中。*//*运行方向选择(dir1,dir2,dir3,dir4):*//*对应的电机如果被选中,为1表示按照正方向运行,为0表示按反方向运行。*//*****************************************************************************/{if(motor1)/*1#电机*/{if(dir1){IN1_Base=0;IN2_Base=1;}else{IN1_Base=1;IN2_Base=0;}}if(motor2)/*2#电机*/{if(dir2)/*==1*/{IN3_Base=0;IN4_Base=1;}else{IN3_Base=1;IN4_Base=0;}}if(motor3)/*3#电机*/{if(dir3){IN1_Arm=0;IN2_Arm=1;}else{IN1_Arm=1;IN2_Arm=0;}}if(motor4)/*4#电机*/{if(dir4)/*==1*/{IN3_Hand=0;IN4_Hand=1;}else{IN3_Hand=1;IN4_Hand=0;}}P2=motorctrl;return;}voidstop(bitmotor1,bitmotor2,bitmotor3,bitmotor4)/*****************************************************************************//*停止函数*//*电机选择(motor1,motor2,motor3,motor4):*//*为1表示对应的电机被选中进行“停止”操作,为0则表示没有被选中。*//*****************************************************************************/{if(motor1){IN1_Base=IN2_Base=0;}if(motor2){IN3_Base=IN4_Base=0;}if(motor3){IN1_Arm=IN2_Arm=0;}if(motor4){IN3_Hand=IN4_Hand=0;}P2=motorctrl;return;}图23实验二电路图实验二手控机器人图23实验二电路图按照图23连接各电子元器件,手控手柄上按钮及接口参考布局如图24所示,将手控手柄与机器人控制板通过手控手柄接口用约1.5米长的排线连接起来。输入以下的汇编程序,编译后将十六进制代码程序烧写进AT89C51芯片,观察运行结果。通过手控手柄控制机器人小车的前进、后退、左转、右转运动、手臂的前后运动以及手爪的夹持、松开等动作。 ORG0000h AJMPL1 ORG0100hL1: MOVA,P1 JNBACC.0,L2 JNBACC.1,L3 JNBACC.2,L4 JNBACC.3,L5 JNBACC.4,L6 JNBACC.5,L7 JNBACC.6,L8 JNBACC.7,L9MOVA,#0h;停止MOVP2,A AJMPL1手控手柄接口手控手柄接口小车前进小车后退小车左转小车右转手臂前伸手臂回缩手爪张开手爪闭合图24手控手柄上按钮及接口参考布局图L2: ACALLDELY10msMOVA,P1JBACC.0,L1MOVA,#0ah;小车前进MOVP2,AAJMPL1L3: ACALLDELY10msMOVA,P1JBACC.1,L1MOVA,#05h;小车后退MOVP2,AAJMPL1 L4: ACALLDELY10msMOVA,P1JBACC.2,L1MOVA,#06h;小车左转MOVP2,AAJMPL1 L5: ACALLDELY10msMOVA,P1JBACC.3,L1MOVA,#09h;小车右转MOVP2,AAJMPL1L6: ACALLDELY10msMOVA,P1JBACC.4,L1MOVA,#20h;手臂前进MOVP2,AAJMPL1L7: ACALLDELY10msMOVA,P1JBACC.5,L1MOVA,#10h;手臂后退MOVP2,AAJMPL1L8: ACALLDELY10msMOVA,P1JBACC.6,L1MOVA,#80h;手爪松开MOVP2,AAJMPL1L9: ACALLDELY10msMOVA,P1JBACC.7,L1MOVA,#40h;手爪夹紧MOVP2,AAJMPL1DELY10ms:MOVR6,#50;延时10msDL1:MOVR5,#100DL2:DJNZR5,DL2DJNZR6,DL1RET END以下是用单片机C语言编写的运动控制程序,其运动控制功能与上面的汇编语言程序相同。#include<reg51.h>#defineCOUNT0197#defineCOUNT1100unsignedcharbdatamotorctrl;/*底盘两个电机对应的控制位*/sbitIN1_Base=motorctrl^0;sbitIN2_Base=motorctrl^1;sbitIN3_Base=motorctrl^2;sbitIN4_Base=motorctrl^3;/*手臂电机对应的控制位*/sbitIN1_Arm=motorctrl^4;sbitIN2_Arm=motorctrl^5;/*手爪电机对应的控制位*/sbitIN3_Hand=motorctrl^6;sbitIN4_Hand=motorctrl^7;unsignedcharbdataSW;/*8个手动按钮对应的位*/sbitSW1=SW^0;sbitSW2=SW^1;sbitSW3=SW^2;sbitSW4=SW^3;sbitSW5=SW^4;sbitSW6=SW^5;sbitSW7=SW^6;sbitSW8=SW^7;voiddelayL(unsignedcharcount2)smallreentrant;voiddelayM(unsignedcharcount1)smallreentrant;voiddelayS(unsignedcharcount0)smallreentrant;voidrun(bitmotor1,bitdir1,bitmotor2,bitdir2, bitmotor3,bitdir3,bitmotor4,bitdir4);voidstop(bitmotor1,bitmotor2,bitmotor3,bitmotor4);main(){ while(1) {L1: SW=P1; if(SW1==0) { delayM(10); SW=P1; if(SW1==0) { run(1,1,1,1,0,0,0,0);/*前进*/ gotoL1; } } if(SW2==0) { delayM(10); SW=P1; if(SW2==0) { run(1,0,1,0,0,0,0,0);/*后退*/ gotoL1; } } if(SW3==0) { delayM(10); SW=P1; if(SW3==0) { run(1,1,1,0,0,0,0,0);/*左转*/ gotoL1; } } if(SW4==0) { delayM(10); SW=P1; if(SW4==0) { run(1,0,1,1,0,0,0,0);/*右转*/ gotoL1; } } if(SW5==0) { delayM(10); SW=P1; if(SW5==0) { run(0,0,0,0,1,1,0,0);/*手臂前进*/ gotoL1; } } if(SW6==0) { delayM(10); SW=P1; if(SW6==0) { run(0,0,0,0,1,0,0,0);/*手臂后退*/ gotoL1; } } if(SW7==0) { delayM(10); SW=P1; if(SW7==0) { run(0,0,0,0,0,0,1,1);/*手爪松开*/ gotoL1; } } if(SW8==0) { delayM(10); SW=P1; if(SW8==0) { run(0,0,0,0,0,0,1,0);/*手爪夹紧*/ gotoL1; } } stop(1,1,1,1); }/*endofwhile*/}voiddelayS(unsignedcharcount0)smallreentrant/****************************************************************************//*短延时函数*//*count0取值范围:0~256*//*延时计算方法:count0x5T+2T。*//*T:机器周期(振荡周期的1/12)。*//*****************************************************************************/{while(--count0);/*对应的汇编代码000A150ADEC00AH;T000CAF0AMOVR7,00AH;T000EEFMOVA,R7;T000F70F9JNZ0000AH;2T001122RET;2T*/}voiddelayM(unsignedcharcount1)smallreentrant/*****************************************************************************//*中延时函数*//*count1取值范围:0~256*//*延时计算方法:count1x(11T+delayS(COUNT0))+2T。*//*T:机器周期(振荡周期的1/12)。*//*****************************************************************************/{while(--count1)delayS(COUNT0);/*对应的汇编代码0109150BDEC00BH;T010BAF0BMOVR7,00BH;T010DEFMOVA,R7;T010E6008JZ00118H;2T0110750A64MOV00AH,#064H;2T011312021ALCALL0000AH;2T011680F1SJMP00109H;2T011822RET;2T*/}voidrun(bitmotor1,bitdir1,bitmotor2,bitdir2, bitmotor3,bitdir3,bitmotor4,bitdir4)/*****************************************************************************//*运行函数*//*电机选择(motor1,motor2,motor3,motor4):*//*为1表示对应的电机被选中进行“运转”操作,为0则表示没有被选中。*//*运行方向选择(dir1,dir2,dir3,dir4):*//*对应的电机如果被选中,为1表示按照正方向运行,为0表示按反方向运行。*//*****************************************************************************/{if(motor1)/*1#电机*/{if(dir1){IN1_Base=0;IN2_Base=1;}else{IN1_Base=1;IN2_Base=0;}}if(motor2)/*2#电机*/{if(dir2)/*==1*/{IN3_Base=0;IN4_Base=1;}else{IN3_Base=1;IN4_Base=0;}}if(motor3)/*3#电机*/{if(dir3){IN1_Arm=0;IN2_Arm=1;}else{IN1_Arm=1;IN2_Arm=0;}}if(motor4)/*4#电机*/{if(dir4)/*==1*/{IN3_Hand=0;IN4_Hand=1;}else{IN3_Hand=1;IN4_Hand=0;}}P2=motorctrl;return;}voidstop(bitmotor1,bitmotor2,bitmotor3,bitmotor4)/*****************************************************************************//*停止函数*//*电机选择(motor1,motor2,motor3,motor4):*//*为1表示对应的电机被选中进行“停止”操作,为0则表示没有被选中。*//*****************************************************************************/{if(motor1){IN1_Base=IN2_Base=0;}if(motor2){IN3_Base=IN4_Base=0;}if(motor3){IN1_Arm=IN2_Arm=0;}if(motor4){IN3_Hand=IN4_Hand=0;}P2=motorctrl;return;}实验三寻线机器人寻线系统是机器人的一种简单视觉,在机器人的运动中起着非常重要的作用,为机器人运动过程中位置的准确性提供了保障。每一套寻线系统由比较电路和光发射接收模块两大部分组成。比较电路主要是将光发射接收板输入的模拟信号经比较器比较后,转换为数字信号,输入到单片机中。光发射接收模块主要功能是完成光的发射、接收和将光信号转换为模拟信号。每一块光发射接收模块就是机器人的一个检测点,一般情况每个机器人需安装多个检测点,以保证机器人在运动过程中有较大的偏向检测能力和纠错能力。本寻线系统采用了基于光敏电阻的寻线方案,该寻线系统的电路图如图25所示。光发射接收板上元件及接口参考布局如图26所示。检测点结构每个检测点由1个高亮度发光二极管(LED)和一个光敏电阻组成。发光二极管发出的红色光照射到地面上,产生漫反射,反射光照射到光敏电阻后,光敏电阻的阻值随地面反射光的强弱而显著变化。因此,由于地面引导白线上的光强明显大于黑色的光强。通过电路检测出的信号都通过比较器进行处理,通过调整比较器的比较基准电压,可确定检测点是否处于黑线的上方。图25实验三电路图检测点布局图25实验三电路图为了扩大机器人的偏差纠错能力,寻线机器人使用了4个检测点,其检测点的布局安排如图27a所示。安装板相对于黑色指示带的中心线成对称分布。中间的两个检测点分布在黑色指示带中间位置,以便使检测点相对于黑线的位置变化较为敏感。其余两侧的两个检测点分布较为分散,主要是为了在机器人转弯或偏差过大时“捕捉”黑线用。以下是汇编语言编写的寻线机器人控制的参考程序,请反复调试以下的寻线运动控制程序,以实现机器人小车沿黑线走(如图27b所示)的功能。ORG0000hAJMPSTARTORG0003hAJMPINT_0ORG0100hSTART:SETBEX0;外中断0允许CLRIT0;外中断0低电平有效SETBEA;开中断MOVA,P1JNBACC.0,L3JNBACC.1,L4MOVA,#06h;前进MOVP2,AACALLDELY10msMOVA,#0h;停止MOVP2,AACALLDELY10msAJMPSTARTL3:MOVA,#0h;停止MOVP2,AMOVR7,#13;延时1.04秒ACALLDELYMOVA,#05h;右转MOVP2,AMOVR7,#13;延时1.04秒ACALLDELYAJMPSTARTL4:MOVA,#0h;停止MOVP2,AMOVR7,#13;延时1.04秒ACALLDELYMOVA,#0ah;左转MOVMOVP2,AMOVR7,#13;延时1.04秒ACALLDELYAJMPSTART检测信号指示用发光二极管检测信号指示用发光二极管电源接口检测信号接口可调电阻LM324发光二极管1光敏电阻1发光二极管2光敏电阻2发光二极管3光敏电阻3发光二极管4光敏电阻4图26光发射接收板上元件及接口参考布局图INT_0:PUSHACCPUSHPSWCLREAMOVA,#20h;手臂前进MOVP2,AMOVR7,#100;延时8秒ACALLDELYMOVA,#80h;手爪松开MOVP2,AMOVR7,#50;延时4秒ACALLDELYMOVA,#40h;手爪夹紧MOVP2,AMOVR7,#50;延时4秒ACALLDELYMOVA,#10h;手臂后退MOVP2,AMOVR7,#100;延时8秒ACALLDELYSETBEAPOPPSWPOPACC图27检测点布局图与寻线轨迹图RETI图27检测点布局图与寻线轨迹图DELY10ms:MOVR6,#50DL1:MOVR5,#100DL2:DJNZR5,DL2DJNZR6,DL1RETDELYMOVR6,#200;延时80ms,总延时由R7控制DL3:MOVR5,#200DL4:DJNZR5,DL4DJNZR6,DL3DJNZR7,DELYRETEND实验四避障机器人按照图28连接各电子元器件,输入以下的用于测试的汇编程序,编译后将十六进制代码程序烧写进AT89C51芯片,观察运行结果。碰一下碰撞开关看机器人的运动有何不同;按一下红外遥控器看机器人的运动有什么变化。ORG0000hAJMPMAINORG0003hAJMPINT_0ORG0013hAJMPINT_1图28实验四电路图ORG0100h图28实验四电路图MAIN:SETBEX0;外中断0允许SETBEX1;外中断1允许CLRIT0;外中断0低电平有效SETBIT1;外中断1负跳变有效SETBEA;开中断MOVA,#09h;小车右转MOVP2,AACALLDELYMOVA,#06h;小车左转MOVP2,AACALLDELYMOVA,#05h;小车后退MOVP2,AACALLDELYMOVA,#0ah;小车前进MOVP2,AACALLDELYMOVA,#20h;手臂前进MOVP2,AACALLDELYMOVA,#10h;手臂后退MOVP2,AACALLDELYMOVA,#80h;手爪松开MOVP2,AACALLDELYMOVA,#40h;手爪夹紧MOVP2,AACALLDELYMOVA,#0h;所有电机停MOVP2,ASETBEALOOP:SJMPLOOPINT_0:PUSHACCPUSHPSWCLREACPLP2.0CPLP2.1CPLP2.2CPLP2.3ACALLDELYCPLP2.0CPLP2.1CPLP2.2CPLP2.3SETBEAPOPPSWPOPACCRETIINT_1:PUSHACCPUSHPSWCLREACPLP2.0CPLP2.1CPLP2.2CPLP2.3;ACALLDELY;CPLP2.0;CPLP2.1;CPLP2.2;CPLP2.3SETBEAPOPPSWPOPACCRETIDELY:MOVR7,#100;12M晶振,延时2秒DLY0:MOVR6,#100DLY1:MOVR5,#100DLY2:DJNZR5,DLY2DJNZR6,DLY1DJNZR7,DLY0RETEND以下是用单片机C语言编写的运动控制程序,其运动控制功能与上面的汇编语言程序相同。#include<reg51.h>#defineCOUNT0197#defineCOUNT1100unsignedcharbdatamotorctrl;/*底盘两个电机motor1,motor2对应的控制位*/sbitIN1_Base=motorctrl^0;/*是否需要重新申请空间?*/sbitIN2_Base=motorctrl^1;sbitIN3_Base=motorctrl^2;sbitIN4_Base=motorctrl^3;/*手臂电机motor3对应的控制位*/sbitIN1_Arm=motorctrl^4;sbitIN2_Arm=motorctrl^5;/*手爪电机motor4对应的控制位*/sbitIN3_Hand=motorctrl^6;sbitIN4_Hand=motorctrl^7;voiddelayL(unsignedcharcount2)smallreentrant;voiddelayM(unsignedcharcount1)smallreentrant;voiddelayS(unsignedcharcount0)smallreentrant;voidrun(bitmotor1,bitdir1,bitmotor2,bitdir2, bitmotor3,bitdir3,bitmotor4,bitdir4);voidstop(bitmotor1,bitmotor2,bitmotor3,bitmotor4);main(){EX0=1;EX1=1;IT0=0;IT1=1;run(1,0,1,1,0,0,0,0);/*右转*/delayL(20);/*2s*/run(1,1,1,0,0,0,0,0);/*左转*/delayL(20);run(1,0,1,0,0,0,0,0);/*后退*/delayL(20);run(1,1,1,1,0,0,0,0);/*前进*/delayL(20);stop(1,1,0,0);run(0,0,0,0,1,1,0,0);/*手臂前进*/delayL(20);run(0,0,0,0,1,0,0,0);/*手臂后退*/delayL(20);stop(0,0,1,0);run(0,0,0,0,0,0,1,1);/*手爪松开*/delayL(20);run(0,0,0,0,0,0,1,0);/*手爪夹紧*/delayL(20);stop(0,0,0,1);EA=1;while(1);}voidINT_1()interrupt2/************************************************************************//*外中断1服务程序:由红外开关触发,使两个电机反转。*//************************************************************************/{EA=0;IN1_Base=~IN1_Base;IN2_Base=~IN2_Base;IN3_Base=~IN3_Base;IN4_Base=~IN4_Base;P2=motorctrl;delayL(20);IN1_Base=~IN1_Base;I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论