自动往返电动小汽车设计报告Word文档格式.docx

上传人:b****6 文档编号:16222734 上传时间:2022-11-21 格式:DOCX 页数:51 大小:204.69KB
下载 相关 举报
自动往返电动小汽车设计报告Word文档格式.docx_第1页
第1页 / 共51页
自动往返电动小汽车设计报告Word文档格式.docx_第2页
第2页 / 共51页
自动往返电动小汽车设计报告Word文档格式.docx_第3页
第3页 / 共51页
自动往返电动小汽车设计报告Word文档格式.docx_第4页
第4页 / 共51页
自动往返电动小汽车设计报告Word文档格式.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

自动往返电动小汽车设计报告Word文档格式.docx

《自动往返电动小汽车设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《自动往返电动小汽车设计报告Word文档格式.docx(51页珍藏版)》请在冰豆网上搜索。

自动往返电动小汽车设计报告Word文档格式.docx

根据设计任务要求,并且根据我们自己的需要而附加的功能,该电路的总体框图可分为几个基本的模块,框图如(图2)所示:

LCD显示模块

测速模块

AT89S51

控速模块

路面检测

555定时器

(图2)

2.1路面检测模块:

路面黑线检测模块采用反射式红外发射--接收器,在车底的前部和中部安装了两个反射式红外传感器.

2.2LCD显示模块:

采用1602LCD,由单片机的总线模式连接。

为节约电源电量并且不影响LCD的功能,LCD的背光用单片机进行控制,使LCD的背光在小车行驶的过程中不亮,因为我们不必看其显示;

在其它我们需要看显示的内容的时候LCD背光亮。

2.3测速模块:

采用采用霍尔开关元器件A44E检测轮子上的小磁铁从而给单片机中断脉冲,达到测量速度的作用。

霍尔元件具有体积小,频率响应宽度大,动态特性好,对外围电路要求简单,使用寿命长,价格低廉等特点,电源要求不高,安装也较为方便。

霍尔开关只对一定强度的磁场起作用,抗干扰能力强,因此可以在车轮上安装小磁铁,而将霍尔器件安装在固定轴上,通过对脉冲的计数进行车速测量。

其原理图接线如(图3)所示:

(图3)

2.4控速模块:

采用由双极性管组成的H桥电路。

用单片机控制晶体管使之工作在占空比可调的开关状态,精确调整电机转速。

这种电路由于工作在管子的饱和截止模式下,效率非常高;

H桥电路保证了可以简单地实现转速和方向的控制;

电子开关的速度很快,稳定性也很高,是一种广泛采用的调速技术。

其电路原理图如(图4)所示:

(图4)

3.程序框图:

单片机主程序框图、速度感应程序框图和铁片感应程序框图分别如(图7)所示。

全速行驶

开始

第3条黑线

限速模块

设定速度

第4条黑线

第5条黑线

第6条黑线

刹车

停10s,交替显示路程,时间

停止,交替显示往返时间,路程

全速倒车

第10条黑线

第11条黑线

第9条黑线

第8条黑线

(图5)

4.系统的具体设计与实现:

4.1路面检测模块:

路面黑线检测模块采用反射式红外发射--接收器,在车底的前部和中部安装了两个反射式红外传感器.原理图如图6.

图6

4.2LCD显示模块:

为节约电源,LCD的背光用单片机进行控制。

4.3测速模块:

通过霍尔元件感应磁铁来产生脉冲(当霍尔元件在离磁场较近时输出会是高电平,其它时候是低电平),一个车轮均匀放四个小磁铁,计算一秒所得的脉冲数,从而计算出一秒小车轮子转动圈数,再测量出小车车轮周长即可计算出小车当前速度,累加可得到当前路程。

4.4控速模块:

考虑到元器件的缺少以及我们所用的电路的驱动电机的电路原理图和和小车自带的电路的电机驱动原理图一样,所以暂时使用小车自带的电机驱动电路图。

4.5复位电路模块:

单片机的复位电路通过手动来实现,复位电路图如(图7)所示。

(图7)

4.6脉冲产生模块:

脉冲产生电路采用555定时器.原理图如图.

(图8)

5.最小系统图:

该系统主要用到的是单片机,所以主要的部分是最小系统图,该最小系统图如图9.

(图9)

6.系统程序:

按照预定的功能,系统实现预定的功能的程序如下所示:

#include<

intrins.h>

AT89X52.h>

/********************************************************************************\

**宏定义区**

\********************************************************************************/

/*-------------------------------LCD模块------------------------------------*/

#defineLCD_RWP2_6//读写控制端

#defineLCD_RSP2_7//数据命令选择端

#defineLCD_EP2_5//执行使能端

#defineLCD_DataP1//P1口

#defineWrite0x00//低电平写入

#defineRead0x01//高电平读出

#defineData0x01//高电平选择数据

#defineCmd0x00//低电平选择命令

#defineEnable0x00//跃变到低电平时执行命令

#defineDisable0x01

#defineTrue0x01

#defineFalse0x00

#defineLCD_Init0x38//初始化模式

#defineLCD_DispCtr0x0C//开显示及光标设置

#defineLCD_CloseCtr0x08//关显示

#defineLCD_CLS0x01//清屏幕

#defineLCD_EnterSet0x06//显示光标

#defineBusyP1_7//忙信号

/*--------------------------测速/测距/测时模块-------------------------------*/

#defineCircleLength0.132//小车转一轮的长度为.132m

/*--------------------------------控速模块-----------------------------------*/

#defineP03P0_3//后电机

#defineP04P0_4//后电机

#defineP01P0_1//前电机

#defineP02P0_2//前电机

#defineP31P0_5//控制液晶背光

#defineP33P3_3

/*------------------------------菜单选择模块---------------------------------*/

#defineNormal0x00//0代表正常速度

#defineLow0x01//1代表低速

#defineHigh0x02//2代表高速

/*********************************************************************************\

**全局函数声明区**

\*********************************************************************************/

/*-------------------------------LCD模块-------------------------------------*/

voidLCDInit(void);

//LCD初始化

voidSetWriteCmd(void);

//设置写命令模式

voidSetReadCmd(void);

//设置读命令模式

voidSetWriteData(void);

//设置写数据模式

voidWriteCmd(charcmd);

//写命令

voidWriteData(charddata);

//写数据

voidExecuteCmd(void);

//执行命令

voidSetXY(charx,chary);

//定位显示地址

voidDisplaySingleChar(charx,chary,charcchar);

//显示单个字符

voidDisplayString(charx,chary,char*str);

//显示一段字符串

voidDelay(unsignedinttime);

//延时主程序

voidDelayUs(unsignedinttime);

//延时子程序

bitIsBusy(void);

//判断忙标志函数

voidDisplayTime(void);

//显示时间

voidDisplayAVGSpeed(void);

//显示平均速度

voidDisplayDistance(void);

//显示路程

/*--------------------------测速/测距/测时模块-------------------------------*/

voidINTInit(void);

//所有中断初始化

voidSpeedINT(void);

//测速中断

voidComputeTime(void);

voidComputeSpeedANDDistance(void);

//计算速度和距离

voidCtrSpeedINT(void);

//控速中断

voidTime0INT(void);

voidTime1INT(void);

//控速单位时间中断

voidClock0_Init(void);

//时钟中断初始化

voidClock1_Init(void);

//时钟中断初始化

voidCtrSpeed(void);

**全局变量区**

floatSpeedCount=0;

//测速计数脉冲

floatSpeed=0.0;

floatDistance=0.0;

charTime1INTCount=0;

//T1中断时间计时

floatPassTime=0.00;

//小车行走的时间

shortIsT0INT=1;

bitIsT1INT;

//判断T1是否已经响应中断

shortIsT0INT2=1;

charThx[5]={0xf4,0xf4,0xc5,0xf4,0xff};

//3ms,3ms,15ms,3ms

charTlx[5]={0x48,0x48,0x68,0x48,0xff};

charThx0=0xd8;

charTlx0=0xf0;

charThx1=0xb1;

//20ms

charTlx1=0xe0;

shortRound=0;

shortBack=0;

shortBack0=0;

bitBackid;

bitStop=0;

charArea0=0;

charArea1=0;

//区域变量

charLowSpeedArea1StartTime;

charLowSpeedArea1EndTime;

charHighSpeedAreaEndTime;

charLowSpeedArea2EndTime;

charLowSpeedArea1PassTime=0;

//第一个低速区通过时间

charHighSpeedAreaPassTime=0;

//高速区通过时间

charLowSpeedArea2PassTime=0;

//第二个低速区通过时间

charReadyToGo=4;

//倒计时

charflag;

bitRoundid=0;

charNocurve=0;

charChangeFlag;

charMode;

bitRunning;

bitSelectedAll;

//速度是否选择完毕标志

bitIsSelectingSpeed;

//速度选择标志

bitNext;

//Next键标志

bitSpeedSelected;

//已经被选中的速度方案标志

charSelectedSpeed;

//速度选择是否完毕标志

bitChoosingDisplay;

//人工选择菜单开始标志

bitSelectedShow;

//显示选择标志

bitSelectedReturn;

//返回选择标志

bitSelected;

//确定/返回键选择标志

bitReturnSelection;

//返回键启用标志

bitAVGSpeedShow;

//平均速度显示标志

bitTotalDistanceShow;

//总路程显示标志

bitReturnMain;

//返回主菜单标志

bitAutoDisplay;

//自动显示标志

bitGoToChoosingDisplay;

//人工选择标志

bitAutoMode=0;

charPassLineID=0;

charPassLine=0;

floatPrepareDistance;

floatFirstDistance;

floatSecondDistance;

floatThirdDistance;

intFirstHigh;

intSecondHigh;

intThirdHigh;

floatRate=1.25;

//5ms时的速度

floatCount=4;

//时间的倍数

**全局函数实现区**

/*--------------------------------主函数------------------------------------*/

voidmain()

{

P01=0;

P02=0;

P03=0;

P04=0;

P31=1;

//单片机复位,背光开

Delay(40);

//延时等待LCD启动

LCDInit();

//初始化LCD

DisplayString(0x0,0,"

Starting..."

);

DisplayString(0x0,1,"

DesignedBy202"

Delay(300);

WriteCmd(LCD_CLS);

EA=1;

//开总中断

EX0=1;

//开INT0中断

IT0=1;

//INTO边沿触发

EX1=1;

//开INT1中断

IT1=1;

//INT1边沿触发

SelectedAll=False;

//开始速度选择

/*------------------------------速度选择---------------------------------*/

if(SelectedMode==Line&

&

AutoMode==0)

{

DisplayString(0x0,0,"

NowChoosea"

DisplayString(0x0,1,"

kindofSpeed"

Delay(50);

WriteCmd(LCD_CLS);

IsSelectingSpeed=True;

while

(1)

{

WriteCmd(LCD_CLS);

DisplayString(0x0,0,"

NormalSpeed"

DisplayString(0x0,1,"

NextYes"

Delay(300);

//延时消除抖动

while

(1)

{

if(Next==True)//如果按Next键则直接跳出

break;

if(SpeedSelected==True)//如果按确定键则设置速度为Normal并跳出

{

Thx[0]=0xec;

Tlx[0]=0x78;

//5ms

Thx[1]=0xf0;

Tlx[1]=0x60;

//4ms

Thx[2]=0x8a;

Tlx[2]=0xd0;

//30ms

Thx[3]=0xf4;

Tlx[3]=0x48;

//3ms

SelectedSpeed=Normal;

}//如果什么键都没有按下,那么一直显示等待

}

if(SpeedSelected==True)//按下了确定键,退出速度选择

{

IsSelectingSpeed=False;

break;

if(Next==True)

Next=False;

WriteCmd(LCD_CLS);

DisplayString(0x0,0,"

LowSpeed"

DisplayString(0x0,1,"

Delay(300);

//延时消除抖动

while

(1)

{

if(Next==True)//如果再一次按下Next键,则跳出

break;

if(SpeedSelected==True)//如果按下确定键,则设置速度为Low,并跳出

{

SelectedSpeed=Low;

//这里没有速度设置,因为默认速度就是Low

}

}

if(SpeedSelected==True)//按下了确定键,退出速度选择

HighSpeed"

if(Next==True)//如果再一次按下Next键,则跳出

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1