智能巡线机器人设计.doc 78页

  • 1.13 MB
  • 2022-04-22 13:33:00 发布

智能巡线机器人设计.doc

  • 78页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'××××学院毕业设计第11页智能巡线机器人设计 ××××学院毕业设计第11页第1章绪论本章首先从机器人的发展历程引出机器人研究的发展趋势,再具体到本次设计针对的任务要求,明确了设计任务的主要内容。1.1机电一体化技术简介“机电一体化”源于“Mechatronic”,是一个新兴的边缘学科,国内外都处于发展阶段,她代表着机械工业技术革命的前沿方向。她是当代科学技术发展最为活跃的领域之一。机电一体化是综合应用机械技术、微电子技术、信息技术、自动控制技术、传感测试技术、电力电子技术、接口技术及软件编程技术等,根据系统功能目标和优化组织结构目标,以智力、动力、结构、运动、和感知组成要素为基础,对各组成要素及其间的信息处理、接口耦合、运动传递、物质运动、能量变换机理进行研究,使得整个系统有机结合与综合集成,并在系统程序和微电子电路有序信息流控制之下,形成物质和能量的有规则运动,在高功能、高精度、高可靠性、低能耗意义上实现各种技术功能组合以得到最佳功能价值的系统工程技术。机电一体化技术的产生与发展的根本原因在于社会的发展和科学技术的进步,系统工程、控制工程和信息论是机电一体化的理论基础,是机电一体化技术的方法论。半导体大规模集成电路制造技术的进步则为机电一体化奠定了物质基础,机电一体化技术的研究与应用融合于学科交叉。机电一体化依赖于相关技术的发展,同时也促进了相关技术的发展。目前世界上普遍认为机电一体化可以分为两大类:生产过程机电一体化和机电产品一体化。机电产品的机电一体化是机电一体化的核心,是生产过程机电一体化的物质基础。传统的产品加上微机控制即可转变为新一代的产品,而新产品较之旧产品具有功能强、性能好、密度高、体积小、重量轻、更可靠、更方便、经济效益显著等优点。机电一体化产品小到儿童玩具、家用电器、办公设备,大到数控机床、机器人、自动化生产线、航空航天器,因此,可以说机电一体化技术几乎涉及到社会的各个方面。其中,生产过程的机电一体化包括产品设计、加工、装配、检测的自动化,生产过程自动化,经营管理自动化等。 ××××学院毕业设计第11页当传统机电产品引入电子技术、计算机技术和自动控制技术时,就形成所谓的新一代机电一体化产品。典型的机电一体化产品体现了机械技术、电子技术、计算机技术等的有机结合,几种多种高新技术,并把多种功能集成在一起,在市场上具有极强的竞争能力。机电一体化是机械、微电子、控制、计算机、信息处理等多学科的交叉融合,起发展和进步有赖于相关技术的进步与发展。其主要发展方向为数字化、智能化、模块化、网络化、人性化、微型化、集成化、带源化和绿色化。机电产品高性能一般包含高速、高精度、高效率和高可靠性,人工智能在机电一体化技术中的研究日益得到重视,机器人与数控机床的智能化就是机电一体化技术的重要应用。1.2智能巡线机器人的概况智能巡线机器人的产生已有20多年的历史,它被人们关注于机器人赛事。现在各种机器人赛事,范围普及世界。截止到2000年共有20余项公认的机器人赛事,如机器人足球世界杯比赛、微机器人世界杯锦标赛、日本相扑机器人大赛、机器鼠比赛等。这些机器人赛事有些就是巡线机器人。把比赛的寻线机器人和玩具机器人进行一定的改进,使它具有一定的承载能力,能够被运用于工业的机器人。1.3课题的主要内容针对机器人的巡线特征,设计出能够自动巡线的智能巡线机器人,内容包括机器人机械外形的设计、传感器设计、驱动电路设计、智能巡线的控制设计。具体工作是:1、根据一定要求设计出机器人的机械结构。该机器人可以用于不同场合的循迹,但是必须是引导线的颜色与地面的颜色成鲜明对比。由于考虑到传感器的使用比较多,所以该次设计的机器人主要是用于10cm~50cm宽的引导线循迹。2、选择辨色传感器,必须可靠地识别出浅色引导线和深色地板。传感器是机器人的眼睛,需要选择几种效果很好的传感器,通过比较,择优选择当前条件下最好的传感器,才能给机器人一双明亮的眼睛。辨色传感器需要识别浅色引导线和深色地板,能够很好将检测到的高低电平传送给控制系统。3、传感器的布局策略制定。在布置传感器的过程中,需要考虑到机器人底盘的外形和驱动方法,充分考虑到机器人在行进时可能遇到的各种情况,在调整过程中是否可能会让所有传感器偏离出检测物体,使得巡线失败。要考虑机器人直走和转弯等状态可能产生的各种情况。4、选择合适的电机。由于是载重机器人,电机不仅要有足够大的力矩驱动机器人动作,速度也要快。5、选择驱动芯片。芯片要求能够同时驱动两台电机,且能够实现速度控制。 ××××学院毕业设计第11页6、选择适合本次设计的单片机型号,设计制作性能良好的主控制板。选型是根据单片机输入量的个数和输出量的个数,还要合理留出备用端口方便扩展使用。输入量除了用于巡线的光电传感器信号以外,还包括用超声波传感器检测有无障碍物和是否到达目的地;输出量主要是所有电机需要提供的控制信号的个数。除了端口选择的要求外,还应该满足单片机的运行速度较高,处理信息及时稳定,友好的开发环境,易于在市场上购得等条件。采用主--从式控制或是单--单片机控制都需要在试验中验证可靠性和简易性。7、设计稳定准确快速的巡线方法。这是本设计的关键技术问题,在传感器检测机器人所在位置的基础上,制定稳定、快速的行进方法。 ××××学院毕业设计第11页第2章智能巡线机器人总体方案设计完整的机器人系统就是一个移动的测控系统,包括检测部分、控制部分以及相应的驱动部分。这几个部分是彼此相互关联的,检测部分根据机械结构选择合理的检测手段,驱动部分根据任务要求和机械结构设计相应的驱动电路,控制部分则需从机械结构、检测手段、驱动方法综合考虑。2.1机器人要素分析智能巡线机器人装备包含以下几个要素:机械机构、动力与驱动单元、执行机构、传感测试单元以及信息处理与控制单元五个部分。这五个基本组成要素可以与人体的五大要素进行对比,如图2-1所示。图2-1机器人设备与人体五大要素比较图机械机构的作用类似于人体的骨骼。包括工作模块以及装备所有功能元素的机械支持结构以及机身、框架、连接等。机械机构要在结构、材料、加工工艺性以及几何尺寸等方面可靠、小型、轻量、美观等要求。传感与测试单元的作用相当于人体的五官,对装备本身和外界环境的各种参数及状态进行检测,并将其变换成可识别信号,传输到信息处理单元。它由各种类型的传感器和信号处理电路或测试仪表构成。传感器与测试单元的主要问题在于提高可靠性、灵敏度和精密度。而提高可靠性的关键在于提高抗干扰能力。传感器包括光电传感器(巡线和计数)、超声波传感器(检测是否到达目标和有无障碍物)。 ××××学院毕业设计第11页执行机构相当于人体的手和足。它根据控制单元的指令,快速高精度地完成要求的动作。目前常用的执行机构是电磁式、液压式和气动式机构。此外,还有一些新型的执行机构如超声波驱动器、形状记忆合金驱动器等。执行机构需要根据机器人装备的匹配性要求,考虑改善性能,如何提高精度和快速性,减轻重量,实现组件化、标准化和系列化,提高系统整体的可靠性。动力和驱动单元相当于人体的内脏或肌肉。它在控制单元作用下,提供动力驱动和各种执行机构完成要求的动作和功能。机器人装备一方面要求驱动的高效率和快速反应特性,同时要求对水、油、温度、尘埃等外部环境的适应性和可靠性。智能巡线机器人的动力单元包括步进和直流电机。信息处理与控制单元相当于人体中的头脑。将来自传感器与测试单元的检测信息和外部输入命令进行集中、存贮、分析、加工,根据信息处理结果和预设的控制算法,发出相应的指令控制整个系统有目的地运行。一般由计算机、可编程控制器(PLC)和计算机外部设备等组成。机器人系统对控制和信息处理单元的基本要求是:提高信息处理速度,提高可靠性,增强抗干扰能力以及完善系统自我诊断功能,实现信息处理智能化和小型、轻量、标准化等。2.2机器人总体分析2.2.1场地分析智能巡线机器人是在针对特定的场地,找到适合自身机械特点的定位方法,通过不断调整到达目标,最终完成设定的任务。如何采用简洁、快速、稳定的控制方法和检测设备是机器人的关键。它是在深色地板上放置白色引导线,特点是地面必须与引导线呈鲜明对比。机器人通过传感器循迹,实时反映巡线信息直到CPU发出中断请求停止循迹。一般的工厂不可能绝对无障碍物,为了避免机器人碰撞损伤,机器人需具有蔽障能力和终点停止的功能。2.2.2机械结构分析智能巡线机器人是用于运送货物,它的承载能力为150kg。将机器人设计为小车形式,这样运送货物就更加的方便。为满足运动的准确性,避免在转弯的时候因惯性而偏出路线导致巡线失败,所以机器人的自身重量<=50kg。装货箱的尺寸和形状可以根据实际情况来定,这样既能充分的满足设计的要求,又能使控制的原理更加的简单可靠。底盘是设计的关键,因为底盘车轮配置方式决定着巡线算法的简易程度和可靠程度。2.2.3控制系统框架设计 ××××学院毕业设计第11页对于控制系统模块,光电传感器获取机器人位置姿态信息,超声波传感器判断是否到达目的地和前面是否有障碍物。机器人行走或做其它运动都需要电机将电能转化为机械能。如图2-2所示,CPU根据传感器检测发送的信号,控制电机转动,便可调整机器人运动。由此构成了机器人测控系统。图2-2控制系统框架图2.2.4运动姿态分析机器人的性能好与坏,通常都是指它能不能快捷的完成指定的任务,智能巡线机器人则是要求它能够准确的按照指定的路线行走,不会现出相晃动或偏移。分析它在运行的过程可能出现的状态,设计出相应的策略,就可以解决这些问题。 ××××学院毕业设计第11页第3章机械结构设计机械部分是机器人运行的载体,设计性能良好的机械结构,将有利于简化机器人控制算法的设计,并且机构在执行过程中可以很好的实现控制精度。在这一章里,将分别论述了车轮配置方式、底盘和尺寸。3.1智能机器人的车轮驱动配置机器人的运动方式有轮式、履带式和步行方式。轮式和履带式机器人适合于条件较好的路面,而步行机器人则适合条件较差的路面。为了适应各种路面的情况,可采用轮、腿、履带并用。在本节中主要讨论各种方式的车轮驱动配置类别的特点,并且根据本课题的需要选择恰当的驱动配置方式。3.1.1机器人常用车轮驱动配置介绍1、独轮驱动配置方式其原理上不仅可以在平地行走,也可以在不平整的地面和倾斜的地面上行走。车体的转弯可以利用伴随陀螺仪加速、减速的反力矩。由于其在稳定性方面的弊病,将独轮机构应用于机器人上面基本没有实用性。2、两轮驱动配置方式两轮驱动配置的简图如下图3-1所示:图3-1两轮车简图将自行车或摩托车用于机器人的试验很早就有人进行了。主要依靠手的操作和体重的移动力求稳定行走,这种陀螺两轮车,把车体倾斜成比例的力矩作用在轴系上,利用陀螺效果使车体稳定。但是这种结构的机器人的速度、倾斜等物理量检测、控制精度很难提高。另外在这种机器人上使用相对简单,可靠性高的传感器也很难,而且制动或者低速时的稳定性极难保证,所以目前的研究基本上提留在提高稳定性能力的试验上面。 ××××学院毕业设计第11页3、三轮配置的驱动方式从理论上讲,三点决定一个平面,因此轮式移动载体的平稳运动至少需要3个轮子支撑,所以3轮配置的驱动方式是轮式机器人的基本移动机构。三轮配置驱动主要方式如下图3-2所示:图3-2三轮移动配置方式典型三轮移动机器人通常采用1个中心轮和2个后轮的车轮布置,要解决的主要问题是移动方向和速度的控制。3个车轮配置与功能的不同组合又可以将3轮机器人分为图3-2所示的若干类型。图3-2(a)所示为双轮驱动移动机器人,其组合是前轮1为可以任意方向滚动的小脚轮,小脚轮的作用是使车体稳定,但会给车体带来力学上的干扰冲突,后轮2和后轮3为独立驱动轮,利用它们的转速差实现转向。这种组合的特点是机构组合容易,而且当两个驱动轮以相同速度、相反方向转动时车体能绕两个驱动轮连线的中点自转,但自转中心与车体中心不一致。图3-2(b)的组合是操舵机构和驱动机构集中在前轮1 ××××学院毕业设计第11页上,2个后轮只起支撑从动的作用。与图3-2(a)相比,该机构也能绕2个后轮连线的中点自转,但其前轮驱动集中,结构比较复杂。图3-2(c)的车轮配置组合是前轮1操舵轮,后轮2和后轮3中一个为驱动轮,另一个为从动轮。这种车轮机构的特点是结构简单,组成容易,但单边驱动的驱动性差,稳定性不好,不能自转。图3-2(d)的车轮组合将图3-2(c)的单轮驱动改为双后轮差动驱动,提高了驱动性,但加了一个差动齿轮装置,使结构更复杂,也增加了质量。三轮结构比较简单,能够满足一般的需要,应用也比较广泛。其转向装置的结构通常有两种方式:(1)铰轴转向式:转向轮装在转向铰轴上,转向电机通过减速器和机械连杆机构控制铰轴从而控制转向轮的转向。(2)差速转向式:在移动装置的左右轮上分别装上两个独立的驱动电机,通过控制左右轮的速度比来实现车体的转向。在这种情况下,非驱动轮应为自由轮。4、四轮配置的驱动方式四轮移动机构的典型配置形式如下图3-3所示。图3-3四轮移动机构的典型配置图3-3(a)的组合是前后轮均为万向脚轮或球形轮,左右两轮为独立的驱动轮。与图3-2(a)的三轮车体相比,其自转中心与车体中心重合,当两个驱动轮以相反速度方向转动时,车体能绕自身的中心自转,所以便于在狭长的场所改变方向,这种车轮布置方式在灵活性和稳定性上都是比较好的,但它的缺点是前后辅助脚轮有时不能同时着地支撑,在高速启动和刹车时车体会产生俯仰和前冲。 ××××学院毕业设计第11页图3-3(b)是常见的汽车车轮配置方式。它与图3-2(d)所示的三轮车驱动方式类似,只是将前面一个操舵机改为两个轮子,提高了车体的稳定性。两个操舵轮需要同一个操舵机构来协调转向,此外为了减少后轮的摩擦损耗,配备了差动齿轮装置,增加了机构的复杂性。四轮配置方式的转向方式和三轮配置方式的方法基本相同。3.1.2本系统所采用的车轮驱动方式配置在参考常用车轮驱动方式配置的基础上,结合具体系统的实际情况做出适合本系统的最佳选择,当然这种选择不是一个方面的最优,但是它必须是在考虑到各种实际情况(如机器人车体的载重、材质、控制方法以及加工手段)之后的一个最优方案。在本设计中,机器人在搬运物块过程中的稳定性是我们要考虑的另外一个最为重要的因素。从以上分析的关于机器人车体设计的两个关键问题着手,我们知道三轮移动机构配置的方式虽然简单而且在实际应用中比较多,但是结合本课题的具体实际情况,由于机器人的总重量比较大、重心较高,如果采取三轮移动机构配置的方式,前面只有一个万向轮,而万向轮将和后面的驱动轮共同承担机器人本身的重量,这将导致在转向的过程中前面的万向轮因为承重的原因摩擦力过大而不能灵活的完成转向。而且从稳定性的角度考虑,虽然三点可以决定一个平面,但是如果采用三轮的移动机构配置方式,机器人在巡线时不断调整车身以及转弯时车体摆动是很大的,难免将机器人的重心改变到前轮和其中一个驱动轮中心的连线以外,这样很容易造成机器人的侧翻。综合上面的考虑,在本系统中我们采用了四轮移动机构的配置方式。考虑图3-3(a)所示,如果采用这种移动机构配置方式,它的灵活性和稳定性都是相当好的,而且能够使机器人在比较狭长的空间内实现转向。综合图3-3所示的两幅四轮驱动配置图,我们可以利用它们的优点,去除它们的缺点,最终我们设计的机器人四轮移动机构配置如下图3-4所示。图3-4本系统所用的四轮移动配置方式 ××××学院毕业设计第11页本次机器人使用如上图3-4所示的四轮移动配置方式,它充分综合了图3-2和图3-3所示的四轮移动配置方式的优点,既避免了使作用力过多的作用在一个轮子上,又有效防止了三个轮子配置所带来的侧翻问题,而且使生产加工更为方便,从多个方面解决了我们前面提到的要使机器人系统有很好的承重性能和稳定性的问题。3.2机器人机械尺寸设计1、设计要求:底盘是安装轮子和上层机构的重要联机部件,要求其十分牢固,与轮子和上层机构可以紧密配合2、结构:采用两层机构::第一层底盘装万向轮和驱动轮电机等;第二层底盘用于连接上层机构。两层之间用角铝连接,采用了在同一连接处紧固两个螺钉的方法来加强强度。结构如图3-5和图3-6所示:图3-5两层底盘图3-6万向轮和驱动轮的安装图3、尺寸及分析: ××××学院毕业设计第11页第一层底盘的尺寸为:700mm×850mm第二层底盘的尺寸为:680cm×750mm两层底盘间间距为:100mm.选择两层底盘间距离为100mm,主要是为了有足够的空间安装轮子,电路板布线和电机,防止两者产生干扰。这样,也使上层构建更牢固。宽度方向上选择为750mm,在保证运行稳定的情况下,为了减小体积和重量。 ××××学院毕业设计第31页第4章传感器接口电路设计机器人需要感知外界的环境和自身的状态信息,从而做出正确的判断并告知CPU获取相应的信息。针对要求选用的传感器类型有:超声波传感器、红外光电反射式传感器。红外光电传感器检测巡线轨迹,超声波传感器检测障碍物。4.1机器人对巡线传感器的要求机器人对巡线传感器的要求大致如下:抗干扰性:不同的环境可能存在各种形式的强光干扰、电磁干扰、颜色干扰,必须有较好的抗干扰能力。可调性:比赛场地上机器人的运行环境可能有别于当初调试的环境,可能出发位置、灯光光照角度、日光光照情况均会变化,必须留有调节各种参数的环节,使得传感器工作在最佳状态。稳定性和快速性:一旦传感器移动到引导条带边缘,传感器应当及时、快速、稳定地触发,不允许有状态的抖动,否则会引起机器人的摇晃。成本低廉:对于机器人通用性来说,价格是一个重要的因素。尽管市售产品中有性能良好的光电传感器,但是一般还是以自己开发制作为宜。4.2超声波传感器4.2.1超声波传感器的原理在相扑机器人之类的格斗型机器人中超声波传感器是经常采用的传感器之一,用来检测对方的机器人的有无和距离。本次用到超声波传感器的目的是为了检测是否有障碍物和有没有到达目的地。其原理有如蝙蝠,它的嘴发出超声波,当超声波遇到小昆虫的时候,蝙蝠的耳朵能够接受和反射回波,从而判断饵食的位置和距离并给与捕杀。超声波传感器的工作方式是通过发送器(相当于蝙蝠的嘴)发射出来的超声波被物体反射后传到接收器(相当于蝙蝠的耳朵)接受来判断是否检测到物体。超声波传感器的实物照片如图4-1: ××××学院毕业设计第31页图4-1超声波传感器的实物人的听觉所能感觉的频率范围往往因人而异,大约为20Hz~20kHz。所谓超声波,即空气中传播的超过人类听觉频率极限的声波。kHz(千赫)代表一个频率单位,20kHz即在1秒钟内来回振动2万次的频率状态。众所周知,超声波的传播速度V可以用以下式表示:V=331.5+0.6T(m/s)(4.1)式中T(°C)为环境温度,在23°C的常温下超声波的传播速度为345.3m/s。超声波传感器一般就是利用这样的超声波来检测物体的。具体到超声波传感器的结构,一般它的内部都有一个振子,所谓振子是一块金属片上贴着压电陶瓷,通过给压电陶瓷加上电压,它就会根据电压的大小产生相应的机械变形,进而产生机械振动,这就是所谓的压电现象。超声波传感器就是利用这中原理实现超声波的发射与接收的。如图4-2和图4-3所示:图4-2超声波传感器的结构 ××××学院毕业设计第31页图4-3振动模拟超声波传感器也有透过式和反射式之分。超声波传感器不但可以检测到物体,还可以通过发射器的回波返回接收器所需要的时间来测量距离。4.2.2超声波的发射与接受电路图4-4是超声波的发送和接受电路,将接受的信号通过运算直接输送CPU芯片。图4-4超声波发送和接受电路4.3红外光电反射式传感器机器人到达目标可以选择几种方法: ××××学院毕业设计第31页1、根据起点与终点的位置关系,编制机器人行走路径(通过制定步进电机转动的步数或者通过直流电机编码盘反馈控制电机转动步数)。这种方法在工业机器人控制中比较普遍,可以非常精确的控制机器人关节运动位置和轨迹,但它对机械尺寸和稳定性要求相当高,机器人在制作中的同轴度、平行度、具体尺寸等必须满足设计要求,不允许有偏差。2、采用巡线的方法。所谓巡线指在白色引导条带深色地板的环境下,沿条带指示的路径实现跟踪运动的过程。由于底盘安装精度和后排左右驱动轮子之间的转动速度在制作时并不能保证完全一致,一些关键部件的尺寸在手工制作时也不是严格遵循设计尺寸,因此即使驱动板向左右驱动电机输出的功率相同,也会使机器人的中心线偏离引导线。所以,采用巡线是比较符合要求的。巡线光电传感器就是基于对场地及线路反射光的处理结果来识别路线的一类光电传感器。根据巡线采用的光电传感器原理不同,可分为两种类型:1、红外光电反射式传感器:根据反射光强度巡线。光电传感器由一个发射光源和一个接收器(光敏二极管)组成。基于白线与场地底色反射光强的差异,导致输出电压不同,从而识别白线。2、辨色传感器:根据线路颜色巡线。当条带与场地底色的反射性能区别不明显时,根据反射光强识别线路的效果不会很好,这时可以通过色彩识别来巡线。辨色传感器的功能比较强,应用面广,工作稳定,识别效果好,但是元件多,电路复杂,成本较高。4.3.1红外光电反射式传感器原理红外线的波长介于可见光和无线电波之间,大约0.76~1000um。一般红外光电反射式传感器都选择工作在近红外区,即0.76~2.5um段内。大多数发光器件为880nm、930nm两个系列。880nm较易受到外界光的干扰。红外发光管的材料一般为砷化钾(GaAS)半导体。发光波长范围0.76~1.5um。小功率(小于100mW)的管压降为1.0~1.3V,平均工作电流20~50mA。红外发光管有指向角、光轴、波长、辉度等性能指标。光敏元件常用光电二极管(也称光敏二极管)与光电三极管(也称光敏三极管),均为近红外线接收管。它们接收到光的变化之后造成电流的改变,再经过放大及相关处理,用于各种控制目的。光电二极管是一种光电变换器件,当光照到PN结上时,它能吸收光能将之转变为电能。它有两种工作状态:加反向电压时,二极管中的电流随光照强度的大小而改变,光照强度越大,反向电流越大;不加电压时,PN结受光照射作用,产生正向电压,可充当微型光电池。 ××××学院毕业设计第31页在无光照情况下,光电二极管的正向电阻约10kΩ,反向电阻为∞;有光照时,反向电阻随光照强度增加而减小,阻值可达几kΩ或1kΩ以下。无反压时,正向电压与光照强度成比例,一般可达0.2~0.4V。4.3.2基于反射光强度测量的红外光电反射式传感器电路如图4-5所示,光电二极管工作在反向电压下,当无反射光照射或光照较弱时(即检测到深色底色),电阻为∞。比较器的负端由于上拉了电阻,与地之间有阻值为∞的光电二极管隔开,所以此时2端的电压值较高;当反射光较强时(检测到白色引导线),阻值下降到几kΩ,在R6和D构成的回路中,比较器的输入端2口分得电压,这时的电压值较小。可见在检测白色和深色时2端的电压值是不同的,因此在比较端3口调整输入一个合适的比较值就可以根据检测的颜色在1端输出相应的信号值了。即当检测到深色时,通过比较器输出低电平,经过反向器输出高电平,用于表示检测到深色底色的指示灯亮;当检测到白色时,通过比较器输出高电平,经过反向器输出低电平,指示灯灭。为了使辨色性能更好,采用增强光来加强效果,即每个接收管周围放置四个红色发光二极管,让发射的光线中心部分好在接收管中心。经试验证明,这种增强光起到了很好的改善效果。图4-5红外光电反射式传感器电路在实际设计中,根据摆放位置和分模块设计的需要,将光电二极管单独布置于两块PCB板上如图4-6,只输出光电二极管是否导通的信号;后排同理,也至于另一块PCB板上,可调电阻和比较器布置在另一块PCB板上(图4-7),将光电二极管是否导通的信号转化成相应的高低电平。然后用扁线把他们连接起来,这样达到了分模块的构想,也使得在不同的场地情况下,很方便快速地调节可调电阻部分。 ××××学院毕业设计第31页图4-6置于板上光电二极管检测电路图4-7置于板上传感器调节电路 ××××学院毕业设计第31页4.4红外光电反射式传感器布局光电传感器应尽量靠近地面,以便减少外界光源对传感器的入侵。一般垂直高度为5~10mm。离地面过远,光反射效果差,信号不强;离地面过近,会导致反射角度太大,加剧光漫射干扰的影响,故应适当,以保证传感器具有最佳的反应。实际使用过程中总会遇到意想不到的问题,因此调试环节很重要。实际调试时可以先让传感器分别在两种不同颜色的区域工作,观察其正常电压输出,应当调整到两种电压有明显区别的效果;然后让传感器在工作状态下反复通过两种颜色的边界区,即由一个颜色区进入另一个颜色区,观察输出变化的幅度和响应的灵敏度。通过调整发射光强度、各个传感器距地面的距离和位姿、输出放大倍数或增加调制电路,以获取最佳效果。比赛现场调定也是改善光电传感器性能重要的一步,因为实际场地与模拟现场的条件总会存在差别,要在电路中备留临时可调整环节,这就是为什么要把调节电路单独布置在一块PCB上的原因。光电传感器的布置及线路设置与使用传感器的目的有关。若只是要求机器人不偏离路线,在行走方向的两侧各安一个或一组(3~5个)传感器以控制机器人的左右偏转就可;若要求机器人时刻纪录巡线信息,可将光电传感器排成一条线(直线形或弧线形皆可),由传感器的返回信息可以判断哪个在线上,通过计算就可以求出偏离的大概方位;若要求机器人从一个或多个方向接近路线时都能计算出位置信息,则可将传感器安装成圆形,结合机器人的旋转角度就可计算出相对于路线的位置。当光电传感器检测到的颜色是路面底色(深色)时向单片机输出高电平;当检测到的颜色是引导线颜色(白色)时向单片机输出低电平。这些向单片机输入的高低电平实际是底盘与引导线的相对位置的表征量,单片机根据这些表征量来做出调整输出,通过电机驱动电路控制直流电机的起或停。由于机器人的底盘整体较大,所以布置在底盘的传感器应尽量多,这样可以检测到底盘的多个位置,做出相应位置的快速响应。 ××××学院毕业设计第31页图4-8传感器布局图如图4-8所示传感器布置方法,传感器采用20个,其中18个用于机器人姿态定位,2个为超声波传感器检测有无障碍和是否到达目的地。前后两排传感器分别居于前后轮的中心线上.在这种排布方式下,某排传感器检测到水平白色引导线时,对应该排的轮中心刚好在白色引导线上,可方便转弯和在交叉引导线处及时调整。每排每两个传感器的间距为30mm。对其标号为~。 ××××学院毕业设计第31页第5章电机驱动电路设计驱动部分是机器人运动的源动力,控制着机器人的运动方向和速度。设计性能稳定、快速响应CPU信号的电机驱动电路是机器人运动精度的重要保证。5.1驱动电机的选用移动机器人的主动轮有多种驱动方式,其中采用电机加必要的传动装置应用最为广泛。驱动电机为小车移动提供动力源泉,传动装置具有调速、改变运动方式、方向等作用。利用电压、电流、频率(包括指令脉冲)等控制方式,可以实现定速或变速驱动、反复起停的增量驱动以及复杂驱动。目前常用的控制电机有:电压控制感应电动机(制动电动机或两相伺服电动机)、电压控制直流电动机(DC伺服电动机)、频率控制同步(SM)电动机(步进型伺服电动机)、频率控制感应(IM)电动机(感应型伺服电动机)、频率控制磁阻电动机(步进电动机)等,每种电机又衍生出不同的小类型,不同电机的控制方式、特点和应用场合也不相同。本设计中考虑使用电机驱动车轮,且尽力缩小车体的体积,所以带减速器的电机成为首选,这样只需要将电机输出轴和驱动轮连接起来即可。目前移动机器人领域应用较多的是步进电机和直流无刷电机(BLDC)两种。步进电机是一种将电脉冲信号转换成机械角位移模拟量的控制电机,其输出的位移大小与输入脉冲个数成正比且时间上与脉冲同步,通过改变脉冲频率调节步进电机转速。步进电机一般分为反应式(VR)、用磁式(PM)和混合式(HM)三种。反应式结构简单、工作可靠、运行频率高但转子阻尼大、噪声大,步距角一般在1.50~150之间;永磁式功率小、效率高、价格低,步距角一般在7.50~180之间;混合式介于二者之间,具有步距角小、频率高、功率小的有点,但结构相对来说比较复杂,步距角一般在0.360~3.60之间。直流无刷电动机(BLDC)通过位置传感器检测磁钢位置后,控制相电流通断实现电子换向,避免换向火花,且不产生电磁干扰,具有寿命长、运行可靠、维修简便、变速不受换向条件限制、高速运行、调速范围宽等优点。如果采用PWM控制,只需要通过软件改变PWM波的占空比就可实现调速,这对提高移动机器人在运动中的灵活性非常有用。另外,随着具有PWM输出的单片机在机器人控制器中的广泛应用,采用直流无刷电动机(BLDC)作为驱动电动机的越来越多。 ××××学院毕业设计第31页对比二者的特点,尤其是考虑到使用单片机作为控制器时设计的可靠性,本设计的驱动电机就选用带减速器的直流无刷电动机(BLDC)电机。直流电机的优点表现在以下方面:1、具有较大的转矩,从而能够克服传动装置的摩擦转矩和负载转矩;2、具有快速响应能力,可以适应复杂的速度变化和控制信号的变换;3、电机的负载特性硬,有较大的过载能力,确保运行速度不受负载冲击的影响,增加的系统的可靠性;4、直流电机的空载力矩大,在控制系统发出停转的同时可以立刻响应,并且可以产生相当大的力矩阻止机器人由于惯性继续向前移动;5、直流电机具有很好的环境适应能力。除此之外,DC直流电机相对其他电机来说运动起来平稳,而且噪声小。5.1.1电机减速器的选择这里选用上海朗能机电设备有限公司生产的ZYT60-JB80永磁直流电机。其主要技术参数是:Unom=24V;Inom=4.8A;nnom=2500r/min;Pnom=90W,Gnom=1:5~1:230。具体的实物形状如下图所示图5-1机器人巡线驱动用的直流电机及减速器直流电机的低速性能是偏软的,为使电机工作在稳态下,必须根据巡线机器人的实际运行需要,选择合适的减速器。另外电机的转速比较高,对于巡线机器人来说,容易在转弯的时候因惯性而循迹失败,所以它的速度在6km/小时左右就可以满足要求。根据机器人中一些主要零件的参数,对其电机减速器的减速比计算如下:后轮驱动轮的直径:;驱动轮走一周所满足的路程:;(5.1)速度V转化为:;由得:;(5.2)减速比为:; ××××学院毕业设计第31页选取减速器的减速比为10,针对所选的减速器,对巡线机器人的移动速度进行再计算:减速后轮子的转速:;轮子的转速:;(5.3)经过上面的校核计算,得知选用减速比为1:10的减速器满足这次设计的需要。经过以上对电机和减速器相关分析计算后,我们可以最后确认电机和减速器的型号。由于电机、减速器,轮子都要安装在机器人的下面,当机器人的体积和底面的面积是一定时,电机和轮子的尺寸也相应地受到一定限制。为此采取的办法是去掉电机到轮子中间的齿轮传动机构,取而代之的是与电机相配的小型减速器,该减速器安装在电机上后,整个尺寸不过280作用长,直径90mm左右,其质量比较轻,大概为1.5kg,效率η取0.8,转动惯量Jr取0.8=0.00011(kg·m·m)。5.1.2所选电机性能校核在智能巡线机器人机构中,由于需要一定侧承重量以及加工制造的方便,驱动部分以及支持部分都采用扁钢为材料,机器人结构重量约为50kg,所承受货物的上限为150kg,因而整车载重极限N为200kg。该载重极限由两个万向轮与两个驱动轮共同分担,机器人驱动轮受力如图所示。图5-2轮子的受力驱动轮在减速器的驱动下,克服与地面间的摩擦力F1旋转前进,同时两个转向分别与地面间同样在机体重力及货物重力的作用下存在一定的摩擦力F2。当F1>F2 ××××学院毕业设计第31页时,驱动轮才不至于打滑或空转。初定驱动机构双轮承受重力的60%,两个万向轮承受其余的40%,取驱动轮轮胎与地面间的摩擦系数ƒ=0.02,驱动轮直径=15cm,支撑轮直径D2=4cm.单个驱动轮承受的正压力:(5.4)单个支撑轮承受的正压力:(5.5)单个驱动轮克服的摩擦力:(5.6)单个支撑轮承受的摩擦力:(5.7)在一定的转矩作用下驱动轮克服摩擦力,则转向轮处于从动状态。而在转弯的状态下,一个驱动轮将推动两个万向轮运动,从而在这种要考虑两个驱动轮的摩擦阻力。机器人在运动时承受的最大阻力:(5.8)机器人驱动所需的电机的功率:(5.9)Pnom>P,故所选电机满足要求。5.2直流电机的转动方向控制驱动系统是机器人的手和脚,即运动机构和执行机构的基本组成部分,它的任务不仅是向机器人传递动力,而且要提供准确的运动定位和灵活的操作。通常机器人驱动有电气、液压、气压三种方式。本设计采用电气驱动直流电机。将直流电机与直流电源或电池连接就可以实现转动。不过作为机器人的动力使用时,必须对电机进行转动的开关(ON/OFF)和转动方向等控制。使直流电机转动,必须将它与电池等直流电源连接,如图5-3所示。 ××××学院毕业设计第31页图5-3直流电机与电源的连接以恒定的速度转动时DC电机的等效电路如图5-4。这里,R0是转子线圈的电阻,E0表示转子线圈在定子磁场中转动时产生的反电动势。图5-4DC电机的等效电路若用公式表示,则有V=RaIa+Ec(V)。这里忽略了电刷与整流子之间的接触电压。通常采用半导体或继电器来驱动直流电机。继电器电路比较简单,缺点是由于利用机械触点,所以易产生噪声,反应速度也比较慢。半导体主要是受温度变化影响很大,不易控制输出电压值。常用的晶体管一般都是大功率型的,分为以下几种方式:(a)集电极驱动(b)发射极驱动(c)大功率MOSFET图5-5直流电机驱动电路图5-5(a)是常用的电路,三极管的集电极与直流电机连接,改变基极的电压可以控制与集电极的电机的电流。由于驱动力大,所以这种方式可用于电机的开关(ON/OFF)控制。 ××××学院毕业设计第31页图5-5(b)把三极管的发射极与直流电机连接,改变基极电压可以控制与发射极连接的电机的电压。由于三极管起到可变电阻的作用,所以它会造成电压降并损耗一定的电能。在低速工作的场合,电压降较大,导致电能的使用效率下降,所以常用于速度控制。图5-5(c)与图5-5(a)相似,但是改用大功率MOSFET。大功率MOSFET是电压驱动元件,仅仅施加门电压即可动作,因此电路简单,可在高速下工作。此外,此类元件工作的热特性稳定,最近使用得越来越多。不过上面介绍的电路只能使电机沿一个固定的方向转动,不大符合机器人的实际要求,因为它不仅需要前进,也需要后退。这时,可以改成5-6所示的桥式驱动电路。该电路可实现电机的正转、反转。在图5-6中开关可以采用三极管或FET。(a)正转(b)反转图5-6桥式电路的动作原理(1)图5-7借助对角线方向的一对开关的开闭组合来控制电机的转向,而图5-7(a)表示还能利用开关的开闭实现电机的制动功能。其原理是由于电机线圈两端处于短路状态,当外力企图使电机转动时,产生的反电动势将起到制动的作用。(a)制动(b)短路图5-7桥式电路的动作原理(2)可是,在桥式电路中,当同侧开关处于图5-7(b)所示的闭合状态时,电源实际上将被短路,电路中将出现过大的电流。这时,原来担负开关的任务的三极管或FET将被损坏,因此必须注意避免这种情况的发生。5.3直流电机的速度控制 ××××学院毕业设计第31页用开关(ON/OFF)控制直流电机,只能控制起转动或停止。实际应用的场合,根据任务的要求,需要控制直流电机的速度。两种典型的控制电机速度的方法是改变施加在电机上的电压以及PWM(脉宽调制)。第一种方法,如果使用的使三极管,那么控制电路(发射极••跟踪电路)基本上与电机的开关控制差不多(参加图5-8)。与控制电压相比,施加在电机上的端电压仅仅低出(三极管基极与发射极之间的电压降)。由于基本上不变,所以化也就是的变化。图5-8改变电压实现速度控制图5-8的电路中,电源电压在三极管的集电极和发射极之间产生电压降,会造成集电极发热加剧,因此需要对三极管采取散热措施。特别地,在低电压、低速转动区段,三极管中的电压降低很大,电源效率会显著降低。第二种方法,即PWM控制就是给DC电机输入高速的开关脉冲信号,通过改变脉冲信号开关的比例,达到速度控制的效果,如图5-10所示。图5-10基于PWM的速度控制 ××××学院毕业设计第31页施加给电机的电压呈图6-8所示的脉冲波形,它的占空比,即信号中ON和OFF的比例也是可以改变的。图5-11PWM控制采用的波形简单的解释是,由于在ON的时间内施加电压,OFF的时间内切断电压,因此电机的转动将是断续的。不过在脉冲波形的OFF区段,电机线圈内部存储的能量能够产生沿续流二极管流动的电压(参见图5-10),因此得以继续维持转动。由此可见,脉冲波形的比例(占空比)和储存在电线圈中的能量,以及二极管释放的能量三者均可以任意改变,这个作用与上面改变电压的方法类似,同样能实现速度控制。实际上,为了使电机能平稳地工作,脉冲的重复周期应该具有相当程度的快速性。PWM控制的基本电路与ON/OFF控制相同,电路构成也很简单。施加在电机上的PWM信号一般为几千赫至几十千赫。在电机的PWM速度控制方法中还可以区分若干种方法,如将脉冲发生电路与电机驱动电路组合、PWM控制专用芯片的硬件控制、以及借助软件产生脉冲等等。5.4基于L298N的驱动电路图5-12是专用的电机驱动芯片L298N,如果选用这样的驱动芯片,电路设计就变得非常简单了。图5-12电机驱动芯片L298N ××××学院毕业设计第31页图5-13L298N的管脚功能分布L298N的操作电压可以高到46V,最大电流可达到4A,有温度过载保护,即使输入电压在1.5V,也可认为是逻辑“0”。L298N有15个管脚的集成电路,有直插和贴片两种封装。双通道全桥驱动设计可以获取标准TTL逻辑电压并可驱动电磁感应负载例如继电器、螺线管、直流和步进电机。它的两个使能端可以控制芯片与外部输入信号的通断。L298N是可独立控制两路电机。L298N的逻辑如下图所示: ××××学院毕业设计第31页图5-14L298N的逻辑原理图正是由于L298N每一路都有单独的使能控制端,就将外部输入的PWM信号加在使能端上,就可以很方便的控制电机供电了。图5-15采用L298N驱动电机电路图L298N的5(INA1)和7(INA2)脚控制电机的转向,PWM_1是供电使能端,采用PWM控制输出电压的有效值,即控制电机转速。 ××××学院毕业设计第31页见图5-14L298N的逻辑原理图和图5-15采用L298N驱动电机电路图,原理如下:在PMW_1=1的前提下:若INA1=1,INA2=0则OUTA1=VS,OUTA2=0,电机两端有相对电势差产生转动(假设正转);若INA1=0,INA2=1则OUTA1=0,OUTA2=VS,电机两端有相对电势差产生转动,较上一次输入反转;若INA1=0,INA2=0则OUTA1=0,OUTA2=0,电机两端均为0,电机不转动;若INA1=1,INA2=1则OUTA1=VS,OUTA2=VS,虽然电机两端都有正向电压,但是电势差为0,所以不转动。在PMW_1=0时,所有输出均为0,电机不转动。同理,对于另一个通道也是一个道理。在输出端加上大功率续流二极管,可以使电机线圈内部储存的能量维持起继续转动。这样,一片L298N刚好可以控制两路电机的起停和转速,就直接可以将其用于控制机器人底盘的后排两个驱动轮。通过单片机向驱动电路输入控制信号继而控制驱动轮的起停和转速,便可以控制机器人的速度、方向了。如果不需要控制电机转速,则可以将PWM控制口直接接在+5V,减少对单片机端口的需求。 ××××学院毕业设计第55页第6章智能巡线机器人姿态调整方法为了使机器人的巡线更加准确,针对特定场地的情况下,采用适合机器人自身机械特性的算法让机器人实现准确行走定位是关键。下面,首先根据机器人的机械特性,分析了通过直流电机的起或停控制机器人调整的可能性,然后把传感器监测到的机器人底盘与引导线的相对位置划分为典型的7种状态,做出相应调整方法。最后改进了这种一动一停的校正方法,提出了一个新方法,用PWM控制左右电机的转速产生速度差,由于左右驱动轮的速度差值小了,因此可使机器人在调整过程中减轻晃动,并使行走加快。6.1总体分析根据机器人的机械特征,分析了通过直流电机的起或停控制机器人调整的可能性,然后把传感器检测到的机器人底盘与引导线的相对位置划分为典型的7种状态,做出相应的调整策略。改进了一停一动的校正方法,提出了一个新方法,用PWM控制左右电机的转速产生速度差(图6-1),由于左右驱动轮的速度差值小了,因此可使机器人在调整的过程中减轻晃动,并使行走加快。机器人底盘长700mm,宽850mm。如图6-2所示,后排左右轮是两个独立的由直流电机驱动的轮子,前排放置两个万向轮。直流电机空载力矩大,可以很好地控制所驱动的轮子起或停,万向轮在任何方向都可以实现运动,因此整个机器人的行走方向是依靠后排两个驱动轮的起动或者停止来改变的。图6-1巡线原理图 ××××学院毕业设计第55页由于底盘安装精度和后排左右驱动轮子之间的转动速度不可能完全一致,因此即使驱动板向左右驱动电机输出功率相同,也会使机器人的中心线偏离引导线。如图6-2所示,机器人通过后排左右轮起或停从而调整底盘姿态,目的是保持底盘中心线与白色引导线重合,从而让机器人沿着引导线行进到达目的地。所采用的传感器是自制的光电传感器,当检测到的颜色是路面底色(深色)时向单片机输出高电平;当检测到的颜色是引导线颜色(白色)时向单片机输出低电平。这些向单片机输入的高低电平实际是底盘与引导线的相对位置的表征量,单片机根据这些表征量来做出调整输出,通过电机驱动板控制直流电机的起或停。机器人的底盘整体较大,所以布置在底盘的传感器应尽量多,这样可以检测到底盘的多个位置,做出相应位置的快速响应。如图6-2所示传感器布置方法,传感器18个用于机器人姿态定位。前后两排传感器分别居于前后轮的中心线上。在这种排布方式下,某排传感器检测到水平白色引导线时,对应该排的轮中心刚好在白色引导线上,可方便转弯和在交叉引导线处及时调整。每排每两个传感器的间距为30mm。对其标号~。图6-2传感器布局图(、是转动轮中心)6.2姿态分析根据18路传感器各自所在位置与引导线的相对关系表征量,可以确定此时底盘与引导线的偏移情况。通过不同的优先级处理这些状态量校正底盘的偏移。核心思想是让底盘中心线上的传感器、 ××××学院毕业设计第55页不断地向引导线靠近,使得整个车身以引导线为中心线。问题就转化为让传感器尽量多地包围引导线,此种做法可以保证在调整的过程中至少可以检测到两个引导线,不至于前排或后排传感器都向一侧偏离,使得最终巡线失败;并且可以保证在调整的过程中,、是不断向引导线靠拢的。图6-2状态分析(注:在图6-2中长条矩形代表宽30mm的白色引导线)根据图6-2(a)~(g)的缩略图,通过分析底盘与引导线偏移状态研究出相应的调整法则:1、图6-2(a),前后中心传感器、检测到引导线,底盘中心线与引导线重合,说明机器人在所期待的正确位置,机器人直走,两后轮驱动电机同时转动。2、图6-2(b),后排中心传感器检测到引导线,前排左侧、、、中的一个检测到引导线。机器人底盘右侧大部分偏出,应该向左偏移。驱动轮左轮停,右轮转动,向左移动使底盘中心靠近引导线。3、图6-2(c),后排中心传感器检测到引导线,前排右侧、、、中的一个检测到引导线。机器人底盘左侧大部分偏出,应该向右偏移。驱动轮左轮转动,右轮停,向右移动使底盘中心靠近引导线。 ××××学院毕业设计第55页4、图6-2(d),后排左侧传感器、、、中的一个与前排左侧、、、中的一个同在引导线上。机器人底盘右侧大部分偏出,应该左转。驱动轮左轮停,右轮转动,车身向左移动。5、图6-2(e),后排右侧传感器、、、中的一个与前排右侧、、、中的一个同在引导线上。机器人底盘左侧大部分偏出,应该右转。驱动轮左轮转动,右轮停,车身向右移动。6、图6-2(f),后排左侧传感器、、、中的一个与前排右侧传感器、、、中的一个同在引导线上或者后排左侧传感器、、、中的一个在引导线上且前排中心传感器在引导线上,则右转。让传感器多数进入引导线附近,以免传感器都检测不到引导线而出现盲区。7、图6-2(g),后排右侧传感器、、、中的一个与前排左侧传感器、、、中的一个同在引导线上或者后排右侧传感器、、、中的一个在引导线上且前排中心传感器在引导线上,则左转。让传感器多数进入引导线附近,以免传感器都检测不到引导线而出现盲区。1~5的思想是使机器人底盘的正中传感器向引导线靠近,使得机器人沿着引导线向前移动。6、7的思想是使传感器尽量多地居于引导线附近,以免传感器全都偏离出引导线而检测不到自身的位置,就无法进行判断了。 ××××学院毕业设计第55页第7章主控系统的设计主控系统负责信息处理和控制外部电路,相当于人体中的头脑。将来自传感器与测试单元的检测信息和外部输入命令进行集中、存贮、分析、加工,根据信息处理结果和预设的控制算法,发出相应的指令控制整个系统有目的地运行。本章中将为该主控系统选择一款简洁、廉价、易于开发的芯片MSP430F449,并在该芯片上实现机器人的相应算法。7.1主控制芯片的选型根据上面章节电机驱动电路和传感器接口电路的设计构想,机器人行走机构需要有六路控制信号,其中有两路是PWM控制信号,其他四路分别两两控制电机转向;因此控制电机的信号总共6路,如果机构改变,可能还需要多加电机,就需要对于此项的控制系统的输出量至少有8路。光电传感器向控制系统输入18路检测信号,超声波传感器需要2路输入。综上所述,所选的控制器至少要有8路输出量,20路输入量。可见,本设计对芯片I/O口数量要求很大,并且要响应速度快,运行稳定。7.1.1MSP430系列与89C51系列单片机1、MSP430系列单片机MSP430系列是德州仪器(TI)公司的一个16位的、具有精简指令集的、超低功耗的混合型单片机,在1996年问世,由于它具有极低的功耗、丰富的片内外设和方便灵活的开发手段,已成为众多单片机系列中一颗耀眼的新星。MSP430系列由于具有Flash存储器,在系统设计、开发调试及实际应用上都表现出较明显的优点。这是TI公司推出具有Flash型存储器及JTAG边界扫描技术的廉价开发工具MSP-FET430X110,将国际上先进的JTAG技术和Flash在线编程技术引入MSP430。这种以Flash技术与FET开发工具组合的开发方式,具有方便、廉价、实用等优点,给用户提供了一个较为理想的样机开发方式。MSP430系列单片机的迅速发展和应用范围的不断扩大,主要取决于以下的特点:1)强大的处理能力。MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7种源操作数寻址、4种目的操作数寻址)、简洁的27条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令;有较高的处理速度,在8MHz晶体驱动下指令周期为125ns。这些特点保证了可编制出高效率的源程序。 ××××学院毕业设计第55页2)在运算速度方面,MSP430系列单片机能在8MHz晶体的驱动下,实现125ns的指令周期。16位的数据宽度、125ns的指令周期以及多功能的硬件乘法器(能实现乘加)相配理的某些算法(如FFT等)。3)MSP430系列单片机的中断源较多,并且可以任意嵌套,使用时灵活方便。当系统处于省电的备用状态时,用中断请求将它唤醒只用6us。4)超低功耗MSP430单片机之所以有超低的功耗,是因为其在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处。5)丰富的片上外围模块。MSP430系列单片机的各成员都集成了较丰富的片内外设。它们分别是看门狗(WDT)、模拟比较器A、定时器A(Timer_A)、定时器B(Timer_B)、串口0、1(USART0、1)、硬件乘法器、液晶驱动器、10位/12位ADC、I2C总线直接数据存取(DMA)、端口O(P0)、端口1~6(P1~P6)、基本定时器(BasicTimer)等的一些外围模块的不同组合。其中,看门狗可以使程序失控时迅速复位;模拟比较器进行模拟电压的比较,配合定时器,可设计出A/D转换器;16位定时器(Timer_A和Timer_B)具有捕获/比较功能,大量的捕获/比较寄存器,可用于事件计数、时序发生、PWM等;有的器件更具有可实现异步、同步及多址访问串行通信接口可方便的实现多机通信等应用;具有较多的I/O端口,最多达6*8条I/O口线;P0、P1、P2端口能够接收外部上升沿或下降沿的中断输入;12/14位硬件A/D转换器有较高的转换速率,最高可达200kb/s,能够满足大多数数据采集应用;能直接驱动液晶多达160段;实现两路的12位D/A转换;硬件I2C串行总线接口实现存储器串行扩展;以及为了增加数据传输速度,而采用直接数据传输(DMA)模块。MSP430系列单片机的这些片内外设为系统的单片解决方案提供了极大的方便。6)方便高效的开发环境。目前MSP430系列有OPT型、FLASH型和ROM型三种类型的器件,这些器件的开发手段不同。对于OPT型和ROM型的器件是使用仿真器开发成功之后在烧写或掩膜芯片;对于FLASH型则有十分方便的开发调试环境,因为器件片内有JTAG调试接口,还有可电擦写的FLASH存储器,因此采用先下载程序到FLASH内,再在器件内通过软件控制程序的运行,由JTAG接口读取片内信息供设计者调试使用的方法进行开发。这种方式只需要一台PC机和一个JTAG调试器,而不需要仿真器和编程器。开发语言有汇编语言和C语言。内含FLASHROM多致60K字节,多致2K的RAM,存储空间大,方便中等程序开发。7)适应工业级运行环境。MSP430系列器件均为工业级的,运行环境温度为-40~+85摄氏度,所设计的产品适合用于工业环境下。2、89C51此列单片机的特点 ××××学院毕业设计第55页1)89C51单片机是8位单片机。其指令是采用的被称为“CISC”的复杂指令集,共具有111条指令。而MSP430单片机是16位的单片机,采用了精简指令集(RISC)结构,只有简洁的27条指令,大量的指令则是模拟指令,众多的寄存器以及片内数据存储器都可参加多种运算。这些内核指令均为单周期指令,功能强,运行的速度快。2)89C51单片机本身的电源电压是5伏,有两种低功耗方式:待机方式和掉电方式。正常情况下消耗的电流为24mA,在掉电状态下,其耗电电流仍为3mA;即使在掉电方式下,电源电压可以下降到2V,但是为了保存内部RAM中的数据,还需要提供约50uA的电流。而MSP430系列单片机在低功耗方面的优越之处,则是89C51系列不可比拟的。正因为如此,MSP430更适合应用于使用电池供电的仪器、仪表类产品中。3)89C51系列单片机由于其内部总线是8位的,其内部功能模块基本上都是8位的虽然经过各种努力其内部功能模块有了显著增加,但是受其结构本身的限制很大,尤其模拟功能部件的增加更显困难。MSP430系列其基本架构是16位的,同时在其内部的数据总线经过转换还存在8位的总线,在加上本身就是混合型的结构,因而对它这样的开放型的架构来说,无论扩展8位的功能模块,还是16位的功能模块,即使扩展模/数转换或数/模转换这类的功能模块也是很方便的。这也就是为什么MSP430系列产品和其中功能部件迅速增加的原因。4)就是在开发工具上面。对于89C51来说,由于它是最早进入中国的单片机,人们对它在熟悉不过了,再加上我国各方人士的努力,创造了不少适合我们使用的开发工具。但是如何实现在线编程还是一个很大的问题。对MSP430系列而言,由于引进了Flash型程序存储器和JTAG技术,不仅使开发工具变得简便,而且价格也相对低廉,并且还可以实现在线编程。7.1.2选用MSP430F449的原因1、片内有1个硬件乘法器。在处理数据乘法时响应很快,便于适时处理。2、具有3个捕获/比较寄存器的16位定时器:定时器A和定时器B。定时器便于制定电机转动时间。3、有2路PWM输出。底盘两个电机需要有PWM控制,产生转速差调整底盘。4、有48个I/O引脚,每个I/O口分别对应输入、输出、功能选择、中断等多个寄存器,使得功能口和通用I/O口可以复用,大大增强了端口功能和灵活性。48个端口可以满足采集多路信号和有足够的扩展口便于满足更多的要求。5、采用JTAG技术,FLASH在线编程技术,省去了仿真器。方便在线调试。 ××××学院毕业设计第55页7.1.3MSP430F449的引脚MSP430F44X系列器件的封装形式为100引脚的PLASTIC100-PINQFP,其引脚如图7-1所示。图7-1MSP430F44X系列单片机引脚分布图7.2主控单元电路设计 ××××学院毕业设计第55页图7-2控制原理图电路图7-2说明如下:电源部分——电源滤波和转换U1是三端集成稳压器W7805,将24V的电源转换为5V,再通过调节电路调节为MSP430需要的3.6V电源C1、C2是滤波电容。如图7-3所示: ××××学院毕业设计第55页图7-3转化电路调节关系式:(6.1)--三端集成稳压器输出的电压--调节后输出的电压。输出部分——电机控制端口的确定U2是电机驱动芯片L298N,控制电机转换方向和转动速度。U2电机驱动芯片可以控制两台电机,用于两个轮子的运转,而MSP430F449刚好可以产生出两路PWM信号,因此将这两路信号控制驱动轮的速度。另外还加了一个备用电机的控制端口U4(BEIYONG)。具体的电路接线:P50—LEFT_1,P51—LEFT_2,P12—LEFT_PWM;左电机控制端(LEFT)P52—RIGHT_1,P53—RIGHT_2,P20—RIGHT_PWM;右电机控制端(RIGHT)P62—BEIYONG_1,P63—BEIYONG_2;备用端口(BEIYONG)输入部分——传感器输入端口的确定U3为JTAG调试器,用于实现现场编程。由于需要购买芯片的说明书来确定JTAG接口的具体接法(此次没有购买MSP430F449芯片),所以在图中只是画出了它的接线口位置。 ××××学院毕业设计第55页U5、U6是超声波传感器检测信号的输入端。具体接口连线:P16-(FRONT1);P17-(FRONT2);(保留中断的可能性,即可查询,也可采用中断)。U7分别是光电二极管的输入端。具体接口连线:P30-;P31-;P32-;P33-;P35-;P35-;P36-;P37-;P40-;P41-;P42-;P43-;P45-;P45-;P46-;P47-;(~采用查询)P14-;P15-;(保留中断的可能性,即可查询,也可采用中断)。这种接线方式充分发挥了MSP430各个端口的功能。P1、P2具有中断功能,虽然中断口数量较多,还是需要为系统目前没有想到的外部扩展留下一些端口备用;传感器、用于检测机器人是否遇到障碍物或到达目的地,需要优先响应,所以将这两个信号接于中断口可满足这个要求。虽然在机器人最终的程序设计上,没有采用中断,而采用的是查询(因为如果采用计数中断设置,在机器人遇到白线时,系统执行计数中断,而此时还应该执行含PWM的巡线步骤,如果轮子偏离过大就会出现机器人偏离引导线而导致巡线失败的可能性)。P30~P33接~,相当于P3的低四位读取机器人后排左侧与中心引导线的位置关系;P34~P37接~,相当于P3的高四位读取机器人前排左侧与中心引导线的位置关系;P40~P43接~,相当于P4的低四位读取机器人后排右侧与中心引导线的位置关系;P44~P47接~,相当于P4的高四位读取机器人前排右侧与中心引导线的位置关系; ××××学院毕业设计第55页P3低四位后排左侧与中心引导线的位置P3高四位前排左侧与中心引导线的位置P4低四位后排右侧与中心引导线的位置P4高四位前排右侧与中心引导线的位置图7-4接口设置方法7.3MSP430实现巡线算法通过TI公司的MSP430F449单片机来实现,具体实现算法如下。记:后排中心传感器为BACK,前排中心传感器为FRONT;前排左侧超声波传感器为FRONT1,前排右侧超声波传感器为FRONT2;这四个传感器接入P1口的P14~P17中。左侧传感器、、、、、、和接P3口;右侧传感器、、、、、、和接P4口。对于放置于底部的颜色光电传感器,若检测到深蓝色便向单片机输出高电平,若检测到白色便向单片机输出为低电平。DE_LEFTS_FRONT=(P3IN&0xf0)>>4;//将P3口的高四位值(即、、、)取出存于一个寄存器的低四位中DE_LEFTS_BACK=P3IN&0x0f;//将P3口的低四位值(即、、、)取出存于一个寄存器的低四位中//同理设置P4口DE_RIGHTS_FRONT=(P4IN&0xf0)>>4;DE_RIGHTS_BACK=P4IN&0x0f;由于传感器是检测到白色引导线为低,如果DE_LEFTS_FRONT!=0X0F,则说明、、、中必有一个检测到白色引导线。同理DE_RIGHTS_BACK、DE_RIGHTS_FRONT、DE_LEFTS_BACK。 ××××学院毕业设计第55页图7-5巡线流程图函数实现如下: voidXunXian_BackDrive(void)//后轮驱动巡迹 { ××××学院毕业设计第55页if(((P1IN&FRONT)==0x00)&&((P1IN&BACK)==0x00)) //传感器BACK,FRONT同时在白线内则直进 Run_BackDrive(); elseif(((P1IN&BACK)==0x00)&&(P3_HIGH!=0x0f)) //前排左侧的传感器有一个在白线上&BACK在白线上则左转 TurnLeft_BackDrive(); elseif(((P1IN&BACK)==0x00)&&(P4_HIGH!=0x0f)) //前排右侧中的传感器有一个在白线上&BACK在白线上则右转 TurnRight_BackDrive(); elseif(DE_LEFTS_BACK!=0x0f)&&(DE_LEFTS_FRONT!=0x0f)) //左侧的传感器1,2,3,4中的一个与5,6,7,8中的一个在白线上,则左转 TurnLeft_BackDrive(); elseif((DE_RIGHTS_BACK!=0x0f)&&(DE_RIGHTS_FRONT!=0x0f)) //右侧的传感器9,10,11,12中的一个与13,14,15,16中的一个在白线上,则右转 TurnRight_BackDrive(); elseif (((DE_LEFTS_BACK!=0x0f)&&(DE_RIGHTS_FRONT!=0x0f))||((DE_LEFTS_BACK!=0x0f)&&((P1IN&FRONT)==0x00))) //1,2,3,4中的一个与13,14,15,16中的一个在白线上或者1,2,3,4中的一个在白线且FRONT在白线上,则右转 TurnRight_BackDrive(); elseif (((DE_LEFTS_BACK!=0x0f)&&(DE_LEFTS_FRONT!=0x0f))||((DE_RIGHTS_BACK!=0x0f)&&((P1IN&FRONT)==0x00))) //9,10,11,12中一个与5,6,7,8中一个在白线上或者9,10,11,12中一个在白线且FRONT在白线上,则左转TurnLeft_BackDrive(); else Run_BackDrive(); }其中,Run_BackDrive()是让后排两个驱动轮同时转动;TurnRight_BackDrive() ××××学院毕业设计第55页是让后排左轮转动,右轮停止,使机器人向右移动;TurnRight_BackDrive()是让后排右轮转动,左轮停止,使机器人向左移动。循环调用巡线函数就会得到很好的调整效果,由于是以4个传感器为一组获取底盘的姿态,因此即使在个别感器失灵的情况下也可以很好地巡线。7.4巡线改进方法的实现虽然上述的方法也可以实现机器人的巡线运动,但是它的会出现大幅度的晃动,主要是转弯的时候是一个轮子停止,另一个轮子转动来实现的,使得机器人行驶的速度不快,并且由于两侧的速度差比较大,在来回调整时整个车身都可能产生摆动。改进的方法是采用PWM信号使两个驱动轮的速度不同,从而产生速度差,速度慢的轮相对于速度快的轮停止,这和一动一停的原理是一样的,并且机器人可以边调整边向前运动。如图所示PWM巡线流程图:图7-6PWM巡线流程 ××××学院毕业设计第55页具体软件编程如下:(注:CCR1,CCR2控制驱动电路向电机供电信号的占空比)voidXunJi_BackDrive(void)//后轮驱动寻迹{Run_BackDrive();//直走,两个电机同时全速转动if((DE_BACK==0X00)&&(DE_FRONT==0X00))//传感器BACK,FRONT同时在白线内则直进{/*占空比大*/CCR1=PWM_100;CCR2=PWM_100;}elseif((DE_BACK==0X00)&&(DE_LEFTS_FRONT!=0x0F))//5,6,7,8中的传感器有一个在白线上&BACK在白线上则左转{CCR2=PWM_100;//右电机全速,左电机调整switch(DE_LEFTS_FRONT){case0x07://0111BACK&8在白线CCR1=PWM_85;break;case0x0B://1011BACK&7在白线CCR1=PWM_70;break;case0x0D://1101BACK&6在白线CCR1=PWM_40;break;case0x0E://1110BACK&5在白线CCR1=PWM_25;break;default:break;}}elseif((DE_BACK==0X00)&&(DE_RIGHTS_FRONT!=0x0F))//13,14,15,16中的传感器有一个在白线上&BACK在白线上则右转{CCR1=PWM_100;//左电机全速,右电机调整 ××××学院毕业设计第55页switch(DE_RIGHTS_FRONT){case0x0E://1110BACK&13在白线CCR2=PWM_85;break;case0x0D://1101BACK&14在白线CCR2=PWM_70;break;case0x0B://1011BACK&15在白线CCR2=PWM_40;break;case0x07://0111BACK&16在白线CCR2=PWM_25;break;default:break;}}elseif((DE_LEFTS_BACK!=0X0F)&&(DE_LEFTS_FRONT!=0X0F))//左侧的传感器1,2,3,4与5,6,7,8同在白线上,则左转{CCR2=PWM_100;//右电机全速,左电机调整switch(DE_LEFTS_FRONT){case0x07://01118在白线CCR1=PWM_55;break;case0x0B://10117在白线CCR1=PWM_40;break;case0x0D://11016在白线CCR1=PWM_10;break;case0x0E://11105在白线CCR1=PWM_0;break;default:break;}}elseif((DE_RIGHTS_BACK!=0X0F)&&(DE_RIGHTS_FRONT!=0X0F))//右侧的传感器9,10,11,12与13,14,15,16同在白线上,则右转 ××××学院毕业设计第55页{CCR1=PWM_100;//左电机全速,右电机调整switch(DE_RIGHTS_FRONT){case0x0E://111013在白线CCR2=PWM_55;break;case0x0D://110114在白线CCR2=PWM_40;break;case0x0B://101115在白线CCR2=PWM_10;break;case0x07://011116在白线CCR2=PWM_0;break;default:break;}}elseif(((DE_LEFTS_BACK!=0X0F)&&(DE_RIGHTS_FRONT!=0X0F))||((DE_LEFTS_BACK!=0X0F)&&(DE_FRONT==0X00)))//1,2,3,4与13,14,15,16同在白线上或者1,2,3,4在白线且FRONT在白线上,则右转{CCR1=PWM_100;//左电机全速,右电机调整if(DE_FRONT==0X00)//FRONT在白线上CCR2=PWM_70;elseswitch(DE_RIGHTS_FRONT){case0x0E://111013在白线CCR2=PWM_40;break;case0x0D://110114在白线CCR2=PWM_25;break;case0x0B://101115在白线CCR2=PWM_10;break; ××××学院毕业设计第55页case0x07://011116在白线CCR2=PWM_0;break;default:break;}}elseif(((DE_RIGHTS_BACK!=0X0F)&&(DE_LEFTS_FRONT!=0X0F))||((DE_RIGHTS_BACK!=0X0F)&&(DE_FRONT==0X00)))//9,10,11,12与5,6,7,8同在白线上或者9,10,11,12在白线且FRONT在白线上,则左转{CCR2=PWM_100;//右电机全速,左电机调整if(DE_FRONT==0X00)//FRONT在白线上CCR1=PWM_70;elseswitch(DE_LEFTS_FRONT){case0x07://01118在白线CCR1=PWM_40;break;case0x0B://10117在白线CCR1=PWM_25;break;case0x0D://11016在白线CCR1=PWM_10;break;case0x0E://11105在白线CCR1=PWM_0;break;default:break;}}else//其他情况默认让机器人直行{/*占空比大*/CCR1=PWM_100;CCR2=PWM_100; ××××学院毕业设计第55页}Delay(DELAYTIME);//适当延时,让电机有足够的响应时间。}此程序在编辑的时候,详细的分析了底盘所处的7种状态,同时又对该种状态可能出现的位置情况进行了分析,逐个对其编程,赋予电机不同的转速,避免巡线时振动过大。通过改变两轮的速度差可以使机器人运动更加平缓,逐点编程可以让机器人的巡线更加精确。7.5转弯分析假设存在900的直角转弯,当机器人右转弯时,前排中心传感器处于深蓝色区域,直到转弯900后检测到白线。因此,可以将是否检测到白线作为转弯900判据。但如果以此传感器作为转弯900判据,考虑惯性,机器人虽然响应检测到白线后停止转弯,但是车身还将沿运动方向继续运行,所以实际设计时是以前排靠近中心线的传感器(或者更靠右的传感器)作为右转弯的判别传感器。传感器可能失效,所以多次实验计算转弯大概所需时间的范围(MINTURNTIME,MAXTURNTIME)。可以设定转弯时限,防止因为传感器失效而引起的不停转弯的错误。为方便转弯的后续工作,转弯前尽量让机器人后轮水平线与引导线重合,方法是让机器人后退一段距离补偿车体因为惯性而向前移动的一段距离。图7-7转弯分析以此同时,反应的距离与机器人转动速度有关,所以在转弯时尽量将速度减小,以方便控制。根据实验可以确定将作为转弯的判据相对合理一些。 ××××学院毕业设计第55页图7-6后退补偿流程图 ××××学院毕业设计第55页图7-7转弯流程图转弯函数:voidZhuanWan(intzhuanwandirect)//转弯{unsignedinti;intk=0;Stop();Delay(50000);/*转弯前后退一段距离*/Run_FrontDrive();CCR1=410;CCR2=410;//非全速后退nBasicTimerCounter=0;BackRightFlag=0;BackLeftFlag=0; ××××学院毕业设计第55页while(nBasicTimerCounterMINTURNTIME)&&(k>0))break;if(nBasicTimerCounter>MAXTURNTIME)break;if(DE_TURNRIGHT==0x00){Delay(200); ××××学院毕业设计第55页if(DE_TURNRIGHT==0x00)//防止误判k++;}}break;}caseZUOZHUANWAN:{Right_Cw_Left_UCw();//左转弯for(i=0;i<15;i++)Delay(6000);while(k==0){if(DE_TURNLEFT==0x00){Delay(200);if(DE_TURNLEFT==0x00)//防止误判k++;}}break;}}}通过该程序就可以实现智能巡线机器人的90度转弯,但在转弯的时候必须确保引导线与底盘中心线重合,如果不重合就需要在转弯前进行调整,这样可以避免由于惯性导致的转弯失败。在转弯的时候,由于引导线的线宽是30cm所以在判断传感器某一边是否同时检测到白线时,为了防止误判(环境干扰),可以通过延时来确定是否真的检测到。转弯时间需要通过调试来确定,程序中给的值仅供参考。对于小于90度的转弯一般情况下很少用到,具体的算法略。完整的智能巡线机器人程序请参照附件一。 总结与展望第57页总结本文在参赛机器人基础上进行了一定的改进,设计制作了运送货物的智能巡线机器人,它能够完成特定场地的货物搬运。要求是引导线必须要与地面成鲜明对比。在控制系统设计部分,首先根据机器人的机械特征,分析了通过直流电机的起停控制机器人行走的可能性,然后把传感器检测到的机器人底盘与引导线的相对位置划分为典型的7种状态,做出相应的调整策略。继而用TI公司的低功耗系列单片机MSP430F449编程使之就有自动巡线的能力。同时,改进了一停一动的转弯方式,采用PWM控制左右电机的转速产生速度差,由于左右驱动轮的速度差值小了,因此可使机器人在调整的过程中减轻晃动,并使行走加快。采用自制了可识别不同颜色的光电传感器,可根据需要调节传感器的检测范围,复用性强;采用LM298驱动芯片驱动电路,解决了电流过大和电机高速旋转不易控制的问题。此次设计中主要在以下方面进行了探索和深入:1.在设计传感器的时候,由于使用的数目比较多,考虑到现实中在接线的时候容易出错,借鉴比赛机器人的方法把检测电路和调试电路分别集中在一个板上,用扁线将其连接。考虑到巡线过程避障和到达目的地后自动停止的问题,在设计即将结束时,我又增加了超声波传感器来实现这些功能。2.设计驱动电路,我预先研究了两种方案,一种是L298N芯片驱动电机,一种是光电隔离的方式来驱动(本论文没有详细介绍)。3.芯片的选择,我一开始就选中了MSP430系列的芯片。我看中了它有两条PWM输出端口,不需要另外的脉冲发生器,同时它也是工业级的,很适合这次的设计要求。此次设计,我的题目充分发挥了机电一体化专业所学的知识,机器人是我们专业最显著的代表。此次的设计用到了接口技术及软件编程技术、机械技术、微电子技术、自动控制技术、传感测试技术、电力电子技术。它把我们这几年所学的知识都串接在了一起,使我对机电一体化有了一个全新的认识学到很多新的知识,也弄懂了平时比较模糊的知识,特别是在传感器设计和芯片的接口技术方面有了很大的进步。可以说这次的设计让我弄懂了平时不原意学的部分。 致谢第57页致谢本课题设计是在李××教授的指导下完成的。在整个课题的设计和论文的写作过程中,李教授在各方面多给予了我极大的帮助,衷心感谢他在我设计的过程中给予的关心和支持。感谢黄××老师在芯片的给予我的帮助。感谢在我设计的过程帮助的同学,特别是我的老乡颜××同学,他在电路设计和计算方面给予了我很大的帮助,帮我解读了很多电路图和元件的功能。感谢我的室友,感谢她们在设计的过程给我提供的帮助。在此,我还要特别感谢我的父母,是他们对我的关心、支持、期望和鼓励给予我前进的决心和力量。感谢我所热爱的××学院,在这里我对过了人生中最为灿烂的时刻,向所有的教过我和帮助过我的老师,表示衷心的感谢。 参考文献第59页参考文献[1]仓一郎,土屋.机器人控制电子学(日)[M].北京:科学出版社,2004.5[2]宗光华.机器人的创意设计与实践[M].北京:北京航空航天大学出版社.2004.2.[3]张健民,唐水源,冯淑华.机电一体化系统设计[M].北京:高等教育出社,2001.3[4]周德明.微型计算机系统原理及应用[M].北京:清华大学出版社,2005.9[5]山名宏治.玩具机器人制作(日)[M].北京:科学出版社,2005.3[6]丹尼斯克拉克,迈可尔·欧文斯著.机器人设计与控制[M].北京:北京科学出版社,2004[7]秦曾煌.电工学(下册)[M].北京:高等教育出版社,2003.5[8]谭浩强.C程序设计(第二版)[M].北京:北京清华出版社,1999.12[9]陈远龄.机床电气自动控制(修订本)[M].重庆:重庆大学出版社,2006.1[10]清弘智昭,铃木,升.机器人制作宝典[M].北京:科学出版社OHM社,2002.3[11]FredG.Marin,机器人探索—工程实践指导(美)[M].北京:电子工业出版社2004.8[12]张铁,谢存禧.机器人学[M].广州:华南理工大学出版社2001.4[13]高国富.机器人传感器及其应用[M].北京:化学工业出版社,2005.9[14]DavodCook.机器人制作入门篇(美)[M].北京:北京航空航天大学出版社2005[15]库克(DavodCook).机器人制作入门篇(美)[M].北京:北京航空航天大学出版2005[16]费仁元,张慧慧.机器人设计与分析[M].北京:北京工业大学出版社,1998.9[17]秦曾煌.电工学(上册)[M].北京:高等教育出版社,2003.5[18]胡大可.MSP430系列——FLASH型超低功耗16位单片机[M].北京:北京航空航天大学出版社,2001.11[19]迈克·普瑞德克.机器人控制器与程序设计[M].北京:科学出版社,2004.5[20]http://www.yc2z.com/sjdw/works/robot/ROBOT01.机器人发展史[21]http://langneng.b2b.cvmachine.com/product_view_245949.html.ZYT型永磁直流齿轮减速电动机[22]http://www.utmicro.com/download/mspjj.docMSP430.单片机简介[23]http://www.sensors.com.cn/index.php?gOo=goods_search_list.dwt&sgkey=%E8%B6%85%E5%A3%B0%E6%B3%A2%E4%BC%A0%E6%84%9F%E5%99%A8&gprice_from=&gprice_to=&imageField.x=0&imageField.y=0.超声波传感器 参考文献第59页[24]http://www.xmxpl.com/ybl/shownews.asp?id=32.电容型号与品牌查询[25]http://www.mculover.net/Html/MPS430MCU.湘灵电子[26]http://www.fxdzw.com/dzjs/2005/ee_1.htm.福星电子网[27]http://www.21ic.com/news/n18050c64.aspx.基于ARM的直流电机调速系统的设计与实现[28]http://www.21ic.com.中国电子网[29]http://www.lierda.com/upload/ftp/20070101222.pdf.MPS430F44X英文资料[30]http://www.lierda.com/product/sort_id/1/product_id/15/show_product.html.产品_TI_MSP430[31]http://www.mcu99.com/Article/mcu/200410/391.html,L298N逻辑原理图[32]http://www.mculover.net/Html/MPS430MCU/MPS430new/7873409517661.Html,基于MSP430F449的数字频率计设计[33]http://www.unsp.com.cn/app/html/200511393031.shtml,电动小车的电机驱动及控制[34]http://www.everstars.com/zhanping.asp?name1=%B7%A2%B9%E2%B6%FE%BC%AB%B9%DC.二极管的型号。[35]http://www.99dpj.com/bbs/showlist.asp?bbsbkid=185&donforssid=63,反向器选型[36]http://pdf.dzsc.com/88889/5651.pdf.LM358.双运算放大器[37]http://www.zfjd.cn/Html/article/electron/29392082.html.四电压比较器LM339 附件机器人控制程序第75页附件:机器人控制程序1.详细的C语言程序如下:#includetypedefunsignedcharuchar;#defineDELAYTIME2000#defineZUOZHUANWAN0//左转弯#defineYOUZHUANWAN1//右转弯#defineHOUTUITIME10//后退调整时间#defineMAXTURNTIME12//最大转弯时间#defineMINTURNTIME3//最小转弯时间/*******以下是光电传感器与I/O口的接线方法********//*左侧传感器<--->P3*/#defineS1BIT0//为传感器S1输入段定义到P3.0#defineS2BIT1//为传感器S2输入段定义到P3.1#defineS3BIT2#defineS4BIT3#defineS5BIT4#defineS6BIT5#defineS7BIT6#defineS8BIT7/*右侧传感器<--->P4*/#defineS9BIT0#defineS10BIT1#defineS11BIT2#defineS12BIT3#defineS13BIT4#defineS14BIT5#defineS15BIT6#defineS16BIT7#defineS17BIT4//后#defineS18BIT5//后-右#defineS19BIT6//前 附件机器人控制程序第75页#defineS20BIT7//前-右#defineFRONTS18#defineBACKS17#defineFRONT1S19//左超声波传感器#defineFRONT2S20//右超声波传感器#defineFRONTLEFTS5#defineFRONTRIGHTS16#defineBACKLEFTS1#defineBACKRIGHTS12#defineTURNRIGHTSENSORS14#defineTURNLEFTSENSORS6/*****各个传感器状态标定*****//*寻线状态*/#defineDE_LEFTS_FRONT(((P3IN&0XF0)>>4))//将P3口的高四位值(前排左侧)取出存于一个寄存器的低四位中#defineDE_LEFTS_BACK((P3IN&0X0F))//将P3口的低四位值(后排左侧)取出存于一个寄存器的低四位中#defineDE_RIGHTS_FRONT(((P4IN&0XF0)>>4))//将P4口的高四位值(前排右侧)取出存于一个寄存器的低四位中#defineDE_RIGHTS_BACK((P4IN&0X0F))//将P4口的低四位值(后排右侧)取出存于一个寄存器的低四位中#defineDE_FRONT((P1IN&FRONT))//前中传感器#defineDE_BACK((P1IN&BACK))//后中传感器/*计数状态*/#defineDE_FRONT1((P1IN&FRONT1))//左传感器#defineDE_FRONT2((P1IN&FRONT2))//右传感器/*转弯状态*/#defineDE_TURNRIGHT((P4IN&TURNRIGHTSENSOR))//右转弯判别#defineDE_TURNLEFT((P3IN&TURNLEFTSENSOR))//左转弯判别/*******以下是直流电机驱动板与I/O口的接线方法********//***控制小车行进的直流电机控制板<--->P5***/#defineINB1BIT0//左电机输入1 附件机器人控制程序第75页#defineINTB2BIT1//左电机输入2#defineINTA1BIT2//右电机输入1#defineINTA2BIT3//右电机输入2/****变量定义****/intBackLeftFlag=0;intBackRightFlag=0;intnBasicTimerCounter=0;//基本定时器计数/***以下是占空比设置***/intPWM_100,PWM_85,PWM_70,PWM_55,PWM_40,PWM_32,PWM_25,PWM_15,PWM_10,PWM_0;voidXunJi_BackDrive(void);/*后轮驱动(前进)*/voidRun_BackDrive(void);/*前轮驱动(后退)*/voidRun_FrontDrive(void);voidTurnRight_FrontDrive(void);voidTurnLeft_FrontDrive(void);voidStop(void);voidLeft_Cw_Right_UCw(void);voidRight_Cw_Left_UCw(void);/*快速转弯*/voidINC_By_PWM(void);voidIniTimeA_PWM(void);voidIniMotorOutput(void);voidIniSensorInput(void);voidIniBasicTimer(void);voidDelay(unsignedinti);voidBackSensorState(void);voidBackCloseToHor_FrontDrive(void);voidZhuanWan(intzhuanwandirect);voidmain(void) 附件机器人控制程序第75页{WDTCTL=WDTPW+WDTHOLD;//关闭看门狗INC_By_PWM();IniTimeA_PWM();IniMotorOutput();IniSensorInput();IniBasicTimer();_EINT();//中断允许BackSensorState();Whlie((DE_FRONT1&&DE_FRONT2)==0X00){BackSensorState();if((BackRightFlag==0)&&(BackLeftFlag==0))XunJi_BackDrive();elseif((BackRightFlag==1)&&(BackLeftFlag==0))Zhuanwan(YOUZHUANWAN);elseif((BackRightFlag==0)&&(BackLeftFlag==1))Zhuanwan(ZOUZHUANWAN);elsebreak;}Stop();}voidINC_By_PWM(void)//加速{PWM_100=1500;//100%PWM_85=1275;//85%PWM_70=1050;//70%PWM_55=825;//55%PWM_40=600;//40%PWM_32=480;//32%PWM_25=375;//25%PWM_15=225;//15% 附件机器人控制程序第75页PWM_10=150;//10%PWM_0=0;//0%}voidIniTimeA_PWM(void){FLL_CTL0|=XCAP14PF;//ConfigureloadcapsTACTL=TASSEL_0+TACLR;//定时器A时钟信号选择SMCLK,定时器清零CCR0=1500;//捕获/比较控制寄存器CCR0初值为1500CCTL1=OUTMOD_7;//CCR1选择模式7:reset/setCCR1=PWM_100;//CCR1PWMdutycycleCCR1-100%PWMCCTL2=OUTMOD_7;//CCR2选择模式7:reset/setCCR2=PWM_100;//CCR2PWMdutycycleCCR2-100%PWM}voidIniMotorOutput(void){/*PWM信号输出端*/P1DIR|=0x04;//设置P1.2为输出P1SEL|=0x04;//将P1.2使用外围模块=TA1P2DIR|=0x01;//P2.0outputP2SEL|=0x01;//将P2.0使用外围模块=TA2TACTL|=MC1;//选用增计数模式(增计数到与CCR0相等)P5DIR=0xff;P5OUT=0X00;P6DIR=0XFF;P6OUT=0X00;Run_BackDrive();}voidIniSensorInput(void){P3DIR=0x00;/*左侧传感器<--->P3*///查询方式P4DIR=0x00;/*右侧传感器<--->P4*//查询方式 附件机器人控制程序第75页P1DIR&=~(FRONT+BACK+RONGT1+FRONT2);}voidIniBasicTimer(void){FLL_CTL0|=XCAP14PF;BTCTL=BT_ADLY_125;//125ms产生一次中断IE2|=BTIE;//关BT}#pragmavector=BASICTIMER_VECTOR__interruptvoidBasic_Timer(void)//Basic_Timer中断处理{nBasicTimerCounter++;if(nBasicTimerCounter>30000)nBasicTimerCounter=0;}voidXunJi_BackDrive(void)//后轮驱动寻迹{Run_BackDrive();if((DE_BACK==0X00)&&(DE_FRONT==0X00))//传感器BACK,FRONT同时在白线内则直进{/*占空比大*/CCR1=PWM_100;CCR2=PWM_100;}elseif((DE_BACK==0X00)&&(DE_LEFTS_FRONT!=0x0F))//5,6,7,8中的传感器有一个在白线上&BACK在白线上则左转{CCR2=PWM_100;switch(DE_LEFTS_FRONT){ 附件机器人控制程序第75页case0x07://0111BACK&8在白线CCR1=PWM_85;break;case0x0B://1011BACK&7在白线CCR1=PWM_70;break;case0x0D://1101BACK&6在白线CCR1=PWM_40;break;case0x0E://1110BACK&5在白线CCR1=PWM_25;break;default:break;}}elseif((DE_BACK==0X00)&&(DE_RIGHTS_FRONT!=0x0F))//13,14,15,16中的传感器有一个在白线上&BACK在白线上则右转{CCR1=PWM_100;switch(DE_RIGHTS_FRONT){case0x0E://1110BACK&13在白线CCR2=PWM_85;break;case0x0D://1101BACK&14在白线CCR2=PWM_70;break;case0x0B://1011BACK&15在白线CCR2=PWM_40;break;case0x07://0111BACK&16在白线 附件机器人控制程序第75页CCR2=PWM_25;break;default:break;}}elseif((DE_LEFTS_BACK!=0X0F)&&(DE_LEFTS_FRONT!=0X0F))//左侧的传感器1,2,3,4与5,6,7,8同在白线上,则左转{CCR2=PWM_100;switch(DE_LEFTS_FRONT){case0x07://01118在白线CCR1=PWM_55;break;case0x0B://10117在白线CCR1=PWM_40;break;case0x0D://11016在白线CCR1=PWM_10;break;case0x0E://11105在白线CCR1=PWM_0;break;default:break;}}elseif((DE_RIGHTS_BACK!=0X0F)&&(DE_RIGHTS_FRONT!=0X0F))//右侧的传感器9,10,11,12与13,14,15,16同在白线上,则右转{CCR1=PWM_100; 附件机器人控制程序第75页switch(DE_RIGHTS_FRONT){case0x0E://111013在白线CCR2=PWM_55;break;case0x0D://110114在白线CCR2=PWM_40;break;case0x0B://101115在白线CCR2=PWM_10;break;case0x07://011116在白线CCR2=PWM_0;break;default:break;}}elseif(((DE_LEFTS_BACK!=0X0F)&&(DE_RIGHTS_FRONT!=0X0F))||((DE_LEFTS_BACK!=0X0F)&&(DE_FRONT==0X00)))//1,2,3,4与13,14,15,16同在白线上或者1,2,3,4在白线且FRONT在白线上,则右转{CCR1=PWM_100;if(DE_FRONT==0X00)//FRONT在白线上CCR2=PWM_70;elseswitch(DE_RIGHTS_FRONT){case0x0E://111013在白线CCR2=PWM_40; 附件机器人控制程序第75页break;case0x0D://110114在白线CCR2=PWM_25;break;case0x0B://101115在白线CCR2=PWM_10;break;case0x07://011116在白线CCR2=PWM_0;break;default:break;}}elseif(((DE_RIGHTS_BACK!=0X0F)&&(DE_LEFTS_FRONT!=0X0F))||((DE_RIGHTS_BACK!=0X0F)&&(DE_FRONT==0X00)))//9,10,11,12与5,6,7,8同在白线上或者9,10,11,12在白线且FRONT在白线上,则左转{CCR2=PWM_100;if(DE_FRONT==0X00)//FRONT在白线上CCR1=PWM_70;elseswitch(DE_LEFTS_FRONT){case0x07://01118在白线CCR1=PWM_40;break;case0x0B://10117在白线CCR1=PWM_25;break; 附件机器人控制程序第75页case0x0D://11016在白线CCR1=PWM_10;break;case0x0E://11105在白线CCR1=PWM_0;break;default:break;}}else{/*占空比大*/CCR1=PWM_100;CCR2=PWM_100;}Delay(DELAYTIME);}voidRun_BackDrive(void)//直进,两个电机同时正转{P5OUT|=INB1;//P5.0OUT输出1P5OUT&=~INB2;//P5.1OUT输出0P5OUT|=INA1;//P5.2OUT输出1P5OUT&=~INA2;//P5.3OUT输出0}voidDelay(unsignedinti){while(i)i--;}voidBackSensorState(void)//后排传感器与水平线位置{ 附件机器人控制程序第75页if((P4IN&BACKRIGHT)==0X00){Delay(200);if((P4IN&BACKRIGHT)==0X00)//防止误判BackRightFlag=1;elseBackRightFlag=0;}elseBackRightFlag=0;if((P3IN&BACKLEFT)==0X00){Delay(200);if((P3IN&BACKLEFT)==0X00)//防止误判BackLeftFlag=1;elseBackLeftFlag=0;}elseBackLeftFlag=0;}voidBackCloseToHor_FrontDrive(void)//后排传感器调整转弯前调整{while(((BackRightFlag==1)&&(DE_LEFTS_BACK!=0X0f))||((BackLeftFlag=10)&&(DE_RIGHTS_BACK!=0X0f))){BackSensorState();if((BackRightFlag==1)&&(DE_LEFTS_BACK!=0X0f))//右全进入白线,左侧部分进入TurnLeft_FrontDrive();//左电机反转Elseif((BackRightFlag==0)&&(DE_RIGHTS_BACK!=0X0f))//左先进入白线,右侧部分进入TurnRight_FrontDrive();右电机反转elsebreak;}BackRightFlag=0; 附件机器人控制程序第75页BackLeftFlag=0;}voidZhuanWan(intzhuanwandirect)//转弯{unsignedinti;intk=0;Stop();Delay(50000);/*转弯前后退一段距离*/Run_FrontDrive();CCR1=410;CCR2=410;//非全速后退nBasicTimerCounter=0;BackRightFlag=0;BackLeftFlag=0;while(nBasicTimerCounterMINTURNTIME)&&(k>0))break;if(nBasicTimerCounter>MAXTURNTIME)break;if(DE_TURNRIGHT==0x00){Delay(200);if(DE_TURNRIGHT==0x00)//防止误判k++;}}break;}caseZUOZHUANWAN:{Right_Cw_Left_UCw();//左转弯for(i=0;i<15;i++)Delay(6000);while(k==0){if(DE_TURNLEFT==0x00){Delay(200);if(DE_TURNLEFT==0x00)//防止误判 附件机器人控制程序第75页k++;}}break;}}}//右转弯voidLeft_Cw_Right_UCw(void){P5OUT|=INB1;//P5.0输出1P5OUT&=~INB2;//P5.1输出0CCR1=250;P5OUT&=~INA1;//P5.2输出0P5OUT|=INA2;//P5.3输出1CCR2=250;}//左转弯voidRight_Cw_Left_UCw(void){P5OUT&=~INB1;//P5.0输出0P5OUT|=INB2//P5.1输出1CCR1=250;P5OUT|=INA1;//P5.2输出1P5OUT&=~INA2;//P5.3输出0CCR2=250;}voidRun_FrontDrive(void)//直进,两个电机同时反转{P5OUT|=INB2;//P5.1输出1P5OUT&=~INB1;//P5.0输出0P5OUT|=INA2;//P5.3输出1 附件机器人控制程序第75页P5OUT&=~INA1;//P5.2输出0}voidTurnRight_FrontDrive(void)//右转:左电机反转,右电机停{P5OUT|=INB2;//P5.1输出1P5OUT&=~INB1;//P5.0输出0CCR1=250;P5OUT&=~(INA1+INA2);//P5.2、P5.3输出0CCR2=0;}voidTurnLeft_FrontDrive(void)//左转:左电机停,右电机反转{P5OUT&=~(INB1+OUTB2);//P5.0、P5.1输出0CCR1=0;P5OUT|=INA2;//P5.3输出1P5OUT&=~INA1;//P5.2输出0CCR2=250;}voidStop(void){P5OUT&=~(INB1+INB2);//P5.0、P5.1输出0CCR1=0;P5OUT&=~(INA1+INA2);//P5.2、P5.3输出0CCR2=0;}程序完 附件机器人控制程序第75页附件二:元件1.LM339四电压比较器引脚图2.7414反向器引脚图3.LM358双运算放大器引脚图'