硬件综合课程设计-小车循迹控制系统设计(路线2).doc_第1页
硬件综合课程设计-小车循迹控制系统设计(路线2).doc_第2页
硬件综合课程设计-小车循迹控制系统设计(路线2).doc_第3页
硬件综合课程设计-小车循迹控制系统设计(路线2).doc_第4页
硬件综合课程设计-小车循迹控制系统设计(路线2).doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

武汉理工大学华夏学院课 程 设 计课程名称 硬件综合课程设计 题 目 小车循迹控制系统设计(路线2) 专 业 计算机应用 班 级 1091 学 号 10210409108 姓 名 娄宗奇 成 绩 _指导教师 李朝纯 万振民 2013 年 1 月 17日2课程设计任务书设计题目:小车寻迹控制系统设计(路线2)设计目的:1.巩固和加深课堂所学知识;2.学习掌握单片机控制系统的软硬件的设计方法和查阅、运用资料的能力;3.通过小车控制系统设计与制作,深入了解与掌握单片机控制系统的运行原理和控制方式。设计任务:(在规定的时间内完成下列任务)1画出硬件原理图(接口芯片和外设部分)和实验连线图;2用C语言编程实现小车行驶线路:起始点中心点B点(旋转360度)白色点然后旋转180度原路返回要求:小车前行时慢速行驶,小车返回时速度加快时间安排:各时间段的任务可以交替进行元月7日介绍题目,实物演示、分任务、查找相关资料元月8日查阅资料,进行功能分析,拟定设计思路元月9日元月11日硬件设计,拟定实验电路,编写程序,修改程序;元月18日前提交电路原理图、实验接线图及程序流程图的电子版元月14日 元月16日调试程序、运行系统;元月17日 元月18日答辩后修改设计报告。元月17日中午12:00前答辩完;元月18日中午12:00前交设计报告具体要求:设计报告撰写格式要求(按提供的设计报告统一格式撰写),应包括如下内容: 设计任务与要求 总体方案与说明 硬件原理图与说明 实验接线图与说明 软件主要模块流程图 源程序清单与注释 问题分析与解决方案(包括调式记录、调式报告,即在调式过程中遇到的主要问题、解决方法及改进设想); 小结与体会附录: 源程序(必须有简单注释) 使用说明 参考资料指 导 教 师 签 字: 2013年1 月 7 日系 主 任 签 字: 年 月 日目 录 第1章 需求分析11.1 课程设计题目11.2 课程设计任务及要求11.2.1 总体任务11.2.2 个人任务11.2.3 设计要求11.3软硬件运行环境及开发工具1第2章 概要设计22.1 小车软硬件设计原理22.1.1 小车硬件设计原理22.1.2小车软件设计原理22.2 功能设计原理及实现方法22.2.1小车前进功能实现22.2.2 小车旋转功能实现22.2.3 小车偏移修正功能设计2第3章 详细设计43.1 硬件设计与实现43.2 系统主程序流程43.3功能模块详细设计53.3.1 起始点到中心点路线模块设计53.3.2 中心点到B点路线模块设计53.3.3 B点到白色点路线模块设计63.3.4 白色点到中心点模块设计73.3.5 中心点到起始点路线模块设计7第4章 系统调试与操作说明84.1 系统调试84.1.1 直线调试84.1.2 达到B点旋转360调试84.2 调试中遇到的问题84.3 操作说明8第5章 总结和体会9参考文献9附录10第1章 需求分析1.1 课程设计题目 小车循迹控制系统设计1.2 课程设计任务及要求1.2.1 总体任务(1)硬件部分:完成硬件设计并连线,以MCS-51单片机为控制核心,随时采集4个QTI传感器的数据控制舵机的运转,进而控制车轮的速度和方向。 (2)软件部分:用C语言编程实现小车行驶线路:起始点中心点B点(旋转360度)白色点然后旋转180度原路返回。小车前行时慢速行驶,小车返回时速度加快。1.2.2 个人任务 使用KeilC51编程软件采用C语言编程实现小车从中心点B点,旋转360度这一模块功能设计和总体调试,同时不断修正小车的路线。1.2.3 设计要求 完成硬件原理图设计、小车模型构建、软件编程、调试、运行等一整套工作任务。控制软件使用C语言编程;系统联调,提交一个满足要求的小车循迹控制系统设计。1.3软硬件运行环境及开发工具 以MCS-51单片机为控制核心,根据4个QTI传感器采集的数据控制舵机的运转,Windows xp操作系统PC机一台。KeilC51编程软件、progisp下载器、串口调试小助手等软件。第2章 概要设计2.1 小车软硬件设计原理2.1.1 小车硬件设计原理小车前面有4个qti感应器来随时采集数据,当探测为黑线的时候,返回值为1,当探测为白线的时候,返回值是0,只有当中间两个qti返回值全为1的时候,才走在黑线上,根据返回的状态来控制小车舵机的速度。2.1.2小车软件设计原理将整个过程分为五个子模块来实现,分别为起点到中心点,中心点到B点,B点到白色点,白色点到中心点,中心点到起始点。在运动过程中还需设计旋转45度和180度和360度的旋转子模块,当小车偏离轨迹候后,需设计修正子模块。最后为了使小车停到指定区域,还需编写停止子模块。2.2 功能设计原理及实现方法2.2.1小车前进功能实现此模块原理是向伺服电机输出若干个PWM波,波形的占空比可控制小车移动,通过时间宽度和延时产生信号,作用于电机,从而控制其运动。在本次设计中,向伺服电机PWM波过程已经被模块化在头文件中,即motion()函数中,通过对motion()函数的三个参数进行设置来实现控制电机转动从而控制小车前进。motor_motion(uint16_t left_val, uint16_t right_val, uint8_t count)例:其中参数left_val:左边电机的高电平时间宽度;right_val:右边电机的高电平时间宽度;count:脉冲数目 2.2.2 小车旋转功能实现小车旋转的原理是调整两轮的移动方式、速度及移动步数。当需旋转360度时,将左轮设置为快速后退状态,右轮为快速前进状态,多次调试测出旋转所需的步数102,最终得出的结果为:motor_motion( 1300 , 1300 , 102 ); 2.2.3 小车偏移修正功能设计 小车偏移修正功能即对小车传感器信号状态进行检测并作出相应的处理的过程,在修正过程中偏移情况及其信号状态如下: (1) 当小车发生左偏移时,各传感器状态信号如下: 通过判断语句:if(!P22_state()&P23_state()|(!P21_state()&(!P22_state()&(!P23_state()&P24_state() 判断小车是否向左偏移,若发生偏移此时通过调节左右轮的速度来实现,左偏时调用motor_motion(1770, 1740,1)实现左轮前进速度大于右轮前进速度来实现向右偏移来对偏移进行修正。 (2 ) 当小车发生右偏移时,各传感器状态信号如下:通过判断语句:if(P22_state()&(!P23_state()|(P21_state()&(!P22_state()&(!P23_state()&(!P24_state() 判断小车是否向右偏移。若发生偏移,此时通过调节坐游轮的速度来实现,右偏时调用motor_motion(1550, 1300,1),通过调节左右轮的速度,当右轮速度大于左轮速度进行修正。 第3章 详细设计3.1 硬件设计与实现小车是由多个硬件零件组装而成,每个零件负责不同的功能,根据设计任务和要实现的主要功能,来进行硬件设计。硬件设计原理图如下: 图3.1 硬件原理图3.2 系统主程序流程小本系统设计了五个个模块,分别为起点到中心点路线模块、中心点到B点、B点白色点、白色点到中心点、中心点返回到起始点路线模块。通过对每个功能模块的调用实现系统要求的功能。系统主流程图如下: 开 始调用起始点到中心点的函数tocenter()调用中心点到B点的函数centerToB()调用B点到白色点的函数bToEnd()调用白色点到中心点的函数tocenter()调用中心点到起始点点的函数tocenter() 结束 图3.2 系统主程序流程图3.3功能模块详细设计3.3.1 起始点到中心点路线模块设计起点到中心点,主要是从开始就前进,在前进过程中不停检测传感器传过来的信号,通过判断小车是否偏离路线后决定是否修正。程序代码如下:3.3.2 中心点到B点路线模块设计中心点到B点,主要是从开始就前进,在前进过程中不停检测传感器传过来的信号,通过判断小车是否偏离路线后决定是否修正。如果检测到0000信号,则执行旋转360度程序。设计函数centerToB()来实现此模块功能。程序代码如下:程序流程图如下: 开始前进偏移?前进修正是否到达B点?否旋转360度是 图3.3中心点到B点模块流程图3.3.3 B点到白色点路线模块设计B点到白色点前进过程中也要进行检测修正,当遇到0000信号时,执行旋转180度,其代码为:3.3.4 白色点到中心点模块设计白色点到中心点循迹过程中,不断地通过传感器检测信号,进行路线修正。当第一次检测到1111信号时,这表示已经到达中心点。采用的函数和刚开始去中心点的一样,模块程序代码如下:3.3.5 中心点到起始点路线模块设计中心点到终点行驶过程中,可以调用tocenter这个函数,不断检测信号,进行路线修正,当第二次检测到1111信号时,调用一个死循环,不停执行使小车停止的方法motor_motion( 1500 ,1499 , 1 );代码如下: while(1)motor_motion( 1500 , 1499 , 1 ); 第4章 系统调试与操作说明4.1 系统调试4.1.1 直线调试 主要是判断小车是否能沿着黑线向前走,方法:让程序只有函数modify(),并烧写到小车中,把小车放在一条黑线上,看它是否能一直在黑线上前进,若不能,再qti是否连接正确,直至小车能一直走在直线上。4.1.2 达到B点旋转360调试主要判断小车能否到达B点,并成功旋转360度,方法:将自己模块程序烧写到小车中,放在一个白颜色的板子上面,观察小车能否旋转360度,注意看其角度是否正常,并多次修改脉冲数,直至能够刚好旋转360度。4.2 调试中遇到的问题 调试的时候,总是在旋转360度的时候,脉冲给的数目不准确,要么转多了,要么没转够,最后调试为102才刚刚差不多,然后再加上一个延时和冲出B点的函数,才解决这个问题。4.3 操作说明在KeilC51中写好的程序进行编译生成.hex文件,然后通过ISP下载线和progisp软件将已生成的.hex文件烧写到单片机中。当烧写成功后,拔掉下载线,然后在已设定好的路径上,摆正小车的位置,打开小车上的开关。观察小车是否按照预定的路径进行行驶。 第5章 总结和体会参考文献设计者: 娄宗奇 日 期: 2013 年 1 月 13 日附录 #includereg52.h#includedelay.h#includeqti.h#includemotion.h#includeGlobal.hvoid modify()if(P22_state()&(!P23_state()|(P21_state()&(!P22_state()&(!P23_state()&(!P24_state() motor_motion(1470, 1700,1); /左转修正 else if(!P22_state()&P23_state()|(!P21_state()& (!P22_state()&(!P23_state()&P24_state() motor_motion(1300, 1550,1); /右转修正 else motor_motion(1700,1300,1); void main(void)while(1) motor_motion(1700,1300,1); modify(); if(P22_state()&P23_state()&P21_state()&!P24_state() /motor_motion(1500,1500,0); /中心点停 motor_motion(1500,1300,18); /左转45度 break; while(1)motor_motion(1700,1300,1); modify(); if(!P21_state()&!P22_state()&!P23_state()&!P24_state()/motor_motion(1500,1500,0); /B点停 motor_motion(1300,1300,150); /转360度 break; while(1) motor_motion(1700,1300,1); modify(); if(P21_state()&P22_state()&P23_state()&P24_state() /motor_motion(1500,1500,0); /白点停 motor_motion(1300,1300,75); /转180度 break; while(1) motor_motion(1700,1300,1); modify(); if(P21_sta

温馨提示

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

评论

0/150

提交评论