收藏 分销(赏)

小车循迹控制程序设计.doc

上传人:快乐****生活 文档编号:2769406 上传时间:2024-06-05 格式:DOC 页数:23 大小:1.41MB 下载积分:10 金币
下载 相关 举报
小车循迹控制程序设计.doc_第1页
第1页 / 共23页
小车循迹控制程序设计.doc_第2页
第2页 / 共23页


点击查看更多>>
资源描述
武汉理工大学华夏学院 课外自主实验分析报告 实验名称 小车循迹控制程序设计 专 业 软件工程 班 级 学 号 姓 名 第1章 实验分析 3 1.1 实验设计题目 3 1.2 实验设计任务 3 1.2.1 总体任务 3 1.2.2 详细任务 3 1.2.3 设计要求 3 1.3软硬件运行环境及开发工具 3 第2章 概要设计 4 2.1 小车软硬件设计原理 4 2.1.1 小车硬件设计原理 4 2.1.2小车软件设计原理 4 2.2 功能设计原理及实现方法 4 2.2.1小车前进功能实现 4 2.2.2 小车旋转功能实现 4 2.2.3 小车偏移修正功能设计 4 第3章 详细设计 9 3.1 硬件设计与实现 9 3.2 系统主程序流程 10 3.3功能模块详细设计 10 3.3.1 起始点到中心点路线模块设计 10 3.3.2 中心点到D点路线模块设计 10 3.3.3 D点到黑色点路线模块设计 11 3.3.4 白色点到中心点模块设计 12 3.3.5 中心点到起始点路线模块设计 13 第4章 系统调试与操作说明 15 4.1 系统调试 15 4.1.1 直线调试 15 4.1.2 达到黑色终点点调试 15 4.3 操作说明 15 第5章 总结和体会 16 第6章 参考文献 16 附录: 1 1 课外实验设计计划 学生姓名: 万志雄 专业班级: 软件1111 实验题目:小车循迹控制系统设计(路线3) 实验器材:1、硬件设备:MCS-51单片机最小系统板、四个QTI传感器、两个舵机、 两个车轮、锂电池、ISP下载线、面包板; 2、软件环境:Keil C51、progisp下载器。 实验任务:(在规定的时间内完成下列任务) 1.完成硬件设计并连线,以MCS-51单片机为控制核心,根据4个QTI传感器采集到的数据控制舵机的运转,进而控制车轮的速度和方向,并画出硬件原理图和实验连线图; 2.用C语言编程实现以下小车行驶线路(地图见下页): 起始点→中心点→D点,旋转360度→黑色点,旋转180度→原路返回。 时间安排:各时间段的任务可以交替进行 时间 设计内容 第一天 设计题目,实物演示、规划任务、查找相关资料 第二天 进行需求分析,完成总体设计 第三天 硬件详细设计,连接实验电路,软件详细设计,编写程序; 第四天 调试程序、测试系统、总结; 第五天 总结后完成设计报告。 指 导 教 师 签 名: 2014 年 6 月 30 日 教研室主任(或责任教师)签名: 2014年 6 月 30 日 起始点 目 录 第1章 实验分析 1.1 实验设计题目 小车循迹控制系统设计(路线3) 1.2 实验设计任务及要求 1.2.1 实验总体任务 (1)硬件部分:完成硬件设计并连线,以MCS-51单片机为控制核心,随时采集4个QTI传感器的数据控制舵机的运转,进而控制车轮的速度和方向。 (2)软件部分:用C语言编程实现小车行驶线路:起始点→中心点→D点(旋转360度)→黑色点→然后旋转180度→原路返回。 1.2.2任务 使用KeilC51编程软件采用C语言编程实现小车路线3的总体调试,同时不断修正小车的路线。 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小车软件设计原理 将整个过程分为五部分来实现,分别为起点到中心点,中心点到D点,D点到黑色点,黑色点到中心点,中心点到起始点。在运动过程中还需设计旋转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度时,将 左轮设置为快速后退状态,右轮为快速前进状态,多次调试测出旋转所需的步数. 2.2.3 小车偏移修正功能设计 小车偏移修正功能即对小车传感器信号状态进行检测并作出相应的处理的过程,在修正过程中偏移情况及其代码和信号状态如下: void 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); } } (1) 当小车发生右偏移时,各传感器状态信号如下: 1 0 0 0 0 0 0 0 1 1 0 0 通过判断语句:if((P22_state()&&(!P23_state()))||(P21_state()&&(!P22_state())&&(!P23_state())&&(!P24_state())))判断小车是否向左偏移,若发生偏移此时通过调节左右轮的速度来实现,左偏时调用motor_motion(1770, 1740,1)实现左轮前进速度大于右轮前进速度来实现向右偏移来对偏移进行修正。 (2 ) 当小车发生右偏移时,各传感器状态信号如下: 1 0 0 0 0 0 0 0 1 1 0 0 通过判断语句:if(((!P22_state())&&P23_state())||((!P21_state())&& (!P22_state())&&(!P23_state())&&P24_state())) 判断小车是否向右偏移。若发生偏移,此时通过调节坐游轮的速度来实现,右偏时调用motor_motion(1550, 1300,1),通过调节左右轮的速度,当右轮速度大于左轮速度进行修正。 2.3.1编程头文件 (1)各个头文件如下图 图2.1 (2)delay.h头文件实现延时功能,帮助系统更加理性化,易于操作。例如小车开始部分延时3秒。delay.h头文件详细代码如下: void delay_nus(unsigned int i) { i=i/10; while(--i); } void delay_nms(unsigned int n) { n=n+1; while(--n) delay_nus(900); //进行时间补偿 } (3)qti.h头文件其作用是获取4个QTI传感器采集的信号。为51单片机提供判断的输入数据。qti.h头文件P21口实例详细代码如下: /* 函数名称:P21_state() 功能: 获得左边第一个QTI的返回信号 参数:无参数 返回值:1:高电平,看到黑线;0:低电平,看到白线 */ int P21_state() { return (P2&0x02)?1:0; } (4)global.h头文件其作用是定义用到的数据类型、变量。方便程序设计,简化程序结构。详细代码如下: #ifndef GLOBAL_H #define GLOBAL_H typedef unsigned int uint16_t; typedef unsigned char uint8_t; typedef unsigned char bool; #define true 1 #define false 0 #endif (5)motion.h头文件其作用是控制两个舵机运转 。详细代码如下: #include "Global.h" sbit left_motor = P1^0; //左电机接口 sbit right_motor = P1^1; //右电机接口 #define LEFT_FWD 1700 //高电平时间定义,单位微秒 #define LEFT_BWD 1300 #define LEFT_SMALL_FWD 1530 #define LEFT_SMALL_BWD 1450 #define RIGHT_FWD 1300 #define RIGHT_BWD 1700 #define RIGHT_SMALL_FWD 1450 #define RIGHT_SMALL_BWD 1530 函数名称:motor_motion(uint16_t left_val, uint16_t right_val, uint8_t count) 作用:向伺服电机输出若干个PWM波,波形的占空比可控制 参数:left_val:左边电机的高电平时间宽度;right_val:右边电机的高电平时间宽度;count:脉冲数目 返回值:无返回值 void motor_motion(uint16_t left_val, uint16_t right_val, uint8_t count) { uint8_t i; for(i=0; i<count; i++) { left_motor = 1; delay_nus(left_val); left_motor = 0 right_motor = 1; delay_nus( right_val ); right_motor = 0; delay_nms(20); //输出一定数量的PWM波形 } } 第3章 详细设计 3.1 硬件设计与实现 小车是由多个硬件零件组装而成,每个零件负责不同的功能,根据设计任务和要实现的主要功能,来进行硬件设计。硬件设计原理图如下: 图3.1 总体电路图 图3.3灰度QTI传感器 3.2 系统主程序流程 小本系统设计了五个个模块,分别为起点到中心点路线模块、中心点到D点、D点黑色点、黑色点到中心点、中心点返回到起始点路线模块。通过对每个功能模块的调用实现系统要求的功能。 3.3功能模块详细设计 3.3.1 起始点到中心点路线模块设计 起点到中心点,主要是从开始就前进,在前进过程中不停检测传感器传过来的信号,通 过判断小车是否偏离路线后决定是否修正。程序代码如下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; } } 3.3.2 中心点到D点路线模块设计 中心点到B点,主要是从开始就前进,在前进过程中不停检测传感器传过来的信号,通 过判断小车是否偏离路线后决定是否修正。如果检测到0000信号,则执行旋转360度程序。 设计函数centerToD()来实现此模块功能。程序代码如下: while(1){ motor_motion(1700,1300,1); modify(); if(!P21_state()&&!P22_state()&&!P23_state()&&!P24_state()){ //motor_motion(1500,1500,0); //D点停 motor_motion(1300,1300,150); //转360度 break; } } 程序流程图如下: 开始 前进 偏移? 前进 修正 是 否 全为1? 否 旋转360度 是 退出循环 图3.3中心点到D点模块流程图 3.3.3 D点到黑色点路线模块设计 D点到黑色点前进过程中也要进行检测修正,当遇到1111信号时,执行旋转180度,其代码为: while(1){ motor_motion(1700,1300,1); modify(); if(P21_state()&&P22_state()&&P23_state()&&P24_state()){ motor_motion(1300,1300,75); //转180度 break; } } 程序流程图如下: 开始 前进 偏移? 前进 修正 是 否 全为1? 否 旋转180度 是 退出循环 图3.4 D点到黑点模块流程图 3.3.4 白色点到中心点模块设计 白色点到中心点循迹过程中,不断地通过传感器检测信号,进行路线修正。当第一次检测到1111信号时,这表示已经到达中心点。采用的函数和刚开始去中心点的一样,模块程序代码如下: while(1){ motor_motion(1700,1300,1); modify(); if(P21_state()&&P22_state()&&P23_state()&&P24_state()){ //motor_motion(1500,1500,0); //回到中心点停 motor_motion(1700,1500,18); //向左转45度 break; } } 程序流程图如下: 开始 前进 偏移? 前进 修正 是 否 全为1? 否 左旋转45度 是 退出循环 图3.5黑点到中心点模块流程图 3.3.5 中心点到起始点路线模块设计 while(1){ motor_motion(1700,1300,1); modify(); if(P21_state()&&P22_state()&&P23_state()&&P24_state()){ motor_motion(1500,1500,0); //回到起始点 break; } } 程序流程图如下: 开始 前进 偏移? 前进 修正 是 否 全为1? 否 停止 是 退出循环 图3.6中心点到D点出发点模块流程图 第4章 系统调试与操作说明 4.1 系统调试 4.1.1 直线调试 主要是判断小车是否能沿着黑线向前走,方法:让程序只有函数modify(),main()函数中只有motor_motion(1700,1300,1)这条语句;并烧写到小车中,把小车放在一条黑线上,看它是否能一直在黑线上前进,若不能,再qti是否连接正确,直至小车能一直走在直线上。 4.1.2 达到黑色终点点调试 主要判断小车能否到黑色终点,并原地旋转180度,方法:将自己模块程序烧写到小车中,放在黑点上面,观察小车能否到黑色终点旋转前进到中心点并并原地旋转180度,注意看其角度是否正常。 4.2 调试中遇到的问题 调试的时候,是在黑色终点处的时候,旋转度数不足。多次调试后为motor_motion(1300,1300,75)。 4.3 操作说明 在KeilC51中写好的程序进行编译生成.hex文件,然后通过ISP下载线和progisp软件将已生成的.hex文件烧写到单片机中。当烧写成功后,拔掉下载线,然后在已设定好的路径上,摆正小车的位置,打开小车上的开关。观察小车是否按照预定的路径进行行驶。 第5章 总结和体会 整个过程中,从需求分析到设计、编码、测试,我都力求规范化和文档化,努力让自己以前学的知识运用到本系统的开发中,尽量保证整个系统的开发进度和质量,顺利完成这次的课程设计。  不过,在实验过程中,好多知识都是随学随用,就增加了很多不必要的麻烦。虽说这些都会消耗系统开发的时间,但在同学以及自己的不断努力下,不怕麻烦,不怕重复,当克服了这些问题之后,我会感觉到自己的知识在一点一滴地积累,不知不觉中增加。   我相信,只要肯钻研,只要挤时间,一切自己想要的知识都可以掌握。 通过本次课程设计,我对小车循迹系统经典问题有了进一步的了解,尤其是在软件与硬件的结合方面有了新的认识。在这次课程设计中,由于没有掌握好进程同步中的一些关键知识,导致在实际操作中遇到了很多问题,比如说对单片机借口的不熟悉。此次课程设计使我明白,在程序设计中,我们需要有一个清晰的整体结构,然后针对每个模块逐步实现其功能,在设计中也需要有严谨和认真的态度,才会更好的完成一项任务。 第6章 参考文献 [1] 尹志宇、郭晴,单片机入门,北京:清华大学出版社,2011.07 [2]黄维通、王晓英,万能的51单片机 ,北京:清华大学出版社,2011.01 [3] 庞娅娟、房大伟51单片机简明教程,北京:人民邮电出版社,2009.10 [4]王小科、王军、赵会东,单片机开发案例全程实录(第二版),北京:清华大学出版社2011.01 附录: #include"reg52.h" #include"delay.h" #include"qti.h" #include"motion.h" #include"Global.h" void 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,1300,18); //右转45度 break; } } while(1){ motor_motion(1700,1300,1); modify(); if(!P21_state()&&!P22_state()&&!P23_state()&&!P24_state()){ 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(1300,1300,75); //转180度 break; } } while(1){ motor_motion(1700,1300,1); modify(); if(P21_state()&&P22_state()&&P23_state()&&P24_state()){ motor_motion(1700,1500,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); //回到起始点 break; } } } 照片: 设计者: 万志雄 日 期:2014年6月5 日 目 录 第一章 项目摘要 3 1.1项目基本情况 3 1.2建设目标 3 1.3建设内容及规模 4 1.4产品及去向 4 1.5效益分析 4 第二章 项目建设的可行性和必要性 5 2.1建设的必要性 5 2.2建设的可行性 5 2.3编制依据 6 2.4编制原则 9 第三章 项目建设的基础条件 9 3.1建设单位的基本情况 9 3.2项目的原料供应情况 10 3.3地址选择分析 10 第四章 产品 11 4.1沼气 11 4.2 沼气产量确定 12 4.3有机肥 13 4.4产品去向 13 第五章 沼气工程工艺设计 14 5.1工艺参数 14 5.2处理工艺选择 14 5.3工艺流程的组成 15 5.4厌氧处理工艺选择与比较 15 5.5沼气存储和净化工艺 16 5.6工艺流程 18 5.7沼气输配设施 19 5.8沼气计量设施 19 第六章 总体设计 19 6.1站内总体设计 19 6.2站外配套设计 19 第七章 土建设计 20 7.1建筑设计 20 7.2结构设计 20 第八章 电气设计 21 8.1设计依据 21 8.2设计规范 22 8.3 设计说明 22 8.4控制与保护 22 8.5防雷与接地 22 8.6配电系统 23 8.7防雷与接地 23 8.8 防爆设计 23 8.9供电负荷 23 第九章 安全、节能及消防 24 9.1安全生产 24 9.2防火消防 24 9.3节能 25 第十章 主要构(建)筑物、设备的设计参数 25 10.2 厌氧消化系统工艺参数设计 27 10.3 沼气净化系统工艺参数设计 28 10.4 沼气储存系统 28 10.5 沼肥储存系统 29 10.6配套设施区 29 第十一章 投资概算和资金筹措 30 11.1编制说明 30 11.2总投资估算表 31 11.3投资概算 33 11.4资金筹措 33 第十二章 项目实施进度和投招标 34 12.1进度安排 34 12.2招(投)标依据 34 12.3招(投)标范围 34 12.4招(投)方式 35 第十三章 项目组织与管理 35 13.1管理 35 13.2劳动定员和组织培训 37 第十四章 环境保护和安全生产 37 14.1污染源和污染物 37 14.2污染治理方案 38 14.3安全生产 39 第十五章 产品市场分析与预测 41 15.1沼气 41 15.2沼气发电 41 15.3沼液和沼渣 43 15.4(生态)农产品。 43 第十六章 社会、生态及经济效益分析 43 16.1社会效益 43 16.2生态效益 44 16.3经济效益 44 第十七章 结论 46 第十八章 附件 47 5
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服