超声避障小车设计报告Word文件下载.docx

上传人:b****3 文档编号:16791043 上传时间:2022-11-26 格式:DOCX 页数:9 大小:62.59KB
下载 相关 举报
超声避障小车设计报告Word文件下载.docx_第1页
第1页 / 共9页
超声避障小车设计报告Word文件下载.docx_第2页
第2页 / 共9页
超声避障小车设计报告Word文件下载.docx_第3页
第3页 / 共9页
超声避障小车设计报告Word文件下载.docx_第4页
第4页 / 共9页
超声避障小车设计报告Word文件下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

超声避障小车设计报告Word文件下载.docx

《超声避障小车设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《超声避障小车设计报告Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。

超声避障小车设计报告Word文件下载.docx

2.3总体设计

基于单片机STC89C52RC设计的智能避障小车,本设计需提供+5V电源,,DC+5CV由蓄电池通过降压模块得到+5V电源,为单片机及其他电路提供工作电压。

超声波避障模块,采用购买的现成的超生波发射接收模块,通过单片机控制超声波模块去小车行驶道路上的障碍物进行检测,然后单片机通过处理反馈的信息,判断障碍物的距离,进而发出指令控制驱动模块,控制小车实现转向,达到避障的目的。

系统框图

总体设计框图

2.4功能说明

本设计主控芯片采用51芯片,负责传感器的状态,并向电机驱动模块发出动作指令。

复位采用手动复位。

电源由蓄电池提供,为单片机及其他模块供电,+5V主要为驱动电机提供电源。

避障模块采用购买的成品,该模块在单片机的控制下对小车前方的路况进行检查,并将检测信息反馈给单片机,单片机经过处理反馈回来的信息,发出相应的指令控制驱动模块,从而控制小车做出相应的动作,达到避障的目的。

3硬件的选择与组成

3.1单片机的选择

采用单片机STC89C52RC为核心,8K的部程序存储器(ROM),512个部数据存储器(RAM),4个寄存器区,32个通用I/O端口,2个16位的定时、计数器,有ISP功能,能用于下载线进行的在线编程,设有4个中断源,能够完成设计要求,且该芯片价格便宜,采用该芯片能够达到设计要求。

该设计选用STC89C52作为主控芯片。

单片机用的是STC89C52RC,该芯片存储容量大,体积小。

单片机最小系统:

电源部分、晶振部分、复位电路和31号脚接高电平。

单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几个大单元及数据总线地址总线和控制总线等三大总线。

9号复位信号脚,时钟电器开始工作,复位端会出现24个时钟周期以上的高电平,系统即初始复位。

其复位方式一般为手动复位,VCC断电期间,此引脚可接上备用电源,以保证单片机部RAM的数据不丢失。

31脚程序存储器的外部选通线,置有8kb的程序存储器,当EA为高电平并且程序地址小于8kb时,读取部程序存储器指令数据。

所以该设计31脚应该接高电平。

51单片机置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,18、19脚就接电容和晶振电路。

单片机40脚接VCC,可以提供电源,20脚接地。

3.2避障模块的选择

该部分采用购买HC-SR04超声波测距模块,该模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达到3cm,模块包括超生波发射器,接收器与控制电路。

工作原理:

(1)采用IO口TRIG触发测距,给至少给10us的高电平;

(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;

(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。

测试距离=(高电平时间*声速(340m/s))/2。

3.3驱动模块的选择

驱动采用L298N驱动芯片,该芯片是双全桥步进电机专用驱动芯片,涵4信道逻辑驱动电路,是一种二相和四相步进电机的专用驱动器,可同时驱动2个二相或1个四相步进电机,含二个H-Bridge的高电压、大电流双全桥驱动器,接收标准TTL逻辑信号,可驱动46V、2A

以下的步进电机,且可以直接透过电源来调节输出电压;

此芯片可直接由单片机的IO端口来提供模拟时序信,第1脚和第15脚可与电流侦测用电阻连接来控制负载的电路。

OUTPUT1、OUTPUT2和OUTPUT3、OUTPUT4之间分别接2个直流电机;

INPUT1~INPUT4输入控制电位来控制电机的正反转;

Enable则控制电机停转。

电源供电部分使用直流可调稳压电源,提供直流+5V电压,运用三线稳压器件7805,输出+5V电源。

由于7805简单易用、价格低廉,在大多电路中充分采用。

通过电解电容的隔离滤波作用,电源部分可输出+5V的直流电源。

4软件程序流程图

4.1主流程图

在程序设计中,为了便于调试,方便找到程序问题的所在,程序采用在主函数中调用各个子函数的形式。

当启动一次超声波测距程序时,单片机会根据检测反馈回来的信息进行相应的处理,进而判断是否有障碍物,当障碍物的距离小于设定的安全距离时,单片机会发出相应的指令,控制驱动电路,对小车的行驶方向进行调整。

当小车前方无障碍物时,主程序会在一定的时间自动启动一次超生波测距程序,若无障碍继续按原来的方向行驶。

如此循环,达到避障的目的。

4.2模块程序设计说明

在程序中我采用了两个计数器溢出中断,其中一个是T0计数器溢出中断,是用来计算障碍物的距离,如果障碍物的距离超出测距围,利用该中断设置标志位。

另一个是T1计数器溢出中断,我利用该中断控制超声波发射的时间间隔,即对路面障碍物检测的时间间隔,来适时判断路面情况,改变小车的行驶方向,达到小车躲避行驶过程中遇到的障碍物。

4.3超声波避障程序

只需提供一个10us以上的脉冲信号,该模块部将发出8个40KHz周期电平并检测回波。

一旦检测到有回波信号则输出回响信号。

回响信号的脉冲宽度与所测的距离成正比。

由此通过发射信号到接收到回响信号的时间间隔可以计算得到距离。

4.4驱动模块程序

当在主程序中当计数器T1溢出中断响应时,会首先判断障碍物的距离是否小于设定的安全距离(被设计中为40cm),若大于安全距离,小车继续按原来的方向行驶,若小于安全距离,小车首先左转90度,停下并启动超声波避障程序再次对前方的路况进行障碍有无的检测,若无障碍物或有障碍但大于安全距离,小车沿该方向前进,反之当障碍物的距离小于安全距离时,小车向右旋转180度,停止并再次启动超生波避障程序,对前方的路况进行检测,若无障碍物或有障碍物但距离大于安全距离,小车沿该方向前进,反之当障碍物的距离小于安全距离时。

小车向右转90度,沿该方向行驶。

如此循环实现避障。

5小车整体程序部分

#include<

reg52.h>

//器件配置文件

intrins.h>

sbitRX=P2^2;

//接受端口

sbitTX=P2^3;

//发射端口

//驱动引脚定义

sbitIN1=P1^0;

//M2

sbitIN2=P1^1;

sbitIN3=P1^2;

//M1

sbitIN4=P1^3;

unsignedinttime=0;

unsignedlongS=0,num=0;

bitflag=0;

/*----------------------------uS延时函数大致延时长度如下T=tx2+5uS--------------------*/

voidDelayUs2x(unsignedchart)

{

while(--t);

}

/*---------------------------------mS延时函数---------------------------------*/

voidDelayMs(unsignedchart)

while(t--)

{

//大致延时1mS

DelayUs2x(245);

}

}

voiddelay(void)

DelayMs(200);

/*********驱动模块********************/

forword()//前进

IN1=1;

IN2=0;

IN3=1;

IN4=0;

turn_left()//左拐

IN3=0;

turn_right()//右拐

IN1=0;

stop()//停止

/*****T0中断用来计数器溢出,超过测距围******/

voidzd0()interrupt1

flag=1;

//中断溢出标志

/*********启动超生波模块*****************/

voidStartModule()

TX=1;

//启动一次模块

DelayUs2x(8);

//延时大概20us

TX=0;

while(!

RX);

//当RX为零时等待

TR0=1;

//开启计数

while(RX);

//当RX为1计数并等待

TR0=0;

//关闭计数

unsignedintcount()

time=TH0*256+TL0;

TH0=0;

TL0=0;

S=(time*1.7)/100;

//算出来是CM

if((S>

=700)||flag==1)//超出测量围

{

flag=0;

S=700;

}DelayMs(80);

//80MS

returnS;

}//定时器T1溢出中断一定时间启动一次测距模块

voidtime1()interrupt3

ET1=0;

TR1=0;

TH1=(65536-15536)/256;

TL1=(65536-15536)%256;

StartModule();

num=count();

if(num<

40)

turn_left();

delay();

//延时1.6s完成转向

stop();

StartModule();

//启动一次模块

num=count();

//计算障碍物距离

if(num<

turn_right();

//延时3.2s完成转向

//启动一次模块num=count();

//延时1.6s完成转向forword();

elseforword();

}

ET1=1;

TR1=1;

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

voidmain()

unsignedinti=0;

TMOD=0x11;

//设T0为方式1,GATE=1;

ET0=1;

//允许T0中断

TH1=(65535-15536)/256;

TL1=(65535-15536)%256;

ET1=1;

//允许T1中断

TR1=1;

EA=1;

//开启总中

while

(1)

forword();

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

当前位置:首页 > 高中教育 > 语文

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

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