【《基于51单片机的一款六自由度的机械臂控制系统设计》10000字(论文)】_第1页
【《基于51单片机的一款六自由度的机械臂控制系统设计》10000字(论文)】_第2页
【《基于51单片机的一款六自由度的机械臂控制系统设计》10000字(论文)】_第3页
【《基于51单片机的一款六自由度的机械臂控制系统设计》10000字(论文)】_第4页
【《基于51单片机的一款六自由度的机械臂控制系统设计》10000字(论文)】_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

.绪论机械臂是高精度操作器。对应小批量生产,可用来放取部件,螺丝固定,金属器件切割等多种工作。它可以根据给定程序或人为的控制进行标准化作业和提高生产效率,无线控制功能更是大大降低人工作业危险程度[1]。机器人是现代机械化生产中不可或缺的部分,是现代自动控制技术不断发展起来的新的研究内容。机械臂是机器人中主要的机构,它在机械化生产中可用于零部件拼装,工件的搬装,特别是在数控机床、组合生产机床上的使用更加普遍。对机械臂输入编写的程序能够代替人类进行一些工作。机械臂具备对环境的强适应性以及一定的智慧属性。因此机械臂在各领域都有充分的发展空间[2]。1.1课题设计的背景和意义目前,随着科技的迅速发展和社会的进步,机器手臂的应用领域越来越广,它能代替人类完成高危、乏味的工作,减轻人类的劳动工作强度,提高生产的效率,现在已逐渐被推广至工业生产、制造、生活、教育教学、医疗诊断等领域。它适应于批量生产,能省去复杂的工件传送装备,具有时变性、非线性、强耦合性等特点[3]。传统机械臂控制系统多数采取利用PID控制策略的直流无刷电机运动控制系统,这样就造成了机械臂在工作过程中的跟踪性能差,尾部颤动严重,不具有抗负载干扰的能力。目前,工业机械制造业在国内的应用水平低,工业化水平低,工业机器制造的发展和学习直接影响到我们生产自动化能力的提高,必须作为经济因素来考虑,技术方面。而且无线控制大大保障了工人们的安全。因而,研究设计机械手的无线控制是意义非凡的。1.2国内外发展概况机器臂可以接替人类从事一些繁重又单调的工作,减小劳动工作强度、抬高生产自动化本领、提高生产工作效率等。近年来,机械臂高速度高精度,重复高精度,模块化,节能化等基本性能的要求已经在国际上受到越来越多的关注。至今,机械手臂的发展历史已经有70多年[4]。目前中国机械手臂产销第一,但是核心技术较弱,技术积累不足,人才短缺;产业链单薄,国产关键零部件缺失;发展时间短,国内企业起步较晚,控制系统,伺服系统等核心零器件的国产化刚起步。1.3机械臂的重点技术(1)驱动机构我们常见到的驱动机构基本类型一般有:液力、气力、电力和机械。液力驱动机械臂的优点是抓举能力很强,并且具有结构紧凑、传动平稳、抗冲击、抗震爆等优点;但是对密封性要求比较严格,否则会对环境造成污染,并且这类驱动不适合在温度过高或者过低的地方工作[5]。气力驱动机械臂通过压缩空气来驱动设备,它的优点是空气来源方便;结构相对简单;价格相对便宜。缺点是由于空气的可压缩性导致工作速度并不是很稳定。电力驱动成为越来越多的工业机械臂的选择。它具有供电方便、无污染、好控制、精度高和造价较低等优点。由于电机的高转速,往往我们要用到很多种减速机构。很多机械臂使用的是没有减速的大转矩和低速电机,这种驱动方式不但可以简化结构,还能提高精度。机械驱动的使用范围往往只在少数地方,它的优点是运动平稳、效率高、造价较低,难点是并不好做调整。(2)执行机构机械臂的执行机构包含三个部分,分别是手、臂和躯干。手安装在最前端,接触并抓取物体,驱动轴可将信息传递给手腕使其旋转,伸展和弯曲,进而打开和关闭手指。机械臂的手部结构包含无关节、固定关节和自由关节这三个类型。根据手指的数量不同可以划分为二至四指三个类型,其中二个手指是实际生产中使用最普遍的[6]。通过夹持物体的外形和尺寸,可设计具有不同结构和尺寸的夹具,以满足实际操作的需求。臂的起到的是支撑腕部和手部和引导的作用,通过手指精准夹住物体,然后将其传送到预定的地方。躯干的作用是支撑其他部分保持整体稳固。(3)控制系统机械臂的大脑就是控制系统,对控制板进行编程和动力系统的指挥,执行机构就会以程序设定来实现我们需要的动作。1.4无线机械臂发展趋势机械手与机电一体化的结合:机电一体化技术是企业生产自动化的典型代表。以简单的搬装机器人为例,在重型机械中,机器人驱动可以选择液压驱动,因为它体积小,重量轻,抗冲击性好。另外,手臂的上下运动由电机驱动,螺杆将旋转运动转化为机器人的上下运动,机器人的旋转由电机驱动[7]。由于机器人的自由度可以随意选择,一般生产中使用的机器臂有四个自由度,包括手臂在立柱上下的运动和绕柱旋转、手腕的旋转和手的运动。因此,将机械手与机电集成技术相结合,可以控制机械手的灵活运动,已成为未来一个重要的发展趋势。可视机械手的发展:工人需要用眼睛观察生产活动。同样,操纵器需要一双眼睛来帮助识别要加工的零件。然而,在目前的工业生产中,机器人的视觉应用还没有达到理想的水平,大多数机器人仍然需要人工辅助来完成整个劳动生产。然而,当视觉系统发展到一定水平,在没有人工辅助的情况下机器人可以独立完成整个生产过程[8]。此时,机器人可以依靠敏锐的视觉来识别工件的质量,并实时分析工件的工作状态,反馈给控制系统,然后控制系统根据其反馈为其开发新的解决方案。可见,视觉机器人具有广阔的发展前景。重复高精度机械手的发展:在机器人的发展和应用中,高精度重复是一个重要的发展趋势。机器人在生产过程中需要重复一定的工作,但在机器人的重复工作中,运动精度很难达到无误差。在实际的工业生产过程中,机器人必须保证在重复运动的过程中每一个动作都必须准确,从而保证生产的要求。随着工业机器人的应用越来越广泛,在军事和医疗领域,对高精度机器人重复性的要求越来越高,这将成为未来机器人的重要发展趋势[9]。2.机械臂总体设计方案2.1总体设计方案本次设计中,总体设计方案内包括了设计的思路以及方案的选择。2.2设计思路2.2.1机械臂基本形式的选择通过机械臂的运动方式,并以坐标分类:(1)直角坐标型机械臂;(2)圆柱坐标型机械臂;(3)极坐标型机械臂;(4)多关节型机械臂[10]。多关节型机械臂可以实现多个自由度,动作灵敏,可以在恶劣环境工作;因此选择了此类型。这是本次设计的机械臂外观结构图,如图2-1:图2-1机械臂外观结构图2.2.2机械臂的部件前面确认了本次设计用多关节型机械臂,此外这个机械臂有六个自由度:本体回转、小臂移动、大臂转动、手腕旋转、手腕上下转动和手腕圆周移动等6个运动。该机械臂有四个重要部件:(1)手爪:用来夹取物体的机构,类似人手功能;(2)手腕:连接手与臂,起到了支撑手部的作用;(3)手臂:由大臂和小臂构成,具有伸缩能力,起到承受手和手腕抓取物体时的载荷;(4)躯干:使底部做360度旋转运动。2.3驱动机构的选择作为工业机械臂的主要部件,工业机械臂的驱动方案和它的装置基本上决定了性价比。之前有讲到驱动机构的类型,通过对比和各方面条件最终确认了电力驱动较为合适,在此不再叙述电力驱动的好处。3.硬件电路设计3.1六自由度机械臂运动学分析本文把6自由度机械臂当作研究对象,采用改良后D-H模型进行运动学分析、求解。3.1.1机械臂结构参数机器人手臂的六个关节是旋转关节,前三个关节决定手腕参考点的位置,后三个关节决定手腕的方向。像大多数工业机器人一样,最后3个关节轴在一个点相交。因此,该点被用作手腕的参考点,同时也是链接坐标系{4}、{5}和{6}的原点。对于机械臂来说,它通常被认为是关节结合的“连接结构”。因此,在分析机器人手臂时,需要为机器人的每根杆建立一个坐标系。在分析坐标系时,首先需要定义一个实体坐标系在每个连杆上,以表示每个连杆与其相邻杆间的相对位置关系。根据这个原理,我们首先对连杆和接头进行编号,然后采用自下而上的顺序,底座为连杆0,从底座向上为连杆1,连杆2,…,接头i连杆i-1和i+1。最终建立的坐标系OiXiYiZi连接到悬挂机构,如图3-1所示:图3-1连杆坐标系根据连杆坐标系设置,相应的连杆参数可定义如下:(1)围绕Xi-1轴旋转αi-1角,使得Zi-1轴位于与Zi轴相同的平面上;(2)沿Xi-1轴到距离αi-1的距离,使Zi-1轴和Zi轴处于同一高度;(3)围绕Zi轴旋转αi-1角,使Xi-1轴与虚轴相同;(4)沿Zi轴平移距离Di,以便将连杆i-1的坐标系移到其原点,并且连杆i坐标系与连杆i-1坐标系的原点重合。利用改良的D-H模型,建立起机器人手臂的坐标系。在改进D-H坐标系时,坐标系{0}和{1}一般重合,O1是轴1和轴2的公共法线在轴1上的交点,此时关节1和2沿z轴的偏移不反映出来,但对整个机械臂关节的相对运动没有影响。选择第一个关节坐标系以与基础坐标系重合。根据机械臂的结构和连杆坐标系,可以得到其连杆关节参数,如表3-1所示:表3-1各关节参数表3.1.2运动学正解从上面相邻连杆的运动关系可以看出,连杆i在连杆坐标系i-1中的相对位置可用齐次变换矩阵来描述:因此,机械臂末端执行机构坐标系相对于基准坐标系的变换矩阵:因此,在知道每个关节的角度的情况下,可以获得机器人末端执行器的位置。3.1.3运动学逆解机器人手臂的逆运动学问题是指以已知的机器人手臂末端的位置,即已知的关节变换矩阵,来求解每个旋转关节的角度。因此,机器人手臂的逆运动学问题可以理解为通过正运动学方程求解关节的1、2、3、4、5、6个关节。3.2硬件结构本设计的硬件部分由单片机、独立键盘模块、串口通信、电机驱动模块、电源指示模块等组成。3.3机械手臂的组成一般控制系统、驱动系统、执行器三个部分组成机械手臂。执行器:手腕是将手臂连接到末端执行器的一部分,以调整末端执行器的姿势和方向。手臂是用于支撑手腕和末端执行器的一部分,由电源接头和连接杆组成,改变末端执行器的位置。底座是机器人的底部基部分,可分为固定和移动。控制器:控制系统根据机器人手臂的动作要求,分为开环控制系统和闭环控制系统。大多数工业机械臂由计算机控制,计算机分为决策层、决策层和执行层。决策层的作用是识别环境,建立模型,将工作任务分解为基本的动作序列。策略层则把基本动作转变成对应关节变化规律,并分配至各关节的伺服系统。执行级别为每个关节伺服系统提供特定的指令。3.4机械手臂的分类机器人手臂可按坐标形式、驱动模式、控制模式和信号输入模式进行分类。按坐标形式划分:坐标形式是指执行机构的手臂在移动时选择的参考坐标系的形式。直角坐标机械臂末端执行器的空间位置变化是通过沿X轴垂直移动、沿Y轴水平移动和沿Z轴上下移动来实现的。圆柱坐标机器人手臂是通过两次运动和一次旋转改变末端执行器的空间位置,手臂的运动是立柱的平面延伸和沿立柱升降的两次直线运动以及手臂绕立柱旋转的组合。极坐标机器人手臂的运动包括直线运动和两个旋转,即X轴在手臂方向的收缩、Y轴的倾斜运动和Z轴的旋转。该机械臂占地面积小,结构紧凑,定位精度高,但避障性差,存在平衡问题。关节协调机器人由立柱、小臂和大臂组成,大臂和小臂做俯仰运动,立柱绕Z轴旋转,形成腰部关节,立柱和手臂形成肩部关节,大臂和小臂形成肘部关节。驱动方式:目前使用最多的是电驱动。即驱动单元可以直接驱动机构的运动,也可以通过谐波减速装置减缓后驱动机构的运动,结构简单紧凑。液压驱动机械臂具有很强的抓取能力,能抓取数百公斤的优质物体,油压可达7MPa,其液压传动平稳、灵敏,但密封要求高,不适合在高低温环境下工作,需要配备液压系统。气压驱动的机械臂结构简单,且运动速度快,价格低廉,但由于空气可压缩,导致工作速度稳定性差,气源压力一般为0.7MPa,所以握力小,只能抓取重量几公斤到十几公斤的物体。根据控制方式:采用点控制式机器人,其运动是空间点之间的直线运动,不会涉及两点之间的运动,只在目标点控制机器人末端执行器的姿态和位置。通过信号输入:人工操作的机械臂是由操作员直接参与的具有多个自由度的机械臂。固定程序操作机器人手臂是一种按照预先定义的条件、顺序和位置,一步一步重复地执行给定作业任务的机器人。可变程序操作机械臂与固定程序操作机械臂基本相同,但工作顺序等相关信息容易修改。程序控制机械臂的操作指令由计算机程序以类似于数控机床的方式提供给机械臂。仿示教机械臂型可以根据存储在记忆装置中的信息,通过人工示教再现,示教动作可以自动重复进行。智能机器人手臂借助传感器感知工作环境或工作条件的变化,对应自身的决策能力完成相应的工作任务。3.5驱动部分的设计机器人手臂有三个伺服电机驱动:M1电机控制手臂在Z轴上旋转和摆动,M2电机控制手臂在Z轴上旋转和摆动,C电机控制末端执行器在Z轴上上下移动。为了设计方便,控制方法采用点控制。末端执行器在空间中的位置通过控制三个电机的前进和后退来确定。由于三台电机不同时控制,互不干扰,提高了整个系统的稳定性。伺服电机控制:电源线和地线提供内部能量,通常在4V和6V之间。伺服电机会导致放大器在大负载时被拉下,因此整个系统的供电比例必须合理。具体传动环节:底座部分装有M1伺服电机,通过齿轮传动控制臂的转动,底座与臂座的轴承连接;大臂座配有M2伺服电机,通过齿轮和传动控制小臂的转动和摆动。末端执行器部分配备M3伺服电机,该电机还通过齿轮和线材驱动控制末端执行器的上下移动。选择伺服电机:选择的伺服电机为Topor's,型号为SG303。其主要技术参数为:转速:0.23秒/60度;力矩:3.2kg*cm;重量:0.6kg;电源:12V和24V电源供电;增量编码器:编码器是将角度或线性位移转换为电信号的装置滚动轴承:滚动轴承的类型、公差等级和尺寸均已按国家标准制定,机械设计时只需根据相应的工作条件选择合适的轴承类型、公差等级和尺寸,并结合轴承结构进行设计。根据滚动轴承在载荷作用下的作用方向,常用的轴承可分为三类,即径向接触轴承、轴向接触轴承和中心接触球轴承。3.6单片机系统单片机的概念:它是一种微型计算机,将计算机的主要基本部件小型化,并将它们集成到芯片中。通常,芯片包含CPU、RAM、ROM、并行IO端口、串行端口、定时/计数器、中断控制系统、系统时钟、系统总线等。单片机特点:控制功能非常强大;低电压、低功耗、易生产、便携式产品;其系统配置和系统扩展较为规范、典型,易于构成各种规模的系统应用。3.7串口通信电路串行通信电路,即实现单片机与上位机通信的功能,主要通过MAX232芯片实现与相应的通信指令电路组成,用这种方法实现串行通信并烧录相应的程序下载。3.7.1串口通信的基本原理串行数据传输的特点是数据传输是按位顺序进行的,只有一行,但成本低,速度慢。因此,计算机与外界的数据传输大多是串行的,其传输距离可以从几米到几千公里不等。串行通信可分为异步和同步两种方式。微控制器中使用的串行通信通常是异步的。并行数据传输的特点是:各种数据同时传输,传输效率高。由于所需的数据位数较多,并行数据传输的成本较高。并行数据传输通常不到20米远,而计算机内部的数据传输通常是并行的。传输速率是数据传输的速度。在串行通信中,数据是以位的形式传输的,因此传输速率由每秒传输的二进制码的位数表示,称为波特率。在串行通信中,它通常用来测量通信速度,每秒传输一个端口,一般异步通信端口速率在110到9600KHZ之间。在选择通信的波特率时,不能盲目追求高,满足数据传输的要求是基本的。3.7.2串行通信的电平转换微控制器通过串行端口与个人计算机通信。微控制器的输入和输出是TTL电平,一般不适用于长距离传输,因为在传输过程中电平衰减,使传输数据不准确。PC机配置为RS-232串行接口,因此在微控制器与PC机通信时,第一步是进行电平转换,TTL电平需要转换为RS-232电平,传输线上传输的RS-232电平可以达到12V,比TTL电平具有更强的抗衰减和抗干扰能力,满足远距离传输。常用的电平转换芯片是MAX2232,它可以在两个电平之间进行转换。另外,信号传输介质最好采用双绞线,这样有利于抑制外部共模信号引起的干扰。3.7.3单片机与PC机串行通信实现手段由于可编程串行异步通信芯片8250集成在PC机上,可以通过PC机的COM1串行通信口或COM2进行控制,不再需要单独做实验板。我们可以通过串行电缆将微控制器内部电平转换接口连接到PC机的COM1串行通信端口或COM2,然后用软件对它们进行初始化,以便它们可以运行自己的接收或发送程序。具体编程时,我们可以实现很多函数。例如,我们可以从ROM或RAM中读取微控制器和PC机的内容并在线修改。PC机的程序可以使用汇编程序MASM6.0、VC、VB或C编写。控制电路和计算机通讯可以作为计算机上的监控接口,使机器人的控制更加人性化。3.8电机驱动电路一般来说,在单向电机驱动时,只有大功率三极或继电器或场效应管才能直接驱动电机,可以使用由4个功率元件构成的H桥电路或使用双刀双掷继电器实现电机双向转动这一功能。如果设计要求不需要调速,只能采用继电器;然而,如果需要速度调节,一些开关元件,如三脚架和场效应管,可以用来实现脉宽调制速度。本设计主要选用L298N驱动芯片,加上少量的电容、电阻和二极管可以简单地实现电机驱动,电机驱动自带的光耦器件可以隔离电机的控制信号和驱动信号,从而提高了系统的抗干扰能力。然而,光耦合器可能很贵,所以这部分设计被省略了。4.软件系统设计4.1LED灯的闪烁定时器是微控制器中用来计算时间的硬件设备。使用计时器让微控制器以指定的时间间隔执行指定的操作,或者精确计算事件发生的时间间隔。微控制器中的定时器通常由基于时间的发生器和计数器组成。时基被称为时间的基本单位。时基发生器可以产生具有基于时间的周期的信号,并且计数器可以计数由时基发生器产生的信号的数目。例如,如果时基是1秒,则时基生成器每秒产生一个信号,计数器的值每秒加1。当计数器值等于我们设置的值时,微控制器执行我们设置的操作。综上所述,LED闪烁时,有必要每隔一段时间改变一下LED灯的状态。我们先设置计时器的时基,然后设置计数的值,然后设置达到指定时间后要做什么。打开软件stc-isp,找到右上边的定时器计算页面,输入相对应的有效参数,这里令定时器每100微秒执行一次我们指定的操作。如图4-1所示。图4-1软件生成定时代码4.2检测按键机械按键在按下或松开时,由于机械弹性的影响,通常会伴随着固定时间的触点机械抖动,然后其触点稳定,抖动时间为5-10ms。在触点抖动期间检测按键的打开和关闭状态会导致判断错误。按键的机械抖动可以通过硬件电路消除,也可以通过软件方法消除,这里我们使用软件去抖动方法。软件的总体思路是:当检测到按键被按下时,执行约10毫秒的延时程序,然后重新检测按键是否仍被按下,以确认按键不是由抖动引起的。同样,当检测到有释放时,通过延迟然后判断来消除抖动的影响。4.3ADC检测电池的电压在微控制器应用中,通常需要将输入的模拟电压信号转换为微控制器可以识别的数字信号,将连续变化的模拟信号转换为数字信号的技术称为A/D转换技术。在实际应用中,A/D转换器可以连接到输入信号和单片机之间完成A/D转换,也可以选择用单片机内部的A/D转换器来处理。我们的仪表板有一个内部ADC转换器,当模拟信号被输入控制板并转换成数字信号时,进行数值分析来计算电压值。4.4舵机的控制4.4.1舵机内部结构舵的内部由一个小型直流电机、一组变速齿轮组、一个线性反馈电势和一个控制电路板组成。其中,舵机的原动力由高速旋转的直流电机提供,驱动减速齿轮,使其产生高扭矩输出,齿轮组的变速比越大,舵机的输出扭矩越大,即越能驱动更大重量的负载(受齿轮强度限制),但输出速度(响应速度)也较低。4.4.2舵机的工作原理舵机是一个典型闭环反馈系统,其原理可由下图4-2表示:图4-2舵机工作原理减速齿轮组也由电机驱动,其输出端带动一个线性的比例电位器作位置检测,该电位器把转角角度转换为一比例电压反馈给控制电路,控制电路将其与输入的控制信号对应的角度作比较,并驱动马达正向或反向地转动,使电位器反馈角度趋向于控制信号期望度,从而达到使伺服达精确定位的目的。4.4.3舵机控制标准的PWM舵机有三条控制线,分别为:电源、地及控制。如图4-3所示。图4-3舵机三条控制线内部直流电机和控制线所需的能量由电源线与地线提供,通常在5V和8V间,电源应尽可能与处理系统的电源隔离。在大负载时,即使是方向舵也会降低放大器的电压,因此电源与整个系统的比例必须合理。通常输入一个周期性正向脉冲信号,高电平时间在1ms-2ms之间,低电平时间在5ms到20ms之间。模拟方向舵需要保持一个周期性信号来保持方向舵的角度,当信号丢失时,方向舵不再输出功率。我们使用的是一种数字舵,它通过发送一次正确的高电平信号来保持锁定角度,对低电平时间要求不是很严格。如表4-1所示。表4-1舵机信号与对应角度4.5多路舵机的速度控制方向舵机运动速度:内部直流电机和变速齿轮组的组合决定其瞬时运动速度,这是恒压驱动的唯一值。对于数字PWM舵机,速度由其内部过程决定,平均运动速度可以通过分段暂停控制来改变。例如,我们可以将动作幅度为90度的旋转细分为128个暂停,并通过控制每个暂停的时间长度来实现0-90度的平均速度变化。对于大多数舵机来说,速度的单位是“度每秒”。4.6用串口控制舵机串行通信口,简称串口,是指串行通信接口的逐位传输。在微控制器、嵌入式环境中,串行端口通常称为UART端口。按接口级别标准分为RS-232、RS-422、RS485、TTL等。通常我们是从单片机芯片中引出的,没有特殊的芯片转换就是TTL串口。这两个物理接口有D形9针插头和4针插头。4.7增加无线控制在远程控制机器人手臂系统中,采用的是远程串行通信,远程串行通信是指客户端通过串口与上位机或通信对象进行远程通信,传统的远程通信只是其中的一部分,通过客户端将指令传输到上位机的控制部分,从而实现远程监控。单芯片用作直接控制计算机。工作机器人的态度通过监控设备反馈给遥控器,现场数据由传感器收集并返回控制机器。浏览器侧登录主服务器并获取合法身份验证并发送数据。接收信息后,通过串行端口将数据发送到直接控制计算机。主程序流程图如图4-4所示,图4-5为中断服务子程序流程图。开始开始结束串口初始化开中断数据送到数据锁存器并开启D/A转换设定接收数据存放位置和空间大小图4-4主程序流程图接收主控机发给C51的控制量接收主控机发给C51的控制量返回发送位置角度信号到主控机清除中断标志发送完?接收完?发送还是接收?Y接收发送`11NYN图4-5中断服务子程序流程图5.原理图与实物调试5.1单片机原理图本设计的单片机接口图如5-1所示:图5-1单片机接口图5.2实物调试实物调试的是为了排除可能存在的硬件故障和系统可能存在的一些小问题,及时发现能保证系统运行流畅无故障。如图5-2所示。图5-2实物调试6.总结经过一段时间的努力学习单片机和模拟电路的相关知识后,六自由度机械臂远程无线控制系统研究完成。设计中以51单片机为控制器件,一方面考虑通过控制PWM占空比以实现准确调速的目标,另一方面利用无线模块实现与控制板间的通迅以实现系统的无线控制。实物测试结果表明,该系统能够令机械臂在较高精度下实现对物体的抓取与放置并实现无线操控等功能通过这次研究设计对系统设计和实物调试有了更深刻的理解,提高了实践能力。由于个人能力有限,设计还有一些需要改进的地方,希望可以加上识别系统实现自动搜寻并抓取目标功能。参考文献[1]王若愚,卢小康,陈苏明.机械臂控制系统的研究与设计[J].技术与市场,2020,27(07):110-111.[2]刘明磊,李捍东,庞爱平,刘晓燕,陈进军.6自由度机械臂远程控制系统研究[J].现代电子技术,2020,43(02):37-40+44.[3]天津大学编.工业机械手设计基础[M].天津:天津科技出版社,1998.53-72.[4]夏嘉斌,高媛,游冲,郭阳宽,张晓青.基于LabVIEW的远程机械臂手势控制系统设计[J].[5]刘妍,张聪,王晨升.基于6自由度机械臂系统的路径规划算法[J].建筑机械,2013(13):89-92.[6]成大先.机械设计手册(第三版第5卷)[M].北京:化学工业出版社,1994.P607-644.[7]郑桦.机械臂系统的网络远程控制研究与实现[D].中国科学技术大学,2007.[8]杨伯源.材料力学(Ⅰ)[M].北京:机械工业出版社,2002.P51-84.[9]吴学勇.基于机械臂的远程监控系统研究[D].西安电子科技大学,2006.[10]冯兰胜.基于机械臂的远程控制系统研究[D].西安电子科技大学,2005.附录#include"include.h"#defineADC_POWER0x80#defineADC_FLAG0x10#defineADC_START0x08#defineADC_SPEEDLL0x00#defineADC_SPEEDL0x20#defineADC_SPEEDH0x40#defineADC_SPEEDHH0x60#defineADC_BAT 6 //staticboolUartBusy=FALSE;u32gSystemTickCount=0; //uint8BuzzerState=0;uint8Mode=0;uint16xdataPs2TimeCount=0;uint16xdataBatteryVoltage;voidDelayMs(uint16ms){ uint16i,j; for(i=0;i<800;i++) for(j=0;j<ms;j++);}voidInitADC(void){P1ASF=0x40;//ADC_RES=0;//ADC_CONTR=ADC_POWER|ADC_SPEEDLL;//Delay(2);}uint16GetADCResult(BYTEch){ uint16ad;ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START;_nop_();//_nop_();_nop_();_nop_();while(!(ADC_CONTR&ADC_FLAG));ADC_CONTR&=~ADC_FLAG;//CloseADCad=ADC_RES; ad=(ad<<2)+(ADC_RESL&0x03); returnad;}voidInitTimer3(void) //100us@12.000MHz{ T4T3M|=0x02; T3L=0x50; T3H=0xFB; T4T3M|=0x08; IE2|=0x20;}voidCheckBatteryVoltage(void){ uint8i; uint32v=0; for(i=0;i<8;i++) { v+=GetADCResult(ADC_BAT); } v>>=3; v=v*2475/256; BatteryVoltage=v;}uint16GetBatteryVoltage(void){ returnBatteryVoltage;}voidBuzzer(void){ staticboolfBuzzer=FALSE; staticuint32t1=0; staticuint32t2=0; if(fBuzzer) { if(++t1>=2) { t1=0; BUZZER=!BUZZER;//2.5KHz } } else { BUZZER=0; } if(BuzzerState==0) { fBuzzer=FALSE; t2=0; } elseif(BuzzerState==1) { t2++; if(t2<5000) { fBuzzer=TRUE; } elseif(t2<10000) { fBuzzer=FALSE; } else { t2=0; } }}boolmanual=FALSE;voidt3int()interrupt19{ staticuint16time=0; staticuint16timeBattery=0; Buzzer(); if(++time>=10) { time=0; gSystemTickCount++; Ps2TimeCount++; if(GetBatteryVoltage()<6400)// { timeBattery++; if(timeBattery>5000)// { BuzzerState=1; } } else { timeBattery=0; if(manual==FALSE) { BuzzerState=0; } } }}voidTaskTimeHandle(void){ staticuint32time=10; staticuint32times=0; if(gSystemTickCount>time) { time+=10; times++; if(times%2==0)//20ms { ServoPwmDutyCompare(); } } }int16BusServoPwmDutySet[8]={500,500,500,500,500,500,500,500};uint8xdatai;voidTaskRun(u8ps2_ok){ staticboolPs2State=FALSE; uint8PS2KeyValue; staticuint8keycount=0; TaskTimeHandle(); CheckBatteryVoltage(); TaskPCMsgHandle(); TaskBLEMsgHandle(); TaskRobotRun(); if(KEY==0) { DelayMs(60); { if(KEY==0) { keycount++; } else { if(keycount>20) { keycount=0; FullActRun(100,0); return; } else { keycount=0; LED=~LED; FullActRun(100,1); } } } }if(ps2_ok ==0){ if(Ps2TimeCount>50) { Ps2TimeCount=0; PS2KeyValue=PS2_DataKey(); if(Mode==0) { if(PS2_Button(PSB_SELECT)&PS2_ButtonPressed(PSB_START)) { FullActStop(); ServoSetPluseAndTime(1,1500,1000); ServoSetPluseAndTime(2,1500,1000); ServoSetPluseAndTime(3,1500,1000); ServoSetPluseAndTime(4,1500,1000); ServoSetPluseAndTime(5,1500,1000); ServoSetPluseAndTime(6,1500,1000); for(i=1;i<7;i++) BusServoCtrl(i,SERVO_MOVE_TIME_WRITE,500,1000); Mode=1; Ps2State=1; manual=TRUE; BuzzerState=1; LED=~LED; DelayMs(80); manual=FALSE; DelayMs(50); manual=TRUE; BuzzerState=1; DelayMs(80); manual=FALSE; LED=~LED; } else { if(PS2KeyValue&&!PS2_Button(PSB_SELECT)) { LED=~LED; } switch(PS2KeyValue) { casePSB_PAD_LEFT: ServoSetPluseAndTime(6,ServoPwmDutySet[6]+20,50); BusServoPwmDutySet[6]=BusServoPwmDutySet[6]+10; if(BusServoPwmDutySet[6]>1000) BusServoPwmDutySet[6]=1000; BusServoCtrl(6,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[6],50); break; casePSB_PAD_RIGHT: ServoSetPluseAndTime(6,ServoPwmDutySet[6]-20,50); BusServoPwmDutySet[6]=BusServoPwmDutySet[6]-10; if(BusServoPwmDutySet[6]<0) BusServoPwmDutySet[6]=0; BusServoCtrl(6,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[6],50); break; casePSB_PAD_UP: ServoSetPluseAndTime(5,ServoPwmDutySet[5]+20,50); BusServoPwmDutySet[5]=BusServoPwmDutySet[5]-10; if(BusServoPwmDutySet[5]<0) BusServoPwmDutySet[5]=0; BusServoCtrl(5,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[5],50); break; casePSB_PAD_DOWN: ServoSetPluseAndTime(5,ServoPwmDutySet[5]-20,50); BusServoPwmDutySet[5]=BusServoPwmDutySet[5]+10; if(BusServoPwmDutySet[5]>1000) BusServoPwmDutySet[5]=1000; BusServoCtrl(5,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[5],50); break; casePSB_L1: ServoSetPluseAndTime(2,ServoPwmDutySet[2]+20,50); BusServoPwmDutySet[2]=BusServoPwmDutySet[2]+10; if(BusServoPwmDutySet[2]>1000) BusServoPwmDutySet[2]=1000; BusServoCtrl(2,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[2],50); break; casePSB_L2: ServoSetPluseAndTime(1,ServoPwmDutySet[1]+20,50); BusServoPwmDutySet[1]=BusServoPwmDutySet[1]+10; if(BusServoPwmDutySet[1]>1000) BusServoPwmDutySet[1]=1000; BusServoCtrl(1,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[1],50); break; casePSB_TRIANGLE: ServoSetPluseAndTime(4,ServoPwmDutySet[4]-20,50); BusServoPwmDutySet[4]=BusServoPwmDutySet[4]+10; if(BusServoPwmDutySet[4]>1000) BusServoPwmDutySet[4]=1000; BusServoCtrl(4,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[4],50); break; casePSB_CROSS: ServoSetPluseAndTime(4,ServoPwmDutySet[4]+20,50); BusServoPwmDutySet[4]=BusServoPwmDutySet[4]-10; if(BusServoPwmDutySet[4]<0) BusServoPwmDutySet[4]=0; BusServoCtrl(4,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[4],50); break; casePSB_R1: ServoSetPluseAndTime(2,ServoPwmDutySet[2]-20,50); BusServoPwmDutySet[2]=BusServoPwmDutySet[2]-10; if(BusServoPwmDutySet[2]<0) BusServoPwmDutySet[2]=0; BusServoCtrl(2,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[2],50); break; casePSB_R2: ServoSetPluseAndTime(1,ServoPwmDutySet[1]-20,50); BusServoPwmDutySet[1]=BusServoPwmDutySet[1]-10; if(BusServoPwmDutySet[1]<0) BusServoPwmDutySet[1]=0; BusServoCtrl(1,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[1],50); break; casePSB_CIRCLE: ServoSetPluseAndTime(3,ServoPwmDutySet[3]+20,50); BusServoPwmDutySet[3]=BusServoPwmDutySet[3]+10; if(BusServoPwmDutySet[3]>1000) BusServoPwmDutySet[3]=1000; BusServoCtrl(3,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[3],50); break; casePSB_SQUARE: ServoSetPluseAndTime(3,ServoPwmDutySet[3]-20,50); BusServoPwmDutySet[3]=BusServoPwmDutySet[3]-10; if(BusServoPwmDutySet[3]<0) BusServoPwmDutySet[3]=0; BusServoCtrl(3,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[3],50); break; casePSB_START: ServoSetPluseAndTime(1,1500,1000); ServoSetPluseAndTime(2,1500,1000); ServoSetPluseAndTime(3,1500,1000); ServoSetPluseAndTime(4,1500,1000); ServoSetPluseAndTime(5,1500,1000); ServoSetPluseAndTime(6,1500,1000); for(i=1;i<7;i++) BusServoCtrl(i,SERVO_MOVE_TIME_WRITE,500,1000); break; default: if(PS2_AnologData(PSS_LX)==255) { ServoSetPluseAndTime(3,ServoPwmDutySet[3]+30,60); BusServoPwmDutySet[3]=BusServoPwmDutySet[3]+10; if(BusServoPwmDutySet[3]>1000) BusServoPwmDutySet[3]=1000; BusServoCtrl(3,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[3],50); } if(PS2_AnologData(PSS_LX)==0) { ServoSetPluseAndTime(3,ServoPwmDutySet[3]-30,60); BusServoPwmDutySet[3]=BusServoPwmDutySet[3]-10; if(BusServoPwmDutySet[3]<0) BusServoPwmDutySet[3]=0; BusServoCtrl(3,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[3],50); } if(PS2_AnologData(PSS_RY)==0) { ServoSetPluseAndTime(4,ServoPwmDutySet[4]+30,60); BusServoPwmDutySet[4]=BusServoPwmDutySet[4]+10; if(BusServoPwmDutySet[4]>1000) BusServoPwmDutySet[4]=1000; BusServoCtrl(4,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[4],50); } if(PS2_AnologData(PSS_RY)==255) { ServoSetPluseAndTime(4,ServoPwmDutySet[4]-30,60); BusServoPwmDutySet[4]=BusServoPwmDutySet[4]-10; if(BusServoPwmDutySet[4]<0) BusServoPwmDutySet[4]=0; BusServoCtrl(4,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[4],50); } if(PS2_AnologData(PSS_LY)==0) { ServoSetPluseAndTime(5,ServoPwmDutySet[5]-30,60); BusServoPwmDutySet[5]=BusServoPwmDutySet[5]-10; if(BusServoPwmDutySet[5]<0) BusServoPwmDutySet[5]=0; BusServoCtrl(5,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[5],50); } if(PS2_AnologData(PSS_LY)==255) { ServoSetPluseAndTime(5,ServoPwmDutySet[5]+30,60); BusServoPwmDutySet[5]=BusServoPwmDutySet[5]+10; if(BusServoPwmDutySet[5]>1000) BusServoPwmDutySet[5]=1000; BusServoCtrl(5,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[5],50); } if(PS2_AnologData(PSS_RX)==0) { ServoSetPluseAndTime(6,ServoPwmDutySet[6]+30,60); BusServoPwmDutySet[6]=BusServoPwmDutySet[6]+10; if(BusServoPwmDutySet[6]>1000) BusServoPwmDutySet[6]=1000; BusServoCtrl(6,SERVO_MOVE_TIME_WRITE,BusServoPwmDutySet[6],50); } if(PS2_AnologData(PSS_RX)==255) { ServoSetPluseAndTime(6,ServoPwmDu

温馨提示

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

评论

0/150

提交评论