基于单片机的汽车倒车雷达系统设计含程序Word格式.docx

上传人:b****6 文档编号:16725957 上传时间:2022-11-25 格式:DOCX 页数:25 大小:699.10KB
下载 相关 举报
基于单片机的汽车倒车雷达系统设计含程序Word格式.docx_第1页
第1页 / 共25页
基于单片机的汽车倒车雷达系统设计含程序Word格式.docx_第2页
第2页 / 共25页
基于单片机的汽车倒车雷达系统设计含程序Word格式.docx_第3页
第3页 / 共25页
基于单片机的汽车倒车雷达系统设计含程序Word格式.docx_第4页
第4页 / 共25页
基于单片机的汽车倒车雷达系统设计含程序Word格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于单片机的汽车倒车雷达系统设计含程序Word格式.docx

《基于单片机的汽车倒车雷达系统设计含程序Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的汽车倒车雷达系统设计含程序Word格式.docx(25页珍藏版)》请在冰豆网上搜索。

基于单片机的汽车倒车雷达系统设计含程序Word格式.docx

根据设计要求并综合各方面因素,本文采用STC89C52单片机作为控制器,超声波驱动信号用单片机的定时器。

2.3系统整体方案的论证

超声波测距的原理是利用超声波的发射和接受,根据超声波传播的时间来计算出传播距离。

实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接收的直接波方式,适用于身高计;

一种是发射波被物体反射回来后接收的反射波方式,适用于测距仪。

此次设计采用反射波方式。

测距仪的分辨率取决于对超声波传感器的选择。

超声波传感器是一种采用压电效应的传感器,常用的材料是压电陶瓷。

由于超声波在空气中传播时会有相当的衰减,衰减的程度与频率的高低成正比;

而频率高分辨率也高,故短距离测量时应选择频率高的传感器,而长距离的测量时应用低频率的传感器。

第三章  系统的硬件设计

2.1 系统的总体框图

照系统设计的功能的要求,初步确定设计系统由单片机主控模块、显示模块、超声波收发模块、声光报警模块共四个模块组成。

单片机主控芯片使用51系列STC89C52单片机,该单片机工作性能稳定,同时也是在单片机课程设计中经常使用到的控制芯片。

发射电路由单片机输出端直接驱动超声波发送。

接收电路使用三极管组成的放大电路,该电路简单,调试工作小较小。

图3-1:

系统设计框图

硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波接收电路、报警输出电路、供电电路等几部分。

单片机采用STC89C52,系统晶振采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。

2.2US-100超声波收发模块

 该超声波收发模块可自己产生40kHz的方波,并经放大电路驱动超声波发射探头发射超声波,发射出去的超声波经障碍物反射后由超声波接收探头接收。

经接收电路的检波放大,积分整形,在ECHO引脚上产生方波脉冲,该脉冲宽度与被测距离成线性关系。

具体过程如图2所示。

图2US-100超声波收发模块工作时序图

上图表明:

只需要在Trig/TX管脚输入一个10us以上的高电平,系统便可发出8个40KHZ的超声波脉冲,然后检测回波信号,当检测到回波信号后,模块还要进行温度值的测量,然后根据当前温度对测距结果进行校正,将校正后的结果通过Echo/RX管脚输出。

在此模式下,模块将距离值转化为340m/s时的时间值的2倍,通过Echo端输出一个高电平,可以根据此高电平的持续时间来计算距离值。

即距离值为:

(高电平时间*340m/s)/2

设l为测量距离,t为往返时间差,超声波的传播速度为c

则有

(2-1)

而声波在空气中的传播速度为:

(2-2)

式中T为环境温度;

为绝对温度时的速度,是常数。

从上述两式可以推出:

(2-3)

注:

因为距离值已经经过温度校正,所以在此不需考虑温度补偿问题,声速选择340m/s即可。

使用US-100超声波收发模块进行距离测量测量时,单片机只需要输出触发信号,并监视回响引脚,通过定时器计算回响信号宽度,并换算成距离即可。

该模块简化了发送和接收的模拟电路,工作稳定可靠,其参数指标如表1所示。

电气参数

US-100超声波测距模块

工  作电压

DC2.4V~5.5V

静 态 电流

2mA

工 作温度

-20~+70度

输出方式

电平或UART(跳线帽选择)

感 应角度

小于15度

探 测距 离

2cm-450cm

探测 精 度

0.3cm+1%

UART模式下串口配置

波特率9600,起始位1位,停止位1位,数据位8位,无奇偶校验,无流控制。

  应注意测量周期必须在60毫秒以上,防止发射信号对回响信号的影响。

模块共有两个接口,即模式选择跳线和5pin接口。

模式选择跳线接口设置为当安装上短路帽时为UART(串口)模式,拔掉时为电平触发模式。

2.3单片机电路

 单片机选用高性能的STC89C52,其管角如图3所示:

 

图3STC89C52单片机管脚图

该芯片为52内核8位单片机,兼容Intel等52内核单片机,支持ISP下载,适用于常用检测控制电路。

由STC89C52组成的单片机系统原理图如图4所示。

图中TRIG引脚为单片机发送触发信号的引脚,ECHO引脚为US-100模块送回回响信号的引脚,接至单片机外部中断P3.2脚上,可以利用外部中断测量回响信号宽度。

当测量距离小于20cm时,单片机通过管脚P3.6发出灯光报警信号,触发LED报警灯亮,同时通过管脚P3.7发出声音报警信号,该信号用以触发蜂鸣器鸣响报警。

图4单片机系统及超声波模块接口原理图

2.4蜂鸣器报警电路

图5所示为蜂鸣器报警电路。

由于单片机管脚的输入比输出电流大,因此电路设计为低电平输出时蜂鸣器响,高电平关闭。

当P3.7脚输出低电平时,PNP型三极管8550导通,有集电极电流通过,蜂鸣器鸣响。

当P3.7脚输出高电平时,三极管截止,蜂鸣器关闭。

图5蜂鸣报警电路

2.5显示电路

显示部分采用SMC 1602液晶屏进行数据显示,其主要技术参数为:

显示容量

16*2个字符

芯片工作电压

4.5~5.5V

工作电流

2.0mA(5.0V)

模块最佳工作电压

5.0V

字符尺寸

2.95*4.35(WXH)mm

接口信号说明表如表3

表3液晶屏借口信号说明

编号

符号

引脚说明

符合

1

VSS

电源地

9

D2

DataI/0

VDD

电源正极

10

D3

DataI/0

3

VL

液晶显示偏压信号

11

D4

DataI/0

RS

数据/命令选择端(H/L)

12

D5

DataI/0

5

R/W

读/写选择端(H/L)

13

D6

DataI/0

E

使能信号

14

D7

DataI/0

7

D0

15

BLA

背光源正极

8

D1

16

BLA

背光源负极

与单片机的接口电路如图6所示

图6LCD与单片机的接口电路

2.6系统总电路图

 通过对单片机主控模块、显示模块、超声波收发模块、声光报警模块共四个模块进行结合,可以绘出系统总的电路图如图7:

图7系统总电路图

第四章系统的软件设计

3.1软件流程图

 本设计软件主程序流程图如图8所示,(a)为主程序流程图,(b)为外部中断子程序流程图。

  

(a)  主程序流程图       (b)外部中断流程图

图8程序流程图

3.2主程序

详见附录

3.3程序说明

系统加载5V电压后启动,数据、定时器、LCD1602进行初始化,程序进入while循环,超声波测距模块触发,发射超声波并检测有无回波,如果有回波,则超声波模块发射电平信号,驱使单片机进行计算,将数据显示在LCD1602上,如果无回波则跳过判断。

程序在计算完距离后与20cm进行比较,如果小于20cm,则驱动蜂鸣器和LED报警灯进行报警,如果大于20cm,则进入一个60ms的延时,继续while循环进行测量。

3.4硬件设计图

结论

本文主要讲述了倒车雷达,即超声波测距仪的原理和设计方法,设计的最终结果是使超声波测距仪能够产生超声波,实现超声波的发送与接收,从而实现利用超声波方法测量物体间的距离,并以数字的形式显示测量距离,在距离小于50cm时发出报警。

超声波测距的原理是利用超声波的发射和接收,根据超声波传播的时间来计算出传播距离。

超声波测距仪硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波接收电路三部分。

单片机采用STC89C51,采用12M高精度的晶振,以获得较稳定时钟频率,减小测量误差。

单片机控制超声波发射与接收模块进行信号的发射与接收。

显示电路采用LCD显示屏进行显示。

附录:

(1)头文件和一些宏定义

/*******************************************************************/

/*******************超声波测距仪************************************/

/*******************(液晶屏显示)************************************/

/*******************晶振11.0592MHz********************************/

#include<reg52.h>

#include"

1602.h"

typedefunsignedchar U8;

/*defined forunsigned8-bits integer variable无符号8位整型*/

typedefsignedcharS8;

/* definedfor signed8-bits integervariable有符号8位整型*/

typedefunsigned intU16;

 /* definedforunsigned16-bitsintegervariable无符号16位整型*/

typedefsigned intS16;

/*definedforsigned 16-bits integervariable有符号16位整型*/

typedefunsigned longU32;

/*definedforunsigned32-bits integer variable无符号32位整型*/

typedefsigned  longS32;

/*definedforsigned 32-bitsintegervariable有符号32位整型*/

typedef floatF32;

/*single precisionfloatingpointvariable(32bits)单精度浮点数32位长度*/

typedef doubleF64;

/*double precisionfloatingpoint variable(64bits)双精度浮点数64位*/

//定时器0的定时值为1mS,即11059/12=922个时钟脉冲,其补为65536-922=64614

#defineSYSTEMCLK   921600  //11059200/12

#defineT0CLK   921600 //11059200/12

#defineT1CLK  921600//11059200/12

#defineT1PERIOD  1000000/921600 //T1周期时间,以微秒为单位,约为1.085uS

#define TIMER0H   0xFC//64614/256=252

#defineTIMER0L  0x66 //54447%256=102

(2)管脚、常量、变量定义和函数声明

//管脚定义

sbitTrig =P1^3;

sbit Echo=P3^2;

//回波必须接在外部中断引脚上

sbit LedAlarm=P3^6;

 //报警灯,低电平亮

sbitBeep=P3^7;

   //报警蜂鸣器

//定义标志

volatilebitFlagSucceed =0;

//测量成功标志

volatilebit FlagDisplay= 0;

 //显示标志

//定义全局变量

U16DisplayCount=0;

U16time=0;

U32 distance=0;

//函数声明

void delay_20us();

voidStart_Module();

voidINT0_Init(void);

voidData_Init();

void Timer0_Init();

voidTimer1_Init();

 (3)各子程序

//20us延时程序,不一定很准

void delay_20us()

{ 

 U16bt;

 for(bt=0;

bt<

100;

bt++);

ﻩ//8M晶振是100

}

 

//数据初始化

voidData_Init()

{

Trig =0;

ﻩdistance=0;

ﻩDisplayCount= 0;

//外部中断初始化函数

voidINT0_Init(void)

 IT0=0;

  //负边沿触发中断

EX0=0;

    //关闭外部中断

//外部中断处理用做判断回波电平

voidINT0_ISR(void)interrupt0

 time=TH1*256+TL1;

 //取出定时器的值

 FlagSucceed=1;

 //置成功测量的标志

  EX0=0;

     //关闭外部中断

//定时器0初始化,16位定时模式,初始化为1ms中断一次。

voidTimer0_Init()

TMOD=0x11;

//定时器0和1工作在16位方式

ﻩTH0=TIMER0H;

TL0 =TIMER0L;

ﻩTR0 =1;

  //启动定时器

ﻩET0=1;

 //允许定时器0中断

//定时器0中断,用做显示计时

void Timer0_ISR(void)interrupt1 //定时器0中断是1号

TH0=TIMER0H;

ﻩ TL0=TIMER0L;

ﻩDisplayCount++;

ﻩ if(DisplayCount>=1000)ﻩ//1秒钟显示一次

{

ﻩFlagDisplay= 1;

ﻩDisplayCount= 0;

//定时器1初始化,16位计数模式,时钟为11059200/12=921600Hz

//60ms计数为55296,即0xD800

voidTimer1_Init()

ﻩTMOD=0x11;

//定时器0和1工作在16位方式

ﻩTH1=0;

TL1=0;

ﻩET1=1;

//启动模块,Trig管脚20us正脉冲

voidStart_Module()ﻩﻩ  //启动模块

 Trig=1;

ﻩ        //启动一次模块

 delay_20us();

 Trig=0;

/********************************************************************

* 名称 :

Main()

*功能:

主函数

***********************************************************************/

voidmain()

U16i,j;

EA =0;

INT0_Init();

Timer0_Init();

 //定时器0初始化

Timer1_Init();

//定时器1初始化

  Data_Init();

ﻩEA =1;

ﻩL1602_init();

ﻩL1602_string(1,1,"

Welcometo my  "

);

ﻩL1602_string(2,1,"

distancemeter!

"

ﻩ//延时

ﻩfor (i=0;

i<

1000;

i++)

 for(j=0;

j<

1000;

j++)

{;

while

(1)

ﻩ EA=0;

 

//以下为一次检测过程:

先发出Trig电平,打开外部中断,清零T1,

//最后在外部中断下降沿触发时取出T1当前值,计算出Trig脉冲宽度。

  Start_Module();

  while(Echo==0);

 //等待Echo回波引脚变高电平

ﻩFlagSucceed = 0;

ﻩﻩEX0=1;

ﻩTH1=0;

ﻩTL1= 0;

ﻩﻩTF1=0;

 TR1=1;

   //启动定时器1开始计数

ﻩﻩEA =1;

ﻩwhile(TH1<80);

//盲区

ﻩTR1 =0;

  //关闭定时器1

ﻩEX0= 0;

   //关闭外部中断

  if(FlagSucceed==1)//一次测试成功,则计算距离,单位为厘米

ﻩ {ﻩ

 distance =time*1.085;

//计算得到脉冲时间(以微秒为单位)

ﻩ  //将微秒时间转变成厘米距离的算法:

     Y米=(X秒*344)/2

ﻩﻩ //X秒=(2*Y米)/344 ==》X秒=0.0058*Y米==》厘米=微秒/58

     distance /=58;

       

ﻩ//如果距离小于20cm,则声光报警

ﻩﻩ if ((FlagSucceed== 1)&

&

 (distance <

 20))

ﻩ  {

ﻩﻩ LedAlarm=0;

ﻩ Beep=0;

ﻩ}      

ﻩ else

 {

ﻩ LedAlarm= 1;

ﻩﻩ Beep =1;

  }   

  }

     

ﻩif(FlagDisplay==1)//1秒显示时间到

ﻩ{

ﻩﻩif(FlagSucceed==0)

ﻩ{

 //LCD提示无回波ﻩ

ﻩ   L1602_string(1,1,"

OutOfRange(0-4m)"

);

  L1602_string(2,1,"

 ------"

  }

    else

ﻩ  {

  ﻩ//LCD显示数据

   L1602_string(1,1,"

Distance Result:

"

   L1602_string(2,1,"

    cm  "

ﻩL1602_int(2,5, distance);

ﻩ }

ﻩFlagDisplay=0;

}ﻩ

3、显示程序

/********************************************************************

*文件名:

 液晶1602显示.c

*描述:

 该程序实现了对液晶1602的控制。

***********************************************************************/

#include"

1602.h"

#include"

math.h"

/********************************************************************

*名称 :

delay()

延时,延时时间大概为140US。

*输入:

 无

* 输出:

*********

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

当前位置:首页 > 初中教育 > 科学

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

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