《本科毕业论文-基于单片机的多自由度机械手臂控制器.docx》由会员分享,可在线阅读,更多相关《本科毕业论文-基于单片机的多自由度机械手臂控制器.docx(46页珍藏版)》请在课桌文档上搜索。
1、房山老院毕业设计设计题目:基于单片机的多自由度机械手臂控制器设计系别:信息工程系班级:11电气工程及其自动化3班姓名:刘亮指导教师:田红霞2O15年6月1日基于单片机的多自由度机械手臂控制器设计摘要机械臂控制器作为机械臂的大脑,对于它的研究有着十分重要的意义。随着微电子技术和控制方法的不断进步,以单片机作为控制器的控制系统越来越成熟。本课题正是基于单片机的机械臂控制系统的研究。本文首先介绍了国内外机械臂发展状况以及控制系统的发展状况。其次,阐述了四自由度机械手臂控制系统的硬件电路设计及软件实现。详细阐述了机械臂控制系统中单片机及其外围电路设计、电源电路设计和舵机驱动电路设计。在程序设计中,着重
2、介绍了利用微分插补法进行PWM调速的程序设计。并给出了控制器软件设计及流程图。最后,给出了系统调试中出现的软硬件问题,进行了详细的分析并给出了相应的解决办法。关键词:机械臂单片机自由度舵机PWMDesignofMultiDOFManipulatorControllerBasedonMCUAbstractAsthebrainofrobotarm,manipulatorcontrollerisveryimportantforitsresearch.Withthedevelopmentofmicroelectronicstechnologyandcontrolmethod,thecontrolsys
3、temofMCUisbecomingmoreandmoremature.ThisthesisisbasedontheresearchofthemanipulatorcontrolsystemofMCU.Firstly,itisintroducedthedevelopmentofthemanipulatorandthecontrolsystemathomeandabroad.Secondly,itisgiventhecircuitandsoftwaredesignforthefourDOFmanipulatorinthisdisertation.itisexpatiatedtheSingleCh
4、ipMicrocomputer(SCM)Jherelativecircuitdesign,Powercircuitdesign,anddrivercircuitdesignofmanipulatorcontrolsystem.Inthedesignoftheprogram,thedesignofPWMspeedregulationbydifferentialinterpolationisintroducedemphatically.Thesoftwaredesignandflowchartofthecontrolleraregiven.Finally,itispresentedtheprobl
5、emsofhardwareandsoftwareinpractivegivenresolves.Keyword:Manipulator;MCU;DOF;Steeringengine;PWM1弓I言11.1 研究的背景和意义11.2 国内外机械臂研究现状21.2.1 国外机械臂研究现状21.2.2 国内机械臂研究现状31.3 机械臂控制器的发展现状31.4 本设计研究的任务42机械结构与控制系统概述52.1 机械结构52.2 控制系统62.3 系统功能介绍82.4 舵机工作原理与控制方法82.4.1 概述82.4.2 舵机的组成82.4.3 舵机工作原理93系统硬件电路设计113.1 时钟电路设
6、计113.2 复位电路设计113.3 控制器电源电路设计123.4 舵机驱动电路133.5 串口通信电路设计134系统软件设计144.1 四自由机械臂轨迹规划154.2 主程序设计164.3 舵机调速程序设计174.3.1 舵机PWM信号174.3.2 利用微分插补法实现对多路PWM信号的输出184.4 初末位置置换子程序214.5 机械爪控制程序224.6 定时器中断子程序234.6.1 定时器TI中断程序234.6.2 定时器TO中断子程序245系统软硬件调试255.1 单片机系统开发调试工具255.1.1 编程器255.1.2 集成开发环境Keil和Protues255.2 控制系统的仿
7、真265.3 软件调试275.4 硬件调试275.5 软硬件联合调试286结论29谢辞30参考文献31附录321引言1.1 研究的背景和意义机器人是传统的机械结构学结合现代电子技术、电机学、计算机科学、控制理论、信息科学和传感器技术等多学科综合性高新技术产物,它是一种拟生结构、高速运行、重复操作和高精度机电一体化的自动化设备。在研究和开发未知及不确定环境下作业的机器人的过程中,人们逐步认识到机器人技术的本质是感知、决策、行动和交互技术的结合。随着科技的不断进步尤其控制理论、材料学和传动结构学的发展以及制造工艺的进步,推动着机器人技术大跨步的向前发展。目前,各个领域的都有其专有的机器人为其服务,
8、如移动机器人、微机器人、水下机器人、医疗机器人、军用机器人、空中空间机器人、娱乐机器人等。当今各领域的制造行业都有其自动化流水线,例如,汽车自动化生产流水线就主要由工业机器人组成。机器人与其他相应的制造设备的最大的优点是,其对生产环境有着极大的适应性和对各种任务的拓展性。目前工业机器人已和最初的仿人型机器人有着很大的区别,更加符合各种不同生产制造领域的特殊要求,其中,目前,大多数工业机器人的形状类似人的手臂,能模拟人的手臂的部分动作,按预定的程序轨迹及其它要求,实现抓取、搬运工作或操纵工具的自动化装置。它们通常用于代替人的繁重劳动以解决人的生存,生产的难题,实现生产的机械化和自动化,能在有害环
9、境下操作以保护人身安全,因而广泛应用于机械制造、冶金、电子、轻工业和原子能等行业。近年来工业机器人在工厂自动化改革中发挥着巨大的作用,代替人处理一些重复性、精密性、高工作负荷的工作,大大加快了生产效率,缩减了生产周期。如汽车自动化生产线中的机器人的无缝焊接,钢厂里的钢材分拣机器人的搬运打捆,都用到了工业机器人(机械臂)。各生产领域专有的机器人能够使生产效率更高,降低损失,节约成本。随着机器人技术的发展,当前的工业机械手臂的结构更加的简单,大多数为模块化的,因此,能够做到易于维护、容易扩展到更多的自由度,并且其动作能够具有较高的灵活性。对于机械手臂的控制器设计,希望使用复杂高效的控制算法使机械手
10、臂实现更高的控制性能,更精确的定位精度。并希望其控制拥有较好的系统稳定性并有较强的可扩展性。1.2 国内外机械臂研究现状1.2.1 国外机械臂研究现状世界上第一台工业机器人(机械手臂)诞生在美国,1954年美国人乔治德沃尔研制了世界上第一台可编程机器人样机。从第一台机械手臂诞生以来的60多年里,人类对机械手臂的热情不但没有丝毫减弱,反而越来越多的人投入到机械臂的研究和制造中。1969年,世界上第一条自动化汽车生产线由美国通用汽车公司用21台工业机器人组成。美国凭借其机器人技术全面、先进、适应性强在国际上仍一直处于领先地位。日本在1967年,由丰田纺织自动化公司从美国引入第一台工业机器人,开始了
11、日本的工业机器人发展时代。1976年以后,随着微电子的快速发展和市场需求急剧增加,日本当时经济增长迅速,劳动力显著不足,工业机器人的出现使企业犹如获得了救命稻草,使其日本工业机器人得到快速发展。日本现有的工业机器人保有量位居世界第一,素有“机器人王国”之称。工业机器人在欧洲的发展也非常快,1973年ABB公司研制的IRB6机器人,是世界上第一台全自动微型处理器控制的机器人。同年库卡机器人也推出了自己的第一台机器人FAMU1.US,它是第一个由6个电机驱动的关节机器人。大多数欧洲国家政府比较重视工业机器人的发展,比如法国规定,对于一些危险、有毒、有害的工作岗位,必须以机器人来代替普通人的劳动。德
12、国由于其先进的工业体系,政府通过大力支持一系列研究计划,建立了一个完整的工业机器人科学技术体系,使德国机器人技术一直处于领先的地位。近些年,意大利、瑞典、英国、俄罗斯、乌克兰等国家由于自身国内机器人市场的巨大需求和国际上机器人市场的激烈竞争,发展速度也非常迅速。目前,世界上工业机器人生产厂家主要集中在日本和欧美。口系生产厂家组要有三菱、发那科、松下、川崎、安川等。欧系中具有代表性的有,瑞典的ABB、德国的KUKA、美国的AdePt、意大利的Ce)MAU及奥地利的IGM公司。下面以KUKA最新研制的小型机器人KR6R700Evve为代表介绍当前工业机器人的最新技术,KRAGI1.USfivve是
13、一个五自由度的机械臂,它的特点是极高的作业速度和极高的精确度。因为它的体积小,占用空间很小,可选择安装地面、天花板等位置,因此KRAGI1.USfivve的安装适用能力极高。KRAGl1.USfiVVe的重量48kg,最大负荷是6kg,最大工作半径是7067mm,重复精确度为0.03mm,可见其精确度极高,可以应付的工艺流程很多。其控制系统是KUKA公司最新研究的KRC4COMPACT,只是一种更高效、更稳定、更灵活且更智能化的控制系统。灵活的结构设计和由此产生的可扩展性令其成为一款全能型控制系统。按照目前的发展趋势国外机械手今后将大力研制具有某种智能的机械手,例如,触觉交互技术的加入。122
14、国内机械臂研究现状在古代的中国就有类似于现代的某些机器人的设备,例如,诸葛亮研制的木牛流马,鲁班造的木车。当前在我国,现代机械臂的研究最早开始于上世纪70年代。1972,上海成功的研制了我国的第一台机械手臂,随之各地都有相应的研制计划研制基地,各重点高校陆续的开展的相关的专业和课程,今天我国的机械手臂应用已达到空前的高度。我国政府从七五规划开始,大力发展机器人技术,制定了大量的相关鼓励政策并且为此投入大量的科研资金。随后各地自动化研究所和相关企业开发并且制造了一系列的工业机器人,有由北京机电一体化研究所研制的焊接机器人,哈尔滨机床厂和哈工大联合制造的喷涂机器人,大连自动化研究所设计制造的拥有自
15、主知识产权的氢弧焊机器人,沈阳工业大学设计制造的装卸载机器人等。机器人的控制器技术通过从外国引进、消化、吸收,大多是由中国工程院和沈阳自动化研究所及北京科技大学机器人研究所开发的,但很多的机器人关键部件还有国外几家少数机构垄断,如机器人专用轴承,减震齿轮,直流伺服电机等。我国的工业机械手的应用范围主要集中在一些自动化要求较高的制造业和先进的重工业,并且随着能源产业的壮大的相应的工业机器人也在逐渐的被应用。在目前专业机械手的发展和应用比较广泛时,应相应的发展通用机械手,组合式机械这种机械手具有很强的灵活性和较高的拓展性,由此带来的优点是对生产环境有很强的适应性,可以在多种生产环境工作。目前国内工
16、业机械臂主要应用在铸造、焊接、搬运及热处理方面,以减轻人类的劳动强度,改善生产作业条件。在研究设计通用机械手时可以将机械手臂的各运动构件,如伸缩、摆动、升降、横移、俯仰等机构,设计成典型的通用机构,以便适应不同工作环境的作业要求,选用通用型结构机构,使其能够组装成可改变结构的各种用途的机械手,这种机械手往往便于跟换工件,同时也便与设计制造与检修,扩大了应用范围。当前我国在机械臂的数量、品种、性能方面都达不到工业生产的需要,并且在机械臂的通用性,精确性和稳定性等方面与国外还有很大的差距。因此,我国机械臂产业在大力发展专用型和通用型机械臂的前提下,此外还应大力研究通用型的机械臂控制器、以及具有触觉
17、、视觉处理能力的学习型机械臂控制器,并考虑将将其接入互联网,逐步建立智能学习型机械臂控制系统网络。1.3 机械臂控制器的发展现状机械臂控制器主要分为两部分:机械臂控制系统硬件平台和机械臂软件控制系统。在早期的工业机械臂控制中,主要采用可编程控制器(P1.C)作为主控制器,这种控制系统是将控制步骤和运行轨迹事先编程写入P1.C中。这种控制器体积大、能耗高、不适合实时数据处理且寿命短难以满足越来越复杂的生产环境。随着半导体芯片制造工艺的进步带动微电子技术和嵌入式系统的发展,单片机、FPGA.ARM等被广泛的应用于的机械臂控制系统中。在如今的机械臂系统中,机械臂需要进行实时调整、多传感器融合辅助以及
18、实现自动控制等任务,同时采集现场环境并加以识别并做出相应的控制策略。14本设计研究的任务本设计以单片机为核心控制器完成机械手控制系统设计,主要围绕四自由度机械手臂实现货物的抓取这一任务:对机械手的结构进行分析,查阅资料,选择合适的单片机型号;对机械手臂建立空间坐标模型,确定规定动作控制要求;设计控制系统各功能电路,驱动电路、控制电路及各部分元件选型;根据机械手臂各关节动作控制要求,完成控制系统软件设计。制定手臂动作行程,手臂能实现四自由度规定动作。2机械结构与控制系统概述2.1 机械结构机械手臂的动力驱动方式有气动式、齿轮式和绳索式等。其中齿轮式是目前被采用最多的机械手臂驱动方式之一,主要因为
19、齿轮式机械手臂具有传动精度高、体积小、速度较快及运行平稳等优点。随着制造工业的发展需要,对机械手臂的自由度,精确度,运行的平稳性要求越来越高,机械手臂向多自由度,高速度,高精确度发展。考虑到齿轮式的机械臂结构简单,易于安装与拆卸;重量轻,关节转动的惯性小、灵活性强等优点,本文选用齿轮式(舵机驱动方式)。本设计综合考虑机械臂的结构、功能要求、平举力矩等因素决定机械臂为四自由度,四自由度机械臂采用四个舵机控制,如图2.1所示,舵机1控制底座,实现自由旋转,舵机2控制机械臂上下运动,舵机3控制末端机械爪的水平倾角,舵机4控制机械爪的开合,用于抓取物件。其中在机械臂的驱动中最大力矩出现在平举的过程中,
20、为了使机械臂能平稳准确的完成平举,本机械臂舵机2选用输出力矩更大的数字舵机,考虑到性价比其它舵机采用模拟舵机。为了使机械手运行的更加轻巧,关节连接件选用轻质U型铝合金连接杆,因此可以在动作上可以做的更加灵活,可以完成各种高难度动作。本机械臂各关节的最大运动范围:关节1(舵机1)底座的转动范围受舵机极限转动范围的限制为-90。+90。关节2(舵机2)用于平举最大的转动为最低0。,最高90。关节3(舵机3)机械爪倾角的控制最低为90。,最高90。关节4(舵机4)机械爪的开合,最小(闭合)0。,最大(张开)90oO图2.1机械臂关节运动范围图2.2 控制系统本控制系统的直接控制对象是驱动机械臂的舵机
21、,而舵机的控制信号是一种占空比可调的PWM波。从而本设计从PWM信号的生成上考虑主控制器的选型。机械臂舵机PWM信号的生成方法,主要有以下三种。第一种是采用模拟电路的方法实现的,利用一些独立元器件搭建模拟电路来实现,这种电路虽然原理简单易实现,但是脉宽精度不高、脉冲宽度难以调整且受环境影响较大等缺点;第二种是采用可编程逻辑器FPGA实现的,FPGA有丰富的编程指令,强大的运算能力,并且具有并行处理的功能,能够产生稳定可靠的PWM信号,但是FPGA系统电路复杂,编程难度大开发效率低且成本很高;第三种是利用单片机作为控制系统的主控制器来产生PWM信号的,这种方法具有输出性能稳定、编程灵活多样、控制
22、精度较高等优点,而且这种电路的体积较小,是当前生成PWM信号进行舵机及直流电机调速的最常用的方案。综合比较以上的三种方法本设计确定采用性价比更高的新一代8051单片机STC12C5A60S2作为主控制芯片。控制系统方案如图2.2所示。STCI2C5A60S2是一种新型的8051单片机,最大的特点是具有单时钟/机器周期(IT)速度快8-12倍,自带A/D转换功能,并能产生PWM信号,双串口,指令代码完全兼容传统805Io传统8051单片机与新一代STC12C5A60S2系列单片机的区别:STC12C5A60S2系列单片机的定时器T0/定时器Tl及串口与传统8051完全兼容,但其没有定时器T2。上
23、电复位后,定时器方式控制寄存器缺省仍然是除12再计数的。STC12C5A60S2与传统8051的111条指令完全兼容且执行速度全面提速,最高的能提速24倍,最慢的也能快3倍。新型的STCl2C5Axx去除了传统8051单片机A1.E脚对6分频输出,不可对外输出时钟,但可利用其新加进去的可编程时钟输出控制器对外输出时钟(C1.Ke)UTOC1.KOUT1C1.KoUT2)或XTA1.2脚串一个200欧姆电阻对外输出时钟。由于STC12系列速度更快执行由高变低或由低变高的I/O口操作,仅需4个时钟周期,而传统8051需要12个时钟。传统8051单片机在执行读外部状态时,需将相应的引脚拉高,否则读不
24、对。主要特性:1)增强型8051CPU,IT单时钟/机器周期2)工作频率范围:035MHz,相当于普通8051的0420MHZ3)片上集成1280字节RAM4)通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口)可设置成四种模式:准双向口/弱上拉,强推挽/弱上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mAU”5)共4个16位定时器,两个与传统8051兼容的定时器/计数器,16位定时器TO和Tl,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器【切。图2.
25、2机械臂控制系统组成2.3 系统功能介绍本设计采用电动式四自由度机械手臂结构方案,其控制器方案由单片机系统提供,采用舵机作为动力传动方式来驱动机械臂。该手臂具有四个关节,每个关节可以转动180,手臂转动采用4台舵机驱动,可以完成点对点的夹取物件的简单动作,系统控制图如图2.3所示。图2.3四自由度机械臂控制2.4 舵机工作原理与控制方法2.4.1 概述舵机是一种伺服控制系用,由于可以通过程序连续控制其转角,通常用于需要实现角度旋转控制的各类关节运动中。舵机是关节转向的控制与驱动机构,具有体积小、力矩大、外部机械设计简单、控制精度高等特点,无论是在硬件设计还是软件设计,舵机的设计都是机械臂驱动的
26、重要的组成部分。2.4.2 舵机的组成一般来讲,舵机主要由舵盘、减速齿轮组、位置反馈电位计、直流电机、控制电路几部分组成,如图2.4所示。小型直流电机图2.4舵机的组成示意图变速齿轮组可调电位器控制电路板舵机有三条输入线,电源线、地线、控制线如图2.5所示,其中中间的红线是电源线,黑色的是地线,舵机的地线要与控制电路的接地端相连(共地)。舵机主要是通过这两条线获取能源的。舵机的电源电压一般有两种规格,一是4.8V,一是7.2V,7.2V通常应用于转矩要求较高的场合,4.8V主要应用于超小型长时间持续工作的场合;另外一根黄色线是控制信号线,舵机由这条信号线接收控制系统输出图2.5舵机的输出线图的
27、PWM信号。2.4.3 舵机工作原理舵机的信号线接收PWM控制信号控制电机转动,电机带动一系列减速齿轮组,减速后传动至输出舵盘,舵机的输出轴带动位置反馈电位计,电位计将相应角度的输出电压信号与到控制电路板的PWM控制信号进行比较,然后控制电路板根据所在位置决定电机转动的方向和速度,从而达到目标停止I。其工作流程为:控制信号一控制电路板一电机转动一齿轮组减速f舵盘转动一位置反馈电位计一控制电路板反馈,如图2.6所示。图2.6舵机控制原理图舵机的控制信号是周期为20ms的脉宽调制(PWM)信号,脉冲宽度的调节范围是0.5ms2.5ms,对应输出角度-90。90。,呈线性变化如图2.7所示。对于模拟
28、舵机来说,只有给它提供稳定持续的脉宽信号,它的输出轴才会保持在对应角度上。而对于数字舵机,则只用给它提供相应的脉宽信号,它的输出轴就会保持在对应的角度上,并不用维持这一脉宽信号。舵机的控制电路产生一个周期为20ms,宽度1.5ms的基准PWM信号,其内部有一个比较器,将外加信号与内部基准信号相比输入信号脉冲宽度(周期为20ms)j0.5ns1.5ms2ms2.5ms-90-45-04590白H-曾日日较,判断出电机的转动方向和大小。通过调节PWM信号的占空比可以方便的控制舵机的转角,因此舵机广泛的应用于角度控制系统中,比如机器人的关节驱动,智能小车的转向控制等。图2.7舵机输出转角与输入脉冲的
29、关系3系统硬件电路设计单片机为整套系统的控制核心,单片机本身和其外围电路的性能直接决定系统复杂程度及系统性能。故单片机的选择及其外围电路的设计也就显得十分的重要。STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(IT)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍U内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K7S,即25万次/秒),针对电机控制,强干扰场合。考虑到芯片的性价比以及供货等综合因数,本文中采用STCI2C5A60S2单片机。3.1 时钟电路设计STC12
30、C5A60S2的时钟源可以来自外部时钟信号或者振荡器。通常单片机系统使用外部时钟输入,因为外部时钟可更换灵活性强可根据处理速度选着不同频率的时钟芯片,同时外部时钟的精度高、稳定性好。时钟电路如图3.1所示。图3.1时钟电路3.2 复位电路设计复位操作完成单片机片内电路的初始化,使单片机从一种确定的状态开始运行。当8051单片机的复位引脚RST出现5ms以上的高电平时,单片机就完成了复位操作。常用的上电且开关复位电路如图3.2所示。上电后,由于电容充电,使RST持续一段高电平时间。当单片机已在运行之中时,按下复位键也能使RST持续一段高电平时间。从而实现上电且开关复位的操作。通常选择C=1030
31、F,R=IOkQ0VCC图3.2复位电路图3.3 控制器电源电路设计本电路所需5V直流电源采用工频220V电源,经由一个变压器降压后,通过H桥整流,再使用三端稳压芯片稳压得到。常见的三端稳压集成电路有正电压输出的78XX系列和负电压输出的79系列。三端IC的三条引脚分别是输入端、接地端和输出端。用78/79系列三端稳压IC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。因为本设计只需要正电压5V,故这里选用7805。整流桥选择正向电流1A,耐压值为25VO整流出来的波形是脉动的,为了得到平稳的电压,在整流桥输出端接一个大电容。780
32、5的最高输出电流约为1.5A,最高输出功率:P=UI=5V*1.5A=7.5W故用一片7805可设计满足要求。下图中Cl和C3作平波用,故选用大电容;C2和C4择消除长导线的电感效应,选用小电容如图3.3所示。Dl一J:II一.II_JIIIIOSCT.I:1.1.一-图3.3控制器电源电路图3.4 舵机驱动电路通过实验发现,舵机在运行过程中要从电源吸纳较大的电流,若舵机与单片机3.5 串口通信电路设计STCl2C5A60S2有两个全双工的串行通讯口,所以单片机和计算机之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如计算机的串口是RS232电平的,而单片机的串口是TT1.电平的
33、,两者之间必须有一个电平转换电路,本设计采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。采用三线制连接串口,也就是说和计算机的9针串口只连接其中的3根线:第5脚的GND、第2脚的TXD、第3脚的RXD。这是最简单的连接方法,但是已经足够使用了,电路如下图3.5所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。RlOUTR2OUTTlOUTT2OUT图3.5RS232串口通信电路0.1uflO.lufO5Iuf4系统软件设计随着单片机技术日新月益的发展,学习和应用它的人越来越多。相应的
34、单片机的编程语言也在不断地发展、完善、丰富中。目前比较完善、常用的编程语言有3种,即汇编语言、C语言和BASlC语言。BASIC是一种高级语言,是在1965年5月,由美国科学家托马斯库尔兹研制出来的。几十年来,BASlC语言一直被认为是初学者编程的语言。具备了很多结构化思想和编程方式,如函数、模块、局部变量、全局变量、数据传递等。BASIC为简化使用变量,所有变量都用浮点值。另外,它还有针对单片机硬件所设计的命令如:1.CD命令可以用一条命令来实现1.CD的显示操作。Cls/清1.CD屏1.edHowareyou”/向1.CD输入字符“Howareyou”类似于这样的命令主要是提供了直接对单片
35、机及其外部硬件的操作,大大的简化了开发过程。汇编语言是面向机器的,为了克服机器语言的缺点,用英文字符来代替机器语言,这些英文字符被称为助记符。用汇编语言编写的程序效率高,占用存储空间小,适时性强,运行速度快,因此用汇编语言能编出最优化的程序。但是,汇编语言可读性差,编程耗时,并且汇编语言与机器语言一样,都离不开具体的机器硬件,对不同的类型的单片机,其汇编语言可能有点差异,因此,缺乏通用性不易移植。例如,比如你在PIC12CES18单片机上用汇编语言编了一个程序,到了STC89C51单片机上那可就运行不了,因为他们的指令系统是有区别的。C语言是嵌入式系统中一种通用的程序设计语言,其数据类型及运算
36、符丰富,代码率高,有较好的移植性和丰富的功能函数,并且有良好的程序结构,适用于各种应用程序的设计,是目前嵌入式系统中使用较广的编程语言。51单片机的C语言采用C51编译器(简称C51)oC51是一种结构化的编程语言,其源程序可读性强、简单易学、便于调试、符合C语言的ANSl标准,十分适合作为单片机这类微处理的编程语言,并且可与A51汇编语言目标代码混合使用。应用C51变成具有以下优点:1 .编程时不用考虑内部寄存器和存储器的分配,从而减少用户编程的工作量;2 .程序由若干函数组成,具有良好的模块化结构;3 .有丰富的子程序库可直接引用,极大地提高了编程的速度;4 .C语言和汇编语言可以交叉使用
37、本设计总结以上各编程语言的优缺点,决定采用汇编语言和C51混合编程的方法。为了使程序结构清晰,便与调试,采用结构式编程方法。本设计程序由主程序、初末位置置换函数、速度控制函数、机械爪控制函数、定时器TO子程序、定时器Tl子程序6部分组成。4.1 四自由机械臂轨迹规划在工业生产的中,装配机器人广泛应用于生产线上。生产线上的典型机器人即机械臂,主要是自动完成往复式操作。本设计的机械手臂正是基于此,执行往复式操作的。执行往复式操作的机械手臂在运行之前就在程序中设定好执行轨迹,即事先设定机械臂的末端机械爪位姿和过程位姿。为了保证机械臂末端运动平稳,需要机械臂各个关节保持平稳运动。而为了保证关节平稳运动
38、,机械臂关节转动变量在运动的过程中增量不能出现突变。为了实现机械臂末端按照给定的路径运动,需要对机械臂的各自由度的位姿进行规划。即机械臂控制参数设定,由前文已知舵机的转动范围是0。180。,脉冲宽度是0.5ms2.5ms,对应的占空比参数为5000250(X).机械臂在组装后,应先确定各关节的转动范围,舵机一般能够承受10秒以内的堵转,在调节舵机时要避免舵机进入堵转状态。在测试初期采用各关节单独测试,在测试其中一个舵机时,其它舵机需要保持断电状态。通过修改舵机测试程序的占空比参数,同时观察相应舵机的实际运行范围。记录舵机运行时角度位置与占空比的对应关系。然后确定机械臂的初始位置。机械臂的初始位
39、置即为机械臂的复位状态,该状态需要机械臂保持一种平衡,且有利于其抓取操作。在机械臂各自由度关节运动范围确定以后,将占空比参数设置为舵机运动范围的中间值。角度与占空比参数的对应关系如表4.1所示。机械臂初始参数设定后,保证机械臂可以在相对安全空间内运动,机械臂末端的运动空间如图4.1所示。由于受机械臂自身结构限制,该系统中机械臂在XoY平面内只能转动180。,末端只能在图4.1所示的1/4球面内运动,机械臂在XYZ空间的最大伸臂长度20cmO表4.1舵机角度与占空比参数的对应关系表位置A位置B初始位置占空比参占空比占空比参占空比占空比参占空比数数数舵机112006%5002.5%9004.5%舵
40、机2200010%14007%17008.5%舵机310005%16508.25%13006.5%舵机421004.5%15007.5%18009%图4.1机械臂运动空间图4.2 主程序设计主程序是模块化程序中主干,起到协调程序执行的顺序,连接各子程序,传递各子程序间的参数。本设计的主程序主要执行以下4部分任务:第一步,在程序启动后完成全局变量的声明,占空比参数数组初始化,定时器TO、Tl初始化,将引脚设为强推挽输出,使其能为舵机提供足够大的电流。第二步,开定时器中断,定时器赋初值,开定时器程序真正启动,程序进入循环执行状态。第三步,再循环体内判断定时器中断是否置1,是,则调用PWmu数组更新
41、函数VPWm()(舵机调速子程序),否,则等待中断到来。流程图如图4.2所示。图4.2主流程图4.3 舵机调速程序设计为使机械臂运行平稳,需要对舵机进行速度调节控制,其实质是对舵机控制信号PWM占空比的调节。下文将首先介绍PWM信号。4.3.1 舵机PWM信号PWM(PUlSe-WidthModulation)即脉冲宽度调制信号,具有控制简单、快速和动态响应好等优点,被广泛应用在机器人及航模设计的舵机及直流电机的控制中,其PWM格式注意的几个要点:(1)上升沿最少为0.5mS,为0.5mS-2.5mS之间;(2)要求连续供给PWM信号,这时表现出来的跟随性能很好、很紧密。通过阅读相关文献结合实
42、验经验,总结出了评价PWM信号生成方法合理性的四个原则:(I)PWM信号周期的适应性(2)占空比的可调整性(3)PWM信号输出的丰富性(4)PWM信号输出的同步性其中原则一,PWM信号周期的适应性指的是PWM信号周期能够满足不同应用场合的要求。比如舵机的PWM控制信号周期要求是20ms,而对于直流电机控制来说,PWM信号的周期一般要小于0.1ms。只有PWM信号周期具有可调性,或者周期恰好为所需要的周期,产生的PWM信号才能被应用,因此原则一是对PWM信号生成方法合理性评价的一个最基本的原则。原则二是PWM控制核心,因为只有PWM控制信号通过实时的改变占空比,才能实现PWM信号对平均电压的调整
43、,才能在一些控制系统中实现脉宽调制的控制作用,体现PWM控制的意义。原则三要求能够实现多路PWM信号的输出,在大多数控制系统中往往需要多路的PWM信号协同控制,比如在机器人的控制系统中,通常有几十上百路的舵机要协调运行,那么就需要有相同数量的PWM信号进行单独控制。如果不能生成足够的PWM信号就不能实现对该机器人的控制,这种生成PWM信号的方法也就不算是一种合理的方法。原则四是多路PWM控制信号的关键,多路PWM信号如果不能同步输出,也就失去了多路PWM控制信号的意义。尤其对于机械手臂这种同步性要求较高的场合,如果不能实现对多路PWM信号的同步输出,就无法实现各个关节运动的协调控制,也就无法完
44、成各种高精度的复杂动作。4.3.2 利用微分插补法实现对多路PWM信号的输出(1)微分插补法的原理在舵机的控制中不仅其位置角度的控制至关重要,而且速度的控制也是一个必须考虑的问题。尤其对于像机械臂的控制,其运动平滑性决定了它工作的稳定性,准确性是一个重要的考核指标。这就需要对驱动机械臂关节的舵机进行速度调节控制,舵机速度的控制其实都是让舵机从初始位置到目标的位置不是直接到达,而是划分成很多细微的小过程逐步让他到达。比如说让舵机的初始位置是0度让他跑到90度,直接送入90度的数据的话由于舵机的响应速度还是比较快的,几乎就一下子跑到90度的位置。如果我们在它到达90度的过程中给他制造很多缓冲,就是
45、让他从0度到1度到2度3度的逐步过渡过到90度,那么出现的效果就是舵机以比较慢的速度到达目标位置,这样就达到控速的目的,而每个间距切换的时间加以控制既可以得到我们想要的具体旋转速度,因为划分的过程很多,所以舵机的旋转看上去是一个流畅的速度的旋转U叫这就是微分插补法。微分插补法的中心思想是先微分,将某一过程量进行微分处理分割成若干个(通常越多越好)小过程量,然后进行插补,将小过程量一步一步的叠加起来直至完成整个过程量的插补。从而得到控制过程量增长速度的目的。根据微分插补法的思想设计多路舵机PWM速度控制程序。(2)微分插补法生成多路舵机PWM速度控制信号的程序实现VPWM()函数采用微分插补法对
46、舵机进行调速使机械臂能从一个位置平滑稳定的过度到另一个位置。VPWM()是数组PWm口更新函数,其功能是数据插补,由定时器TO控制,使舵机实现平滑的速度控制;另一个功能是执行完一行后更新下一行数据,即调用Change()函数。此程序的执行的流程图如图4.3所示。第一步,声明一些判断标志:flag_how,用来表示是否4个舵机都达到目标位置,是则置1;flag_Tover,用来表示运行时间是否结束,是则置1;m用来累加插补的次数。第二步,进入VPWM()函数,首先执行m+,表示插补累加一次,并判断是否等于总的插补次数n,是,则Hagjrover置1。并且判断是否4个舵机都达到目标位置,是,则fl
47、ag_hoW置1。第三步,若flag_Tover=l且flag_how=l,则本行作业完成,先后执行jiazi(),Change()子程序,并清零标志,返回主程序;否则直接返回主程序。图4.3多路舵机PWM速度控制程序流程图4.4 初末位置置换子程序由于本机械臂执行在两个位置搬运物件的,所以机械臂是一种简单的自动往返运动。Change()函数的功能就是初位置与末位置的替换,并计算插补增量dpj和插补次数n。程序流程图4.4所示。第一步,进行初末位置置换,初位置占空比参数给pospoint_nows,末位置占空比参数给pospoint_aims,并给循环计数s赋值Io第二步,判断是否pospoint-aimspospoint-nowso第三步,根据第二步的结果,是,则执行dp=pospoint_aims-pospoin1.noWs;dps=dp/n;否,则执行dp=pospoi