自动往返电动小汽车(附源代码)(共34页).doc

上传人:飞****2 文档编号:13561885 上传时间:2022-04-30 格式:DOC 页数:34 大小:249KB
返回 下载 相关 举报
自动往返电动小汽车(附源代码)(共34页).doc_第1页
第1页 / 共34页
自动往返电动小汽车(附源代码)(共34页).doc_第2页
第2页 / 共34页
点击查看更多>>
资源描述

《自动往返电动小汽车(附源代码)(共34页).doc》由会员分享,可在线阅读,更多相关《自动往返电动小汽车(附源代码)(共34页).doc(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上自动往返电动小汽车论文学校: 华侨大学学院: 信息科学与工程学院 组别: 自控06组组员: * * *目 录摘要.3第一章 总体设计方案.41.1系统方案选择.41. 车体的选择.42.方向控制的选择.43.路程测量方案的选择.51.2、总体方案框图.5第二章 硬件设计.52.1 黑线识别探测器.52.2、直流电机驱动电路.62.3测速模块6第三章 软件设计.73.1小车车体调整的程序设计73.2寻黑线的程序设计.73.3 系统整体流程图.8第四章 系统测试.94.1.测试方法:9第五章 总结与体会.9 摘要 单片机技术已经十分普及,在实时检测和自动控制的单片机应用系

2、统中,单片机往往是作为核心部件来使用。我们本次设计的自动往返电动小汽车,是以STC89C52单片机为控制核心,辅以传感器、控制电路、显示电路等外围器件,构成了一个车载控制系统。电动小汽车能够根据题目要求在规定的轨道上完成调速、停车、调头返回等运动形式;这辆小车还可以自动记录、显示一次往返时间、行驶距离及检测到的黑线条数,当检测到黑线时蜂鸣器发出报警,并用PWM脉宽调制技术实现降速的功能。关键字:自动往返 STC89C52单片机 PWM脉宽调制AbstractSCM technology has become very popular, in real-time detection and au

3、tomatic control of the SCM application system, the microcontroller is often as a core component to use.We present the design of the automatic motor-driven car, is STC89C52 SCM as the control core, supplemented by the sensor, the control circuit, display circuit and other peripheral devices, consisti

4、ng of a vehicle control system. Electric cars will according to the requirement of the question in terms of the orbit speed, stop, turn round and go back to complete the form of motion; the car can automatically record, display a round trip time, distance and the detected line number, when the detec

5、ted line buzzer alarm, and use PWM technology to realize speed reduction function.第一章 总体设计方案1.1系统方案选择:1. 车体的选择方案一:用玩具车改造。成本较低,且省去很多制作上的麻烦,但是由于其是已经设计好的产品,扩展性差,许多方面很难达到我们需要的要求。方案二:自己做车体。这样可以制作出完全符合我们要求的小车车体,各部分可以进行专门的设计,但是制作方面费时费力,在整个题目中将占据较多的时间和精力,成本较高。综上考虑,采用方案二,由于这只是练习,我们有多余的时间来自己设计一个比较有个性的车板,同时能根据

6、自己的需要来不断的进行改造。2.方向控制的选择: 为设计要求小车要在特定的跑道内做往返运动,并且根据不同的黑线条数来进行不同前进速度,但同时跑道两侧也是黑线,这就要求小车能够“识别”出是跑道边沿线还是中间的黑线。方案一:在小车两侧加上红外避障模块,让小车卡在特定的跑道前进,但由于黑线是在地上,红外传感必须固定在车上,这使得不仅不好固定红外传感模块,同时也不能良好测到跑道边沿线。方案二:在小车车头装四个黑线识别小模块,位置如下图。小车前进时,如果是正对中间黑线,即2、3探测器先碰见黑线,随即便关闭1、4探测器,让小车通过黑线后在开启,在这之中还可以判断2、3探测器是否同时通过黑线,并做出调整。当

7、小车是倾斜时,便是1、4探测器先碰见黑线,随即控制小车转向,使小车不跑出跑道。但当小车倾斜到垂直跑道时,小车就会跑出跑道。考虑到小车跑道宽只有0.5m,因此垂直于跑道的情况会很小,所以我们选择了第二种方案。3.路程测量方案的选择 方案一:采用U型光电开关。当光电开关导通时产生高电平,反之则产生低电平,通过对脉冲的计数获得速度信息,实现对速度的检测。U型光电开关的最大优点是测量精度高,简单方便,而且成本也很低。 方案二:采用红外探测模块,固定在直流电机上,并在车轮上装上黑白色的码盘,通过对脉冲的计数来计算路程。 1.2、总体方案框图: 单片机STC89C52 稳压 电路路面检测电路 测路 程电路

8、 驱动 电路 报警 电路 显示 电路第二章 硬件设计:2.1 黑线识别探测器黑白线检测模块采用了ST188红外反射型对管作为传感器,发射接收集成在一起,使用方便。由于采用红外光,因此受可见光影响较小,在其输出端接比较器,能得到更稳定的波形。应用电路图如下 2.2、直流电机驱动电路 直接选用L298N驱动直流电机,由单片机给它PWM波控制其驱动电机。原理图如下: 2.3测速模块测速模块采用的原理图和黑线检测的原理图一样,本次设计采用的码盘如下图。车轮每转一转产生4个脉冲,记为n,车轮每转一周的周长为35cm。那么S=35n/4 cm。第三章 软件设计3.1小车车体调整的程序设计头安装的4个黑线识

9、别传感器传来的数据来进行小车的转向控制,以保证小车能过顺利跑完全程且不超出跑道.(0表示没检测到黑线,1表示检测到黑线)1234行为0000前进0001左转1000右转0110前进0100左转(调整方向),前进0010右转(调整方向),前进1100左转0011右转xxxx后退3.2寻黑线的程序设计 采用的是扫描I/O口的方法来寻找黑线,当黑线检测模块在没检测到黑线时输出的高电平,检测到黑线时会产生一个低电平,形成一个下降沿,同时设定中断的触发方式为下降沿触发。3.3 系统整体流程图开始 延时0.5s 初始化检测中间黑线检测左右黑线否是否 再启动 减速 有黑线?是是 黑线数量加1避障处理 前进

10、停止减速转动180度黑线数=3?是 停车10s否黑线数=4?是否是否黑线数=6?黑线数=9?否是黑线数=10?否否黑线数=12?是 停车并显示时间路程第四章 系统测试4.1.测试方法: 时间的测量直接用秒表测量,距离固定值,用米尺来测量,与单片机测量出的距离进行比较,小车的中心与起点线和终点线的偏差。测量次数系统时间(s)实际时间(s)系统距离(m)实际距离 (m)时间差(s)距离差(cm)与终点偏差(cm)与起点偏差(cm)133338.007.208010236367.957.217521332327.57.213031432327.77.205011第五章 总结与体会通过参与这次电子设计

11、大赛,我们遇到了很多实际问题,这加深了对课堂知识的印象,也体会到了实际工作中的很多困难,从中领会了科学研究中所需的严谨求实态度,增强了与队友间的团结协作精神,并学会了一些基本的实践技能,使我们获益非浅。#include#include #include#define uint unsigned int#define uchar unsigned char/停车#define stop(); IN31=0; IN32=0; IN33=0; IN34=0;/后退#define back(); IN31=0; IN32=1; IN33=0; IN34=1;/前进#define go(); IN31=

12、1; IN32=0; IN33=1; IN34=0;/前进时左转#define left_g(); IN31=0; IN32=0; IN33=1; IN34=0;/前进时右转#define right_g(); IN31=1; IN32=0; IN33=0; IN34=0;/后退时左转#define left_b(); IN31=0; IN32=1; IN33=0; IN34=0;/后退时右转#define right_b(); IN31=0; IN32=0; IN33=0; IN34=1;/原地打转180#define turn_round(); IN31=1; IN32=0; IN33=0

13、; IN34=1;sfr T2MOD=0xc9;/使用定时器2时必须sbit IN31= P20;/直流电机输入端IN1sbit IN32= P21;/直流电机输入端IN2sbit IN33= P22;/直流电机输入端IN3sbit IN34= P23;/直流电机输入端IN4sbit EN12= P24;/直流电机输入端IN3sbit EN34= P25;/直流电机输入端IN4sbit rw=P31; /1602端口定义sbit en=P30; /1602端口定义sbit rs=P37; /1602端口定义sbit Test_Black_tape=P33;/小车车轮检测黑带条纹数sbit bi

14、ng=P36; /蜂鸣器sbit Test_left=P00; /黑线左检测端口定义sbit Test_Middle_left=P01; /黑线中检测端口定义sbit Test_Middle_right=P02; /黑线右检测端口定义sbit Test_right=P03; /黑线右检测端口定义uchar PWM12=47,PWM34=49;/PWM12控制EN12,PWM34控制EN34uchar PWM_i=0;/调速脉冲进行计时uchar Test_flag =0;/低四位表黑线情况,第四,三,二,一位表示左,左中,右中,右侧探测结果,1表示在黑线上uchar detector=8; /

15、4-左侧探测器,2-中间探测器,1-右侧探测器uchar left_flag=0; /首先检测到黑线时被标记为1;uchar right_flag=0; /首先检测到黑线时被标记为1;uchar count=0; / 对黑条进行计数uchar correction_flag=0;/方位矫正函数标志位,为1时可执行矫正函数uchar Control_rotation_angle=0; /控制矫正函数转角大小uchar Control_bing=0;/控制蜂鸣器位,为1时蜂鸣器按一定频率响uchar bing_i=0;/控制蜂鸣器频率uchar flag=1;/控制两边边ST188开关,flag为

16、1时开uint Timing=0;/控制两边边ST188开关,Timing(定时器中)等于300时(600ms),flag置为1uint mstcnt=0;/定时器重时间计数,每1ms加1uint time=0;/全程时间uint Time_delay=0;/延时时间(2ms)uchar Time_delay_flag=0;/启动延时计时的标志位,1时启动uint Time_interval=0;/中间两个传感器检测的黑线相差的时间(ms)uchar Time_interval_flag=0;/启动中间两个传感器检测的黑线相差的时间(ms)的标志位,1时启动uchar Control_coun

17、t=1; /为1时允许flag开始计时uchar turn_round_flag=1; /转弯标志位uint distance=0,Subsection_distance=0;/全程,每一段时间所行使的路程uint cycle_number=0;/ 记录小车车轮的圈数uchar open_interrupt0=0;/当Close_interrupt=1时,外部中断1s后打开uint interrupt0_i=0;/1s打开中断进行计时uchar stop_flag=0; /终点起点停车标志位uchar disbuf4=0; /存放路程uchar seconde3=0; /存放时间uchar n

18、umber2=0; /存放黑条数目uchar code table1=S: 0.0 m t: 0s;uchar code table2= count:00 ;/*延时子函数1us*/ void delay1us(uint us) while(us-) ; /*延时子函数1ms*/void delay1ms(uint ms) uchar j; while(ms-) for(j=0;j120;j+); void write_com(uchar com)/1602写指令 rs=0; P1=com; delay1us(4); en=1; en=0; void write_data(uchar data

19、0)/1602写数据 rs=1; P1=data0; delay1us(4); en=1; en=0; void display1( ) /显示时间路程程序 disbuf0 = (distance/1000)%10)+0x30; /路程(cm)千位 disbuf1 = (distance/100)%10)+0x30;/路程(cm)百位 disbuf2 = (distance/10)%10)+0x30; /路程(cm)十位 disbuf3 = (distance%10)+0x30;/路程(cm)个位 seconde0 = (time/100)+0x30;/时间百位 seconde1 = (tim

20、e%100)/10)+0x30; /时间十位 seconde2 = (time%10)+0x30;/时间个位 if(disbuf0=0x30) disbuf0=0x20;/如果百位为0,不显示(显示空格) if(seconde0=0x30) seconde0=0x20;/如果百位为0,不显示(显示空格) if(seconde1=0x30) seconde1=0x20;/如果百位为0,十位为0也不显示(显示空格) write_com(0x80+2); /显示路程十位delay1us(2);write_data(disbuf0); delay1us(2); write_com(0x80+3); /

21、显示路程个位delay1us(2);write_data(disbuf1);delay1us(2);write_com(0x80+5); /显示路程十分位位delay1us(2);write_data(disbuf2);delay1us(2);write_com(0x80+6); /显示路程百分位delay1us(2);write_data(disbuf3);delay1us(2);write_com(0x80+12); /显示时间百位delay1us(2);write_data(seconde0); delay1us(2); write_com(0x80+13); /显示时间十位delay1

22、us(2);write_data(seconde1);delay1us(2);write_com(0x80+14); /显示时间个位delay1us(2);write_data(seconde2);delay1us(2);void display2( ) /显示黑带函数 number0 = (count/10)+0x30; /黑带数目十位 number1 = (count%10)+0x30;/黑带数目个位 if(number0=0x30) number0=0x20;/如果十位为0,不显示(显示空格) write_com(0x80+0x40+10); /显示黑条数目十位write_data(nu

23、mber0);delay1us(2);write_com(0x80+0x40+11); /显示黑条数目个位delay1us(2);write_data(number1);/*计算路程,并把结果放入lcd1602缓冲区*/void count_distance() Subsection_distance=cycle_number*5; distance=distance+Subsection_distance; cycle_number=0; /*小车前进转弯函数*/void search_back_small( ) /后退小步,缓冲作用 back(); Time_delay_flag=1; w

24、hile(Time_delay130); /定时器2延时130x2=260ms Time_delay_flag=0; Time_delay=0; stop();void search_back( ) /后退 back(); Time_delay_flag=1; while(Time_delay200); /定时器2延时200x2=400ms Time_delay_flag=0; Time_delay=0; stop();void search_right_g_5( )/前进实现右转 right_g(); Time_delay_flag=1; while(Time_delay30); /定时器2

25、延时30x2=60ms Time_delay_flag=0; Time_delay=0; stop();void search_right_g_10( )/前进实现右转 right_g(); Time_delay_flag=1; while(Time_delay70); /定时器2延时70x2=140ms Time_delay_flag=0; Time_delay=0; stop();void search_right_g_20( )/前进实现右转 right_g(); Time_delay_flag=1; while(Time_delay100); /定时器2延时100x2=200ms Ti

26、me_delay_flag=0; Time_delay=0; stop();void search_right_g_30( )/前进实现右转 right_g(); Time_delay_flag=1; while(Time_delay130); /定时器2延时130x2=260ms Time_delay_flag=0; Time_delay=0; stop();void search_right_g_40( )/前进实现右转 right_g(); Time_delay_flag=1; while(Time_delay170); /定时器2延时170x2=340ms Time_delay_fla

27、g=0; Time_delay=0; stop();void search_right_b( )/后退实现右转 right_b(); Time_delay_flag=1; while(Time_delay105); /定时器2延时105x2=210ms Time_delay_flag=0; Time_delay=0; stop();void search_left_g_5( )/前进实现左转 left_g(); Time_delay_flag=1; while(Time_delay25); /定时器2延时25x2=50ms Time_delay_flag=0; Time_delay=0; st

28、op();void search_left_g_10( )/前进实现左转 left_g(); Time_delay_flag=1; while(Time_delay45); /定时器2延时45x2=90ms Time_delay_flag=0; Time_delay=0; stop();void search_left_g_20( )/前进实现左转 left_g(); Time_delay_flag=1; while(Time_delay70); /定时器2延时70x2=140ms Time_delay_flag=0; Time_delay=0; stop();void search_left

29、_g_30( )/前进实现左转 left_g(); Time_delay_flag=1; while(Time_delay90); /定时器2延时90x2=180ms Time_delay_flag=0; Time_delay=0; stop();void search_left_g_40( )/前进实现左转 left_g(); Time_delay_flag=1; while(Time_delay130); /定时器2延时130x2=260ms Time_delay_flag=0; Time_delay=0; stop();void search_left_b( ) /后退实现左转 left

30、_b(); Time_delay_flag=1; while(Time_delay115); /定时器2延时115x2=230ms Time_delay_flag=0; Time_delay=0; stop();void turn_round_180( ) turn_round(); Time_delay_flag=1; while(Time_delay=0)&(Time_interval2)&(Time_interval10)&(Time_interval25)&(Time_interval40)&(Time_interval60)&(Time_interval90)&(Time_inter

31、val=1;/*根据检测到的黑线情况选择前进方式*/void forward( ) switch(Test_flag) case 0x00: go(); break;case 0x01: search_back_small( ); /先后退小步 search_left_b( ); /后退实现左转 Control_bing=1; /蜂鸣器响一声 break;case 0x02: Control_bing=1; /蜂鸣器响一声 if(left_flag=0)&(right_flag=0) right_flag=1; Time_interval_flag=1; break;case 0x03: search_left_g_20( ); /后退实现左转 Control_bing=1; /蜂鸣器响一声 break;case 0x04: Control_bing=1; /蜂鸣器响一声 if(left_flag=0)&(right_flag=0) left_flag=1; Time_interval_flag=1; break;case 0x0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁