资源描述
设计题目:机器人关节的设计与实现学生姓名:*所在院系:信息工程学院所学专业:计算机科学与技术导师姓名:*完成时间:*摘要机器人关节是机器人的基础部件,其性能的好坏直接影响机器人的性能。随 着数字伺服技术等电子技术的发展, 机器人关节也在不断发展。本文主要研究基 于舵机的机器人关节的设计与实现。本文主要了完成以下工作:采用定时器控制方法产生舵机控制的脉冲信号。 为了能实现活动关节根据输 入角度准确定位和微调,在设计中加入了矩阵键盘调控系统。在硬件搭建方面, 设计了基于STC89C52的2路脉冲信号的硬件控制电路系统。之后对系统所使用 的编辑软件和调试工具进行了简要说明,并详细介绍了软硬件主要模块的设计和 实现过程,以及重要模块的调试和仿真的具体过程。 最后,根据软硬件设计结果, 制作了一个极坐标结构的机器人关节,能够完成在水平和竖直方向的比较精确的 控制。关键词 舵机,机器人关节,脉冲信号AbstractRobots joi nt, is a basic part of robot, whose performa nee will directly affect a robot. With the developme nt of electr onic tech no logy such as digital servo, the tech no logy of robot joint is develop ing continu ally. This paper studies the robot joint desig n and impleme ntati on based on digital serv o. In this paper, the follow ing work to complete:In order to achieve activities Joint accurate positioning and fine-tune based on the in put an gle, the desig n addi ng a matrix keyboard to con trol the system. Hardware structures desig ned 2-way pulse hardware con trol based on STC89C52 circuit system. Then, the paper briefly describes the editing software and debugging tools by the system. This paper in troduces the desig n and impleme ntati on of the main modules of hardware and software, and importa nt part of the specific process of debugg ing and simulatio n. Fin ally, accord ing to the results of software and hardware desig n, produced a polar structure of the robot joi nts which can complete in the horiz on tal and vertical directi on s, respectively, the more precise con trol.Key words Servo, Robot joint. Pulse signal1. 弓 I言2.1.1 课题背景2.1.2 舵机简介3.1.3 本文研究的工作4.2. 系统的总体设计4.3. 硬件的设计与实现5.3.1 主要元器件介绍 5.3.1.1 舵机5.3.1.2 STC89C52.6.3.2 硬件的设计过程 6.3.2.1 工作电源控制电路设计 63.2.2 1602显示控制电路设计 13.2.3 矩阵键盘控制电路设计 83.2.4 舵机与系统接口电路设计93.2.5 机器人关节的外形设计 93.3 硬件的实现过程9.3.3.1 电路板的设计过程 9.3.3.2 硬件的组装过程104. 软件的设计与实现1.04.1 系统软件设计流程 1.14.2 各模块程序设计 1.14.2.1 脉冲信号产生模块 1.14.2.2 矩阵键盘控制模块124.3 数据处理 1.34.3.1 矩阵键盘的散列转换1.34.3.2 脉宽与角度的数据处理1.45. 仿真与调试155.1 硬件电路的仿真155.2 单片机的程序调试 166. 总结17致谢1.8参考文献1.9附录120附录2201.引言从一战以来,机器人学和飞机、火箭、计算机等一样,也日益发展成为我们 日常生活不可或缺的科学技术,机器人的应用广泛,从传统的自动化制造领域, 到人类的日常生活,再到茫茫星系的探索,都已经离不开机器人。1.1课题背景机器人关节的种类有很多,根据机器人的功能不同,关节的配臵和运动系统 的形式也都各不相同。应用最多的工业机器人是多关节机器人,它主要是由多个回转关节和连杆组 成,模拟人的肩关节、肘关节和腕关节等的作用。工业机器人关节根据输出运动 形式的不同分为移动关节和转动关节:根据传动机构的不同可以分为齿轮传动、 连杆传动和摆线针轮减速传动;根据驱动器形式的不同可以分为电驱动关节、气压驱动关节、液压驱动关节和特种驱动关节等。仿人机器人也是当今机器人爱好 者研究的热点之一,仿人机器人因为外型类人则其关节可以分为上肢关节和下肢 关节。仿人机器人主要分为仿人手臂型和仿人双足型。仿人手臂型主要是研究7自由度手臂和多自由度操作臂、多指灵巧手及手臂和灵巧手的组合。 仿人双足型 主要研究步行机构及步行特性,下肢关节结构是步行质量好坏的关键。微型机器 人则是利用集成电路微细加工,将驱动器,关节传动装臵以及传感器控制器和电 源等集成在很小的多晶硅上。工业机器人与仿人机器人的肩、 肘、髋关节不同的 是自由度的个数。通常工业机器人的肩肘髋的关节的自由度为1。总体来看机器人关节呈现出大力矩,高精度,反应灵敏,小型化,标准化和 模块化的趋势和发展。1.2舵机简介在机器人关节的设计中,电机是至关重要的一部分,电机就像是机器人关节 的肌肉,只有正确的配臵和使用电机才能使机器人关节正常运转起来。常见的电机主要有直、交流电机,而直流电机一直在机器人设计中占有主导 地位。直流电机可以分为连续转动电机和步进电机 2种,主要区别是连续转动的 电机在通电后主轴连续转动,只有当断电或者电机提供的驱动力无法驱动负载 时,主轴才停止转动或这阻塞;步进电机则是通电后主轴转动某一个角度后,然后停止。直流电机和步进电机都是开环反馈系统, 也就是在电机转动的过程中并 不知道电机究竟转过了多少角度。伺服电机是一种比较特殊的连续转动电机类型。 伺服电机转动的角度可以通 过控制电路反馈,并且控制电路不断的修正转动角度的误差, 直到电机转动要预 期位臵。舵机是一种伺服电机,它具有伺服电机的优点,即在接收到控制信号后可以 转过相对准确的位臵,这使舵机在机器人设计,航模,船模等有着广泛的应用, 比如用来控制机器人的转动方向等。舵机的定位是利用脉宽调制的方法实现的。 舵机可以根据周期内高电平的持 续时间(即脉宽)来完成定位。一般的舵机控制电路能够接收周期为20ms、脉宽为12ms的脉冲信号,脉冲的准确长度决定了舵机轴转动的准确位臵 (图1-1)。 目前普遍使用PWM (占空比)即高电平在20ms周期内的持续时间所占的比例 来描述脉宽。当舵机接收到的1ms的脉宽时,舵机向某一个极限位臵转动,当 接收到脉宽为2ms的时候,舵机向另一个方向极限位臵转动。也可以说舵机的 角位移与接收到的脉宽成正比,一般情况下,舵机能在0.250.5的时间内转过60。伺服电机是一种闭环反馈系统,内部主要有一个控制电路、一个电机、一个 齿轮箱和一个电位计组成。电位计的作用是检测舵机的输出轴是否已经转到期望 位臵。电位计与舵机的输出轴相连接,这样分压计能够非常准确的反映出舵机输 出轴的当前位臵。电位计输出为一个电压信号,当舵机的输出轴的位臵变换时, 控制电路就会从分压器接收到不同的电压信号。 舵机中的控制电路将电位计的输 出的电压信号和控制脉冲信号定时比较,如果电压信号不正确就会产生误差信 号。该误差信号与电位计的位臵和可能告知脉冲的差值成正比,当存在误差信号时,电机就会保持转动,直到电位计输出的电压信号和控制脉冲信号相匹配时, 误差信号被移除,电机停转。12msA20ms图1-1周期为20ms的脉冲信号的高电平持续时间在12ms之间变化可以控制舵机的输出轴位臵舵机的主要技术参数有力矩,回转率,工作电压,工作温度,死区等。舵机的应用场合,主要有多自由度机器人设计,多路伺服航模控制,电动遥控飞机,遥控飞机,航海模型,高档遥控仿真车等。1.3本文研究的工作通过对电机类型的结构和原理进行分析与比较,本课题选用舵机作为机器人 关节的本体原件来完成的机器人关节的设计与实现,以达到可以在水平和竖直两 个方向上控制机器人关节的活动效果。 系统主要包括硬件设计和软件设计, 以及 最终硬件的制作。硬件设计主要包括液晶显示模块,矩阵键盘模块和舵机与单片 机的接口模块,以及最后的机器人关节外形设计。 与硬件设计相对应的,软件设 计主要包括液晶显示模块,矩阵键盘模块和舵机的脉冲形成模块。在本文的下面 一些章节会详细介绍软硬件各部分的设计过程。2.系统的总体设计系统的总体设计分别包括系统的硬件设计和软件设计。硬件设计主要是指完 成系统工作所必须的硬件部分电路设计以及硬件组装设计;软件设计主要是指单片机的程序设计。硬件设计主要包含液晶显示,矩阵键盘和舵机接口三大部分。 图2-1为系统框图。图2-1系统框图3.硬件的设计与实现硬件是系统运行的基础,硬件设计是系统设计中的重要组成部分。本系统中 的硬件设计主要包括系统工作电源电路设计, 1602液晶显示电路设计,矩阵键 盘和舵机与系统接口的电路设计等。3.1主要元器件介绍下面主要对硬件中使用的一些重要的元器件的电气特征作一下介绍。3.1.1舵机通过对舵机的结构原理,控制特性与机械特性的综合分析与研究,最终选择TowerPro公司的MG995型号舵机(图3-1)作为本课题的舵机本体。该型号舵 机具有力矩大(10kg/cm),输出功率高,价格合理,稳定性好等优点。其他参数 还有回转率0.20s/60,工作电压4.87.2V,工作温度为055C,角度范围090 度等。图 3-1 TowerPro MG9953.1.2 STC89C52由于51系列单片机在国内广泛使用,技术比较成熟,而且相关的开发工具 也比较普及,性能优越,所以在此也选择 51系列的STC89C52单片机作为控制 机器人关节的单片机。STC89C5*系列单片机不仅性能优越,而且控制简单,价 格合理。该型号的单片机片内 EPROM达到8K,同时有2个定时器,足以承担 系统的设计需要。其他的选用的主要器件还有稳压器 7805,液晶显示器1602,电容和电阻等 一系列电器元件。3.2硬件的设计过程硬件的设计过程包括硬件的电路设计和机器人关节的外形设计。根据系统将要完成的几项功能考虑硬件电路设计,硬件部分所要提供的功能 有液晶显示、矩阵键盘、舵机接口,所以硬件电路设计主要包含这几个部分的功 能。除此之外还有系统工作的电压电路,以及机器人关节的外形设计等。 下面详细介绍重要功能模块的设计。3.2.1工作电源控制电路设计为了给系统各部分提供稳定可靠的直流电压,在控制系统中选用了稳压器 7805完成对工作电压的稳定控制工作。7805具有体积小,重量轻,可靠性好等 特点。图3-2是为系统电源控制电路图。12V的直流电压经过7805后转换为稳定的5V电压后,供应整个电路的电 源系统。为了防止电路回时电流过大对 7805造成损害,在电路中选用二极管保 护 7805。VCC 5VVCC 12V7805132C1C2key当GND图3-2电源控制电路图3.2.2 1602显示控制电路设计系统选用1602 (SPI16引脚)作为数据显示器件,主要用于显示舵机的当前 角度和调整角度。1602是一种16*2字符型液晶显示器,采用电路模块封装,控 制器大部分为HD44780,带有标准的SIP14引脚(无背光)或SIP16引脚(带背 光),芯片和背光电路工作电压与单片机兼容引脚分为电源、通信数据和控制三 部分,可以很方便的可以与单片机进行连接。设计中选用单片机的 P0 口作为1602的数据输入端口( D0D7 ),P3.2,P3.3, P3.4分别作为数据命令选择端(H/L)( RS),读/写选择端(H/L)( RW),使能信 号端(E)。上拉电阻部分(RP1)具有限流的作用。图3-3为1602与STC89C52 的接口电路图。LM016L图3-3 1602 显示电路图3.2.3矩阵键盘控制电路设计本系统的矩阵键盘主要是用于定位调整和加减微调舵机角度两项功能。电路 图3-4为矩阵键盘的控制电路。选用STC98C52单片机的P2 口作为矩阵键盘的控制端口。按键 09为数字 按键,主要用于定位舵机角度的输入。键 D1+,D1,D2+,D2分别 控制舵机1和舵机2微调。确定键,当输入舵机需要定位的角度后,按下确认键 后,舵机开始运转。取消键,用于取消输入的定位角度(未按确定键前) 。P2.010P2.1P2.2P2.3STC89C4P2.5P2.6P2.711121314151617123D1+456D1-7890D2+D2-确认取消141516仃10111213图3-4 矩阵键盘电路图324舵机与系统接口电路设计向舵机发送脉冲信号的电路部分,舵机根据脉冲宽度调整舵机的位臵。 下图 (图3-5)为舵机与系统接口的控制电路部分。VCC分别选用STC89C52单片机的P1.3, P1.4引脚作为舵机1和舵机2的输出 脉冲信号的控制端口。在电路仿真中,该2个端口接的是虚拟示波器,用来显示 和反映脉冲信号的输出状态。3.2.5机器人关节的外形设计机器人关节的外形设计是指最终机器人关节的成型外形。首先是关节的支架部分的设计,因为关节支架是第一眼外观直接接触到的, 所以设计的时候兼顾成 本与外形的美观;然后是关节基座的设计,关节基座是位于关节底层的基础部件, 它的稳固与灵活直接关系到整个关节的活动性。3.3硬件的实现过程硬件的实现过程主要包括PCB板得制作过程和硬件的组装过程下面对此两 方面做分别介绍。3.3.1电路板的设计过程将整个系统电路图设计出来后,接下来我们就需要制作电路板图了。 电路板 设计得是否合理,质量是否可靠,直接决定着制作出来的控制电路的质量和运行 的可靠性。Altium Designer提供了板图设计功能,包括自动布线和器件自动摆放 功能。事实上,器件自动摆放功能是达不到要求的,因此,实际操作时应采用“人 工摆放兀件一人工预布线一自动布线一人工细调”的设计流程,一步一步制作出符合要求的电路板。电路板图见附录二。332硬件的组装过程这部分主要包括部分硬件的制作和硬件的组装。前期硬件制作的精细将直接 关系到最终关节的灵活性、外观以及扩充能力,也就是决定了机器人关节的质量。硬件的组装主要包括机器人关节的外形组装和电路板的各元件的安放与焊 接,以及组装完成后的调试等过程。首先是硬件的选材,在跑遍各材料市场之后, 终于选定了以铝合金作为支架的材料。 但是因为铝合金的硬度较大,实验的工具设计的不足,以及遇到各式各样的问题 剪过程的失误,造有限,不易裁剪,所以这对部分的器件制作产生了不小的困难。不过最终我们依 然是不懈的向我们的设计靠近,裁剪出来比较合格的部件。硬件的组装过程可以 说也是一个有难度的过程,在设计阶段的各个关节部件,在组装过程中才会发现 。比如会遇到裁剪好的部件因为误差和裁 E的最终部件不能很好的吻合舵机的转轴问题等。4.软件的设计实现图3-6关节实物图软件是系统的灵魂,软件设计的好坏直接影响到整个系统性能的强弱。 所以 软件设计是本系统中重要的组成部分4.1系统软件设计流程在本系统中的软件主要是指单片机的程序,主要包括舵机脉冲信号发生模 块,矩阵键盘控制模块和液晶显示器 1602显示模块几大部分。软件的工作过程首先单片机程序复位以后,定时器和 160分别进行初始化。 之后在主函数里设臵舵机的初始位臵,然后进入 while()函数。在函数内部,不 停的进行按键扫描是否有按键被按下, 如果按键被按下,则进入按键数据处理函 数keymanage(进行按键处理,并将处理结果送去 1602显示。系统流程图如图 4-1所示。4-1系统设计流程图4.2各模块程序设计单片机程序的子模块主要包括脉冲信号产生模块,矩阵键盘控制模块和液晶 显示模块,在这里主要详细介绍前 2个模块。4.2.1脉冲信号产生模块在该单片机程序中,主要使用2个定时器来产生2路脉冲信号,分别输送给 2个舵机。具体实现方法是timer1作为基准定时器,提供稳定的10ms定时,timerO则作为控制高电平时间定时器。在 timerl中每次根据标志位选择翻转脉冲信号 高低电平,并打开timerO:在timerO中断函数中,则根据标志位重新翻转脉冲信 号,最后关闭timerO,则形成高电平脉冲,完成舵机脉冲信号的输出。脉冲信号 产生流程图如图4-2所示。设置 timerO,timerltimerltimerO打开 timerO,timerlPWM1=PWM1Flag=1PWM2=PWM2Flag=O设置舵机2的定 时器初值并PWM 仁PWM1设置舵机1的定 时器初值并PWM2=PWM2是 (Flag=O)?打开timeO关闭TimerO图4-2 脉冲信号产生流程图因为舵机的控制电路周期的脉冲时间为 20ms,而STC89C52里共有2个定 时器,所以本系统采用分时复用的方法来产生 2路脉冲信号。该方法在理论上可 以控制10个舵机的共同工作,可扩充性强。4.2.2矩阵键盘控制模块在单片机程序中,矩阵键盘的控制最为繁杂。首先是键盘的扫描,根据按键 的不同分别执行不同的程序操作:09数字按键经过键盘的散列转换后分别被存 入程序处理并臵flag_key=1 (表示有数字按键被按下)和送去液晶显示器显示; +,按键直接控制脉宽信号微调增加(减少)千分之 0.5( 0.1);确定键则是很据所输入2个舵机的角度的范围满足要求且flag_key=1(数字键按下标志) 时,系统则控制脉宽信号发生变化,舵机转动到相应角度,并更新 1602显示, 否则执行出错;取消键则是用于取消已输入角度,但是还未按下确定键的角度值。 矩阵键盘的控制流程图如图4-3所示。按键扫描有按键被?按下?1是r键盘散列转换1数据处理否图4-3 矩阵键盘流程图4.3数据处理在本单片机程序中,数据处理的任务主要有两个,分别是矩阵键盘的散列转 换和脉宽与角度转换的处理。4.3.1矩阵键盘的散列转换键盘的散列转换是指键盘分别接收到不同的按键信息后,分别转化为相应的数字或者相应的操作。键盘地散列转换采用根据P2的值来进行不同的键的功能定义,分别对应见下表:表4-3-1键盘散列转换功能定义表P2值对应键P2值对应键Oxee取消Oxeb舵机1-Oxde确定Oxdb6Oxbe舵机2-Oxbb50x7e舵机2+0x7e4Oxed0Oxe7舵机1+Oxdd9Oxd73Oxbd8Oxb720x7d7Ox771432脉宽与角度的数据处理根据舵机的控制原理可知,脉宽与角度满足线性关系(图4.2)o脉宽与角度 的处理包含2个部分,一是将脉宽信号转化为角度并用液晶显示器显示出来, 另 一部分是将输入的角度转换为脉宽信号。若角度记为 二,脉宽记为,脉宽-角度关系图如图4-4所示。图4-4脉宽一角度关系图在将脉宽转换为角度的时候,因为显示的角度是整数,显示部分采取下限取 整(如80.0 80.9显示为80)。需要指出的是,在程序内部,使用的脉宽单位 为us,故转换公式如下:v - 0.09* 90脉宽信号在程序内部采用的是整数(即10002000us),在将输入的角度转换为脉宽信号时,采取的约法是四舍五入(如1500.3=1500,1500.6=1501。转换公式如下:= (90)*10)*1.11110.55.仿真与调试5.1硬件电路的仿真在本系统中的硬件电路仿真设计,主要是运用英国Labcenter electronics公司 开发的EDA工具软件Protues, Protues是一款非常优秀的仿真软件,能支持当 前主流单片机系统的仿真并有丰富的软件调试功能。下面对主要的硬件电路仿真作介绍和分析。首先是系统脉冲信号的产生,因为产生的是脉冲信号,所以选用 2个虚拟示波器查看单片机定时器产生的波形与大小;然后使用LCD1602来模拟液晶显示器的显示,4*4按键模拟矩阵键盘(图5-1)。图5-1电路仿真图系统最终输送给舵机的脉冲信号是20ms分2次10ms周期,两路舵机信号分别在前10ms与后10ms翻转,形成高电平,最终仍然脉冲周期仍为 20ms。图5-2为系统产生的2路舵机脉冲信号图。PWM1PWM2山 两Ejdp冋* N4 | - +电二鼻咖愴了監|闻也暑3JU: LPMrrEK E. AJLCTJd hkf rCllLZV 1 ?i苓 罷匸粗1 mH方回ml! lrat Iwidl dLt Fni-pi*a 如戈 FnChiP:站0.7L1I2 Hf:F】魁弘何4/Lllf fflriitim: 匸庇顾丿门芒rtl帛电甲*;找界廿TIIRI.CEtuyiJpOI.LfJC-TQ.dlM 卄 ip】町.宜rue 1石. 93 I $* +CJI ESKQE -iibhBBariiidJ I I iikhbiririiiiid 11 LtabfaBSddiiJ I I iikhbiririririJ 11 Ltabhfcid:l OX 虫il ifldriD fihx!WH)I闻0:TJHHI.=i?:EE!2-MLI/2E!.tllC=:EfrNUCl.,2Et:LnHLi;i;IEE:imL!iaiE:i.JfiH 厲冋阶nkDinbh Eg角心2 STrfill Brwrl.14r St列k霁tOOWJEWS DEFINE DIR Pitploy &tn ELuoc* KIT IWC to 曲UWE KILL -图5-3程序部分调试图6总结本课题利用单片机定时器实现了舵机 2路脉冲信号的输出,实现了机器人关 节转动的功能,完成了本课题的主要内容:机器人关节的设计与实现。由于制作工艺水平的有限,使得本次设计中电路系统做得比较简易与粗糙, 由于时间紧迫,未能完成更高等的目标与任务。然而,在有限的时间内,我努力 掌握了舵机的控制方式,整体把握了机器人关节的设计思路, 完成了从设计硬件 电路、单片机程序到实现关节转动的整个过程。在实验过程中,我学习了Keil、Potues和Altium Designer软件的基本功能,并掌握了一些基本的使用方法。在前期收集资料的过程中,从网上和前辈们的论文中搜集到了很多不同的多 路PWM脉冲信号的控制方法,使我从不同的角度深入的了解舵机的控制方法, 这对我本次实验的软件设计脉冲信号部分有很大的借鉴和参考意义。虽然这次软件设计过程中,林林总总换了三、四种脉冲信号产生方案,在做过几种方法的稳 定性与操作难度的比较之后,最终决定使用定时器方式来完成脉冲信号的产生。毕业设计是一个回顾与理顺旧知识, 不断的吸收新知识的过程。在这个过程 中,我深深感觉到自己的不足,连每一次的失败都显得是那么的珍贵, 都会给我 以深刻的启迪。虽然在以后不一定会有机会从事单片机相关的工作,但是这个过 程的努力和汗水,思维和方法都会是我宝贵的人生财富。在论文的完成过程中,得到了院系老师的大力支持,尤其是得到了曲培新老 师的精心指导和帮助,感谢曲老师在百忙之中的辛苦指点,给予我无尽的启迪。 曲老师从论文方向的选定,到最后的整篇文论的完成,都非常耐心的对我进行指 导。给我提供了大量数据资料和建议,告诉我应该注意的细节问题,细心的给我 指出错误。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地 感染和激励着我。在此,我还要特别感谢在论文完成过程中所有给予我帮助的老师和同学。 正 是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑, 直至本文的顺利 完成。在论文即将完成之际,请在这里请接受我诚挚的谢意!参考文献1 刘广瑞等机器人创新制作西安:西北工业大学出版社,2007.22 张玉茹,李继婷,李剑锋等.机器人灵巧手.北京:机械工业出版社,2007.13 ( 美)Gordon McComb Myke Predko著;庞明等译.北京:科学出版社,20074 (美)McComb,G著:原魁等译机器人本体制作指南北京:机械工业出版社,2006.2李华晋,刘鸣机器人关节及转向装臵一一舵机的原理及应用J高校实 验室工作研究,2010( 103): 62-636 王倩,李冬雪基于FPGA的机器人多路舵机控制器J科学技术与工程,2009( 11):3083-30857 万小丹,孔凡让,李岩,赵小伟.基于at89c52单片机的机器人关节控制 系统设计J学术论文2008(2):38-408 付丽,刘卫国,伊强单片要控制的多路舵机用PWM波产生方法J微特电机,2006(2) : 28-339 徐谋峰,黄雪梅舞蹈机器人动作编程研究J山东理工大学学报,2010 (24) : 77-8010 梁峰,王志良,解仑,等多舵机控制在类人机器人上的应用J.微计算机信息,2008(1-2) : 242-243附录1附录2/*现在系统中需要2个舵机的控制,采用的控制方式是改变单片机的一个定时器中断的初 值,对于每一个舵机来说,是将20ms分为三次中断执行,一次短定时中断和两次长定时中断。这样既节省了硬件电路,也减少了软件开销,控制系统工作效率和控制精度都很高。具体的设计过程:例如想让舵机转向左极限的角度,它的正脉冲为2ms,则负脉冲为20ms-2ms=18ms所以开始时在控制口发送高电平,然后设臵定时器在 2ms后发生中断,中断发生后,在中断程序里将控制口改为低电平,并关闭短中断,再过18ms进入下一次定时长中断,再将控制口改为高电平,打开短中断并将定时器初值改为2ms,等待下次中断到来,如此往复实现PWMI号输出到舵机。用修改定时器中断初值的方法巧妙形成了脉冲信号,调整时间段的宽度便可使伺服机灵活运动为保证软件在定时中断里采集其他信号,并且使发生PWM信号的程序不影响中断程序的运行 (如果这些程序所占用时间过长,有可能会发生中断程序还未结 束,下次中断又到来的后果 ),所以需要将采集信号的函数放在长定时中断过程中执行,也 就是说每经过两次中断执行一次这些程序,执行的周期还是20ms。*/#in elude #in elude vintrin s.h#in clude #in elude un sig ned char TIM0H1;un sig ned char TIM0L1;un sig ned char flag=1;un sig ned char TIM0H2;un sig ned char TIM0L2; void in it(void);sbit PWM 仁P3;/sbit PWM2=P1A4;/舵机1短定时器初始化高8位/舵机1短定时器初始化低8位/控制舵机PWM输出标志变量/舵机2短定时器初始化高8位/舵机2短定时器初始化低8位/定时器初始化函数定义舵机1信号输出接口/定义舵机2信号输出接口*主函数*ini t();/定时器初始化F1602_i nit();/1602初始化F1602_clear();/1602清屏NUM1=1500;/1.5ms的高电平舵机1初值NUM2=1500;/1.5ms的高电平舵机2初值PWM 仁1;/舵机1的PWMU始设臵高为电平gotoxy(1,0);in t_To_char();display_stri ng(a);/1602显示舵机的初始角度while(1)/保证while连续执行 key();/按键检索函数短定时器时间为 NUM1 us/void mai n()TIM0H1=(65536-NUM1)/256);TIM0L1=(65536-NUM1)%256);TIM0H2=(65536-NUM2)/256);TIM0L2=(65536-NUM2)%256);/短定时器的时间为 NUM2 us/*中断服务函数*/void Timel(void) in terrupt 3 TH1=0xd8;TL1=0xf0;if(flag=0)PWM 仁-PWMI; flag=1;/10ms 定时/ 舵机1PWMH号翻转/舵机1电平翻转完毕,改变标志位 elsePWM2=PWM2; flag=O;TR0=1;void TimeO(void) in terrupt 1if(flag=1)TH0=TIM0H2;TL0=TIM0L2;PWM 仁PWM1;else/舵机1PWMH号翻转/舵机1翻转完毕,改变标志位/波形产生,每舵机PWM20m反 转/产生长时间中断后,打开小中断/舵机1的信号控制/改变短中断(舵机2)的定时器初值TH0=TIM0H1;TL0=TIM0L1;PWM2=PWM2; TR0=0;舵机1再次翻转,形成脉冲信号/ 舵机2的信号控制/改变短中断(舵机 2)的定时器初值/舵机2再次翻转,形成脉冲信号/关闭短中断,等待长中断打开/ 长短中断交替执行,形成2路脉冲信号*键盘扫描函数*void key()un sig ned char key_code; P2=key_sca ni; if(P2!=key_sca n i)delay(20); key_code=P2;while(P2!=key_sca n i); keyma nage(key_code);i+;if(i=4) i=0;临时变量,存放被按下的按键信息/首先进行行扫描/判断是否有按键按下/有按键按下进入if/延迟,消除抖动/将按键信息送给临时变量做按键处理/按键抬起有效/进入按键处理函数/扫描下一行/如果扫描结束,返回第一行继续扫描*键盘处理函数*/键盘处理函数包括两个部分,分别是矩阵键盘地散列转换和键盘的数据处理键盘地散列转换采用根据P2的值来进行不同的键的功能定义(见表 4-3-1)void keyma nage( un sig ned char temp) un sig ned char key=16;switch(temp)case 0xed: key=O;break; case 0x77: key=1;break; case 0xb7: key=2;break; case 0xd7: key=3;break; case 0x7b: key=4;break; case 0xbb: key=5;break; case 0xdb: key=6;break; case 0x7d: key=7;break; case 0xbd: key=8;break; case 0xdd: key=9;break;if(temp=0xe7)NUM仁NUM1 + 10;in t_To_char();F1602_clear(); delay(200);flag_key=0;x=3; display_stri ng(a); if(temp=0xeb)NUM仁NUM1-10; in t_To_char(); F1602_clear(); delay(200);flag_key=0;x=3;display_stri ng(a); delay(20); if(temp=0x7e)NUM2=NUM2+10;in t_To_char();F1602_clear(); delay(200);键盘散列转换/ 舵机 1PWMt调 +10/将整形数据转换为字符串1602清屏/标志按下的不是0-9数字键1602显示/ 舵机 1PWMt调 +10/ 舵机 2PWMt调 +10flag_key=0; display_stri ng(a);if(temp=Oxbe)NUM2=NUM2-10;in t_To_char();F1602_clear();delay(200);flag_key=O;x=3; display_stri ng(a);if(key=0&key12)flag_last=1;/显示完毕,设臵最后标志位if(temp=Oxde) / K1 确认键f1=( nu m11+90)*1000)*1.1111+0.5555;舵机 1 角度转换为脉宽f2=(num22+90)*1000)*1.1111+0.5555;舵机 2 角度转换为脉宽num11=f1;/强制浮点型转换为整形脉宽并赋值给num22=f2;临时存贮脉宽变量if(n um11=1000&n um11=1000&nu m22=2000& flag_key=1 & flaga st=1)/舵机只能接受10002000的脉宽,并且/保证2个舵机的角度输入的是数字信/息并且都输入完毕1602清屏/将脉宽值赋值给 NUM1/将脉宽值赋值给NUM2/赋值完毕将脉宽临时变量清0F1602_clear();NUM仁n um11;NUM2=num22; in t_To_char();nu m11=0;num22=0;x=3; delay(100); flag_key=0; display_stri ng(a);elsex=3;num11=0;num22=0;F1602_clear(); delay(100);flag_ca ncel=1; display_stri ng(a); gotoxy(2,3); delay(100);display_stri ng(Error!); if(temp=0xee)F1602_clear();x=3;delay(100);display_stri ng(a); flag_key=0;/赋值完毕,将0-9按键标识清01602显示当前舵机的角度/舵机角度不符合条件,则显示出错/重新定位显示位臵/舵机脉宽临时变量清0/取消输入的舵机角度信息/ 显示ErrorK0取消键1602清屏/重新定位显示位臵将0-9按键清0
展开阅读全文