ImageVerifierCode 换一换
格式:DOC , 页数:45 ,大小:613.17KB ,
资源ID:828470      下载积分:20 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 微信支付   
验证码:   换一换

加入VIP,免费下载资源
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.wodocx.com/d-828470.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(智能电动往返小车设计报告.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(发送邮件至2622162128@qq.com或直接QQ联系客服),我们立即给予删除!

智能电动往返小车设计报告.doc

1、第四届智能控制设计大赛(高级组)自动往返电动小汽车设计报告 组员:李泽伟 谭海军 黄维龙自动往返电动小汽车(高级组)摘要本自动往返电动小车可以实现在一段特定赛道上往返行驶,在特定路段限速通过,并且测量行驶时间和路程的功能。设计以改装的玩具小车为基本车架,以单片机AT89S52为控制中心,利用RPR220光电对管扫描赛道上区分路段的黑线,还通过该种光电对管计算小车车轮转过圈数,由此算出小车驶过路程。另外,系统运用L298N驱动小车的直流电机,并且可以在LCD1602上显示小车往返时间和路程。关键词:自动往返小车 限速 AT89S52 RPR220 L298NAbstractThis automa

2、tic go-return toy car hold a series of functions, those are go-and-returning on a skeptical track, running in a limit speed on a certain length, and recording the distance as well as time. The design is structurally based on a re-equipped toy car. AT89S52 is used as the control center. PRP220 is use

3、d to scan the black lines and to count how many rounds the wheel runs, by which way we get the distance the toy car passes. Whats more, L298N is used to motivate the DC electric machinery. The system puts the time and the distance on LCD1602.Keyword: automatic go-return toy car, limit speed, AT89S52

4、, RPR220,L298N目录1、设计任务 31.1基本要求 31.2发挥部分 32、方案论证与选择 32.1、系统总体框图 32.2、各模块硬件选择 42.2.1、控制模块 42.2.2、外部传感器模块 42.2.3、电机及其驱动模块 52.2.4、电源模块 52.2.5、按键模块 52.2.6、显示模块 53、系统硬件原理与实现 53.1、系统总体电路图 53.2、系统各模块设计介绍 63.2.1、单片机控制模块 63.2.2、外部传感器模块 73.2.3、电机驱动模块 73.2.4、电源模块 83.2.5、按键模块 83.2.6、LCD液晶显示模块 94、系统软件框图 95、设计数据测

5、量 11参考文献 121、设计任务设计并制作一个能自动往返于起跑线与终点线间的小汽车。允许用玩具汽车改装,但不能用人工遥控(包括有线和无线遥控)。跑道宽度0.5m,表面贴有白纸,两侧有挡板,挡板与地面垂直,其高度不低于20cm。在跑道的B、C、D、E、F、G各点处画有2cm宽的黑线,各段的长度如图1所示。 1.1基本要求1) 车辆从起跑线出发(出发前,车体不得超出起跑线),到达终点线后停留10秒,然后自动返回起跑线(允许倒车返回)。往返一次的时间应力求最短(从合上汽车电源开关开始计时)。2) 到达终点线和返回起跑线时,停车位置离起跑线和终点线偏差应最小(以车辆中心点与终点线或起跑线中心线之间距

6、离作为偏差的测量值)。3) DE间为限速区,车辆往返均要求以低速通过,通过时间不得少于4秒,但不允许在限速区内停车。1.2发挥部分1) 自动记录、显示一次往返时间(记录显示装置要求安装在车上)。2) 自动记录、显示行驶距离(记录显示装置要求安装在车上)。3) 其它特色与创新。2、方案论证与选择2.1、系统总体框图选定自动往返小车的题目后,我们决定购买一台符合尺寸要求的玩具遥控小车,通过去掉其遥控部分,并直接利用上面的直流电机的方法实现要求,由此节省自行安装和调试小车动力部分的时间。根据设计任务要求,经过论证选择,最终确定的系统设计框图如下:系统分为单片机控制模块、外部传感器模块、电机驱动模块、

7、电源模块、按键模块和LCD液晶显示模块。2.2、各模块硬件选择2.2.1、控制模块控制模块负责接收传感器和按键的输入,控制液晶显示模块和PWM控制输出。主流方案是采用FPGA芯片或者单片机。方案1:采用可编程逻辑器件FPGA作为控制器。FPGA可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、IO资源丰富、易于进行功能扩展。方案2:采用Atmel公司的AT89S52单片机作为主控制器AT89S52是一个低功耗,高性能的51内核的CMOS 8位单片机,片内含8k空间的可反复擦些1000次的Flash只读存储器,具有256 bytes的随机存取数据存储器(RAM),32个IO口,2个1

8、6位可编程定时计数器。考虑到本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高。且从使用及经济的角度考虑我们选择较为成熟的方案2。2.2.2、外部传感器模块外部传感器模块主要作用是检测赛道上的黑线以及测量车轮转过圈数。主要方案有以下两种。方案1:该方案用光敏电阻组成光敏探测器检测黑线,用霍耳传感器进行测速。首先,光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化,只要将阻值的变化值经过比较器就可以输出高低电平。其次,使用利用霍耳效应的传感器。当载流导体或半导体

9、出于与电流相垂直的磁场中时,在其两端将产生电位差的这一现象称为霍尔效应。如果在车轮的内侧装上一条细磁铁,把霍耳传感器同样装在车轮的内侧,测量霍尔传感器的输出就可以知道车轮转过的圈数。方案2:该方案使用RPR220型光电对管进行检测黑线和测速。RPR220是一种一体化反射型光电探测器,其发射器是一个砷化镓红外发光二极管,而接收器是一个高灵敏度,硅平面光电三极管。当经过黑线时接收器输出高电平。测速时,在车轮的内侧贴上一个光电码盘,用光电对管对码盘进行检测。光电对管照射到黑色和白色的边界时输出信号会有跳变,将跳变的输出信号送给单片机进行检测就可以得到轮子的转速。经过论证比较,由于RPR220型光电对

10、管内置可见光过滤器能减小离散光的影响,同时光电对管调理电路简单,工作性能稳定。因此,外部传感器模块选用2.2.3、电机及其驱动模块方案1:采用专用芯片L298N作为电机驱动芯片。L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。方案2:对于直流电机用分立元件构成驱动电路。由分立元件构成电机驱动电路,结构简单,价格低廉,在实际应用中应用广泛。但是这种电路工作性能不够稳定。因此我们选用了方案1。2.2.4、电源模块电源模块作用时把外部电压降为5V,供给单片机和传感器使用。本

11、设计使用常用的7805作为降压芯片。2.2.5、按键模块按键模块包括2个按键,分别负责起跑后读取行驶时间和小车行驶距离。鉴于传感器模块的输出信号为高电平有效,因此按键没按下时,按键输出为低电平。2.2.6、显示模块方案1:用LCD1602液晶屏。该液晶屏可以两行显示数字、汉字,显示清晰。方案2:用8位数码管进行显示,数码管显示亮度较高。考虑到我们需要指示当前数值是小车行驶时间还是距离,因此决定采用能显示更多内容的LCD作为显示模块的主要硬件。3、系统硬件设计与实现3.1、系统总体电路图3.2、系统各模块设计介绍3.2.1、单片机控制模块模块电路图如下:单片机P1口的1脚接LCD显示的数据端,P

12、0口的5、6、7脚接LCD的控制端,P0口的1脚接蜂鸣器,P0口的3、4脚接电机控制端,P3口的4脚(计数器T0)接PWM控制端,P3口的2、3脚(中断口)接或非门,对应光电对管和按键输入。单片机在系统中起控制中心的作用,其内部代码见软件设计部分。3.2.2、外部传感器模块模块电路图如上图。电源电压为5伏,信号输出后接入或非门再连接单片机的中段输入口。当小车经过黑线时,RPR220型光电对管接收端输出约为45伏,经过白线时输出为01伏,经过LM324比较器将光电对管输出转换为逻辑信号的高低电平(比较器的基准电压为4伏)。3.2.3、电机驱动模块模块电路图如下:电机驱动模块利用电池组供电。单片机

13、的两个端口输出“10”和“01”分别驱动小车向前和向后动,另外一个端口输出PWM波形,通过波形的占空比来控制直流电机的转速。L298N是SGS公司的产品,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。L298N可接受标准TTL逻辑电平信号VSS,VSS可接457 V电压。4脚VS接电源电压,VS电压范围VIH为2546 V。输出电流可达2.5 A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。5,

14、7,10,12脚接输入控制电平,控制电机的正反转。EnA,EnB接控制使能端,控制电机的停转。L298N的管脚图如下:3.2.4、电源模块模块电路图如下:该电源模块的功能是把9伏锌锰干电池通过7805转换为5伏电压,向单片机、逻辑芯片和LCD1602供电。考虑到如果用电池组同时向电机和芯片供电时,由于驱动电机所需电流较大,容易影响对芯片的供电,因此我们决定电池组单独对驱动电机,另外利用6F22型叠层式锌-锰干电池向电路其他部分提供电源。3.2.5、按键模块模块电路图如下:由于单片机的中断口是低电平(或者下降沿)触发,而RPR200型光电对管在检测黑线时输出高电平,处于减少芯片书的考虑,我们决定

15、采用或非门,同时把没有按下的按键输出设为低电平,即如上图所示。3.2.6、LCD液晶显示模块模块电路图如下:LCD1602为工业字符型液晶,能够同时显示16*02即32个字符。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,只要在数据端输入相应的ASCII码,即可在LCD上显示相应字符。4、系统软件框图软件设计流程图如下是是是否否否是开始黑线数=3?延时3s黑线数量加1限速结束限速黑线数=4?黑线数=6?黑线数=9?是否黑线数=10?否黑线数=12?停车计时

16、10s再启动结束限速限速否是否是否是是否有黑线?启动检测路边黑线停车停止计时显示主界面显示时间?显示距离?显示时间显示距离5、设计数据测量5.1、传感器测量步骤:用电压表测量PRP220光电对管在黑色和白色环境下的输出电压值结果:见下表背景环境电压值白色0.780.81黑色4.654.86结论:LM324的基准电压设置为4伏。5.2、总体测试步骤:在地上贴黑线模拟赛道,把小车放在赛道上测试。结果:见下表(限速区时间为秒表所测)测试次数总时间限速区时间总路程(m)实际往返距离(m)125.53.98.38226.54.28.88326.54.28.78结论:小车性能基本满足设计任务要求参考文献1

17、李建忠编,单片机原理及应用技术(第二版),西安电子科技大学出版社2谭浩强编,C程序设计(第三版),清华大学出版社#include #include /* 宏定义区*/*- LCD模块 -*/#define LCD_RW P0_6 /读写控制端#define LCD_RS P0_5/数据命令选择端#define LCD_E P0_7/执行使能端#define LCD_DataP1 /P1口#define Write0x00/低电平写入#define Read0x01/高电平读出#define Data0x01/高电平选择数据#define Cmd0x00/低电平选择命令#define Enabl

18、e0x00/跃变到低电平时执行命令#define Disable0x01 #define True0x01#define False0x00#define LCD_Init0x38/初始化模式#define LCD_DispCtr 0x0C/开显示及光标设置#define LCD_CloseCtr0x08/关显示#define LCD_CLS 0x01/清屏幕#define LCD_EnterSet 0x06/显示光标 #define BusyP1_7/忙信号/*- 测速/测距/测时模块 -*/#define CircleLength0.144/小车转一轮的长度为.132m/*- 控速模块 -

19、*/#define P04P0_3 /后电机#define P03P0_4 /后电机/#define P01 P0_1 /前电机/#define P02P0_2 /前电机#define bellP3_7 #define P31P2_5 /控制液晶背光#define P33P3_3/*- 菜单选择模块-*/#define Line0x00/0代表直线模式/#define Curve0x01/1代表S型模式#define Normal0x00/0 代表正常速度#define Low0x01/1 代表低速#define High0x02/2 代表高速/* 全局函数声明区 */*- LCD模块 -*/

20、void LCDInit(void);/LCD初始化void SetWriteCmd(void);/设置写命令模式void SetReadCmd(void);/设置读命令模式void SetWriteData(void);/设置写数据模式void WriteCmd(char cmd);/写命令void WriteData(char ddata);/写数据void ExecuteCmd(void);/执行命令void SetXY(char x,char y);/定位显示地址void DisplaySingleChar(char x,char y,char cchar);/显示单个字符void D

21、isplayString(char x,char y,char *str); /显示一段字符串void Delay(unsigned int time);/延时主程序void DelayUs(unsigned int time);/延时子程序/void delay500ms(void) ;bit IsBusy(void);/判断忙标志函数void DisplayTime(void);/显示时间void DisplayAVGSpeed(void);/显示平均速度void DisplayDistance(void);/显示路程/*- 测速/测距/测时模块 -*/ void INTInit(void

22、); /所有中断初始化void SpeedINT(void); /测速中断void ComputeTime(void);void ComputeSpeedANDDistance(void);/计算速度和距离/*- 控速模块 -*/void CtrSpeedINT(void); /控速中断void Time0INT(void); void Time1INT(void); /控速单位时间中断void Clock0_Init(void);/时钟中断初始化void Clock1_Init(void); /时钟中断初始化void CtrSpeed(void);/* 全局变量区*/short i=0;fl

23、oat SpeedCount = 0; /测速计数脉冲float Speed = 0.0;float Distance = 0.0; char Time1INTCount=0;/T1中断时间计时float PassTime=0.00;/小车行走的时间short IsT0INT=1;bit IsT1INT;/判断T1是否已经响应中断short IsT0INT2=1;char Thx5=0xf4,0xf4,0xb4,0xd4,0xff; /3ms,3ms,15ms,3mschar Tlx5=0x11,0x11,0x51,0x11,0xff;char Thx0=0x99;char Tlx0=0x99

24、;char Thx1=0x99; /20mschar Tlx1=0x99;/short Round=0;/short Back=0;/short Back0=0;/bit Backid;/bit Stop=0;char Area0=0;char Area1=0;/区域变量char LowSpeedArea1StartTime;char LowSpeedArea1EndTime;char HighSpeedAreaEndTime;char LowSpeedArea2EndTime;char LowSpeedArea1PassTime=0; /第一个低速区通过时间char HighSpeedAre

25、aPassTime=0;/高速区通过时间char LowSpeedArea2PassTime=0;/第二个低速区通过时间char ReadyToGo=10;char ReadyToGo1=4;/倒计时char flag;char p=0;/bit Roundid=0;/char Nocurve=0; char ChangeFlag;char Mode; bit Running;bit SelectedAll;/模式和速度是否选择完毕标志bit IsSelectingMode;/模式选择标志bit IsSelectingSpeed;/速度选择标志bit ModeSelected;/已经被选择的模

26、式标志char SelectedMode=10;/模式选择是否完毕标志bit Next;/Next键标志bit SpeedSelected;/已经被选中的速度方案标志char SelectedSpeed;/速度选择是否完毕标志bit ChoosingDisplay;/人工选择菜单开始标志bit SelectedShow;/显示选择标志bit SelectedReturn;/返回选择标志bit Selected;/确定/返回键选择标志bit ReturnSelection;/返回键启用标志bit AVGSpeedShow;/平均速度显示标志bit TotalDistanceShow;/总路程显示

27、标志bit ReturnMain;/返回主菜单标志bit AutoDisplay;/自动显示标志bit GoToChoosingDisplay;/人工选择标志bit AutoMode=0;char PassLineID=0;char PassLine=0;float PrepareDistance;float FirstDistance;float SecondDistance;float ThirdDistance;int FirstHigh;int SecondHigh;int j=0;int ThirdHigh;float Rate=1.25; /5ms时的速度float Count=4

28、;/时间的倍数/* 全局函数实现区*/*-主函数 -*/void main() P03=0;P04=0;P31=1;/单片机复位,背光开bell=1;Delay(40);/延时等待LCD启动LCDInit();/初始化LCDDisplayString(0x0,0, Welcome. );DisplayString(0x0,1,Autorunning Car);Delay(300);WriteCmd(LCD_CLS);EA=1; /开总中断EX0=1;/开INT0中断IT0=1;/INTO边沿触发EX1=1; /开INT1中断IT1=1; /INT1边沿触发SelectedAll=False;

29、/开始模式和速度选择/*- 模式选择 -*/DisplayString(0x0,0,Choose The Mode );DisplayString(0x0,1, Line Or Auto );Delay(50);WriteCmd(LCD_CLS);IsSelectingMode=True;while(1) WriteCmd(LCD_CLS);DisplayString(0x0,0, Line Mode );DisplayString(0x0,1,Next Yes);Delay(300);/延时消除抖动while (1) /不断检测中断,直到按确定键或是NEXT键if (Next=True)/如

30、果按Next键则直接跳出break;if (ModeSelected=True)/如果按确定键则设置模式为Line并跳出SelectedMode=Line;break;/如果什么键都没有按下,那么一直显示等待if (ModeSelected=True)/按下了确定键,退出模式选择IsSelectingMode=False;break;if (Next=True)/再一次按下了Next键,则自动模式选择Next=False;WriteCmd(LCD_CLS);DisplayString(0x0,0, Auto Mode );DisplayString(0x0,1,Next Yes);Delay(

31、300); /延时消除抖动while(1)if (Next=True)break;if (ModeSelected=True)AutoMode=1;break;if (ModeSelected=True)IsSelectingMode=False;break;if (Next=True)Next=False;continue;Delay(50);WriteCmd(LCD_CLS); /*- 速度选择 -*/if (SelectedMode=Line & AutoMode=0)DisplayString(0x0,0, Now Choose a );DisplayString(0x0,1, kin

32、d of Speed );Delay(50);WriteCmd(LCD_CLS);IsSelectingSpeed=True;while(1)WriteCmd(LCD_CLS);DisplayString(0x0,0, Normal Speed );DisplayString(0x0,1,Next Yes);Delay(300); /延时消除抖动while(1)if (Next=True) /如果按Next键则直接跳出break;if (SpeedSelected=True) /如果按确定键则设置速度为Normal并跳出Thx0=0xec;Tlx0=0x78; /5msThx1=0xf0;Tl

33、x1=0x60; /4msThx2=0x8a;Tlx2=0xd0; /30msThx3=0xf4;Tlx3=0x48; /3msSelectedSpeed=Normal;break; /如果什么键都没有按下,那么一直显示等待if (SpeedSelected=True) /按下了确定键,退出速度选择IsSelectingSpeed=False;break;if (Next=True)Next=False;WriteCmd(LCD_CLS); DisplayString(0x0,0, Low Speed );DisplayString(0x0,1,Next Yes);Delay(300); /延时消除抖动while(1)if (Next=True)/如果再一次按下Next键,则跳出break;if (SpeedSelected=True)/如果按下

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922