《毕业论文循迹小车.docx》由会员分享,可在线阅读,更多相关《毕业论文循迹小车.docx(21页珍藏版)》请在三一办公上搜索。
1、毕业论文循迹小车循迹小车的设计 摘要 : 循迹小车的硬件平台采用带新华龙C8051F310微控制器的自制电路板,软件平台为Silicon Laboratories IDE开发环境,车模采用市场上销售的玩具遥控小车。文中介绍了循迹小车控制系统的软硬件结构和开发流程。整个系统涉及车模机械结构调整、传感器电路设计及信号处理、控制算法和策略优化等多个方面。 关键词: 循迹,识别,光电管 The design of Tracking car Abstract: Tracking hardware platform used car with a new self-Hualong C8051F310 mi
2、crocontroller circuit board, the software platform for the Silicon Laboratories IDE development environment, scale models on the market using remote control car toys. This paper introduces the trolley Traction control system hardware and software architecture and development process. Model cars invo
3、lved in the entire system to adjust the mechanical structure, sensors, circuit design and signal processing, control algorithms and strategies for various aspects of optimization. Keywords: Tracking, identification, optical tube 目 录 第一章 引言 1.1毕业论文介绍5 1.2 课题介绍5 1.3 论文内容安排5 第二章 技术方案概要说明 第三章 硬件设计 3.1 C
4、8051F310单片机系统设计7 3.2 检测电路的设计9 3.3 A/D转换电路设计14 3.4 电机驱动电路设计14 3.5总的电路图与PCB图17 第四章 软件设计 4.1程序设计总体思路18 4.2端口I/O初始化19 4.3小车状态定义19 4.4程序流程图21 4.5软件开发环境22 第五章 结论 5.1本系统存在的问题24 5.2本系统可行的改进措施25 参考文献26 致谢27 附录1 程序清单28 附录2 元件列表37 第一章 引言 1.1毕业论文介绍 毕业论文是电气信息类专业学生的必修课程,为提供大家一个自已独立动手的机会。使学生在电路及测控系统的综合分析、设计、实现以及论文
5、撰写、课题答辩方面受到完整、规范的训练。在已修完理论课的基础上,培养理论联系实际、思考、实践、创新、总结的良好素养和实际动手能力。 1.2课题介绍 随着控制技术及计算机技术的发展,寻迹小车系统将在未来工业生产和日常生活中扮演重要的角色。本文所述小车寻迹系统采用红外反射式光电管识别路径上的黑线,并以最短的时间完成寻迹。采用一定的算法使得小车在直道上加速行驶,在弯道又可以减速转弯。为了使小车快速、平稳地行驶,系统必须把路径识别、相应的转向电机控制以及直流驱动电机控制准确地结合在一起。 自动寻轨小车的工作原理是以单片机为控制核心的一阶闭环控制系统。由于本次采用的前端传感器具有识别黑、白颜色的能力。因
6、此,由前端光电传感器,单片机和驱动单元共同作用,保证小车能够在预先设定的轨迹上行驶。 1.3论文内容安排 本论文的正文分为四个部分。第一部分是对整个系统实现方法的一个概要说明,主要内容是对整个技术方案的概述;第二部分是对系统机械结构的说明,主要介绍系PCB板的固定和安装;第三部分是对硬件电路设计的说明,主要介绍系统传感器的设计及其他硬件电路的设计原理、创新点和实现过程等;第四部分是对系统软件设计部分的说明,主要内容是智能模型车设计中主要用到的控制理论、算法说明及代码设计介绍等。 第二章 技术方案概要说明 本模型车的制作的主要思路是利用光电管RPR220来判别前方的跑道轨迹,并将信息采集到C80
7、51F310单片机中。在C8051F310单片机中利用一定的算法来控制模型车的运行状态。 模型车的控制系统包括电源管理模块、路径识别模块、A/D转换电路、电机驱动模块及方向电机控制模块等。在整个系统中,由电源管理模块实现对其他各模块的电源管理。其中,对单片机提供3.3V电压,光电管、电机等其他电路提供5V电压。 本模型车是由后轮驱动的,路径识别模块则采用光电管传感器寻迹方案。即路径识别电路由5个光电管RPR220组成。由于赛道中存在轨迹指示黑线,落在黑线区域内的光电接收管接收到反射的光线的强度与白色的赛道不同,进而在光电接收管两端产生不同的电压值,由此判断行车的方向。路径识别模块会将当前采集到
8、的一组电压值传递给A/D转换电路,转化后的数字信号再送给单片机,单片机采用一定的算法对方向及驱动电机进行控制。以上即是技术方案的概要说明。 第三章 硬件设计 本方案的电路设计采用模块化的设计思想。包括单片机电路、电机驱动电路、A/D转换电路、传感器检测电路、电源电路。 3.1 C8051F310单片机系统电路 以C8051F310为核心的单片机系统的硬件电路设计主要包括以下几个部分:时钟电路、电源电路、复位电路及BDM接口。其中各个部分的功能如下: 1、时钟电路给单片机提供一个外接的11.0952MHz的石英晶振。 2、电源电路主要是给单片机提供3.3V电源。 3、复位电路在电压达到正常值时给
9、单片机一个复位信号。 4、BDM接口让用户可以通过BDM头向单片机下载和调试程序。 如图3.1.1,本系统采用的是标准的C8051F310系列单片机的时钟电路,通过把一个11.0952MHz的外部晶振接在单片机的外部晶振输入接口XTAL1和XTAL2上,作为单片机工作的内部总线时钟。 图3.1.1 外部振荡电路 C80051F310系列的单片机内部使用3.3V电压。如图3.1.2,C17、C20、C22和C26构成的滤波电路可以改善系统的电磁兼容性,降低系统对电源的高频干扰。为了显示系统已经通电,在此加入指示灯电路,电阻R27是限流电阻。 图3.1.2 电源电路 本系统直接采用一个0.1F的电
10、容提供低电平复位信号,而并没有采用复杂的专用复位芯片。手动复位按钮在系统调试时作用很大。 BDM接口是接BDM调试工具,向C8051F310单片机下载程序用的。它直接利用单片机所提供的专用引脚即可实现。 C8051F310系统电路图如图3.1.3。 图3.1.3 C8051F310系统电路图 3.2检测电路的设计 3.2.1传感器的选择 方案一:采用发光二极管发光,用光敏二极管接收。 当发光二极管发出的可见光照射到黑带时,光线被黑带吸收,光敏二极管为检测到信号,呈高阻抗,使输出端为低电平。当发光二极管发出的可见光照射到地面时,它发出的可见光反射回来被光敏二极管检测到,其阻抗迅速降低,此时输出端
11、为高电平。但是由于光敏二极管受环境中可见光影响较大,电路的稳定性很差。 方案二:采用光敏电阻接受可见光检测。 五组光敏电阻用于检测可见光信号。当光敏电阻检测到黑带时,输出端为低电平,当光敏电阻没有检测到黑带时,输出端为高电平,信号返回给单片机,通过单片机控制前轮的转向。光敏电阻易受环境影响,稳定性也很差。 方案三:利用红外线发射管发射红外线,红外线二极管进行接收。 采用五组红外光敏耦合三极管发射和接受红外信号,外面可见光对接收信号的影响较小。接收的红外信号转换为电压信号经LM358进行比较,产生高电平或低电平返回给C8051F310。 综上所述,本设计采用反射型光电传感器,型号为RPR220,
12、RPR220型反射型光电传感器技术指标如下: 图3.2.1 RPR220元件封装图 3.2.2检测电路的设计方案 原图如图3.2.2所示: 图3.2.2 检测电路 检测电路PCB板如图3.2.3所示: 图3.2.3 检测电路PCB板 3.3 A/D转换电路设计 由于通过RPR220采集回来的是模拟信号,而单片机只能识别数字信号,所以需要设计一个A/D转换电路,转换电路是利用LM358进行电压比较,由滑动变阻器R67分压得到一个基准电压,当采集回来的电压大于基准电压时,A/D电路输出高电平;当电压低于基准电压时,A/D输出低电平。于是就将模拟信号转化成为数字信号,供单片机使用。A/D转化电路如图
13、3.3.1所示: 图3.3.1A/D转换电路 3.4电机驱动电路设计 3.4.1电机的选择 可以作为循迹小车驱动单元的电机有如下两种: (1)采用步进电机。步进电机的一个显著特点就是具有快速启停能力,如果负荷不超过步进电机所能提供的动态转矩值,就能够立即使步进电机启动或反转。另一个显著特点是转换精度高,正转反转控制灵活。 (2)采用普通直流电机。直流电动机具有优良的调速特性,调速平滑、方便,调整范围广;过载能力强,能承受频繁的冲击负载,可实现频繁的无级快速启动、制动和反转;能满足各种不同的特殊运行要求。 由于车模是用购买的遥控小车改装而成,故方向电机与驱动电机都是原装车模的,没有予以改动,并且
14、二者都是直流电机。对于电机的驱动电路,采用的是由分立元件搭成的H桥电路构成。 3.4.2电机驱动电路的设计方案 循迹小车需要尽可能快的沿着轨迹跑,有了好的算法之后,需要有驱动电路对电机进行控制。本系统使用的电机驱动板为一个由分立元件制作的直流电动机可逆双极型桥式驱动器,其功率元件由两只N沟道功率MOSFET管和两只P沟道功率MOSFET管组成。 我们选用了芯片SI9928,它是将一只N沟道功率MOSFET管和一只P沟道功率MOSFET管封装在了一起,体积小,并且电流大。通过设置C8051F310输出的PWM波的占空比可以达到控制电机转速的效果。 驱动电路有三个输入端口,一个PWM口和两个控制正
15、反转端口L、R原理图如图3.4.1所示: 图3.4.1 电机驱动电路 3.4.3驱动电路电源 电机驱动电路需要的是5V电源,。如图3.4.2,C18、C21、C23和C27构成的滤波电路可以改善系统的电磁兼容性,降低系统对电源的高频干扰。为了显示系统已经通电,在此加入指示灯电路,电阻R28是限流电阻。 如图4.4.3.1所示 图3.4.2所示 3.5总的电路图与PCB图 3.5.1 总的原理图 图3.5. 1总的原理图 3.5.2 总的PCB 图3.5. 2总的PCB 第四章 软件设计 4.1程序设计总体思路 小车通过光电传感器获得路径信息,通过C8051F310进行判断小车所处的状态,通过控
16、制H桥驱动芯片来控制前进电机加速或减速及方向电机进行相应的动作。小车的速度通过PWM控制进行调速,小车转弯的力度也通过PWM控制。即由单片机的P0.0和P0.1输出一系列频率固定的方波,再通过功率放大来驱动电机,在单片机中编程改变输出方波的占空比就可以改变加到电机上的平均电压,从而可以改变电机的转速及转向。 4.2 端口I/O 初始化 端口I/O 初始化包括以下步骤: 1用端口输入方式寄存器选择所有端口引脚的输入方式。 2用端口输出方式寄存器选择所有端口引脚的输出方式。 3用端口跳过寄存器选择应被交叉开关跳过的那些引脚。 4将引脚分配给要使用的外设。 5使能交叉开关。 所有端口引脚都必须被配置
17、为模拟或数字输入。此外,应将交叉开关配置为跳过所有被用作模拟输入的引脚。I/O 引脚的输出驱动器特性由端口输出方式寄存器PnMDOUT 中的对应位决定,每个端口输出驱动器都可被配置为漏极开路或推挽方式。 4.3小车状态定义 小车通过五组传感器获得信息,五组传感器依次排成一条直线,按所处相对位置分别命名为左1、左2、中、右2、右1,其中左2与右2为第一级方向控制传感器,左1与右1为第二级方向控制传感器,并且黑线同一边的两个传感器之间的宽度不得大于黑线的宽度。小车前进时,如果始终保持在左2与右2这两个第一级传感器之间,则当小车偏离黑线时,第一级传感器就能检测到黑线,把检测的信号送给小车的处理、控制
18、系统,控制系统发出信号对小车轨迹予以纠正。第二级方向探测器实际是第一级的后备保护,它的存在是考虑到小车由于惯性过大会依旧偏离轨道,再次对小车的运动进行纠正,从而提高了小车循迹的可靠性。 传感器的排列方式如图4.3.1所示 图4.3.1传感器排列方式 因此可将小车分为十一种状态,不同的状态下小车有不同的动作。 1、小车与黑线方向垂直状态 五组传感器都检测到黑线,当小车处于此状态时,小车左转,使得小车之后沿着黑线运动。 2、状态1 黑线处于最右 只有右一传感器检测到黑线存在,当小车处于此状态时,小车大力度右转,速度最小。 3、状态2 右一、右二传感器同时检测到黑线存在,当小车处于此状态时,小车向右
19、转,速度稍快。 4、状态3 只有右二传感器检测到黑线存在,当小车处于此状态时,小车微向右转,速度较快。 5、状态4 黑线略靠右 右二、中心传感器同时检测到黑线存在,当小车处于此状态时,小车微微向右转,速度较快。 6、状态5 黑线处于正中 只有中心传感器检测到黑线存在,当小车处于此状态时,小车方向不变,如果小车没有达到最大速度则逐渐加速到最大速度。 7、状态6 黑线略靠左 左二、中心传感器同时检测到黑线存在,当小车处于此状态时,小车微微向左转,速度较快。 8、状态7 只有左二传感器检测到黑线存在,当小车处于此状态时,小车微向左转,速度较快。 9、状态8 左一、左二传感器同时检测到黑线存在,当小车
20、处于此状态时,小车向左转,速度稍快。 10、状态9 黑线处于最左 只有左一传感器检测到黑线存在,当小车处于此状态时,小车大力度左转,速度最小。 11、状态10 没有传感器检测到黑线存在,并且上一个状态是状态2,当小车处于此状态时,小车保持低速,大力度向右转。 12、状态11 没有传感器检测到黑线存在,并且上一个状态是状态9,当小车处于此状态时,小车保持低速,大力度向左转。 13、小车启动时不在黑线上 没有传感器检测到黑线存在,当小车处于此状态时,小车保持慢速,向右一直转圈寻找黑线。定义此状态的意义在于,小车可以不必放到黑线上才能寻迹,只要黑线在小车的周围,小车就可以先寻找到黑线,之后沿着黑线运
21、动。 4.4程序流程图 上电开始 程序初始化 开始循环 获取小车状态13种情况 执行各状态的 控制子程序 图4.4.1传感器排列方式 4.5 软件开发环境 此次学年论文的软件开发平台为新华龙公司的Silicon Laboratories IDE开发软件。其使用界面如图4.5.1 所示: 图4.5.1下载调试界面 Silicon Laboratories IDE 的功能非常强大,可用于所有新华龙单片机、嵌入式系统的开发。用户可在新建工程时将芯片的类库添加到集成环境开发环境中,工程文件一旦生成就是一个最小系统,用户无需再进行繁琐的初始化操作,就能直接在工程中添加所需的程序代码。 图4.5.2下载用
22、BDM 在源程序编译、连接通过后,就可以进行程序下载了。下载前,先将单片机上已经存在的程序擦除,然后点击Load,将bin 文件夹下生成的后缀为.abs的文件打开,就可以完成下载。 第五章 结论 5.1 本系统存在的问题 尽管我们作了很大的努力,但是由于基础知识不扎实以及缺乏经验等原因,本系统仍然存在着一些问题,主要有以下几点: 1、车模的检测宽度和前瞻距离都比预期减小,受到了限制。 2、没有速度检测装置,故不能有效地控制车速。 2、车模的检测装置及主板的机械安装部分为人工完成,没有使用精密的检测仪器辅助安装,安装精度受限。 3、系统控制算法采用查询式算法。可以考虑更加高级的控制算法以改进系统
23、性能。对于一些先进的控制方法没有做到深入的研究。 4、对C8051F310单片机了解的不够,没有充分利用好单片机的资源。 5.2 本系统可行的改进措施 在条件允许的情况下,本系统可以做以下几个方面的改进: 1、研究更加可靠的激光管传感器电路,使路径识别模块的前瞻距离尽可能地增大。 2、增加速度检测装置,提高速度控制精度。 3、利用C8051F310单片机的控制指令集,开发出更优的控制策略。 4、设计更加可靠的硬件电路。 参考文献 1 卓晴,黄开胜,邵贝贝,学做智能车M.北京:北京航天航空出版社,2007 2 童诗白模拟电子技术基础北京:高等教育出版社,2001 3 谭浩强C程序设计北京:清华大
24、学出版社,2001 4 徐士良,使用数据结构,北京:清华大学出版社,XX年1月第1版 5 阎石,数字电子技术基础,北京:清华大学出版社,XX年5月第5版 6 于锡存、曹国华,单片机原理与接口技术,陕西:西安电子科技大学出版社,XX年7月第1版致 谢 附录1 程序清单 /* 寻迹小车 File Name: main.c Author: Inner Mongolia University Li Lei Created: 2010/6/ */ #include /C8051F31X系列头文件 #define uint unsigned int #define uchar unsigned char
25、/*驱动端口及指示灯*/ sbit front=P20; /倒车 sbit back=P21; /前进 sbit left=P23; /左转 sbit right=P22; /右转 sbit engine=P00; /舵机控制 sbit right_L=P31; /右转向灯 sbit left_L=P33; /左转向灯 sbit stop_L=P32; /刹车灯 /*传感器端口*/ sbit right_1=P24; /右一传感器 sbit right_2=P25; /右二传感器 sbit centrl=P26; /中心传感器 sbit left_2=P27; /左二传感器 sbit left
26、_1=P34; /左一传感器 /*定义变量*/ int q; int PWM; uchar car_state; uchar car_last_state; unsigned int port_1; unsigned int port_2; unsigned int port_3; unsigned int port_4; /*函数声明*/ void delay (int w); /延时 void main (void); /主函数 void steer(void); /方向电机 void start(void); /电机启动 void stop(void); /电机停止 void PORT_
27、Init(void); /端口初始化 void PWM_Init(void); /PWM初始化 void Internal_Crystal(void); /设置内部时钟 void delay_ms(unsigned int t);/延时t秒 void get_car_state; /获取小车状态 void port(void); /void switch(car_state); /控制算法 /*函数名:void main (void)*/ /*功能描述:主函数*/ void main (void) Internal_Crystal; /设置内部时钟 PORT_Init; /端口初始化 whil
28、e (1) get_car_state; switch(car_state) case 0xf0: front=1;back=0;PWM=100; left=0;right=1; right_L=0;left_L=1; car_last_state=0; break; case 0xe0: front=1;back=0;PWM=120; left=0;right=1; /engine=0; break; case 0xe8: front=1;back=0;PWM=120; engine=0;left=0;right=1; break; case 0xc8: front=1;back=0;PWM
29、=120; left=0;right=1; break; case 0xd8: front=1;back=0;PWM=120; left=1;right=1; engine=0; break; case 0x98: front=1;back=0;PWM=120; left=1;right=0; break; case 0xb8: front=1;back=0;PWM=120; left=1;right=0; break; case 0x38: front=1;back=0;PWM=120; left=1;right=0; car_last_state=1; break; case 0x78:
30、front=1;back=0;PWM=100; left=1;right=0; left_L=0;right_L=1; break; case 0x00: front=1;back=0;PWM=100; left=1;right=0; break; case 0xff: if(car_last_state=0) left=1;right=0; front=1;back=0;PWM=120; else /if(car_last_state=1) left=0;right=1; front=1;back=0;PWM=120; break; PWM_Init;/PWM初始化 /* 子函数具体实现 *
31、/ /*函数名:void get_car_state*/ /*功能描述:获取小车状态*/ void get_car_state port_1=P2&0xf0; port_2=port_11; port_3=P3&0x10; port_4=port_33; car_state=port_2|port_4; /获取小车状态函数函数 /函数名:void PORT_Init(void)*/ /功能描述:端口初始化*/ void PORT_Init(void) P0MDIN=0xff; P0MDOUT=0xff; /P0SKIP = 0x01; /P1MDIN=0xff; /P1MDOUT=0xff;
32、/P1SKIP = 0x01; P2MDIN=0xff; P2MDOUT=0x0f; P2SKIP = 0xf0; P3MDIN=0xff; /P3MDOUT=0x07; /函数名:void PWM_Init(void)*/ /功能描述:PWM 初始化*/ void PWM_Init(void) XBR0 = 0x01; / 使CEX0输出到P0.0 XBR1 = 0x042; / 允许交叉开关和弱上拉 /* 配置PCA*/ PCA0MD = 0x02; / PCA时基= SYSCLK / 4 PCA0CPL0 = 200; / 初始化PCA的PWM值 PCA0CPH0 = 200; PCA0
33、CPL1 = PWM; / 初始化PCA的PWM值 PCA0CPH1 = PWM; PCA0CPM0 = 0x42; PCA0CPM1 = 0x42; PCA0CN = 0x40; / 允许PCA计数器 /函数名:void Internal_Crystal(void)*/ /功能描述:设计内部时钟*/ void Internal_Crystal(void) OSCICN=0x83; CLKSEL=0x00; /*函数名:void steer(void)*/ /*功能描述:测试程序*/ void steer(void) engine=0; left=1; right=0; delay_ms(10
34、00); left=0; right=0; delay_ms(1000); left=0; right=1; delay_ms(1000); engine=1; left=1; right=1; /*函数名:void start(void)*/ /*功能描述:电机启动*/ void start(void) for(PWM=0;PWM0;PWM-) PWM_Init; front=1;back=0; delay_ms(10); /*函数名:void delay_ms (int w)*/ /*功能描述:延时tms*/ void delay_ms(unsigned int t) unsigned int i; while (t-) for (i=0;i125;i+) /延时函数 附录2 元件列表 元件 0.1uF 1K 1uF 2K 10K 10M 22pF 11.0952MHZ 100 120 470 8050 AZ1804-5.0 C8051F310 CON2 CON7 CON8 HEADER 5X2 LED LM358 LM1117_1 MOTO SI9928 SWP-B1 T22uF T47uF 个数 14个 4个 1个 14个 12个 1个 2个 1个 3个 2个 5个 10个 1个 1个 1个 1个 1个 1个 6个 3个 1个 2个 4个 1个 2个 2个