《循迹小车的设计毕业论文.docx》由会员分享,可在线阅读,更多相关《循迹小车的设计毕业论文.docx(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、循迹小车的设计摘要 : 循迹小车的硬件平台采用带新华龙C8051F310微控制器的自制电路板,软件平台为Silicon Laboratories IDE开发环境,车模采用市场上销售的玩具遥控小车。文中介绍了循迹小车控制系统的软硬件结构和开发流程。整个系统涉及车模机械结构调整、传感器电路设计及信号处理、控制算法和策略优化等多个方面。关键词: 循迹,识别,光电管 The design of Tracking car Abstract:Tracking hardware platform used car with a new self-Hualong C8051F310 microcontroll
2、er 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 involved in the
3、 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毕业论文介绍51.2 课题介绍51.3 论文内容安排5 第二章技术方案概要说明第三章硬件设计3.1 C8051F310单片机系统设计73.2
4、检测电路的设计93.3 A/D转换电路设计143.4 电机驱动电路设计143.5总的电路图与PCB图17第四章 软件设计4.1程序设计总体思路184.2端口I/O初始化194.3小车状态定义194.4程序流程图214.5软件开发环境22第五章 结论5.1本系统存在的问题245.2本系统可行的改进措施25 参考文献26致谢27附录1 程序清单28附录2 元件列表37第一章 引言1.1毕业论文介绍毕业论文是电气信息类专业学生的必修课程,为提供大家一个自已独立动手的机会。使学生在电路及测控系统的综合分析、设计、实现以及论文撰写、课题答辩方面受到完整、规范的训练。在已修完理论课的基础上,培养理论联系实
5、际、思考、实践、创新、总结的良好素养和实际动手能力。1.2课题介绍随着控制技术及计算机技术的发展,寻迹小车系统将在未来工业生产和日常生活中扮演重要的角色。本文所述小车寻迹系统采用红外反射式光电管识别路径上的黑线,并以最短的时间完成寻迹。采用一定的算法使得小车在直道上加速行驶,在弯道又可以减速转弯。为了使小车快速、平稳地行驶,系统必须把路径识别、相应的转向电机控制以及直流驱动电机控制准确地结合在一起。自动寻轨小车的工作原理是以单片机为控制核心的一阶闭环控制系统。由于本次采用的前端传感器具有识别黑、白颜色的能力。因此,由前端光电传感器,单片机和驱动单元共同作用,保证小车能够在预先设定的轨迹上行驶。
6、1.3论文内容安排本论文的正文分为四个部分。第一部分是对整个系统实现方法的一个概要说明,主要内容是对整个技术方案的概述;第二部分是对系统机械结构的说明,主要介绍系PCB板的固定和安装;第三部分是对硬件电路设计的说明,主要介绍系统传感器的设计及其他硬件电路的设计原理、创新点和实现过程等;第四部分是对系统软件设计部分的说明,主要内容是智能模型车设计中主要用到的控制理论、算法说明及代码设计介绍等。第二章技术方案概要说明本模型车的制作的主要思路是利用光电管RPR220来判别前方的跑道轨迹,并将信息采集到C8051F310单片机中。在C8051F310单片机中利用一定的算法来控制模型车的运行状态。模型车
7、的控制系统包括电源管理模块、路径识别模块、A/D转换电路、电机驱动模块及方向电机控制模块等。在整个系统中,由电源管理模块实现对其他各模块的电源管理。其中,对单片机提供3.3V电压,光电管、电机等其他电路提供5V电压。本模型车是由后轮驱动的,路径识别模块则采用光电管传感器寻迹方案。即路径识别电路由5个光电管RPR220组成。由于赛道中存在轨迹指示黑线,落在黑线区域内的光电接收管接收到反射的光线的强度与白色的赛道不同,进而在光电接收管两端产生不同的电压值,由此判断行车的方向。路径识别模块会将当前采集到的一组电压值传递给A/D转换电路,转化后的数字信号再送给单片机,单片机采用一定的算法对方向及驱动电
8、机进行控制。以上即是技术方案的概要说明。 第三章硬件设计本方案的电路设计采用模块化的设计思想。包括单片机电路、电机驱动电路、A/D转换电路、传感器检测电路、电源电路。3.1 C8051F310单片机系统电路以C8051F310为核心的单片机系统的硬件电路设计主要包括以下几个部分:时钟电路、电源电路、复位电路及BDM接口。其中各个部分的功能如下:1、时钟电路给单片机提供一个外接的11.0952MHz的石英晶振。2、电源电路主要是给单片机提供3.3V电源。3、复位电路在电压达到正常值时给单片机一个复位信号。4、BDM接口让用户可以通过BDM头向单片机下载和调试程序。如图3.1.1,本系统采用的是标
9、准的C8051F310系列单片机的时钟电路,通过把一个11.0952MHz的外部晶振接在单片机的外部晶振输入接口XTAL1和XTAL2上,作为单片机工作的内部总线时钟。图3.1.1 外部振荡电路C80051F310系列的单片机内部使用3.3V电压。如图3.1.2,C17、C20、C22和C26构成的滤波电路可以改善系统的电磁兼容性,降低系统对电源的高频干扰。为了显示系统已经通电,在此加入指示灯电路,电阻R27是限流电阻。图3.1.2 电源电路本系统直接采用一个0.1F的电容提供低电平复位信号,而并没有采用复杂的专用复位芯片。手动复位按钮在系统调试时作用很大。BDM接口是接BDM调试工具,向C8
10、051F310单片机下载程序用的。它直接利用单片机所提供的专用引脚即可实现。C8051F310系统电路图如图3.1.3。图3.1.3 C8051F310系统电路图3.2检测电路的设计3.2.1传感器的选择方案一:采用发光二极管发光,用光敏二极管接收。当发光二极管发出的可见光照射到黑带时,光线被黑带吸收,光敏二极管为检测到信号,呈高阻抗,使输出端为低电平。当发光二极管发出的可见光照射到地面时,它发出的可见光反射回来被光敏二极管检测到,其阻抗迅速降低,此时输出端为高电平。但是由于光敏二极管受环境中可见光影响较大,电路的稳定性很差。方案二:采用光敏电阻接受可见光检测。五组光敏电阻用于检测可见光信号。
11、当光敏电阻检测到黑带时,输出端为低电平,当光敏电阻没有检测到黑带时,输出端为高电平,信号返回给单片机,通过单片机控制前轮的转向。光敏电阻易受环境影响,稳定性也很差。方案三:利用红外线发射管发射红外线,红外线二极管进行接收。采用五组红外光敏耦合三极管发射和接受红外信号,外面可见光对接收信号的影响较小。接收的红外信号转换为电压信号经LM358进行比较,产生高电平或低电平返回给C8051F310。综上所述,本设计采用反射型光电传感器,型号为RPR220,RPR220型反射型光电传感器技术指标如下:图3.2.1 RPR220元件封装图3.2.2检测电路的设计方案原图如图3.2.2所示:图3.2.2 检
12、测电路检测电路PCB板如图3.2.3所示:图3.2.3 检测电路PCB板3.3 A/D转换电路设计由于通过RPR220采集回来的是模拟信号,而单片机只能识别数字信号,所以需要设计一个A/D转换电路,转换电路是利用LM358进行电压比较,由滑动变阻器R67分压得到一个基准电压,当采集回来的电压大于基准电压时,A/D电路输出高电平;当电压低于基准电压时,A/D输出低电平。于是就将模拟信号转化成为数字信号,供单片机使用。A/D转化电路如图3.3.1所示:图3.3.1A/D转换电路3.4电机驱动电路设计3.4.1电机的选择可以作为循迹小车驱动单元的电机有如下两种:(1)采用步进电机。步进电机的一个显著
13、特点就是具有快速启停能力,如果负荷不超过步进电机所能提供的动态转矩值,就能够立即使步进电机启动或反转。另一个显著特点是转换精度高,正转反转控制灵活。(2)采用普通直流电机。直流电动机具有优良的调速特性,调速平滑、方便,调整范围广;过载能力强,能承受频繁的冲击负载,可实现频繁的无级快速启动、制动和反转;能满足各种不同的特殊运行要求。由于车模是用购买的遥控小车改装而成,故方向电机与驱动电机都是原装车模的,没有予以改动,并且二者都是直流电机。对于电机的驱动电路,采用的是由分立元件搭成的H桥电路构成。3.4.2电机驱动电路的设计方案循迹小车需要尽可能快的沿着轨迹跑,有了好的算法之后,需要有驱动电路对电
14、机进行控制。本系统使用的电机驱动板为一个由分立元件制作的直流电动机可逆双极型桥式驱动器,其功率元件由两只N沟道功率MOSFET管和两只P沟道功率MOSFET管组成。我们选用了芯片SI9928,它是将一只N沟道功率MOSFET管和一只P沟道功率MOSFET管封装在了一起,体积小,并且电流大。通过设置C8051F310输出的PWM波的占空比可以达到控制电机转速的效果。驱动电路有三个输入端口,一个PWM口和两个控制正反转端口L、R原理图如图3.4.1所示:图3.4.1 电机驱动电路3.4.3驱动电路电源电机驱动电路需要的是5V电源,。如图3.4.2,C18、C21、C23和C27构成的滤波电路可以改
15、善系统的电磁兼容性,降低系统对电源的高频干扰。为了显示系统已经通电,在此加入指示灯电路,电阻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进行判断小车所处的状态,通过控制H桥驱动芯片来控制前进电机加速或减速及方向电机进行相应的动作。小车的速度通过PWM控制进行调速,小车转弯的力度也通过PWM控制。即由单片机的P0.0和P0.1输出一系列频率固定的方波,再通过功率放大来驱动电机,在
16、单片机中编程改变输出方波的占空比就可以改变加到电机上的平均电压,从而可以改变电机的转速及转向。4.2 端口I/O 初始化端口I/O 初始化包括以下步骤:1用端口输入方式寄存器(PnMDIN)选择所有端口引脚的输入方式(模拟或数字)。2用端口输出方式寄存器(PnMDOUT)选择所有端口引脚的输出方式(漏极开路或推挽)。3用端口跳过寄存器(PnSKIP)选择应被交叉开关跳过的那些引脚。4将引脚分配给要使用的外设。5使能交叉开关(XBARE =1)。所有端口引脚都必须被配置为模拟或数字输入。此外,应将交叉开关配置为跳过所有被用作模拟输入的引脚(通过将PnSKIP 寄存器中的对应位置1来实现)。I/O
17、 引脚的输出驱动器特性由端口输出方式寄存器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右一、右二传感器同时检测到黑线存在,当小车处于此状态时,小车向右转,速度稍快。4、状态3只有右二传感器检测到黑线存在,当小车处于此状态时,小车微向右转,速度较快。
19、5、状态4 黑线略靠右右二、中心传感器同时检测到黑线存在,当小车处于此状态时,小车微微向右转,速度较快。6、状态5 黑线处于正中只有中心传感器检测到黑线存在,当小车处于此状态时,小车方向不变,如果小车没有达到最大速度则逐渐加速到最大速度。7、状态6 黑线略靠左左二、中心传感器同时检测到黑线存在,当小车处于此状态时,小车微微向左转,速度较快。8、状态7只有左二传感器检测到黑线存在,当小车处于此状态时,小车微向左转,速度较快。9、状态8左一、左二传感器同时检测到黑线存在,当小车处于此状态时,小车向左转,速度稍快。10、状态9 黑线处于最左只有左一传感器检测到黑线存在,当小车处于此状态时,小车大力度
20、左转,速度最小。11、状态10没有传感器检测到黑线存在,并且上一个状态是状态2,当小车处于此状态时,小车保持低速,大力度向右转。12、状态11没有传感器检测到黑线存在,并且上一个状态是状态9,当小车处于此状态时,小车保持低速,大力度向左转。13、小车启动时不在黑线上没有传感器检测到黑线存在,当小车处于此状态时,小车保持慢速,向右一直转圈寻找黑线。定义此状态的意义在于,小车可以不必放到黑线上才能寻迹,只要黑线在小车的周围,小车就可以先寻找到黑线,之后沿着黑线运动。4.4程序流程图上电开始程序初始化开始循环获取小车状态13种情况执行各状态的控制子程序图4.4.1传感器排列方式4.5 软件开发环境此
21、次学年论文的软件开发平台为新华龙公司的Silicon Laboratories IDE开发软件。其使用界面如图4.5.1 所示:图4.5.1下载调试界面Silicon Laboratories IDE 的功能非常强大,可用于所有新华龙单片机、嵌入式系统的开发。用户可在新建工程时将芯片的类库添加到集成环境开发环境中,工程文件一旦生成就是一个最小系统,用户无需再进行繁琐的初始化操作,就能直接在工程中添加所需的程序代码。图4.5.2下载用BDM在源程序编译、连接通过后,就可以进行程序下载了。下载前,先将单片机上已经存在的程序擦除,然后点击Load,将bin 文件夹下生成的后缀为.abs的文件打开,就
22、可以完成下载。第五章 结论5.1 本系统存在的问题尽管我们作了很大的努力,但是由于基础知识不扎实以及缺乏经验等原因,本系统仍然存在着一些问题,主要有以下几点:1、车模的检测宽度和前瞻距离都比预期减小,受到了限制。2、没有速度检测装置,故不能有效地控制车速。2、车模的检测装置及主板的机械安装部分为人工完成,没有使用精密的检测仪器辅助安装,安装精度受限。3、系统控制算法采用查询式算法。可以考虑更加高级的控制算法以改进系统性能。对于一些先进的控制方法没有做到深入的研究。4、对C8051F310单片机了解的不够,没有充分利用好单片机的资源。5.2 本系统可行的改进措施在条件允许的情况下,本系统可以做以
23、下几个方面的改进:1、研究更加可靠的激光管传感器电路,使路径识别模块的前瞻距离尽可能地增大。2、增加速度检测装置,提高速度控制精度。3、利用C8051F310单片机的控制指令集,开发出更优的控制策略。4、设计更加可靠的硬件电路。参考文献1 卓晴,黄开胜,邵贝贝,学做智能车M.北京:北京航天航空出版社,20072 童诗白模拟电子技术基础北京:高等教育出版社,20013 谭浩强C程序设计北京:清华大学出版社,20014 徐士良,使用数据结构,北京:清华大学出版社,2000年1月第1版 5 阎石,数字电子技术基础(第五版),北京:清华大学出版社,2006年5月第5版 6 于锡存、曹国华,单片机原理与
24、接口技术(第二版),陕西:西安电子科技大学出版社,2000年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/*驱动端口及指示灯*/sbit front=P20; /倒车sbit back=P21; /前进sbit left=P23; /左转sbit right=P22; /右转sbit en
25、gine=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_1=P34; /左一传感器/*定义变量*/int q;int PWM;uchar car_state;uchar car_last_state;unsigned int port_1;unsigned int
26、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_Init(void); /端口初始化void PWM_Init(void); /PWM初始化void Internal_Crystal(void); /设置内部时钟void delay_ms(unsigned int t);/延时t秒void
27、get_car_state(); /获取小车状态void port(void);/void switch(car_state); /控制算法/*函数名:void main (void)*/*功能描述:主函数*/void main (void) Internal_Crystal(); /设置内部时钟 PORT_Init(); /端口初始化 while (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
28、=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=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;P
29、WM=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: 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;
30、 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初始化 /*子函数具体实现*/*函数名:void get_car_state()*/*功能描述:获取小车状态*/ void get_car_state() port_1=P2&0xf0;port_2=port_11;port_3=P3&0x10;port_4=port_33;
31、car_state=port_2|port_4;/获取小车状态函数函数/函数名:void PORT_Init(void)*/功能描述:端口初始化*/void PORT_Init(void) P0MDIN=0xff; P0MDOUT=0xff; /P0SKIP = 0x01; /P1MDIN=0xff; /P1MDOUT=0xff; /P1SKIP = 0x01; P2MDIN=0xff; P2MDOUT=0x0f; P2SKIP = 0xf0;P3MDIN=0xff;/P3MDOUT=0x07; /函数名:void PWM_Init(void)*/功能描述:PWM 初始化*/void PWM_
32、Init(void) XBR0 = 0x01; / 使CEX0输出到P0.0XBR1 = 0x042; / 允许交叉开关和弱上拉/* 配置PCA*/PCA0MD = 0x02; / PCA时基= SYSCLK / 4PCA0CPL0 = 200; / 初始化PCA的PWM值PCA0CPH0 = 200; PCA0CPL1 = PWM; / 初始化PCA的PWM值PCA0CPH1 = PWM; PCA0CPM0 = 0x42;PCA0CPM1 = 0x42;PCA0CN = 0x40; / 允许PCA计数器/函数名:void Internal_Crystal(void)*/功能描述:设计内部时钟
33、*/void Internal_Crystal(void) OSCICN=0x83;CLKSEL=0x00; /*函数名:void steer(void)*/*功能描述:测试程序*/void steer(void) engine=0;left=1;right=0;delay_ms(1000);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;P
34、WM0;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.1uF14个1K4个1uF1个 2K14个10K12个10M1个 22pF2个11.0952MHZ1个 1003个1202个 4705个805010个 AZ1804-5.01个 C8051F3101个 CON21个 CON71个 CON81个 HEADER 5X21个 LED6个LM3583个LM1117_11个 MOTO2个SI99284个 SWP-B11个 T22uF2个T47uF2个