《基于单片机的简易智能电动车设计-课程设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的简易智能电动车设计-课程设计.doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于单片机的简易智能电动车设计 单片机应用技术课 程 设 计 报 告题 目: 基于单片机的简易智能电动车设计 课 程 设 计 任 务 书设计名称: 基于单片机的简易智能电动车设计 设计要求:制作一个简易的智能电动车,它能实现的功能是:从起跑线出发,沿引导线到达 B 点。在此期间检测到铺设在白纸下的薄铁片,并同时发出声光指示信息,实时存储、显示在“直道区”检测到的薄铁片数目。电动车到达 B 点以后进入“弯道区”,沿圆弧引导线到达 C 点,能够检测 C 点下正方形薄铁片,并在 C 点处停车 5 秒,停车期间发出断续的声光信息。之后继续行驶,在光源的引导下,利用超声传感器传来的信号通过障碍区进入停车
2、区并到达车库。最后,电动车完成上述任务后能够立即停车,全程行驶时间小于 90 秒。并附加其他功能 。基于单片机的智能电动车设计摘 要智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。智能电动车就是其中的一个体现。本设计以单片机作为主控芯片,控制两个步进电机的正反转,实现了小车的不同方向运动。利用红外对管做成的红外传感器来检测路面信息,完成了小车的巡线功能。避障与寻光均采用红外对管来实现。采用LCD1602液晶显示屏来显示时间与路程等信息。关键词: 巡线 避障 寻光 显示 AbstractThe new smar
3、t as a modern invention, is the future direction of development, he can follow the pattern set in advance in an environment where the operation automatically, without human management, etc. can be applied to the use of scientific exploration. Smart electric car is one of expression.The design of a m
4、icrocontroller as the master chip, the two stepper motor reversing control and achieve the cars different direction. Using Infrared Emitting Diode made of infrared sensors to detect road surface information, completed the cars transmission line functions. Obstacle avoidance and infrared search light
5、 tubes are used to achieve. By LCD1602 LCD to display information such as time and distance.Keyword: Search online Avoid object Search light Show Information目 录一 总体概括.5二 方案的论证与比较.52.1 主控芯片的选择.52.2 智能巡线设备的选择.5 2.3 显示设备的选择.62.4 声光信号设备的选择.6三 电路设计.63.1单元电路设计.63.1.1 寻光电路的设计.63.1.2 红外检测电路设计.73.1.3 金属探测电路的
6、设计.83.2 电机驱动电路设计.9四 软件设计.104.1主程序流程图.10五 调试结果.11六 参考文献.12七 附录.13八 总结与体会.23第一章 总体概括具体的系统方框图如下所示:图1 系统框图第二章 方案的论证与比较2.1 主控芯片的选择方案一:采用单个单片机作为主控芯片。由于AT89S52具有32个I/O口,能满足小车各部分对I/O口的需求,另外只用一个单片机可以很好的控制小车。方案二:采用双单片机作为主控芯片。利用两块AT89S52分别对小车的各部分进行监测和控制,虽然减轻了单个单片机的负担,提高了系统的工作效率,但是存在很多的I/O的资源浪费,并且两个单片机不容易控制,所以不
7、采用该方案。使用方案一2.2 智能巡线设备的选择 方案一:采用普通发光二极管及光敏电阻组成的发射接收方案。该方案在实际使用时,容易受到外界光源的干扰,有时甚至检测不到。主要是因为可见光的反射效果跟地表的平坦程度、地表材料的反射情况都有直接关系。虽然可采取超高亮度发光二极管降低一定的干扰,但这又增加额外的功率损耗。方案二:采用反射式红外对管,虽然易受环境的影响,识别的可靠程度不高,但是由于其结构简单,体积小巧,易于安装,完全能用多个该传感器构成高精度的控制辐射网络提高识别的可靠性、准确性,考虑到实际应用环境,因此我们采用方案二。2.3 显示设备的选择方案一:采用传统数码管作为显示设备。传统数码管
8、具有低能耗、低损耗、低压、长寿命、耐老化、防晒、防潮、防火、防高(低)温的特点;对外界环境要求低,易于维护;同时其精度比较高,精确可靠,操作简单,程序编写容易,资源占用少。本设计要求显示的内容较多,如果利用传统数码管来显示,则需要好几块数码管,这样占用单片机很多的I/O口,并且不够美观,也不易区分各块数码管显示的是什么内容。所以,该方案不被采用。方案二:采用液晶显示屏(LCD)显示时间和路程。液晶显示器具有功耗低、无辐射危险、平面直角显示以及影像稳定等,可视面积大,画面效果好,也可以显示汉字,分辨率高,抗干扰能力强,显示内容多等特点。因此,只要用一块液晶显示器就可以显示设计要求的全部内容。此外
9、,液晶显示器与单片机连接电路较简单,且占用的I/O口较少。基于以上分析,我们采用该方案,用LCD1602进行显示。2.4 声光信号设备的选择本设计要求小车在直道上检测到金属时发出声光指示信息,在发声方面,我们使用蜂鸣器代替扬声器,因为扬声器功耗比较大,体积也较大,而本设计对声音信号要求不高,所以我们使用功耗与体积都较小的蜂鸣器。在发光方面,我们选择普通的发光二极管。第三章 电路设计3.1单元电路设计3.1.1 寻光电路的设计该单元电路主要是实现小车寻光入库,考虑到光源是放在车库里,而且光源离地面有一定的高度,为了使小车能够精确驶入库中,我们采用三个光敏传感器。用金属支架将三个光敏传感器固定在车
10、的中间部分,并使光敏传感器尽可能与光源保持水平,这三个传感器组成一个120度的扇形,相邻两个之间的角度为60度。其中一路如图所示:图2 寻光电路图其他两个电路与此电路相同。接收管未接收到光源发出的红外光时,接收管不导通,正向输入的电压大于基准电压,通过电压比较器进行比较输出高电平,接收管接收到光源发出的红外光后,接收管导通,正向输入的电压将会小于基准电压,通过电压比较器进行比较输出低电平。单片机可直接对接收到的信号进行判断是否检测到光源,并通过对检测到的信号进行处理来决定小车的运动方向。3.1.2 红外检测电路设计该设计采用红外对管构成的红外传感器,具体电路如图所示:图3 红外对管电路我们在小
11、车的前端底部安装三对相同的红外对管,用来检测地面信号,每个红外对管都有一个发射管和一个接收管,发射管发射红外线到地面,如果遇到黑线则光信号会被吸收,否则会被反射回来。检测到黑线接收管不导通,输出高电平,否则输出低电平。单片机根据接收到的高低电平来决定小车如何行驶。另外在小车的正前端安装一对红外对管,用来检测前方是否有障碍物。探测原理与检测地面的原理相同,当小车前端的红外对管发射出的红外光线被反射回来时,说明前方有障碍物,此时小车会进行相应的反应。3.1.3 金属探测电路的设计此部分电路的功能是检测轨道上的铝钱币,在此我们使用的金属传感器是电感接近式开关。该传感器由LC高频振荡器和放大处理电路组
12、成,利用金属物体在接近这个能产生电磁场的振荡感应头时,使物体内部产生涡流。这个涡流反作用于接近开关,使接近开关振荡能力衰减,内部电路的参数发生变化,由此识别出有无金属物体接近,进而控制开关的通或断。其工作原理图如下所示:图4 接近式开关原理图当小车遇到铝钱币时,控制开关将会发生变化,输出电压为零伏,否则输出的是1.12V。由于两者都属于低电平,在此我们再次使用电压比较器,使两种不同情况下,分别输出高低电平,并将其传给单片机。单片机根据接收到的信号判断是否有铝钱币。3.2 电机驱动电路设计本设计使用的步进电机是四项六线式,用L297和L298N驱动芯片驱动,其中一个的驱动电路如图所示(另外一个于
13、此相同):单片机AT89S52通过I/O口向L297的17和18脚发送驱动控制信号,从而控制步进电机的速度及正反转。图5 .步进电机驱动电路第四章 软件设计主程序流程图 图6第五章 调试结果5.1小车利用红外对管能够成功进行巡线、避障:小车的电机驱动脉冲在 1500 左右,小车可以在躲避障碍物时候,准确的转外实现延时并且寻光功能。:小车的电机驱动脉冲在 1500左右,是小车的性能达到最优,正在巡线转弯的车体抖动达到最小值。:小车的避障的红外对管与地面的距离在4cm以及角度在85左右,能够准确实现避障,且车体转弯达到905.2小车利用红外对管寻光进入车库:当小车驶出障碍区,加以脉冲在1800左右
14、,可以使其在寻光过程中,避免车身旋转角度过大。:小车的寻光的红外对管(车身左侧)与地面的距离在6cm以及角度在95左右,能够准确实现寻光,和车身180度旋转,倒入车库5.3小车的显示模块:小车的总路程、总时间、被检测的金属数目以及被检测金属与其实位置的距离,适时显示小车行驶的路程和时间第六章 参考文献 1 戴佳 戴卫恒. 51单片机C语言应用程序设计实例精讲M 北京:电子工业出版社2005. 2 全国大学生电子设计竞赛组委会. 全国大学生电子设计竞赛获奖作品汇编M 北京:北京理工大学出版社 2008. 3 黄智伟. 全国大学生电子设计竞赛制作实训M 北京:北京航空航天大学出版社2005. 4
15、黄智伟. 全国大学生电子设计竞赛系统设计M 北京:北京航空航天大学出版社2006. 5 赵广林. 常用电子元器件设别/检测/选用一读通M 北京:电子工业出版社2008.6 康华光. 电子技术基础 模拟部分(第五版)M 北京:高等教育出版社2004.7 AT89S51 Preliminary ,Atmlel Comporation 2001.8 AT89S52 ,Atmlel Comporation 2001.9李叶紫. MCS51 单片机应用教程M 北京:清华大学出版社2004.10张毅刚. 单片机原理及应用 M 北京:高等教育出版社2004.第七章 附录程序:#includexiaoche.
16、h#includelcd1602.h/unsigned int s=10;/unsignedint s2,i2=1,j2=1,k2=1;unsigned int jj=0;unsigned int kk=0;unsigned int d5=0;voidDelay(unsignedint t)/延时1 while(t-);void go(void)/直行cwright=1;cwleft=1;m=2; step_mode=0;void back()/后直行m=2;cwright=0;cwleft=0; step_mode=0;void tleft() /左拐/cwleft=0;/cwright=1
17、;m=0; step_mode=0;voidtleft_1(void) m=4; cwleft=0; cwright=1; step_mode=0; void tright()/右拐/cwleft=1;/cwright=0; m=1; step_mode=0;voidtright_1(void) m=5; cwleft=1; cwright=0; step_mode=0; void searchline (void) /巡线+金属探测 unsignedint s=10; unsignedint i,j,k,z;kk=1; while(1) i=s_L; j=s_M; k=s_R;z=js; s
18、=z*8+i*4+j*2+k;switch(s)case 7:shengguang();break;case 5:shengguang();break;case 2:go();shengguang();break; case 4:tright();shengguang();break; case 6:tright();shengguang();break; case 1:tleft();shengguang();break; case 3:tleft(); shengguang();break;/case 0:go();shengguang();break;case 15:case 13:ca
19、se 10:go();break; case 12:tright();break; case 14:tright();break; case 9:tleft();break; case 11:tleft(); break;case 8:go();break;if(s=0)Stop_0(5); break; /go();shengguang();/if(s=8)break;Display();/if(ii=1)a=d0;/if(ii=2)d2=a;/if(ii=3)d3=a;/if(ii=4)/Stop_0(10);/Display();/stop();shengguang();/Delay1m
20、s(1000);/break; void searchlight () unsignedint s1,i1=1,j1=1,k1=1;unsignedint s2,i2=0,j2=0,k2=0; while(1) i1=left2 ; j1=forest3; k1=right1;s1=i1*4+j1*2+k1;i2=s_L; j2=s_M; k2=s_R;s2=4*i2+2*j2+k2;switch(s1)case 7:go();break;case 5:go();break;case 2: case 4:tleft();break; case 6:tleft();break; case 1:t
21、right();break; case 3:tright(); break;/case 0:go();break; Display(); if(s1=0)break;/go();if(s2=7)break; /金属探测void shengguang()unsignedint i=0; ii+;dii=a;light=1;alrm=1;for(i=0;i0;n-) for(a=0;a1000)step_time-=200;/c+;b+;if(c=37)a+=1;c=0; voidDisplay1() Lcd_Init();Lcd_DisplayString(0,0,Time:);Lcd_Disp
22、layOneChar(7,0,s);Lcd_DisplayString(9,0,Num:);Lcd_DisplayString(0,1,D1 :);Lcd_DisplayString(7,1,cm); Lcd_DisplayOneChar(13,0,ii+0x30);Lcd_DisplayOneChar(6,0,second%10+0x30);Lcd_DisplayOneChar(5,0,second/10+0x30);Lcd_DisplayOneChar(4,1,d1/100+0x30);Lcd_DisplayOneChar(5,1,d1%100/10+0x30);Lcd_DisplayOn
23、eChar(6,1,d1%10+0x30); voidDisplay2() Lcd_Init();Lcd_DisplayString(0,0,Time:);Lcd_DisplayOneChar(7,0,s);Lcd_DisplayString(9,0,Num:);Lcd_DisplayString(0,1,D2 :);Lcd_DisplayString(7,1,cm); Lcd_DisplayOneChar(13,0,ii+0x30);Lcd_DisplayOneChar(6,0,second%10+0x30);Lcd_DisplayOneChar(5,0,second/10+0x30);Lc
24、d_DisplayOneChar(4,1,d2/100+0x30);Lcd_DisplayOneChar(5,1,d2%100/10+0x30);Lcd_DisplayOneChar(6,1,d2%10+0x30); voidDisplay3() Lcd_Init();Lcd_DisplayString(0,0,Time:);Lcd_DisplayOneChar(7,0,s);Lcd_DisplayString(9,0,Num:);Lcd_DisplayString(0,1,D3 :);Lcd_DisplayString(7,1,cm); Lcd_DisplayOneChar(13,0,ii+
25、0x30);Lcd_DisplayOneChar(6,0,second%10+0x30);Lcd_DisplayOneChar(5,0,second/10+0x30);Lcd_DisplayOneChar(4,1,d3/100+0x30);Lcd_DisplayOneChar(5,1,d3%100/10+0x30);Lcd_DisplayOneChar(6,1,d3%10+0x30); voidDisplay4() Lcd_Init();Lcd_DisplayString(0,0, Over! Thank you!); voidDisplay() /init();Lcd_DisplayOneC
26、har(13,0,ii+0x30);Lcd_DisplayOneChar(6,0,second%10+0x30);Lcd_DisplayOneChar(5,0,second/10+0x30);Lcd_DisplayOneChar(4,1,a/100+0x30);Lcd_DisplayOneChar(5,1,a%100/10+0x30);Lcd_DisplayOneChar(6,1,a%10+0x30); main()/unsignedint s2,i2=1,j2=1,k2=1;/step_intset();Lcd_Init();Lcd_DisplayString(0,0,Time:);Lcd_
27、DisplayOneChar(7,0,s);Lcd_DisplayString(9,0,Num:);Lcd_DisplayString(0,1,Dis:);Lcd_DisplayString(7,1,cm);/unsignedint s2=1,i2=1,j2=1,k2=1; init();searchline();go();Display();kk=0;while(forest);jj=1;stop();Display();Delay1ms(500);back();Display();Delay1ms(60);tleft_1();Display();Delay1ms(390); stop();
28、Display(); Delay1ms(200);go();Display();Delay1ms(2000);tright_1();Display();Delay1ms(370);go();Display();Delay1ms(1000);go();Display(); /Delay1ms(2000);/ Delay1ms(1500);while(!forest);go();Display();while(forest);/stop();Display();/Delay1ms(300);tright_1();Display();Delay1ms(360);jj=0;/go();Display(
29、);/Delay1ms(100); go();Display();while(right);jj=1;stop();Delay1ms(500);go();Display();Delay1ms(900);tleft_1();Display(); Delay1ms(390);go();Display();Delay1ms(1000);/tleft_1();Display();/Delay1ms(340);/go();Display();/Delay1ms(300);searchlight ();/go();/ i2=s_L; /j2=s_M; /k2=s_R;/s2=4*i2+2*j2+k2;/w
30、hile (s2=7);/jj=0;/stop();Display();/Delay1ms(1000); /go();Display(); /if(s2=7) / stop();Display(); Delay1ms(100); back(); Display();Delay1ms(1000); tleft_1();Display(); Delay1ms(750); back(); Display(); Delay1ms(2200); / /go();Display(); /Delay1ms(200); /stop();Display(); EA=0; Delay1ms(1000); Disp
31、lay1();Delay1ms(3000);Display2();Delay1ms(3000);Display3();Delay1ms(3000); Display4();/Delay1ms(3000);while(1); 第八章 总结与体会经过近四周左右的时间,我们终于完成了小车的制作和程序的编写。制作过程中,我们克服了许多困难,通过参考前人的经验,完成了小车主体的器件分布规划和焊接。期间出现了很多错误,但都被及时发现并纠正了。从中我们体会到前期规划的重要性,在焊之前考虑一下器件的焊接顺序和可能出现的问题,这样在焊的时候才会比较流畅,布线也比较清楚,查错也很容易。编程是整个小车制作的重点,我们通过对小车电路、比赛规则、外部环境等情况的研究,编写出了相应的程序,经过几次调试最终完成了比赛用程序。通过编写程序,我们感到AT89S52的功能的确很强大。对于这次比赛,很感谢学校和系里领导给了我们参与这次比赛的机会,也很感谢实验室的学长和指导老师给予我们的帮助,通过实际操作加深了我们对理论知识的理解和运用能力,相信我们的努力能使我们取得好的成绩。指导老师评语课程设计成绩指导老师签字
限制150内