电动机械手控制系统设计要点
引言
在中国工业韧带进展中,专门多高生产率高精度的机械加工设备从国外引进,比如数控车床和铣床等,还有把几种机床的功能集中在一起的加工中心等。总之这类 CNC机床大大的提高了工作速度,产品的加工精度,降低了工作的劳动强度,因此大受欢迎。然而这类设备引进费用也是相当的昂贵,因此国内专门多企业的技术人员在原先的旧机床上进行改进,来达到提高生产率和降低工人的劳动强度,实现工业自动化,这类改进同样也大受欢迎。
机械手是一种仿照人体上肢运动的机器,它能按照预定要求输送工种或握持工具进行操作的自动化技术设备,对实现工业生产自动化,推动工业生产的进一步进展起着重要作用。因而具有强大的生命力,受到人们的广泛重视和欢迎。
工业机械手能够代替人手的繁重劳动,显著减轻工人的劳动强度,提高劳动生产率和自动化水平。工业生产中经常显现的笨重工件的搬运和长期频繁,单调的操作,假如没有机械手那么工人的劳动强度是专门高的,有时候还要用行车职员件,生产速度大大延缓,这种情形采纳机械手是专门有效的。此外,它能在高温、低温、深水、宇宙、反射性和其他有毒、有污染环境条件上进行操作。更显其优越性,有着宽敞的进展前途。
工业机械手是近几十年进展起来的一种高科技自动化生产设备。工业机械手的是工业机器人的一个重要分支。它的特点是可通过编程来完成各种预期的作业任务,在构造和性能上兼有人和机器各自的优点,专门表达了人的智能和适应性。机械手作业的准确性和各种环境中完成作业的能力,在国民经济各领域有着宽敞的进展前景。机械手是在机械化,自动化生产过程中进展起来的一种新型装置。在现代生产过程中,机械手被广泛的运用于自动生产线中,机械人的研制和生产已成为高技术邻域内,迅速发殿起来的一门新兴的技术,它更加促进了机械手的进展,使得机械手能更好地实现与机械化和自
动化的有机结合。机械手尽管目前还不如人手那样灵活,但它具有能不断重复工作和劳动,不知疲劳,不怕危险,抓举重物的力量比人手力大的特点,因此,机械手已受到许多部门的重视,并越来越广泛地得到了应用在机械工业中,应用机械手的意义能够概括如下:
〔一〕以提高生产过程中的自动化程度
应用机械手有利于实现材料的传送、工件的装卸、刀具的更换以及机器的装配等的自动化的程度,从而能够提高劳动生产率和降低生产成本。 〔二〕以改善劳动条件,幸免人身事故
在高温、高压、低温、低压、有灰尘、噪声、臭味、有放射性或有其他毒性污染以及工作空间狭窄的场合中,用人手直截了当操作是有危险或全然不可能的,而应用机械手即可部分或全部代替人安全的完成作业,使劳动条件得以改善。
在一些简单、重复,专门是较笨重的操作中,以机械手代替人进行工作,能够幸免由于操作疲劳或疏忽而造成的人身事故。 〔三〕能够减轻人力,并便于有节奏的生产。
综上所述,有效的应用机械手,是进展机械工业的必定趋势。
1 任务要求与总体设计方案
1.1 设计任务与要求
许多娱乐场合设有投币手动抓物机械手。仿照娱乐场合中的手动抓物机械手,设计机械手的操纵系统,能够配合机械手的机械结构实现手动抓物。
要求:在资料调查和分析的基础上,对系统进行的分析和设计;要求完成如下要紧功能:
〔1〕机械手的操纵能够用单片机或PLC;
〔2〕通过按键,实现机械手的上升、下降、左移、右移、手爪张开、闭合; 〔3〕可采纳上位机,远程操纵机械手的上升、下降、左移、右移、手爪张开、闭合。 〔4〕采纳电机驱动操纵方式。
1.2 总体设计方案
确定机械手的任务要求,依照任务要求初步拟定机械手的技术参数、运动形式、驱动方案、操纵系统方案等。本课题要紧涉及到一下三部分内容: 第一,机械手的机械结构的设计;
第二,使机械手摆动的设计及驱动手臂运动的选择。 第三,操纵系统的设计。 实施方案:
〔1〕机械手的机械结构设计
按照模块化的设计方法,将机械手分为底座、大臂、中臂、前臂和手爪四个部分,共四个自由度〔不包括爪开关自由度〕。 〔2〕机械手摆动的设计
机械手依照手臂的动作形状,采纳多关节型机械手结构紧凑,定位精度较高,操纵灵活范畴广,占地面积小,因此本设计采纳多关节型机械手。 〔3〕驱动手臂运动的选择
机械手采纳电动机构驱动机械手结构简单、操纵方便,驱动力较大大等特点。 〔4〕操纵系统的设计
本毕设采纳机械手操纵系统使用VB6.0编程软件编制作上位机操作界面,人工手动操作上位机输出操纵信号通过RS232串口通信发送给ATmega64单片机,单片机接收到信号后使用内部定时器模拟输出伺服电机的操纵脉冲,从而实现自动操纵和远程操纵机械手的目的。
机械手由执行机构、驱动-传动系统和操纵系统这三部分组成,如图 1-1 所示。
图1-1机械手系统组成
要实现机械手所期望实现的功能,机械手的各部分之间必定还存在着相互关联、相互阻碍和相互制约。它们之间的相互关系如图1-2 所示。
图1-2 机械手操纵系统
2 机械结构设计
机械结构是机械手的骨架,机械结构的好坏直截了当阻碍着机械手的功能。
2.1机械手的主体机械设计
关于机械手的主体骨架的设计,机械部分底座、大臂、中臂、前臂和手爪。
2.2 机械手摆动的设计
为实现机器人的末端执行器在空间的位置而提供的3个自由度,能够有不同的运动组合,通常能够将其设计成如下四种形式:
表2-1 机械手结构选型表
结构形式方案 1 直角坐标型 特点 优缺点 结构简图 作机的手臂具有结构刚度较好,三个移动关节,操纵系统的设其关节轴线按直计最为简单,但角坐标配置 其占空间较大,且运动轨迹单一 2 圆柱坐标型 操作机的手臂至结构刚度较好, 少有一个移动关运动所需功率节和一个回转关较小,操纵难度节,其关节轴线较小,但运动轨按圆柱坐标系配迹简单,使用过置 程中效率不高 3 球坐标型 操作机的手臂具结构紧凑,但其 有两个回转关节操纵系统的设和一个移动关坐标系配置 计有一定难度,刚度不足,机械结构较为复杂 节,其轴线按极且机械手臂的 4 关节型 操作机的手臂类运动轨迹复杂, 似人的上肢关节结构最为紧凑,动作,具有三个但操纵系统的回转关节 设计难度大,机械手臂的刚度差 依照本次设计的要求,工件要垂直升降、旋转、水平移动。考虑其复杂程度选择关节型。
2.3 机械手爪部设计
夹持式手部结构由手指(或手爪)和传力机构所组成。其传力结构形式比较多,如滑槽杠杆式、斜楔杠杆式、齿轮齿条式、弹簧杠杆式等。夹持式是最常见的一种方式,其中常用的有两指式、多指式和双手双指式:按手指夹持工件的部位又可分为内卡式(或内涨式)和外夹式两种:按仿照人手手指的动作,手指可分为一支点回转型,二支点回转型和移动型(或称直进型),其中以二支点回转型为差不多型式。当二支点回转型手指的两个回转支点的距离缩小到无穷小时,就变成了一支点回转型手指;同理,当二支点回转型手指的手指长度变成无穷长时,就成为移动型。回转型手指开闭角较小,结构简单,制造容易,应用广泛。移动型应用较少,其结构比较复杂庞大,当移动型手指夹持直径变化的零件时不阻碍其轴心的位置,能适应不同直径的工件。如图2-1所示为夹持式手部结构。
图2-1夹持试机械爪
其手指夹紧工件是由舵机中的齿轮带动另一手爪齿轮使手指开闭。手部结构中的齿轮齿条属于传力机构。设计时考虑的几个问题: (一)具有足够的握力(即夹紧力)。
在确定手指的握力时,除考虑工件重量外,还应考虑在传送或操作过程中所产生的惯性力和振动,以保证工件不致产生松动或脱落。 (二)手指间应具有一定的开闭角。
两手指张开与闭合的两个极限位置所夹的角度称为手指的开闭角。手指的开闭角应保证工件能顺利进入或脱开,假设夹持不同直径的工件,应按最大直径的工件考虑。 (三)具有足够的强度和刚度
手指除受到被夹持工件的反作用力外,还受到机械手在运动过程中所产生的惯性力和振动的阻碍,要求有足够的强度和刚度以防折断或弯曲变形,但应尽量使结构简单紧凑,自重轻,并使手部的中心在手腕的回转轴线上,以使手腕的扭转力矩最小为佳。
综合上述考虑,由于机械爪性能要求及加工精度要求都比较高,现有的工具无法完成其制作要求,故决定通过购买获得符合该要求机械爪。
2.4 材料与型材选择
机械手的制作材料多种多样,因此有多种方案能够选择。 方案一:使用及铝合金材料
相关于通常使用的钢铁材料,铝有以下的重要特点和优点。基于这些特点和优点,铝及其铝合金在许多领域得到广泛的应用。
〔1〕质量轻。铝的密度约为2.7g/cm2,只是钢铁的1/3。铝合金不仅用应用于飞机制造等方面,而且由于当前节约能源的需要,车辆与舟船等常用交通运输工具的轻量化更加突出,铝合金在这方面也得到更加宽敞的应用。此外,在土木结构和建筑门窗等方面,铝合金制造的结构也差不多被广泛采纳。
〔2〕耐腐蚀。铝及铝合金在大气中可不能〝生锈〞,耐大气腐蚀性远优于钢铁。这是由于铝关于空气中的氧具有较大的亲和力,因此,当铝的表面曝露大气中时,其表面专门快就能生成一层附着力强、致密的有一定爱护下的自然氧化膜。尽管氧化膜的厚度专门薄,只有0.01~0.05um,但这差不多给予铝及铝合金优良的耐大气腐蚀性。专门是铝的阳极氧化处理,由于铝的阳极氧化膜是透亮膜,既能够保持铝原有的金属质感,而且又可大幅度的提高金属铝原表面的硬度。耐腐蚀性和耐磨损性,从而大大拓宽铝及铝合金的应用范畴。
〔3〕铝容易形成各种合金。铝合金能够满足多方面新的性能要求,专门能够满足力学性能与腐蚀性能方面的需要。目前差不多使用的工业铝合金品种以达400多种,形成8个系列,从延展性最好的低强度純铝1XXX系列到超高强度的7XXX系合金,极限抗拉强度差不多高达690MPa。铝合金能够通过热处理进一步强化,其强度甚至能够和优质合结钢比美。
〔4〕加工成型性好。铝及铝合金的压力加工产品,如板、管、棒、型、线、箔和粉都能够生产,同时其产品都已近得到广泛的工业应用。另外,许多铝的零部件和工艺品还能够通过铸造工艺得到。铝合金还能够进行车、铣、镗、刨等机械加工。
〔5〕热传导性高。铝的热传导性虽次于铜,其导热率相当高,约为铜的50%~60%,而单位重量的导热性那么优于铜。不论加热依旧冷却,铝差不多上专门好的金属介质。为此,在食品工业、化学工业、石油工业和航空工业中,铝材是被广泛采纳的热交换器材料。此外,铝是生产金属厨具首选材料。
〔6〕导电性好。铝是两个常用的高电导率金属之一,电导体级别的铝是IACS〔国际退火铜标准〕的62%,然而铝的密度只有铜的1/3,因此,单位重量的铝却是相同单位重量的铜导电性的两倍。
〔7〕光反射性强。抛光的铝关于无线电波、可见光波,直至红外光波等所有电磁光波都具有极强的反射性。抛光的铝表面关于白光的反射率达到80%以上。 〔8〕无低温脆性。铝的低温拉伸强度比较高,能够用于低温结构材料。
〔9〕耐克辐射性。铝的热中子吸取截面小,仅为0.23x105Pa左右,适合与热中子可反应堆使用。
〔10〕冲击吸取性比较好。铝及铝合金的冲击吸取性好,适于制作汽车的保险杠。
〔11〕非磁性,冲击不产生火花。铝及铝合金是非磁性的,且受冲击时不产生火花。这一性能在某些专门用途时是专门可贵的特性,由此可作为电器设备的屏蔽材料,或作为易燃易爆的器材、外表材料等。
〔12〕可焊接。铝及铝合金通过惰性气体电弧焊接后的外观、耐腐蚀性和力学性能都比较好,能够满足焊接结构件的需要。 〔13〕无毒性。铝关于生物体是无毒的。 铝的缺点:
尽管铝具有上述优点和特点,然而铝也有其本身的缺点和弱点,其中有一些缺点可能确实是从优点衍生的。其要紧缺点是:
〔1〕铝的硬度比较低,与此同时其耐磨性也比较差。 〔2〕铝在凝固时体积收缩率比较大,大约为6.6%。 〔3〕铝的线膨胀系数比较高。
〔4〕铝的熔点比较低,铝和铝合金的使用温度不可能超过200摄氏度,因此起高温的使用受到限制。
〔5〕铝的弹性模量只有刚的1/3。
机械手使用的材料大部分是用于结构,一样应该是金属材料,而且所承载的力度和运动后不应该产生严峻的变形和断裂,从力学的角度看即具有足够的强度。因此要紧材料选用各种不锈钢管和铝合金管。这两者比较,重量轻,寿命高,因此除了专门讲究强度,刚度以及抗摩擦磨损性的机构,一样更多项选择用不锈钢管作为结构构件的材料。 方案二:使用有机玻璃材料
有机玻璃的特性:
〔1〕高度透亮性。有机玻璃是目前最优良的高分子透亮材料,透光率达到92%,比玻璃的透光度高。称为人造小太阳的太阳灯的灯管是石英做的,这是因为石英能完全透过紫外线。一般玻璃只能透过0.6%的紫外线,但有机玻璃却能透过73%。
〔2〕机械强度高。有机玻璃的相对分子质量大约为200万,是长链的高分子化合物,而且形成分子的链专门柔软,因此,有机玻璃的强度比较高,抗拉伸和抗冲击的能力比一般玻璃高7~18倍。有一种通过加热和拉伸处理过的有机玻璃,其中的分子链段排列得专门有次序,使材料的韧性有显著提高。用钉子钉进这种有机玻璃,即使钉子穿透了,有机玻璃上也不产生裂纹。这种有机玻璃被子弹击穿后同样可不能破成碎片。因此,拉伸处理的有机玻璃可用作防弹玻璃,也用作军用飞机上的座舱盖。
〔3〕重量轻。有机玻璃的密度为1.18kg/dm3,同样大小的材料,其重量只有一般玻璃的一半,金属铝〔属于轻金属〕的43%。
〔4〕易于加工。有机玻璃不但能用车床进行切削,钻床进行钻孔,而且能用丙酮、氯仿等粘结成各种形状的器具,也能用吹塑、注射、挤出等塑料成型的方法加工成大到飞机座舱盖,小到假牙和牙托等形形色色的制品。 有机玻璃〔聚甲基丙烯酸甲酯〕具有
质地坚硬,可加热塑形。绝热绝缘,对X线、MRI检查无阻碍等优点,在国内外曾一度得到广泛应用。
其缺点是力学性能差,要紧是脆性大,抗冲击性能差,受到第二次意外打击时,有机玻璃易破裂。以后有学者对有机玻璃进行了改进,在其中加入了增强纤维〔短碳纤维〕,制成了短碳纤维增强聚甲基丙烯酸甲酯。经测试,其抗拉弹性模量〔刚性〕和抗冲击强度比有机玻璃提高了2倍,硬度高,线膨胀系数常温时相当于有机玻璃在-400℃的数值。耐介质试验在常温下350h,几乎无明显增重、增容。板材压模复合材料中随机走向的纤维,可阻止裂纹的扩展。具有板材薄、重量轻、有良好的抗冲击能力,不开释毒性物质.
综合上述两种方案:
〔1〕由于该机械手为机械模型,机械强度要求并不是专门高,有机玻璃的机械强度足以满足该机械手运动强度。
〔2〕从制作难度考虑,有机玻璃受热容易形变,相比铝合金更容易加工制作。 〔3〕从成本考虑,有机玻璃比铝合金廉价专门多,相同体积的铝合金比有机玻璃贵5~10倍。
集合以上优缺点应选择方案二。
2.5 驱动系统方案的选择
一样情形下机械手驱动系统的选择按照动力源分为液压、气压和电动三大类,依照需要,也能够将这三种差不多类型组合成复合式的驱动系统。目前广泛采纳的驱动系统的比较如下表:
表2-2:常用驱动系统特性
特性 气压驱动 输出功率和使用范畴 操纵性能和安全性 结构性能 结构体积较安装和爱护要求 安装要求不效率和制造成本 效率低,〔为气压较低,输压缩性大,对出功率小,当速度、位置精输出功率增确操纵困难。大时,结构尺阻尼成效差。寸将过大只低速不易操适用于小型,纵,排气有噪快速驱动 音 大,结构易于高,能在恶劣0.15~0.2〕气标准化。易实环境种工作,源方便,结构现直截了当驱动,密封问题不突出 结构较气动安装要求高效率中等为路结构较复爱护方便 简单,成本低 液压驱动 油压高,可获液体不可压得较大的输缩,压力、流出功率,适用量易操纵,反要小,易于标〔防泄漏〕,0.3~0.6,管准化,易实现要配置液压于重型,低速应灵敏,可无直截了当驱驱动器 现速度、位置显得重要 的精确操纵,传动平稳,泄漏对环境污染 交直流一般适用于抓其操纵性能差,电动机 重量较大而惯性大,不易速度低的中、精确定位 重型机器人对环境无阻的驱动 输碍 出力较大 步进、伺服电步进电动机操纵性能好,动机 输出力较小、操纵灵活性伺服电机可强,可实现速大一些 度、位置的精 电动机驱动以实现标准化,需减速装置,传动体积较大 元设备,安装杂,成本高 要求较高 级调速、能实动,密封问题面积大,爱护安装修理方便 成本低 效率为0.5左右 体积小,需减修理使用较速装置 复杂 成本较高 效率为0.5左右 适用于运动确操纵,对环操纵要求严境无阻碍 格的中、小型 机器人 综合考虑以上驱动系统的优缺点以及工作要求,选择伺服电动机驱动系统作为驱动方式。
2.6 电机类型选择方案
在日常系统所采纳的电机,一样采纳直流电机、步进电机、舵机。 方案一:使用直流电机
直流电机工作原理:
直流电动机是使电机的绕组在直流磁场中旋转感应出交流电,通过机械整流,得到直流电。广泛应用于收录机、录像机、影碟机、电动剃须刀、电吹风、电子表、玩具等。
直流电机能提供较大力矩,能够轻易驱动机体运动。在极限位置放置限位开关,可操纵机械手转动。 方案二:使用步进电机
步进电机的工作原理:
步进电机是将电脉冲信号转变为角位移或线位移的开环操纵元步进电机件。在非超载的情形下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的阻碍,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为〝步距角〞,它的旋转是以固定的角度一步一步运行的。能够通过操纵脉冲个数来操纵角位移量,从而达到准确定位的目的;同时能够通过操纵脉冲频率来操纵电机转动的速度和加速度,从而达到调速的目的。
步进电机可固定角度转动,不需限位开关便可操纵机械手转动到指定位置。 方案三:使用舵机
图2-2舵机 图2-3舵机接线图
图2-4舵机结构图
舵机工作原理:
舵机要紧是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机发出讯号给舵机,经由电路板上的 IC判定转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回讯号,判定是否差不多到达定位。
舵机可在0°~180°精确转动,能够提供较大力矩同时拥有保持位置的功能,反应灵敏,可专门好的完成机械手运动要求。
依照设计要求,该机械手的电机需满足: (1) 电机能够提供比较大的力矩来抓取物体。
(2) 电机能够做到精确角度定位,使机械爪准确移动抓取物体。 (3) 电机能够在较大力矩下保持原位置能力。
综上要求,直流电机尽管能提供专门大力矩,但不行精确定位并保持原位置。步进电机能够转动较精确角度,但不能提供大力矩和保持原先位置。舵机可在0°~180°精确转动,且能够提供较大力矩同时拥有保持位置的功能。
应选择方案三。
按上述设计考虑,完成机械手结构的制作,如图2-5:
图2-5机械手结构
3 机械手硬件电路设计
依照任务要求,机械手系统电路设计可要紧分为三个模块:单片机主控模块、矩阵按键模块、串口通讯模块。图3-1为硬件电路设计方框图。图3-2 单片机整体模块设计原理图。
图3-1硬件电路设计方框图
图3-2 单片机整体模块设计原理图
3.1 单片机模块 3.1.1单片机方案选择
单片机体积小巧,内部包括中央处理器,数据储备器,程序储备器及输入输出设备。关于需要灵活机动,精度要求不高,有可扩展性及程序可擦写和简单成熟的编程平台等要求,单片机不失为最合适的选择。现有两种单片机AT89S51和AVR可供选择。 方案一:
采纳常见的 89S51作为米粉机点餐系统的操纵核心。传统的51 单片机具有价格低廉,输入输出接口多,使用简单等特点,容易开发。 方案二:
采纳AVR单片机,AVR单片机在一个芯片内将增强性能的RISC 8位CPU与可下载的FLASH相结合使其成为适合于许多要求。具有高度灵活性的嵌入式高效微操纵器。
从机械手的功能实现来说,单片机要紧能够多路模拟输出精确的PWM功能上,实现上位机串口通讯,S51单片机与AVR单片机相比,AVR单片机拥有内置多路的PWM输出而且AVR单片机具有更好的稳固性和程序处理效率,实现起来也比较方便,因此采纳方案二的AVR单片机。 3.1.2单片机主控电路设计
ATmega64是基于增强的AVR RISC机构的低功耗8位CMOS微操纵器。由于其先进的指令执行时刻,ATmega64的数据吞吐率高达1MIPS/MHz,从而能够缓减系统在功耗和处理速度之间的矛盾。 主控电路的设计是以ATmega64单片机和RS232通信模块为核心,外接矩阵按键模块和电源等硬件电路。ATmega64单片机工作在8MHZ的频率下,采纳+5V的直流电源供电。图3-3为单片机最小系统设计图。 AVCCGNDGNAREDFPF0PF1PF2PF3PF4PF5PF6PF7GND+5VPA0PA1PA2PF0PF1PF2PF3PF4PF5PF6PF7GNDVCCPA0PA1PA2VCCXGTNADL2XTAL1PB7PG3PRGE4STPB7PG3PG4RST+5VXA2GTNLDXTLA1PD0PD1PD2PD3PD4PD5PD6PD717181920212223242526272829303132PD0PD1PD2PD3PD4PD5PD6PD7PE0PE1PE2PE3PE4PE5PE6PE7PB0PB1PB2PB3PB4PB5PB612345678910111213141516AVCC64636261605958575655545352515049PG5PE0PE1PE2PE3PE4PE5PE6PE7PB0PB1PB2PB3PB4PB5PB6J9ATMEGA64PA3PA4PA5PA6PA7PG2PC7PC6PC5PC4PC3PC2PC1PC0PG1PG048474645444342414039383736353433PG2PC7PC6PC5PC4PC3PC2PC1PC0PG1PG0 图3-3 ATmega64处理器 在单片机系统模块中,还包括有外部晶振电路、复位电路。 3.1.3AVR晶振电路的设计 与传统的51单片机相比,AVR单片机内置RC振荡电路。出厂时,未进行时钟源设置的AVR,其时钟源使用的是内部RC振荡,一样情形使用的是1M频率。 通过对熔丝位的设置,能够设置MCU的内部RC振荡频率。例如:4M、8M等。 只是,内置RC振荡,在一致性方面存在差异,它因生产的批次有所差异,亦与温度等因素有较大的相关性。因此,在一些对时钟要求较高的场合,如:精确定时,RS232通信等,这些场合,建议使用外部的晶振线路。图3-4为外部晶振电路: C8XTLA122pFY116MHzC9XTLA222pF 图3-4晶振电路 3.1.4AVR复位电路的设计 AVR单片机内置复位电路,同时在熔丝位里,能够操纵复位时刻,因此,AVR单片机能够不设外部上电复位电路,依旧能够正常复位,稳固工作。 假设是系统需要设置按键复位电路,那么注意,AVR单片机是低电平复位,图3-5为设计的按键复位电路: S1C11RST10uFVCCR1510K+5图3-5复位电路 + 3.2 矩阵按键模块 单片机通过动态扫描识别矩阵按键,可大大减少单片机IO口的使用。使用按键时注意由於这种按键是机械式的开关,当按键被按下时,键会震动一小段时刻才稳固,為了幸免让8051误判為多次输入同一按键,我们必须在侦测到有按键被按下,就延迟一小段时刻,使键盘跃过抖动状态以达稳固状态,再去判读所按下的键,就能够让键盘的输入稳固。图3-6为矩阵按键电路图: S3SW-PBS4J8987654321CON8SW-PBS5SW-PBS6SW-PBSW-PBS9SW-PBS10SW-PBSW-PBS13SW-PBS14SW-PBSW-PBS17SW-PBS18SW-PBS7SW-PBS8S11SW-PBS12S15SW-PBS16 图3-6矩阵按键 图3-7矩阵键盘 3.3串口通信模块 RS-232C是由美国电子工业协会〔EIA〕正式公布的,在异步串行通信中应用最广泛的标准总线。它规定连接电缆和机械、电气特性、信号功能及传送过程。现在,运算机上的串行通信端口〔RS-232〕是标准配置端口,差不多得到广泛应用。图3-7为串口通信模块, C4D9C7104104J8C610412345678C1+VCCV+GNDC1-T1OUTC2+RIINC2-R1OUTV-T1INT2OUTT2INR2INR2OUTMAX232161514131211109++5C10PD3D10PD2R10+54.7KR114.7KT2R2J1162738495C5104T2R2PD3PD2DB9 图3-7 RS232串口通信
4 软件系统设计
软件编程既能够用汇编语言,又可采纳C语言。在这套系统制作中单片机编程采纳的是C语言编程。C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且能够直截了当实现对系统硬件的操纵。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。软件部分是用来配合硬件电路,指挥操纵整个系统的动作,以实现设计预定功能。此系统在运行中,其要紧由两部分功能组成:
一部分是PC上位机操作界面通过人工手动操作鼠标点击或键盘按键信息收集操纵信号,并将信号通过串口通信发送给单片机。
另一部分是单片机同意上位机信号或同意外部矩阵按键信号后对机械结构的运动的操纵。
4.1 上位机程序设计
依照设计的电路要求,图4-1为 PC上位机操作界面的程序框图,
图4-1上位机操作界面框图
依照流程图的流程编写上位机操作界面,打开VB6.0创建主窗体frmmain,创建串口通信Mscomm控件及添加按键控件。一样用VB开发串行通信程序有两种方法:一是利用Windows的通信API函数;另一种是采纳VB标准控件Mscomm来实现。
利用API编写串口通信程序较为复杂,需要把握大量通信知识,其优点是可实现的功能更丰富、应用面更广泛,更适合于编写较为复杂的低层次通信程序。在本毕设中不需太多串口功能,故不使用该方法。
采纳Mscomm控件实现串口通信时,第一添加一Mscomm控件到窗体中,该控件一样不在通用工具窗口中,而是需通过菜单项\"工程〔P〕→部件(O)\"进入选择窗口,在控件tab页中选取MicrosoftCommControl5.0,现在工具窗口中显现Mscomm图标,即可被使用。以下程序为VB6.0打开串口程序:
Private Sub cmd打开串口_Click()
MSComm mPort = 4 '打开COMM4口 If MSComm.PortOpen = False Then
MSComm.Settings = \"9600,n,8,1\" '9600波特率,无校验,8位数据位,1位停止位
MSComm.PortOpen = True '打开串口
End If
MSComm.InBufferCount = 0 '清除接收缓冲区 End Sub
在主窗体添加键盘按键触发事件及鼠标按下放开事件,检测按键及鼠标按键。以下是在键盘触发事件中检测按键的程序:
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = Asc(\"a\") Then Call cmd1_Click '按 〝a〞键,按键1触发事件 If KeyAscii = Asc(\"d\") Then Call cmd2_Click '按 〝d〞键,按键1触发事件 If KeyAscii = Asc(\"u\") Then Call cmd3_Click '按 〝u〞键,按键1触发事件 If KeyAscii = Asc(\"j\") Then Call cmd4_Click '按 〝j〞键,按键1触发事件 If KeyAscii = Asc(\"i\") Then Call cmd5_Click '按 〝i〞键,按键1触发事件 If KeyAscii = Asc(\"k\") Then Call cmd6_Click '按 〝k〞键,按键1触发事件 If KeyAscii = Asc(\"o\") Then Call cmd7_Click '按 〝o〞键,按键1触发事件 If KeyAscii = Asc(\"l\") Then Call cmd8_Click '按 〝l〞键,按键1触发事件 If KeyAscii = Asc(\"w\") Then Call cmd9_Click '按 〝w〞键,按键1触发事件 If KeyAscii = Asc(\"s\") Then Call cmd10_Click '按 〝s〞键,按键1触发事件 End Sub
依照检测到的按键信号发送机械手操纵信号到串口数据发送区。图4-2为程序框图:
图4-2程序框图
在编写的上位机操作界面添加编组框及退出键完善操作界面,使界面更友好。〔上位机总程序详见附录一〕。图4-3为完成后的操作界面:
图4-3上位机操作界面
4.2 单片机总程序设计
依照设计的的要求,进行AVR单片机C语言编程,编程思路方框图如图4-4。〔单
片机程序详见附录二〕
开始 初始化检测 串口 中断 矩阵按 键按下 判定 键值 接收 数据 发送 指令 输出操 纵信号 图4-4单片机程序框图
使用WINAVR编程软件进行编程。创建工程进入编程,第一调用头文件: #include 分别为单片机引脚定义头文件、延迟头文件、中断函数头文件。这三个头文件在一样编程中常常用到,接着将IO口初始化和串口初始化。 4.2.1串口程序设计 ATmega64单片机拥有2个串口中断函数,分别为串口中断0〔Usart0〕和串口中断1〔Usart1〕本次毕设使用串口中断1。串口中断1程序初始化如下: void Usart_Init() { UCSR1A = 0X00; UCSR1C &=~(1< } //UCSRC寄存器与UBRRH寄存器共用相同的I/O地址,写 UCSRC 时, URSEL 应UBRR1L = (fosc / BAUD / 16 - 1) % 256; //波特率设置 UBRR1H = (fosc / BAUD / 16 - 1) / 256; UCSR1B |= (1 << RXCIE1) | (1 << RXEN1) | (1 << TXEN1); //发送使能 串口程序还包括串口接收中断函数、串口字节发送函数等。〔详见附录二单片机程 设置为 1。 序〕 4.2.2舵机操纵程序设计 舵机要紧是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机发出讯号给舵机,经由电路板上的 IC判定转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回讯号,判定是否差不多到达定位。 舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并能够保持的操纵系统。工作时,操纵信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。 操纵脉冲固定周期为20ms,当送出以下正脉冲宽度时,能够得到不同的操纵结果: 1、正脉冲宽度为 0.5ms 时,舵机会反转〔逆时针〕。 2、正脉冲宽度为 2.5ms 时,舵机会正转〔顺时针〕。 3、正脉冲宽度为 1.5ms 时,舵机会回到中点。 如图4-5: 图4-5 舵机输出转角与输入信号脉冲宽度的关系 本毕设使用单片机计数/定时器0产生模拟PMW信号来操纵舵机转动。由于使用外部晶振为8MHz,便于精确运算定时时刻,采纳8分频,定时50计数次后产生中断。定时初值设置TCNT0 = 0xce,定时时刻 = (256-206)/8M*8=50us。每产生400次中断后便可生成20ms的PWM舵机操纵信号。以下为定时器0的初始设置: void init_devices(void) //初始配置 { //T/C0定时中断设置 cli(); //禁止所有中断 TIMSK |= (1 << TOIE0); //T/C0溢出中断承诺 TCCR0 |= (1 << CS01); // T/C0工作于一般模式8分频 TCNT0 = 0xce; //定时初值设置,定时时刻 = (256-206)/8M*8=50us Counter50us = 0; // 500us计时变量清零 sei(); //使能全局中断 } 5 系统调试 在硬件和软件都完成后,需要对硬件和软件分别调试。只有当硬件中的各个模块工作测试稳固好后,才能进行系统总体调试。那个地点将调试的过程及在调试的过程中所遇到的问题提出来进行讨论,以便能够进一步的把握设计工作的要领,积存体会。 5.1 机械系统总装调试 在每个机械模块都加工完成后,就把每个模块安装在主体骨架的相应位置,把电机接上相应的电源,调试电机带动机械运动的成效,对不到位之处进行修改,从而确定电机装配位置,和所提供电源电压的大小,使系统运行达到设计成效。对模块的机械系统调试,是以小体配合大体来进行调试,已修改小尺寸为主,以最简单的修改方式来解决一些装配上的问题。 5.2 硬件调试 硬件调试要紧是针对电路板调试,检测它们的工作状态是否到达电路设计要求,也是检测电路板功能的实现情形。 5.2.1单片机电路板的调试 第一通过下载口写入一个程序验证板子的差不多功能,可使一些IO管脚输出不同高低电平,再用万用表测量电压来判定电路好坏,由于本毕设电路的单片机PA口有发光二极管,可使PA口输出流水灯,便于直观的观看电路情形,如下为测试程序: #include int main(void) //GCC中main文件必须为返回整形值的函数,没有参数 { PORTA = 0X00; //PORTB输出低电平,使LED熄灭 DDRA = 0XFF; //配置端口PB全部为输出口 while(1) { unsigned char Flow_LED,Delay500ms; //定义流水灯循环次数以及延时时刻变量 for(Flow_LED = 0;Flow_LED <= 7;Flow_LED++) //流水灯从0-7总共循环8次 { PORTA = (1 << Flow_LED); //每次循环中点亮一个LED for(Delay500ms = 0;Delay500ms < 5;Delay500ms++) //延时500ms { _delay_ms(100); //delay.h中的延时1ms函数 }}}} 然后拔掉下载线,以5V的电压给单片机板供电,现在看看板子的工作状态,假如运行流水灯状态那么板子调试成功,能够写入所需的程序;反之要检测板子的电路原理图和电路上的焊接点,从而找出错误并采取相应的措施修改。 5.2.2RS232串口的调试 打开串口调试助手软件,然后烧入接收到数据并发送接收数据的串口程序给单片机,给电路提供5V的芯片工作电压,打开串口调试助手并发送数据,假如有信号返回那么串口电路成功;反之要检测反之要检测板子的电路原理图和电路上的焊接点,是否有无接反,从而找出错误并采取相应的措施修改。 5.3 软件调试 5.3.1上位机程序调试 VB操作界面编程中,串口控件是难点,编好程序后可将串口连接线2和3脚短接,可不用外部硬件便能够进行数据发送接收调试。 5.3.2单片机程序调试 单片机操纵程序是采纳C语言编程,编程所采纳的软件是Keil 编程软件。关于单片机C语言软件调试,在语句中显现的语法错误,该软件会提示出来,以便于更正。因 此,软件调试要紧的工作是检查头文件是否正确,是否与单片机的端口地址相匹配。其次,确实是检查初始化程序的正确性。然后确实是依照软件实现步骤逐个检查程序的可行性,以及程序的嵌套性是否都能达到设计的要求。 单片机部分调试中的难点是舵机操纵部分。PWM模拟信号判定输出需在每次定时中断期间完成,假设定时中断时刻过短,那么在下一个中断来临时程序还在运行判定,那么会丢失中断;假如中断时刻过长,那么PWM模拟信号输出粗糙,不能精确操纵舵机转动,更有可能会显现舵机抖动的情形。 5.4 最终作品 图5-1 机械手〔正面〕 图5-2机械手〔背面〕 图5-3电路板 通过一个多星期的调试,作品正式完成,它能够稳固地实现毕设要求功能。 作品参数: 臂长为40cm; 机体质量:1.5Kg; 额定工作电压:5V; 最大抓起质量:300g 6 总结 机械手操纵系统通过一段时刻的制作,在要求的时刻内把整个大系统制作完成,它能够按照任务书中的要求稳固地实现各个功能。在整个设计过程中,不管是关于系统的机械部分依旧电路部分,都通过了各种方案优缺点比较从而确定最终采纳方案,整个设计思路清晰。在机械方面:要紧由有机玻璃制作系统框架,用螺钉及热熔胶固定,尽量用简单易实现的机械结构,来完成设计要求。 样机调试中显现了专门多问题,例如定时中断的时刻过短,两PWM信号发送的延迟时刻过长,机械臂轴心不在一条线上等问题。但依照翻阅书籍和上网收索及设计理论分析,反复检查程序,才发串口无法通信,现一些存在的问题使得系统不能正常运行。 通过本次毕业设计,我对往常所学的理论知识有了更进一步的了解,同时能更加合理的查阅及利用资料,为达到课题要求而对在大学期间所学习的课程进行了全面、综合的巩固和加深。 这次毕业设计不同与以往任何一次课程设计,它耗时更长,独立性更高,要求更加严格细致。它不仅要求我们能充分利用在校期间所学的课程的专业知识,同时也要求我们有良好的明白得力、把握力和实际运用的灵活度。在设计过程中给我印象最深的是作为一名设计人员,面对一项设计任务时,不仅要能够熟练的运用相关专业知识,同时还要考虑到在实际应用中所面对的场地、环境、资金和实际加工等一系列问题。 通过这次毕设,大大提高了自己独立查阅科技资料的能力、动手能力以及分析问题能力,并体会到科技制作的乐趣。 谢 辞 桂林电子科技大学信息科技学院的四年的学习生活既将终止,回首既往,自己一生最宝贵的时刻能于如此的校园之中,能在众多学富五车、才华横溢的老师们的熏陶下度过,实是荣幸之极。在这四年的时刻里,我在学习上和思想上都受益非浅。这除了自身努力外,与各位老师、同学和朋友的关怀、支持和鼓舞是分不开的。 感谢桂林电子科技大学信息科技学院我的培养,在信科的生活,是我人一辈子中最重要的四年,是学校的培养让我学到了专业的科学文化知识,同时也提升了我的多方面的能力,塑造了我的人格,使我在以后的人一辈子道路上能够更加信心百倍的走下去。百年郑安,春风化雨,教我育我,永不能忘。 感谢我的父母,我的家人。焉得谖草,言树之背,养育之恩,无以回报。你们始终如一的支持和关爱是我人一辈子道路不断前进的强大动力,教我学会坚强、勇敢,使我在磨砺中得到成长。祝你们永久健康欢乐,这是我最大的心愿和牵挂。 通过此次的论文,我学到了专门多知识,跨过了传统方式下的教与学的体制束缚,在论文的写作过程中,通过查资料和搜集有关的文献,培养了自学能力和动手能力。同时由原先的被动的同意知识转换为主动的寻求知识,这能够说是学习方法上的一个专门大的突破。在以往的传统的学习模式下,我们可能会记住专门多的书本知识,然而通过毕业论文,我们学会了如何将学到的知识转化为自己的东西,学会了如何更好的处理知识和实践相结合的问题。 还要感谢07531203班的全体同学,感谢他们在天天相处中,互相关心,关于我不明白的问题,他们都能专门好的关心我,不明白的大伙儿一起研究,这使毕设能顺利的完成。 在此,祝老师们,以及所有关怀我的人和我所关怀的人躯体健康,工作顺利,心情愉快,幸福平安! 参考文献 [1 ] 蒋新松. 机器人与工业自动化[M] . 石家庄: 河北教育出版社,2003. [2 ] 王耀南. 机器人智能操纵工程[M] . 北京:科学出版社,2004. [3 ] 倪星元,等. 传感器敏锐功能材料及应用[M] . 北京:化学工业出版社,2005. [4 ] 雨宫好文. 传感器入门[M] . 北京:科学出版社,2000. [5] 许大中等. 电机操纵[M] . 杭州:浙江大学出版社,2002. [6] 黄玉清 梁靓 张玲霞 李想.机器人的差分方向操纵与实现[J].信息与电子工程.2004-9,2(3). [7] 余国卫 谭延军.基于AT89S52单片机的火灾自动报警系统[J].微处理机.2006-10,5 [8] 邓江.基于AT89S52的车用抬头显示系统研究[D].成都:电子科技大学,2006 [9] 黄玉清 张江美等.模糊操纵在移动机器人中的应用[J].西南科技大学报.2004-3,19(1). [10] 姜志海. 单片机原理及应用[M]. 北京:电子工业出版社,2005. [11] 康华光. 电子技术基础模拟部分〔第四版〕[M].北京:高等教育出版社,1999. [12] 黄玉清 梁靓.机器人导航系统中的路径规划算法[J].«微运算机信息»嵌入式SOC.2006.22(7-2). [13] 万永伦 丁杰雄. 一种机器人寻线操纵系统[J]. 电子科技大学学报,2003,32(1). [14] 黄玉清 梁靓. 基于嵌入式PC的机器人光电寻线系统[J].西南科技大学学报.2004-12,19(4). [15] Li Wei. Behavior based control of a mobile robot in unknown environment using fuzzy logic[J].操纵理论 与应用,1996,13(2). [16] Ahmed Elsham li, Hussein Abdullah. Shaky Arabic Genetic algorithm for dynamic path planning[J]. Electrical and computer Engineering 2004. Canadian Conference on Volume 2,2-5 May 2004. 0677-0680. [17] Ersson T, Xiaoming Hu. Path planning and navigation of mobile robots in unknown environments [J]. Intelligent Robots and Systems, 2001.Proceedings 200IEEE/RSJ International Conference on, Volume: 2, 29 Oct-3 Nov.2001. 858-86. [18] jiangping Tu and Simon X. Yang Genetic Algorithm Based Path Planning for a Mobile Robot[J]. Processing of the 2003 IEEE International conference on Robotics & Automation. 1221-1226. [19] Peng Yang, Yi Yang, He Chen, Xin Guo, Zhiyu Wang. A Study of Path Planning Algorithm of Mobile Robot[J].Proceedings of the 5th Word Congress on Intelligent Control and Automation, June 15-19,2004.HangZhou,P.R.China. 4937-4941. 附 录 附录一:上位机程序总程序 Private Sub cmd1_Click() MSComm.Output = \"0\" MSComm.RThreshold = 1 MSComm.SThreshold = 1 End Sub Private Sub cmd4_Click() MSComm.Output = \"3\" MSComm.RThreshold = 1 MSComm.SThreshold = 1 End Sub Private Sub cmd2_Click() MSComm.Output = \"1\" MSComm.RThreshold = 1 MSComm.SThreshold = 1 End Sub Private Sub cmd9_Click() MSComm.Output = \"8\" MSComm.RThreshold = 1 MSComm.SThreshold = 1 End Sub Private Sub cmd10_Click() MSComm.Output = \"9\" MSComm.RThreshold = 1 MSComm.SThreshold = 1 End Sub Private Sub cmd5_Click() MSComm.Output = \"4\" MSComm.RThreshold = 1 MSComm.SThreshold = 1 End Sub Private Sub cmd6_Click() MSComm.Output = \"5\" MSComm.RThreshold = 1 MSComm.SThreshold = 1 End Sub Private Sub cmd7_Click() MSComm.Output = \"7\" MSComm.RThreshold = 1 MSComm.SThreshold = 1 End Sub Private Sub cmd8_Click() MSComm.Output = \"6\" MSComm.RThreshold = 1 MSComm.SThreshold = 1 End Sub Private Sub cmd3_Click() MSComm.Output = \"2\" MSComm.RThreshold = 1 MSComm.SThreshold = 1 End Sub Private Sub cmd打开串口_Click() Select Case cbo1.ListIndex Case 1 MSComm mPort = 1 Case 2 MSComm mPort = 2 Case 3 MSComm mPort = 3 Case 4 MSComm mPort = 4 End Select MSComm mPort = 4 '打开COMM4口 If MSComm.PortOpen = False Then MSComm.Settings=\"9600,n,8,1\" '9600波特率,无校验,8位数据位,1位停止位 MSComm.PortOpen = True '打开串口 End If MSComm.InBufferCount = 0 '清除接收缓冲区 End Sub Private Sub cmd关闭串口_Click() If MSComm.PortOpen Then MSComm.PortOpen = False '关闭串口 End If End Sub Private Sub cmd退出_Click() End End Sub Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = Asc(\"a\") Then Call cmd1_Click If KeyAscii = Asc(\"d\") Then Call cmd2_Click If KeyAscii = Asc(\"u\") Then Call cmd3_Click If KeyAscii = Asc(\"j\") Then Call cmd4_Click If KeyAscii = Asc(\"i\") Then Call cmd5_Click If KeyAscii = Asc(\"k\") Then Call cmd6_Click If KeyAscii = Asc(\"o\") Then Call cmd7_Click If KeyAscii = Asc(\"l\") Then Call cmd8_Click If KeyAscii = Asc(\"w\") Then Call cmd9_Click If KeyAscii = Asc(\"s\") Then Call cmd10_Click End Sub Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyA Then MSComm.Output = \"X\" If KeyCode = vbKeyD Then MSComm.Output = \"X\" If KeyCode = vbKeyU Then MSComm.Output = \"X\" If KeyCode = vbKeyJ Then MSComm.Output = \"X\" If KeyCode = vbKeyI Then MSComm.Output = \"X\" If KeyCode = vbKeyK Then MSComm.Output = \"X\" If KeyCode = vbKeyO Then MSComm.Output = \"X\" If KeyCode = vbKeyL Then MSComm.Output = \"X\" If KeyCode = vbKeyW Then MSComm.Output = \"X\" If KeyCode = vbKeyS Then MSComm.Output = \"X\" End Sub Private Sub MSComm_OnComm() Dim InputString As String If MSComm.InBufferCount >= 1 Then '判定是否有数据 InputString = MSComm.Input '将数据读入InputString函数 MSComm.InBufferCount = 0 '清空数据 ElseIf Len(InputString) Then txt1.Text = \"许多据!\" Else txt1.Text = InputString End If End Sub 附录二:单片机程序 #include #include #define fosc 8000000 //时钟频率 //全局变量声明 volatile unsigned char Rev; volatile unsigned int Counter50us; //计时变量,假如在中断中调用全局变量,必须加volatile来定义,否那么变量可不能变化 volatile unsigned char pwm1=25,pwm2=15,pwm3=25,pwm4=27,pwm5=20; //函数声明 void Usart_Port_Init(void); //端口初始化配置 void Usart_Init(void); //USART寄存器设置 void Usart_PutChar(unsigned char cTXData); //字节发送函数 void Usart_PutString(unsigned char *pcString); //端口状态初始化设置函数 void Usart_Port_Init() { } //USART寄存器配置函数 void Usart_Init() { UCSR1A = 0X00; UCSR1C &=~(1< PORTD = 0X00; //USART的发送接收端口分别为PD3和PD2 DDRD |=(1< UBRR1L = (fosc / BAUD / 16 - 1) % 256; //波特率设置 UBRR1H = (fosc / BAUD / 16 - 1) / 256; UCSR1B |= (1 << RXCIE1) | (1 << RXEN1) | (1 << TXEN1); //发送使能 } //字节发送函数 void Usart_PutChar(unsigned char cTXData) { } unsigned char USART_Receive( void ) { //等待同意标志 while ( !(UCSR1A & (1< //发送数据函数 void Usart_PutString(unsigned char *pcString) { } //串口程序 void Usart_main(void) { cli(); Usart_Port_Init(); cli(); while (*pcString) { } //Usart_PutChar(0x0D); //Usart_PutChar(0x0A); //结尾发送回车换行 sei(); Usart_PutChar(*pcString++); Rev = USART_Receive(); //从USART I/O数据寄存器-UDR中读出数据 while( !(UCSR1A & (1 << UDRE1)) ); //只有数据寄存器为空时才能发送数据 UDR1 = cTXData; //发送数据送USART I/O数据寄存器-UDR } Usart_Init(); sei(); //管脚初始化 void port_init(void) { } void init_devices(void) //初始配置 { } //T/C0定时中断服务程序 ISR(TIMER0_OVF_vect ) { TCNT0 = 0xce; //重装计数初值 { } else { } { } PORTA |= (1< //T/C0定时中断设置 TIMSK |= (1 << TOIE0); //T/C0溢出中断承诺 TCCR0 |= (1 << CS01); // T/C0工作于一般模式8分频 TCNT0 = 0xce; //定时初值设置,定时时刻 = Counter50us = 0; // 500us计时变量清零 cli(); //禁止所有中断 DDRA = 0xff; PORTA = 0x00; (256-206)/8M*8=50us sei(); //使能全局中断 if((Counter50us <= pwm2)&&(Counter50us>=5)) //判定0.5ms的次数是否小于角度标识 } else { } { } else { } { } else { } {PORTA |= (1< PORTA &= ~(1< if((Counter50us <= pwm4)&&(Counter50us>=5)) //判定0.5ms的次数是否小于角度标识 if((Counter50us <= pwm5)&&(Counter50us>=5)) //判定0.5ms的次数是否小于角度标识 //主函数 int main(void) { Usart_main(); port_init(); init_devices(); while(1) { switch(Rev) { case '0': if((pwm1<=15)) {pwm1=15;} else pwm1--;_delay_ms(15); break; case '1': if((pwm1>=48)) {pwm1=48;} else pwm1++;_delay_ms(15); break; case '2': if((pwm2<=15)) {pwm2=15;} else pwm2--;_delay_ms(15); break; case '3': if((pwm2>=48)) {pwm2=48;} else pwm2++;_delay_ms(15); break; case '4': if((pwm3<=15)) {pwm3=15;} else pwm3--;_delay_ms(15); break; case '5': if((pwm3>=48)) {pwm3=48;} else pwm3++;_delay_ms(15); break; case '6': if((pwm4<=15)) {pwm4=15;} else pwm4--;_delay_ms(15); break; case '7': if((pwm4>=48)) {pwm4=48;} else pwm4++;_delay_ms(15); break; case '8': if((pwm5<=15)) {pwm5=15;} else pwm5--;_delay_ms(15); break; case '9': if((pwm5>=48)) {pwm5=48;} else pwm5++;_delay_ms(15); break; default: break; } } } 附录三:PCB图和原理图 因篇幅问题不能全部显示,请点此查看更多更全内容