基于51单片机C语言搬运车机器人毕业设计

上传人:沈*** 文档编号:86636034 上传时间:2022-05-08 格式:DOC 页数:47 大小:14.89MB
返回 下载 相关 举报
基于51单片机C语言搬运车机器人毕业设计_第1页
第1页 / 共47页
基于51单片机C语言搬运车机器人毕业设计_第2页
第2页 / 共47页
基于51单片机C语言搬运车机器人毕业设计_第3页
第3页 / 共47页
点击查看更多>>
资源描述
本科毕业设计说明书(论文)西安航空职业技术学院毕 业 设 计(论 文)论文题目: 搬运机器人 所属系部: 自动化工程系指导老师: 职 称: 助教学生姓名: 班级、学号: 专 业: 计算机控制技术西安航空职业技术学院制2012年04月20日西安航空职业技术学院 毕业设计(论文)任务书题目: 搬运机器人任务与要求: 以宝贝车为平台,加装机构,实现在在固定轨迹图中将不同颜色木 块搬运到对应颜色区域,并返回原点。时间: 2012年 02月 23日 至 2012年 04月 20日 共 8 周所属系部: 自动化工程系学生姓名: 学 号: 专业: 计算机控制技术指导单位或教研室: 计算机控制技术教研室指导教师: 职 称: 助教摘 要 宝贝车机器人的微控制器(MCU)是由Atmel公司生产与51系列兼容的8位AT89S52单片机,是一种高性能CMOS、低功耗的8位单片机,片内含8k Bytes Flash,运用ISP(In-system programmable)的可反复擦写1000次;只读程序存储器器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及其引脚结构。在实际工程应用中,功能强大的AT89S52已成为许多提供高性价比嵌入式控制应用系统的解决方案。微控制器的一个重要特点是内建的中断系统。作为面向控制的设备,微控制器经常要实时响应外界的激励(中断)。微控制器必须执行快速上下文切换,挂起一个进程去执行另一个进程。微控制器不是用于计算机中,而用于工业和消费器产品中。使用这些产品的人们通常察觉不到微控制器的存在。对于他们来说,产品内部的元件只是无关紧要的设计细节。微波炉、空调、洗衣机、电子秤等等都是这样的例子。在这些产品内部,电子元件将微控制器与面板上的按钮、开关、灯等等连接在一起,用户看不到微控制器的存在。关键词:宝贝车、微控制器、程序存储器III目 录一级标题用加黑四号宋体二级标题用小四宋体摘 要I1 三号加黑宋体居中11.1 四号加黑宋体靠左11.2 四号加黑宋体靠左22 三号加黑宋体居中42.1 四号加黑宋体靠左42.2 四号加黑宋体靠左53 三号加黑宋体居中73.1 四号加黑宋体靠左73.2 四号加黑宋体靠左84 三号加黑宋体居中94.1 四号加黑宋体靠左94.2 四号加黑宋体靠左95 三号加黑宋体居中115.1 四号加黑宋体靠左115.2 四号加黑宋体靠左11结 论13致 谢14参考文献15附 录16(目录自动生成,插入引用索引和目录,目录,级别改完2级,然后按一级标题用加黑四号宋体,二级标题用小四宋体调整格式1宝贝车机器人简介1.1 伺服电机首先认识伺服电机及其工作原理:伺服电动机又称执行电动机,在自动控制系统中,用作执行元件,把所收到的电信号转换成电动机轴上的角位移或角速度输出。分为直流和交流伺服电动机两大类,其主要特点是,当信号电压为零时无自转现象,转速随着转矩的增加而匀速下降。1.1.1伺服电机的工作原理 伺服电机是一个典型闭环反馈系统,减速齿轮组由电机驱动,其终端(输出端)带动一个线性的比例电位器作位置检测,该电位器把转角坐标转换为一比例电压反馈给控制线路板,控制线路板将其与输入的控制脉冲信号比较,产生纠正脉冲,并驱动电机正向或反向地转动,使齿轮组的输出位置与期望值相符,令纠正脉冲趋于为0,从而达到使伺服电机精确定位的目的。1.2伺服电机的控制标准的伺服电机有三条控制线,分别为:电源、地线及控制。电源线与地线用于提供内部的电机及控制线路所需的能源,电压通常介于4V6V之间,该电源应尽可能与处理系统的电源隔离(因为伺服电机会产生噪音)。甚至小伺服电机在重负载时也会拉低放大器的电压,所以整个系统的电源供应的比例必须合理。输入一个周期性的正向脉冲信号,这个周期性脉冲信号的高电平时间通常在1ms2ms之间,而低电平时间应在5ms到20ms之间。22系统设计本组智能小车的硬件主要有以宝贝车作为核心的载体小车、主控器部分、自动循迹部分、检测部分、手抓机构、电机驱动部分组成。2.1设计背景设计一个基于8位单片机或ARM控制机器人,在比赛场地里移动,将指定的物体搬运到指定的位置区域,比赛的记分根据机器人将物体放置的位置精度和完成时间来决定分值的高低。它模拟了工业自动化过程中自动化物流的要求以及实际应用情况。2.2设计要求(1)基本要求:实现小车的前进后退,左转右转(按照程序预设)(2)扩展部分:实现小车自动循迹功能,并利用所设机构完成物料的搬运2.3设计要求在规定时间内,机器人搬运完毕物料,并回到出发点。西安航空职业技术学院 毕业设计论文3机器人本体机构设计本章中所要完成的任务摘要: 1.整体结构的设计2.控制系统的设计3.1整体结构的设计整体结构的设计,主要包括:(1)机器人底盘的设计与安装(2)核心控制3.2控制系统【Abstract】This design by car this carrier incorporated by AT89S52 core dashboards can achieve its basic features, plus infrared detector (IR LED), QTI sensors, IR schematics to perfect the design. Uses infrared technology to detect obstacles, QTI sensor acquisition information, use of ground AT89S52 processor that timely control, realization of intelligent Hayashi and obstacle avoidance, automatically opening and closing doors, as well as automatically. Smart cars with rear-wheel drive, two rounds of the execution with a stepper motor. The entire system of the circuit simple structure, reliable performance. Laboratory test results meet the requirements of this article focuses on the systems hardware design and analysis of test results. Technologies are: To programmatically control the car door open and close; Effective application of the sensor;Key words: memory devices, end actuators,目 录1 前言42 系统设计52.1 设计背景52.2设计要求52.3 实现目标53 机器人本体机构设计63.1 整体结构的设计63.1.1 机器人底盘设计与安装63.1.2 核心控制123.2 控制系统173.2.1 驱动控制系统173.2.2 巡线控制系统183.2.3控制电路的设计194 设计中的改进214.1 控制改进214.1.1巡线传感器的选择214.1.2 伺服电机的测试214.2宝贝车直线度的校正23谢 辞24文 献25附 录26附录一 RightServoTest.c测试伺服电机26附录二 校正宝贝车直线运动程序28附录三 设计总程序291 前言机器人从出发区出发,到达物料储存区后,分拣其赛前抽签决定好的任务,即从5个预知颜色料块(黄、白、红、黑、蓝)选3种颜色料块的已知6种组合(任务)中,选其中1个作为比赛任务(其料块均要求摆放在场地图的A、C、E位置,B、D位置不放置物料),再按照设计好的控制策略控制机器人动作,以便将三个料块快速准确地搬运并放到对应的三个颜色中心区域内,并最后回到出发区。2 系统设计本组智能小车的硬件主要有以宝贝车作为核心的载体小车、主控器部分、自动循迹部分、检测部分、手抓机构、电机驱动部分组成。2.1 设计背景设计一个基于8位单片机或ARM控制机器人,在比赛场地里移动,将指定的物体搬运到指定的位置区域,比赛的记分根据机器人将物体放置的位置精度和完成时间来决定分值的高低。它模拟了工业自动化过程中自动化物流的要求以及实际应用情况。2.2设计要求(1)基本要求:实现小车的前进后退,左转右转(按照程序预设)(2)扩展部分:实现小车自动循迹功能,并利用所设机构完成物料的搬运2.3 实现目标在规定时间内,机器人搬运完毕物料,并回到出发点。3 机器人本体机构设计本章中所要完成的任务摘要: 1.整体结构的设计2.控制系统的设计3.1 整体结构的设计整体结构的设计,主要包括:(1)机器人底盘的设计与安装(2)核心控制3.1.1 机器人底盘设计与安装本设计以宝贝车机器人作为载体,即作为整个智能机器人的底盘,在其基础上设计机构,以实现设计目标。本节主要完成智能机器人底盘的安装,主要从以下几方面进行:(1) 基本结构的安装(2) 驱动装置的安装(3) 动力源的安装(4) 控制面板的安装组装工具及部件1 组装工具(图3-1)(1) 螺丝起子(2) 尖嘴钳2 组装部件(1) 宝贝车底盘(2) 带制器的教学板(3) 连续旋转电机(两个) (4) 塑胶轮子(两个) 图3-1 宝贝车机器人组装工具(5) 橡皮圈(两个)(6) 带有插头的电池盒(7) 球状尾轮(8) 1/16 开口销(9)平头螺钉,3/8英寸 4-40(10)螺柱(四长四短)(11)盘头螺钉(12)螺母,4-40 在组装之前,应该先将所需部件找齐,方可进行安装。将表中所列零件收集到一起,按照装配步骤进行组装。基本结构的安装1 底盘的安装零件列表:如图3-2 (1) 宝贝车底盘(2) 螺柱(3) 盘头螺钉 (4) 13/32英寸的橡胶圈 图3-2底板及上面的硬件装配步骤: l 将13/32 英寸的橡胶套圈插到宝贝车底盘中心的孔内确保底盘中心孔的边缘嵌在橡胶圈的凹槽中l 用4 个螺钉将螺柱如图所示固定在底盘上。2 轮子的安装部件列表:(图3-3)(1) 部分已装好的宝贝车机器人(2) 1/16 开口销(3) 球状尾轮(4) 橡皮圈(5) 塑胶轮子 (6) 拆掉伺服喉里保存的螺钉装配步骤: 3-7图3-3 轮子部件图3-4左侧所示是安装在底盘上的尾图 轮。尾轮是一个有中心孔的塑胶球。开口销作为轴,将轮子固定在底盘上。l 轮子的中心孔与底盘尾部的中心孔对准在一条水平线上。l 将开口销同时穿过这三个孔(底盘左侧,尾轮,底盘右侧)。将开口销一端弯曲使它不会滑出孔。图3-4右侧所示是安装在宝贝车机器人伺服电机上的驱动轮。l 拉伸橡皮圈,把它套在每个轮子上。l 每个轮子有一个凹槽用于把它安装到输出轴上。将两个轮子分别压在输出轴上,确保两个轴高度一致,并已装进轮子的凹槽。l 用螺钉将轮子固定在输出轴上。驱动装置的安装1 拆除伺服喉l 断开控制器和伺服电机的电源。l 取出电池盒中的所有电池。图3-4把伺服电机从你的教学底板断开。步骤l 用螺丝起子去掉连接伺服喉和电机输出轴之间的螺钉。l 将每个四角形部件从电机输出轴上取下来。l 将螺钉保存好,后面还会用到。根据上面的指示移走如图四角形部件将电机安装到底盘上图3-5零件列表:如图3-6.(1) 宝贝车底盘(已部分组装好)(2) 连续旋转电机(3) 螺钉 3/8英寸 4-40(4) 螺母, 4-40装配步骤:l 用螺钉和螺母将电机固定在底盘上。为了最好的性能,你必须从里面,而不是从外面把电机放入矩形窗口。l 用标签纸标识伺服电机的左右轮。图3-6 把电机安装到底盘上图3-7所示是伺服电机和教学板的连接l 连接伺服电机到教学底板上的电机接口处。l 将贴着“L”的插头连接到P1_1端口,贴着“R”的插头连接到P1_0端口。 图3-7 伺服系统的连接动力源的安装在本设计中,我们采用4节5号碱性电池作为整个智能机器人的动力源。零件列表(图3-8):(1) 宝贝车 底盘(部分组装) (2) 平头螺钉,3/8英寸 4-40(3) 螺母, 4-40(4) 带有插头的电池盒安装步骤:l 用平头螺钉和螺母将电池盒固定在宝贝车机器人的底盘下面,如图3-9左边所示:l 将螺钉穿过电池盒,然后在底盘上面用螺母紧固。l 如图3-9右边所示:将电池盒的电源连接线穿过底盘中间带有橡胶圈的孔 图3-8。 图3-9l 将伺服电机线也穿过此孔。 l 控制系统的安装把教学底板(图3-10)安装到底盘上零件列表:1. 宝贝车机器人底盘(部分组装好)2. 平头螺钉1/4_ 4-40安装步骤: 将主板放在四个支架上使其与四个孔对齐。 l 确保面包板接近驱动轮而不是尾轮。 l 用平头螺钉连接主板和支架。 图3-10l 从底盘下面,拉出剩余的穿过橡胶圈的伺服电机线和电池线。l 卷起伺服电机和底盘之间剩余的线。l 从底盘下面,拉出剩余的穿过橡胶圈的伺服电机线和电池线。卷起伺服电机和底盘之间剩余的线。图3-113.1.2 核心控制(1)AT89S52核心控制板(图3-13)AT89S52单片机是一个低功耗、高性能CMOS 8位微控制器,片内含通用8位中央处理器和ISP Flash存储单元,8k BytesISP(In_system programmable)可反复擦写1000次的Flash只读程序存储器,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS51指令系统及80C51引脚结构,在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、高性价比的解决方案。图3-13(2)传感器a QTI传感器QTI传感器作为本设计的检测系统,主要实现光电检测,即利用QTI传感器对公交车的行进路线进行检测。本项目主要包含以下几个任务:1. QTI传感器的工作原理2. QTI传感器的安装认识QTI传感器 图 3-14QTI传感器的简介本设计使用的QTI(Quick Track Infrared)传感器,如图3-14所示。QTI传感器是一种使用光电接受管来探测它下面的表面反射光强度的传感器。当QTI传感器在一个很暗的表面上时,反射光强度很低。当QTI传感器在一个很亮的表面上时,反射光强度很高,从而导致传感器输出的变化。即探测到黑色物体输出高电平,探测到白色物体输出低电平。QTI传感器的特性使其很适合用在巡线、迷宫导航、探测场地边缘等应用中。QTI边线检测传感器性能参数: 工作温度:-4085 参考电压:5V 连续电流:50mA 功耗:100mW 最佳距离:10mm 最佳距离最大散射角度65度 探测到黑色物体输出高电平,探测到白色物体输出低电平。 响应时间:(V = 5v ,R = 100, I = 5mA )n 上升沿时间 10usn 下降沿时间 50us图1 引脚示意图 图3-15AVR单片机例程:硬件连接:把PC0口接到SIG上,VCC接5V,GND接地。#include “BoeBOtUnderstandable.h” /宝贝车的标准头文件#include “usta.h” /串口的头文件int PC0_state(void) /获取PC0的状态return (PINC&0x01)?1:0;int main(void) /主函数,程序从这里开始运行usta_Init(); /串口初始化printf(Program Running!); /在调试窗口显示一条信息while(1)if(PC0_state()printf(QTI NO working! n);elseprintf(QTI working! n);delay_nms(500);QTI传感器的安装每一个QTI巡线套件中包含4组QTI,当我们要完成线跟踪功能时,最简单的方法是使用4个QTI传感器,如图3-16所示。 图 3-16 图3-17若需要运行更稳定也可使用4个QTI传感器,安装方法如图3-17所示。图3-18这里我们以4个QTI为例,用螺丝固定好QTI传感器后,如图3-16所示。QTI传感器的引脚如图3-17所示,将传感器上的光电管面对你的时候,从上到下三个引脚依次为:GND、SIG、VCC。针脚定义:1 GND电源地2 SIG信号输出3 VCC5V直流电源3.2 控制系统3.2.1 驱动控制系统本控制系统采用的是AT89S52单片机来控制一个伺服小车,该小车主要由两个独立驱动的主动轮、一个从动轮构成,小车的运动由主动轮上的电机驱动,驱动力来源于两个伺服电机,而车门的往复直线运动由另一伺服电机驱动,它们的作用是在程序控制下高效率的将动力电池组的能量转化为各个伺服电机的动能。 图3-19小车的转弯主要通过两个电机的运动速度不同来实现。小车的转动角度为360,根据控制程序可以实现伺服小车前后左右行进(表3-1)。表3-1伺服小车控制原理车体动作左伺服电机右伺服电机前进正转正转后退反转反转左转反转正转右转正转反转表3-1电机引脚配置本设计所用到的电机有三个,分别为控制车轮转动的左右电机以及控制车门水平移动的电机。电机引脚配置如表3-2、图3-21。;电机引脚左电机P1-1右电机P1-0表3-2 图3-213.2.2 巡线控制系统QTI传感器作为本设计的检测系统,主要实现光电检测,即利用QTI传感器对公交车的行进路线进行检测。本设计用QTI传感器用于检测路面信息(2cm宽的黑线),车底盘上使用4个QTI传感器,以适应起始和终点的停车的需要并达到巡线的功能在宝贝车机器人上安装4个QTI线跟踪传感器就能实现对黑线跟踪,根据这个原理,传感器组合就可以让机器人按照设定好的地图(图3-22)运动。图3-22我们用4个QTI传感器,来帮助机器人完成在设定场地上的行走。还有较少ha 4_3.2.3控制电路的设计在进行电路图的组装之前,我们应该对无焊锡面包板有一定的认识。教学板前端,那块白色的、有许多孔或插座的区域,称之为无焊料的面包板(图3-23)。面包板连同它两边黑色插座,称之为原型区域。在面包板插座上插上元器件,比如电阻、LED、扬声器和传感器,就构成了本书中的例程电路。元器件靠面包 板插座彼此连接。在面包板上端有一条黑色的插座,上面标识着“Vcc”、“Vin”和“GND”,称之为电源端口,通过这些端口,你可以给你的电路供电。左边一条黑色的插座从上到下标识着P10、P11、P12P37(共18个,部分端口并未标出)。通过这些插座,你可以将你搭建的电路与单片机连接起来。 面包板上共有18行插座,通过中间槽分为两列。每一小行由五个插座组成,这五个插座在面包板上是电气相连的。根据电路原 图3-23理图的指示,你可以将元器件通过这些五口插座行连接起来。如果你将两根导线分别插入五口插座行中的任意两个插座中,它们都是电气相连的。电路原理图就是指引你如何连接元器件的路标。它使用唯一的符号来表示不同的元器件。这些器件符号用导线相连,表示它们是电气相连的。在电路原理图中,当两个器件符号用导线相连时,电气连接就生成。导线还可以连接元器件和电压端口。“Vcc”、“Vin”和“GND”都有自己的符号意义。“GND”对应于教学板的接地端;“Vin”指电池的正极;“Vcc”指校准的+5V电压。电路的设计与组装:本设计中所用到的电路主要包括QTI传感器电路,可通过他们各自的原理图对它们的电路进行设计并进行组装。在本设计中,三极管相当于一个开关:当P3_6置高时,从集电区经基区到发射区电路导通,加载在IR LED上的电压为VCC(5V),IR LED向外发射红外线;当P3_6置低时,电路又断开,IR LED停止发射。在电路的连接时,应注意它的连接方法,如下图所示:(1)QTI巡线原理图(图3-24)图3-24“GND”对应于教学板的接地端;“Vcc”指校准的+5V电压。图3-254 设计中的改进改进=改善+创新。改善是在不抛弃原经营方案的前提下而进行的改进。创新是通过抛弃原经营方案并建立新经营方案的前提下而进行的改进。在设计过程中,不断地、一步一步地、阶梯式地改进,会使得设计处在不断完善的过程中,更清晰的表达自己所要表达的东西,使读者更容易理解。改进主要分为两个部分:(1) 机构方面的改进(2) 控制方面的改进4.1 控制改进4.1.1巡线传感器的选择巡线方案可利用红外技术或QTI传感器采集地面信息,采用AT89S52单片机进行适时控制,实现智能循线和避障。若利用红外技术,将三个红外线光电传感器分别装在车体的左中右,当车的左边的传感器检测到黑线的边界时,主控芯片控制左轮电机减速,车向右修正,当车的右边传感器检测到黑线时,主控芯片控制右轮电机减速,车向左修正,中间的传感器起附带修正的作用,黑线在车体的中间,中间的传感器一直检测到黑线,当偏离黑线时也开始修正,从而使小车沿着黑色的轨道行走。若利用QTI传感器,则使用光电接受管来探测它下面的表面反射光强度的传感器。当QTI传感器在一个很暗的表面上时,反射光强度很低。当QTI传感器在一个很亮的表面上时,反射光强度很高,从而导致传感器输出的变化。即探测到黑色物体输出高电平,探测到白色物体输出低电平。由于站牌的检测系统中需要用到红外技术,为了方便且不易混淆,故而使用QTI传感器,QTI传感器的特性使其很适合用在巡线、迷宫导航、探测场地边缘等应用中。4.1.2 伺服电机的测试通过测试确保主板和伺服电机之间的电气连接正确。我们要确保右边的伺服电机从端口P1_0接收到脉冲后旋转,左边的电机从端口P1_1接收到脉冲后旋转。 (1)测试右轮下面的例子程序测试连接到右轮(图4-1)的伺服电机。程序将使右轮顺时针旋转三秒,停止一秒,然后逆时针旋转三秒。 例程: RightServoTest.c(程序见附录一)l 将机器人搁起,使驱动轮悬空。l 装电池到电池盒l 把三位开关设置到位置“2”。l 键入、保存并运行程序RightServoTest.c。l 验证右轮是否顺时针旋转三秒,停止一秒,然后逆时针旋转三秒。 图4-1l 如果右轮的运动同你预计的不同,参考伺服电机故障排除部分,它就在例程后面。(2) 测试左轮现在该在左轮上做同样的测试,如图4-1-1所示。这包括更改程序RightServoTest.c,使脉冲发到连接P1_1的伺服电机而不是连接P1_0的伺服电机。现在要做的是将程序中的P1_0改为P1_1。将程序RightServoTest.c另存为LeftServoTest.c。(见附录一)l 把P1_0改为P1_1。l 保存并运行程序。l 验证左轮是否顺时针旋转三秒,停止一秒,然后逆时针旋转三秒。图4-1-1 l 如果不是你所预期的,参考伺服电机故障排除部分。(3)伺服电机故障排除:这是一些非常常见的征兆和和修补方法。a 伺服电机根本不转。l 确定三位开关拨到位置“2”。然后,你可以按下并释放复位按钮,重新运行程序。l 仔细检查你的伺服电机接线。检查你的程序输入是否正确。右边的伺服电机不转,但是左边的转。这意味着伺服电机反了。连接到P1_0的电机应该连接到P1_1,连接到P1_1的电机应该连接到P1_0。l 断开电源。拔下伺服电机。l 把原连接到P1_0的电机连接到P1_1。把原连接到P1_1的电机连接到P1_0。l 打开电源。重新运行RightServoTest.c。b 轮不完全停下来,它缓慢旋转。这意味着伺服电机没有正确的调零。你可以调节程序来让伺服电机停止。你通过修改delay_nus(1500)让电机停止。l 如果轮子缓慢的逆时针旋转,用一个比1500小一点的数。l 如果轮子缓慢的顺时针旋转,用一个比1500大一点的数。l 如果你在1480至1520之间的数找到一个数让电机完全停止,然后把这个数用在delay_nus函数中。c 轮子在顺时针和逆时针旋转之间不停止。车轮可能快速的朝一个方向旋转3秒钟另一个方向旋转4秒钟,可能快速的旋转3秒钟,然后慢速的旋转1秒钟,然后又快速的旋转3秒钟。或者,它可能快速的朝一个方向旋转7秒钟。不管怎样,都说明电位器失调。去掉轮子,下掉伺服电机,伺服电机调零。4.2宝贝车直线度的校正 要保证车体的直线运动,就要确保两轮速度的一致性,电机的速度是由脉冲的宽度即程序中延时函数delay_nus的参数n决定的。n越接近1500,电机旋转越慢。这就意味着需要把控制P1_0或P1_1上的脉冲的宽度的delay_nus函数中的1300更改为一个更接近1500的数。如果宝贝车只是偏移轨迹一点,也许改为1320可以成功。如果电机严重不匹配,也许需要改为1380。可能要经过几次尝试才能得到正确的值。比如说你的第一个推测是1320,但是还不够,因为宝贝车还是稍微向左偏,于是试试1340,也许矫正过多,最后1330是正确的。这叫重复过程,意思是说这是一个用重复试验得到正确结果的过程。经过不断的修改与调试,可以确定delay_nus的参数n的数值,确保小车的直线度。程序见附录二 谢 辞历时两个月的毕业设计已经告一段落。经过自己不断的搜索努力以及的耐心指导和热情帮助,本设计已经基本完成。在这段时间里,严谨的治学态度和热忱的工作作风令我十分钦佩,他的指导使我受益非浅。本系机器人实验室的开放也为我的设计提供了实习场地。同时要对党媚老师表示深深的感谢,感谢田老师向我们提供慧鱼组件,让我们能够完成对机器人车体及各机构的组装,在此对周挺老师和党媚老师表示深深的感谢。通过这次毕业设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学三年的学习成果。虽然在这次设计中对于知识的运用和衔接还不够熟练。但是我将在以后的工作和学习中继续努力、不断完善。这两个月的设计是对过去所学知识的系统提高和扩充的过程,为今后的发展打下了良好的基础。由于自身水平有限,设计中一定存在很多不足之处,敬请各位老师批评指正。文 献1 秦志强,C51单片机应用与C语言程序设计,北京:电子工业出版社,2007,122 李广弟,单片机基础,北京:北京航空航天大学出版社,2008,56643何立民,单片机应用系统设计,北京:航天航空大学出版社,25,46504 赵负图,传感器集成电路手册,第一版,化学工业出版社,2009,590591附 录附录一 RightServoTest.c测试伺服电机#include/宝贝车的标准头文件#include /串口的头文件int main(void) /主函数,程序从这里开始运行int counter;usta_Init(); /串口初始化printf(Program Running!); /在调试窗口显示一条信息/*在开始时Counter被设为1,并在每次重复的最后被增加1。在循环重复前,如果Counter大于140,则循环结束。*/for(counter=1;counter=140;counter+)/顺时针旋转三秒P1_0=1; /设置P1_0输出高电平delay_nus(1300); /延时0.0013sP1_0=0; /设置P1_0输出低电平delay_nms(20); /延时20ms/*在开始时Counter被设为1,并在每次重复的最后被增加1。在循环重复前,如果Counter大于46,则循环结束。*/for(counter=1;counter=46;counter+) /停止一秒P1_0=1; /设置P1_0输出高电平delay_nus(1500); /延时0.0015sP1_0=0; /设置P1_0输出低电平delay_nms(20); /延时20ms/*在开始时Counter被设为1,并在每次重复的最后被增加1。在循环重复前,如果Counter大于46,则循环结束。*/for(counter=1;counter=138;counter+)/逆时针旋转三秒P1_0=1; /设置P1_0输出高电平delay_nus(1700); /延时0.0017sP1_0=0; /设置P1_0输出低电平delay_nms(20); /延时20ms附录二 校正宝贝车直线运动程序#include#includeint main(void)int counter;uart_Init(); /串口初始化printf(Program Running!n); for(counter=1;counter=130;counter+) P1_1=1;delay_nus(1740); P1_1=0; P1_0=1;delay_nus(1355);P1_0=0;delay_nms(20);附录三 设计总程序#include #include #include#define uint unsigned int #define uchar unsigned char uchar QTIState ;void stop(void) /停止 P1_1=1; delay_nus(1500); P1_1=0; P1_0=1; delay_nus(1500); P1_0=0; delay_nms(20);void back(void) /后退 P1_1=1; delay_nus(1300); P1_1=0; P1_0=1; delay_nus(1700); P1_0=0; delay_nms(20); void Forward(void)/向前行走子程序 P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20);void Pivot_right(void)/左转子程序 P1_1=1; delay_nus(1500); P1_1=0; P1_0=1; delay_nus(1350);P1_0=0; delay_nms(20);void Pivot_left(void)/右转子程序 P1_1=1; delay_nus(1650); P1_1=0; P1_0=1; delay_nus(1500); P1_0=0; delay_nms(20);void Rotate_left(void)P1_1=1; delay_nus(1650); P1_1=0; P1_0=1; delay_nus(1650); P1_0=0; delay_nms(20);void Rotate_right(void)P1_1=1; delay_nus(1350); P1_1=0; P1_0=1; delay_nus(1350); P1_0=0; delay_nms(20);void right_zhuan90(void) int k,j=0; for(j=0;j27 ;j+) P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1650); P1_0=0; delay_nms(20); for(k=0;k8;k+) Forward(); void left_zhuan90(void) int k,j=0; for(j=0;j30;j+) P1_1=1; delay_nus(1400); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20); for(k=0;k10;k+) Forward();void left_zhuan135(void) int k,j=0; for(j=0;j35;j+) P1_1=1; delay_nus(1400); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20); for(k=0;k10;k+) Forward();void right_zhuan45(void) int j,k; j=0;k=0; for(j=0;j5;j+) P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1600); P1_0=0; delay_nms(20); for(k=0;k10;k+) Forward();void left_zhuan45(void) int j,k; j=0;k=0; for(j=0;j5;j+) P1_1=1; delay_nus(1400); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20); for(k=0;k10;k+) Forward();void rotate_180(void) int j,k; j=0;k=0; for(k=0;k10;k+) Forward(); for(j=0;j60;j+) P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1600); P1_0=0; delay_nms(20); void forward_20cm(void) int j,k; j=0;k=0; for(j=0;j88;j+) P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20); void backward_10cm(void) int j,k; j=0;k=0; for(j=0;j40;j+) P1_1=1; delay_nus(1300); P1_1=0; P1_0=1; delay_nus(1700); P1_0=0; delay_nms(20); void backward(void) int j,k; j=0;k=0; for(j=0;j20;j+) P1_1=1; delay_nus(1300); P1_1=0; P1_0=1; delay_nus(1700); P1_0=0; delay_nms(20); void right_zhuan135(void) int k,j=0; for(j=0;j35;j+) P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1600); P1_0=0; delay_nms(20); for(k=0;k10;k+) Forward();void Get_QTI_State(void)QTIState = P2&0x1e ;void Follow_Line(void)Get_QTI_State();switch(QTIState)case 0x02 : Pivot_right();break;case 0x04 : Pivot_right();break; case 0x06 : Pivot_right(); break;case 0x08 : Rotate_left();break;case 0x0a : Pivot_right();break; case 0x0c : Forward();break;case 0x0e : Pivot_right();break; case 0x10 : Pivot_left(); break;case 0x12 : Forward();break;case 0x14 : Pivot_left();break;case 0x16 : Forward();break;case 0x18 : Pivot_left(); break;case 0x1a : Forward();break; case 0x1c : Pivot_left(); break;default : break;void main (void) int i,a,b; a=0; b=0; while(1) Get_QTI_State(); if(QTIState=0x1e) delay_nms(200); if(QTIState=0x1e) a+; if(a=1) for(i=0;i23;i+) Forward(); if(a=2) left_zhuan90 (); Follow Line(); if(a=3) for (i=0;i10;i+) Forward(); left_zhuan90 (); Follow Line(); if(a=4) for (i=0;i10;i+) Forward (); left_zhuan135 (); Follow Line(); if(a=5) for (i=0;i12;i+) Forward (); left_zhuan45 (); Follow Line(); if(a=6) for (i=0;i12;i+) Forward (); lef
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!