超声波测距课程设计.doc_第1页
超声波测距课程设计.doc_第2页
超声波测距课程设计.doc_第3页
超声波测距课程设计.doc_第4页
超声波测距课程设计.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告设计名称: 超声波测距 班 级: 15 q物联网1班 学 号:姓 名:指导教师:2017年12月11日-2017年12月15日基于单片机的超声波测距设计1设计目的我所设计的基于ATMEL公司AT89C52单片机的超声波测距,是利用该51单片机和HC-SR04超声波模块来测量距离。超声波是只频率高于20kHz以上的声波,它属于机械波。遵循一般机械波在弹性介质种的传播规律,如在介质的分界面处发生反射和折射的现象,在进入介质后被介质吸收而发生衰减等。正是因为这些性质,使得超声波可以被用于距离的测量中。超声测距是一种非接触检测技术,不受光线,被测对象的颜色等的影响,抗干扰能力强。利用超声波检测往往比较迅速、方便、计算简单、易于实现实时控制,并且在测量精度方面能达到工业实用的指标要求,因而超声波测距被广泛的应用于生活中的各个方面,甚至于很多机器人能及时避开障碍物也是用的超声波测距。因此研究超声波测距是非常有意义的。基于市面上单片机成本低、精度高、易于控制、操作简单,故本设计采用AT89C52单片机和HC-SR04超声波模块来测量距离。2 设计方案本设计采用以AT89C52单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法。整个电路采用模块化设计,由主程序、预置子程序、发射子程序、接收子程序、显示子程序等模块组成。各探头的信号经单片机综合分析处理,实现超声波测距仪的各种功能。在此基础上设计了系统的总体方案,最后通过硬件和软件实现了各个功能模块。基本工作原理: (1)采用IO口TRIG触发测距,给最少10us的高电平信呈。 (2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S)/2; 1) 硬件设计:超声波测距按模块可化分为:1 单片机主控芯片2 超声波发射部分(包括功率驱动电路、超声波发生器)3 超声波接收部分(包括超声波接受器、放大电路、锁相环电路)4 显示部分 (显示电路 LCD1602)* 5 超声波是一种声波,属于机械波,其速度和使用环境的温度及空气的湿度、是否有尘埃物质都有较大的响,所以若要测量得更加精确,则必须要相关的传感器来检测使用的环境。此处只列出温度的影响情况。此处可加温湿度传感器和空气种颗粒物含量传感器,用以来补偿或估测环境引起的误差LCD16022)软件设计1主程序设计:主程序对整个单片机系统进行初始化后,先将超声波的回波接受标志位置位并且使单片机P2.1端口输出一个低电平用来启动超声波发射电路,同时将定时器T0启动,然后调用距离计算的子程序,再根据定时器T0记录的时间计算出所需要测量的距离,然后再调用显示子程序,再将测出的距离以十进制的形式送至LCD1206液晶显示屏显示。最后主程序通过对回拨信号的接收,完成后续的工作,假如标志位清 0则说明接受到了回波信号,那么主程序就返回到初始端重新将回拨接收标志置位并且在单片机的P2.0端口上发送低电平到超声波的发射电路,就这样连续不断的来运行,循环不断的工作用来实现测距。2显示程序初始化-写命令-写数据*将各类函数声明都写到同一个头文件中,方便查看各个函数的参数以及功能。3 硬件电路HC-SR04超声波测距模块说明书 产品特点: HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。 注:1、此模块不宜带电连接,若要带电连接,则先让模块的GND端先连接,否则会影响 模块的正常工作。单片机主控芯片原理图:LCD1602液晶屏显示电路图:HC-SR04模块硬件电路:4 软件程序1主程序(main.c)#include#include#includelcd.hsbit Trig = P21;sbit Echo = P20;unsigned char Us=Ultrasonic Range;unsigned char code ASCII15 = 0,1,2,3,4,5,6,7,8,9,.,-,M;static unsigned char DisNum = 0; /显示用指针 unsigned int time=0; unsigned long S=0; bit flag =0; unsigned char disbuff4 = 0,0,0,0,;/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void Conut(void) time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.7)/100; /算出来是CM if(S=700)|flag=1) /超出测量范围显示“-” flag=0; DisplayOneChar(0, 1, ASCII11); DisplayOneChar(1, 1, ASCII10);/显示点 DisplayOneChar(2, 1, ASCII11); DisplayOneChar(3, 1, ASCII11); DisplayOneChar(4, 1, ASCII12);/显示M else disbuff0=S%1000/100; disbuff1=S%1000%100/10; disbuff2=S%1000%10 %10; DisplayOneChar(0, 1, ASCIIdisbuff0); DisplayOneChar(1, 1, ASCII10);/显示点 DisplayOneChar(2, 1, ASCIIdisbuff1); DisplayOneChar(3, 1, ASCIIdisbuff2); DisplayOneChar(4, 1, ASCII12);/显示M void zd0() interrupt 1 /T0中断用来计数器溢出,超过测距范围 flag=1; /中断溢出标志 void StartModule() /启动模块 Trig=1; /启动一次模块 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); Trig=0; void delayms(unsigned int ms)unsigned char i;for(ms;ms0;ms-)for(i=110;i0;i-);void main(void) TMOD=0x01; /设T0为方式1,GATE=1; TH0=0; TL0=0; ET0=1; /允许T0中断 EA=1; /开启总中断InitLcd1602();LcdShowStr(0,0,Us);while(1) StartModule(); while(!Echo);/当RX为零时等待 TR0=1; /开启计数 while(Echo);/当RX为1计数并等待 TR0=0;/关闭计数 Conut();/计算 delayms(80);2LCD1602液晶显示函数声明(LCD.h)#ifndef _LCD_H_#define _LCD_H_/*当使用的是4位数据传输的时候定义,使用8位取消这个定义*/#define LCD1602_4PINS/*包含头文件*/#include/-重定义关键词-/#ifndef uchar#define uchar unsigned char#endif#ifndef uint #define uint unsigned int#endif/*PIN口定义*/#define LCD1602_DB P0 /data bus 数据总线sbit LCD1602_RS = P35;sbit LCD1602_RW = P36;sbit LCD1602_EN = P34; /*函数声明*/*在51单片机12MHZ时钟下的延时函数*/void Lcd1602_Delay1ms(uint c); /误差 0usvoid Read_Busy(); /忙检测函数,判断bit7是0,允许执行;1禁止void Lcd1602_Write_Cmd(unsigned char cmd); /写命令void Lcd1602_Write_Data(unsigned char dat); /写数据void LcdSetCursor(unsigned char x,unsigned char y); /坐标显示void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str); /显示字符串void InitLcd1602(); /1602初始化void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); #endif3LCD1602液晶显示函数及初始化(LCD.c)#includelcd.hvoid Read_Busy() /忙检测函数,判断bit7是0,允许执行;1禁止 unsigned char sta; / LCD1602_DB = 0xff; LCD1602_RS = 0; LCD1602_RW = 1; do LCD1602_EN = 1; sta = LCD1602_DB; LCD1602_EN = 0; /使能,用完就拉低,释放总线 while(sta & 0x80);void Lcd1602_Write_Cmd(unsigned char cmd) /写命令 Read_Busy(); LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_DB = cmd; LCD1602_EN = 1; LCD1602_EN = 0; void Lcd1602_Write_Data(unsigned char dat) /写数据 Read_Busy(); LCD1602_RS = 1; LCD1602_RW = 0; LCD1602_DB = dat; LCD1602_EN = 1; LCD1602_EN = 0;void LcdSetCursor(unsigned char x,unsigned char y) /坐标显示 unsigned char addr; if(y = 0) addr = 0x00 + x; else addr = 0x40 + x; Lcd1602_Write_Cmd(addr|0x80);/按指定位置显示一个字符void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)Y &= 0x1;X &= 0xF; /限制X不能大于15,Y不能大于1if (Y) X |= 0x40; /当要显示第二行时地址码+0x40;X |= 0x80; /算出指令码Lcd1602_Write_Cmd(X); /发命令字Lcd1602_Write_Data(DData); /发数据void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str) /显示字符串 LcdSetCursor(x,y); /当前字符的坐标 while(*str != 0) Lcd1602_Write_Data(*str+); void InitLcd1602() /1602初始化 Lcd1602_Write_Cmd(0x38); /设置16*2显示,5*7点阵,8位数据接口 Lcd1602_Write_Cmd(0x0c);/设置开显示,不显示光标 Lcd1602_Write_Cmd(0x06);/写一个字符后地址指针加1 Lcd1602_Write_Cmd(0x01); /清屏,显示清0,数据指针清0 5 调试结果及说明最终调试出了正确的结果,理论上HC-SR04能测精确测量的量程是四米,然而实际精确测量的范围只有2.5米。这与实验使用的单片机型号有很重要的关系。所用的AT89C52单片机内部本来就焊接了很多电路,在本次超声波测距课设中都不会用到,其中的一部分电路还会影响其正常工作的性能。另外AT89C52单片机的晶振为11.0592MHz,T0中断计数也有些微小的误差。不仅如此,超声波的声速还受到温度、空气湿度、空气中固体颗粒尘埃物的含量有关,甚至还与不同障碍物表面材料的不同介质有关。使用的超声波接受器和发射器是分开的,中间存在夹角,而在本次课程设计中并未考虑此因素,若想更精确一般回再乘以超声波感应夹角一半的余弦值。除此之外,还有我们很少考虑到的余弦波的影响。*超生波测距被广泛地应用于生活中,本次设计也还可以做一些拓展,例如再加上蜂鸣器,当距离小于1米是蜂鸣器开始响,此项常用于车尾,倒车是后方距离太小就会发出警报。实习收获 通过这次课程设计对我来说收获甚多。单片机在生活中应用很广泛,起初选题的时候本来打算选可插SD卡的tft

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论