小车循迹课程设计

上传人:1777****777 文档编号:35934381 上传时间:2021-10-29 格式:DOC 页数:18 大小:443.51KB
收藏 版权申诉 举报 下载
小车循迹课程设计_第1页
第1页 / 共18页
小车循迹课程设计_第2页
第2页 / 共18页
小车循迹课程设计_第3页
第3页 / 共18页
资源描述:

《小车循迹课程设计》由会员分享,可在线阅读,更多相关《小车循迹课程设计(18页珍藏版)》请在装配图网上搜索。

1、目录第1章 需求分析11.1 设计题目11.2 设计目的11.3 设计任务及要求11.3.1 总体任务11.3.2 个人任务11.3.3 设计要求11.4 硬件设备与开发工具21.4.1 硬件设备21.4.2 开发工具2第2章 概要设计32.1 总体方案设计32.2 小车循迹原理32.3 主要功能的设计原理及实现方法32.3.1 小车前进功能设计32.3.2 小车旋转功能设计42.3.3 小车偏移修正功能设计4第3章 详细设计53.1 硬件设计与实现53.2 系统主程序流程63.3 功能模块详细设计63.3.1 起点到D点路线模块设计63.3.2 D点到终点路线模块设计73.3.3 终点到中心

2、点模块设计83.3.4 中心点到起始点路线模块设计8第4章 系统调试与操作说明104.1 系统调试104.1.1 硬件调试104.1.2 软件调试104.1.3 软硬件联调104.2 调试中遇到的问题104.3 操作说明11第5章 总结和体会12参考文献12附录14第1章 需求分析1.1 设计题目 小车循迹控制系统设计1.2 设计目的 (1)掌握和巩固所学的51单片机知识,加强对相关知识的理解和运用。 (2)学会运用所学的专业知识,提高对实际问题的解决能力。 (3)提高编程能力和加强团队合作。1.3 设计任务及要求1.3.1 总体任务(1)完成硬件设计并连线,以MCS-51单片机为控制核心,根

3、据4个QTI传感器采集的数据控制舵机的运转,进而控制车轮的速度和方向。(2)用C语言编程实现以下小车行驶线路:起始点中心点D点,旋转360度红色点,旋转180度原路返回。小车前行时慢速行驶,小车返回时速度加快。1.3.2 个人任务 用C语言编程实现小车旋转180度原路返回这一模块功能设计和总体调试,当小车原路返回时,速度加快,在小车原理返回时,不断修正小车的行驶路线。1.3.3 设计要求完成设计方案论证,硬件原理图设计、电路建构、软件编程、调试、运行以及使用说明文档的建立等一整套工作任务。控制软件使用C语言编程;系统联调,提交一个满足要求的小车循迹控制系统设计。1.4 硬件设备与开发工具1.4

4、.1 硬件设备 由AT89S52单片机最小系统板、四个QTI传感器、两个舵机、两个车轮、一块7.4V锂电池、稳压电路板、ISP下载线、面包板组成的小车一台,Windows xp操作系统PC机一台。1.4.2 开发工具KeilC51编程软件、progisp下载器、串口调试小助手等软件。第2章 概要设计2.1 总体方案设计硬件设计部分,根据设计任务书的要求,小车要根据指定的轨道完成不同的路线的选择,小车在前进的过程中,需要识别路面信号,故采用四个QIT传感器来探测信号,通过不停的检测与判断来控制小车。小车的运动轨迹需由核心单片机来控制,由AT89S52单片机最小系统板来进行设计实现。软件设计部分,

5、将整个过程分为四个子模块来实现,分别为起点到D点,D点到终点,终点到中心点,中心点到起始点。在运动过程中还需设计旋转360度和180度的旋转子模块,当小车偏离轨迹候后,需设计修正子模块。最后为了使小车停到指定区域,还需编写停止子模块。2.2 小车循迹原理小车循迹的原理主要是通过小车上的四个QIT传感器不断地来探测信号,当传感器探测到黑色时,则返回给系统为1的信号,反之,则返回给系统0的信号,通过传感器探测的信号,在小车的行驶路线中来进行相应的处理。 小车在循迹时,可能会出现偏移的情况,这时就需要对小车轨迹进行修正处理,当四个QTI传感器信号状态为0110时,则表明小车为正确为正确行驶路线,继续

6、直线运动;如果四个QTI传感器信号状态为0100或1000时判定小车右偏时,对小车路线进行作左修正;如果四个QTI传感器信号状态为0010或0001时判定小车位左偏,对小车前进路线进行做修正,这样经过不断修正来实现小车的循迹前进。2.3 主要功能的设计原理及实现方法2.3.1 小车前进功能设计此模块原理是向伺服电机输出若干个PWM波,波形的占空比可控制小车移动,通过时间宽度和延时产生信号,作用于电机,从而控制其运动。在本次设计中,向伺服电机PWM波过程已经被模块化在头文件中,即motion()函数中,通过对motion()函数的三个参数进行设置来实现控制电机转动从而控制小车前进。2.3.2 小

7、车旋转功能设计小车旋转的原理是调整两轮的移动方式、速度及移动步数。当需旋转360度时,将左轮设置为后退状态,右轮为前进状态,多次调试测出旋转所需的步数,旋转360度时步数设置为100,当需要旋转180度时,只需修改旋转步数为50即可。2.3.3 小车偏移修正功能设计 小车偏移修正功能即对小车传感器信号状态进行检测并作出相应的处理的过程,在修正过程中偏移情况及其信号状态如下: 当小车发生左偏移时,各传感器状态信号如下: 此时通过调节左右轮的速度来实现,左偏时调用motor_motion(1770, 1740,1)实现左轮前进速度大于左轮前进速度来实现向右偏移来对偏移进行修正。 当小车发生右偏移时

8、,各传感器状态信号如下: 此时通过调节坐游轮的速度来实现,右偏时调用motor_motion(1550, 1300,1),通过调节左右轮的速度,当右轮速度大于左轮速度进行修正。当小车发生偏移后,先判断是哪边偏移,然后根据不同的情况进行修正。修正原理是,当通过调节左右轮的速度来达到的。当左偏移时调用,当右偏移时,调用。直到扫描信号为0110时,停止修正。第3章 详细设计3.1 硬件设计与实现 小车是由多个硬件零件组装而成,每个零件负责不同的功能,根据设计任务和要实现的主要功能,来进行硬件设计。硬件设计原理图如下: 图3-1 硬件原理图根据硬件原理图,来进行硬件间的连线,系统接线图如下: 图3-2

9、 硬件接线图3.2 系统主程序流程小车循迹不仅需要硬件的支持,也需要软件支持,通过程序进行小车控制。本次系统设计采用模块化思想进行设计,本系统设计了四个模块,分别为起点到C点路线模块、C点到终点路线模块、终点到中心点模块、中心点到起始点路线模块。通过对每个功能模块的调用实现系统要求的功能。系统主流程图如下: 开 始调用起始点到D点的函数run_start()调DC点到终点的函数run_point()调用终点到中心点的函数run_middle()调用中心点到起始点的函数run_back() 结束 图3-3 系统主程序流程图3.3 功能模块详细设计3.3.1 起点到D点路线模块设计起点到D点,主要

10、是从开始就前进,在前进过程中不停检测传感器传过来的信号,通过判断小车是否偏离路线后决定是否修正。如果检测到0000信号,则执行旋转360度程序。设计函数run_start()来实现此模块功能。程序流程图如下: 进行修正D点结束偏移?旋转360度是否到达D点开始 图3-4 起点-D点模块流程图3.3.2 D点到终点路线模块设计D点到终点,首先在旋转360后,要向前冲出2步,继续前行,前行过程中也进行检测也修正,当遇到1001信号时,执行旋转180度。设计函数run_point(),其关键代码为:if(P21_state()&(!P22_state()&(!P23_state()&P24_stat

11、e()motor_motion(1300,1300,40);程序流程图如下: 偏移?旋转180度进行修正结束是否到达终点D点开始 图3-5 D点-终点流程图3.3.3 终点到中心点模块设计终点到中心点循迹过程中,不断地通过传感器检测信号,进行路线修正。当第一次检测到1111信号时,这表示已经到达中心点,将检测次数i加1。设计函数run_middle();模块程序流程图如下:1111?次数增1继续前进终点开始 图3-6 终点中心点流程图3.3.4 中心点到起始点路线模块设计中心点到终点行驶过程中,不断检测信号,进行路线修正,当第二次检测到1111信号时,调用一个死循环,不停执行时小车停止的方法m

12、otor_motion(1500, 1500,1)。代码如下: while(1)motor_motion(1500,1500,1);设计函数run_back(),其流程图如下图: 1111?小车停止继续前进中心点开始 图3-6 终点-起始点程序流程图第4章 系统调试与操作说明本系统的调试共分为三大部分:硬件调试、软件调试和软硬件联调。由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:单片机控制模块的调试、红外对管寻迹模块的调试及电机控制模块和停车控制模块的调试,最后将各模块组合后结合软件进行整体测试。4.1 系统调试4.1.1 硬件调试 将小车组装完成后,根据硬件接线图将各

13、个部件进行连接,然后结合软件共同实现,当连接单片机与电机控制芯片的I/0加上一定的电平可以实现电机左右转向,前后转向以及停止等功能,同时通过程序延时降低电机转速。4.1.2 软件调试将编好的程序进行调试,主要是检查语法错误并确认硬件完整无误。由于本系统是分模块进行程序设计的,所以调试时先分模块进行调试。如小车旋转程序和轨道修正程序,在调试时将它放在一个子程序里单独测试,看其是否能够完成预定的功能,如能,测试通过,否则,修改并反复测试直到通过。 虽然在软件的调试过程中,综合利用了设定断点、单步、跟踪等调试手段,使得调试工作更易进行。但是也出现了一定的问题,如小车速度没起到明显效果等等。通过了多次

14、分离合并,方法得以解决,以及多次修改参数,达到综合效果。4.1.3 软硬件联调各功能模块都调试通过之后,将各个模块连接起来与硬件结合进行联合调试。在进行联合调试时,经过反复的实验,不断的来修改参数来完善结果。使程序按照要求设计的要求进行。4.2 调试中遇到的问题 在调试过程中,遇到了不少的问题,其中在进行小车360度旋转时,由于小车旋转的步数不确定,小车旋转的角度没有达到360度或者超过了360度,导致传感器接收到的信号发生偏差,影响后续的功能模块的实现。4.3 操作说明将已编好的源程序,在KeilC51中进行编译生成.hex文件,然后通过ISP下载线和progisp软件将已生成的.hex文件

15、烧写到单片机中。当烧写成功后,拔掉下载线,然后在已设定好的路径上,摆正小车的位置,打开小车上的开关。观察小车是否按照预定的路径进行行驶。第5章 总结和体会本次计算硬件综合设计采用的是团队合作方式进行设计的,每个成员负责不同的模块设计。每个人都付出了自己的努力,通过这次课程设计,使我不仅了解团队合作的重要和强大,一个人的知识面和精力是有限的,在团队中每个人都发挥出自己的力量,当将所有人的力量集中起来后,就能将软件设计的更完善。 虽然在硬件综合设计期间正在紧张的考研复习阶段,但是,自己还是坚持独立完成了自己负责的模块,虽然没有亲自进行硬件的设计,但是通过自己动手编写程序并和小组成员程序的结合并调试

16、成功,自己还是从中学到了不少东西。其次,使我明白编写一个好程序不易,需要不断调试和修改,使程序不断地完善。设计过程中,我也深刻地认识到程序设计必须首先分析清楚系统的业务逻辑,把业务逻辑转化为代码。其次是不怕麻烦,多次调试,不断改进,软硬件结合后就具有一定的探究性。在整个过程中我学会了怎样将程序植入到芯片里去,怎么烧写程序。参考文献 1 沈德金,陈粤初MCS-51系列单片机接口电路与应用程序实例北京航空航天大学出版社,19902 李华MCS一51系列单片机实用接口技术M北京:航空航天大学出版社2003设计者: 操时力 日 期: 2011年12月30日设计过程中质疑(或答辩)记载:1. 小车返回时

17、,如何加快小车的速度?答:修改motor_motion()中的参数,调节左轮和右轮的速度。2. 调试过程中遇到的问题和解决方案答:进行小车360度旋转时,由于小车旋转的步数不确定,小车旋转的角度没有达到360度或者超过了360度,导致传感器接收到的信号发生偏差,影响后续的功能模块的实现。通过不断地测试和修改后,得到旋转360度所需的步数。指导教师评语:评分:签名:2011年 12 月 30 日附录#include #include global.h#include motion.h#include qti.h#include delay.h#define ANGLE 50/180转角#defi

18、ne MID 1500/不动轮速#define LOW_LEFT 1550/左轮慢速#define LOW_RIGHT 1450/右轮慢速#define HIG_LEFT 1700/左轮快速#define HIG_RIGHT 1300/右轮快速void run_stat1(int left,int right)while(1) motor_motion(left, right,1); if(P21_state()&P22_state()&P23_state()&P24_state()=1)break; else if(P22_state()&(!P23_state()|(P21_state()

19、&(!P22_state()&(!P23_state()&(!P24_state() motor_motion(1550, 1300,1); /左转修正 else if(!P22_state()&P23_state()|(!P21_state()& (!P22_state()&(!P23_state()&P24_state() motor_motion(1700, 1450,1); /右转修正 else continue;void run_stat2(int left,int right)while(1) motor_motion(left, right,1); if(!P21_state()

20、&(!P22_state()&(!P23_state()&(!P24_state()=1)break; else if(P22_state()&(!P23_state()|(P21_state()&(!P22_state()&(!P23_state()&(!P24_state() motor_motion(1550, 1300,1); /左转修正 else if(!P22_state()&P23_state()|(!P21_state()& (!P22_state()&(!P23_state()&P24_state() motor_motion(1700, 1450,1); /右转修正 els

21、e continue;void run_point(int left,int right) motor_motion(left,right,2);while(1)motor_motion(left,right,1); if(P21_state()&P22_state()&P23_state()&P24_state()break; else if(!P21_state()&P22_state()&P23_state()&P24_state()break; else if(P22_state()&(!P23_state()|(P21_state()&(!P22_state()&(!P23_stat

22、e()&(!P24_state() motor_motion(left, right-150,1); /左转修正 else if(!P22_state()&P23_state()|(!P21_state()& (!P22_state()&(!P23_state()&P24_state() motor_motion(left+200, right,1); /右转修正 void run_back()run_stat1(HIG_LEFT,HIG_RIGHT);motor_motion(MID-50,MID+50,7); motor_motion(MID,MID-200,ANGLE);run_stat

23、1(HIG_LEFT,HIG_RIGHT);motor_motion(HIG_LEFT,HIG_RIGHT,60);while(1)motor_motion(MID,MID,1);return;int main()run_stat1(LOW_LEFT,LOW_RIGHT);motor_motion(MID-50,MID+50,7);/后退motor_motion(MID+200,MID,ANGLE);/右转motor_motion(HIG_LEFT,HIG_RIGHT,2);/前进run_stat2(LOW_LEFT,LOW_RIGHT);motor_motion(MID-200,MID-200,2*ANGLE);/转360run_point(LOW_LEFT,LOW_RIGHT);motor_motion(MID-200,MID-200,ANGLE);/转180run_back();return 0;17

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

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

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


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