超声波测距仪实验报告

时间:2024.3.31

                       创新设计制作

         

               课题名称:超声波测距仪

             班级:应用电子0901

             姓名:吴星超

             学号:0503090128

             指导老师:杨文博

前言

随着人类社会从工业化社会到信息化社会的发展,视觉传达设计经历了商业美术、工艺美术、印刷美术设计、装潢设计、平面设计等几大阶段的演变,最终成为以视觉媒介为载体,利用视觉符号表现并传达信息的设计。对于每一位“为传达而设计”的设计者来说,如何正确、充分地传达信息是我们始终要面临的中心问题。但是,在当今社会,由于科技的进步,社会环境和社会秩序的更新,各种视觉媒介的充斥,影响着人们的思维、观念和感情,仅仅把传达信息的关键词定位于正确和充分显然是不够的。鉴于时代的要求与设计本质的要求,必须要把视觉传达设计的创新重视起来,以创新为前提充分准确地传达信息。设计界存在着大量的抄袭、模仿之作,使得设计活动成为一种程式。比如一说到大学标志,就等于是篆书外加一个圆托印章;一谈到VIS设计,便是大量相同的模版拷贝;一说到数码的视觉符号,就是一大堆蚂蚁般的“1”+“0”;一谈到商品的广告,就是戴眼镜的博士或美女的推荐代言等等。人们无时无刻都被这些“东施效颦”的设计所侵犯和骚扰,这些设计给我们带来了视觉污染,人们不禁要问:设计究竟怎么了?面对这些,我们每一个设计师都责无旁贷。现在该是大力宣扬“设计创新”的时候了,因为这个时代比以往任何时期都更需要清晰而独创的视觉传达设计。那么,视觉传达设计的创新究竟体现在哪些方面?

目录

一、超声波测距仪的制作. 3

1.1 超声波测距的原理. 3

1.2 超声测距仪的硬件电路. 5

1.2.1回流信号放大电路. 5

1.2.2 信号检波电路. 6

1.3超声波测距程序设计. 7

二、总结:. 20

三、参考文献. 20

一、超声波测距仪的制作

1.1 超声波测距的原理

     根据相关的物理学知识,声音在介质中如空气和石头中传播时,其衰减特性与其频率相关,频率越高越不容易衰减,相应地其传播距离越远。当声音的频率在20KHz以上的范围时,超出了人耳的听觉范围,变成了超声波,可以传播较远的距离而不衰减,且其本身的信号频率特性不容易受环境噪音的干扰。我们可以利用超声波的这一特性进行测距。我们可利用并列安装的一对超声波探头来发射和接收超声波。

发射头标识为T(Transmit),接收头标识为R(Reiceive),它们里面采用谐振频率为40KHz的压电晶体来发射和接收超声波。当发射头外接40KHz的振荡源,如单片机端口时,它能发出最大功率的超声波。接收头只有在接收到中心频率为40KHz的超声波时才能产生谐振,由于压电效应将物理振荡转化为电信号输出,输出电压信号的幅值在uV量级。

在测距时,用这对探头对准要测距的物体如车辆、墙壁等,由单片机端口输出40KHz的PWM(脉宽调制信号)驱动超声波发射头(T头)发射出40KHz的一个短促脉冲(0.2—0.5ms),然后单片机开始计时,直到通过接收头和接收放大电路检测到回波信号,然后停止计时,得到超声波传播总时间Ts,再乘以当地温度下声速Vs得到超声波走的总路程,再除以2就得到了超声波探头与物体的实际距离。

     注意:超声波脉冲以5-10个频率周期为宜,太长则测距误差太大,太短则能量不足导致接收不到。声音的速度与温度和当地的空气密度有关,最好以实测值为宜,否则可能导致较大的误差。

               

                 T/R40 超声波探头(40KHz本征频率)

超声波发射和接收的硬件电路

1.2 超声测距仪的硬件电路

1.2.1回流信号放大电路

采用电路来实现测距仪功能的主要困难在于,回波小信号的检测。由于在接收探头的压电晶体两端产生的回波电信号极其微弱,在uV量级,因此要进行高增益的放大,然后才能进行有效的检测。在这里,我们采用了三个NPN型8050三极管的共射极交流耦合组态进行三级放大。在两级的级连处采用了0.1uF的电容进行交流耦合,集电极接至5V电源以提供集电结的反偏电压,基极接在两个串联50K电阻上,以获得直流工作点(2.5V)。放大之后的信号由上图中的SIGNAL端输出。

单极直流电流增益:

单级直流电压增益:

交流电压增益要低于直流增益,经过实测,此电路的三级交流电压增益在30000左右,可将uV级的电压信号放大至十至百mV的量级。

1.2.2信号检波电路

   经过回波信号放大电路,已经进入了数字芯片可以检测的范围,但此时的信号仍为频率信号,并不能直接为单片机所识别。因此还需要一个检波译码芯片,能够识别出40KHz的频率波并将其转化为数字电平信号。

   LM567为一种典型的音频信号译码芯片,音频信号由其3脚引入。当此音频信号的频率与LM567的设置频率相同时,则其第8脚的输出电平由高变低。LM567的设置频率由5、6脚之间接上的可调电阻器的阻值进行调节。

   可变电阻调节方法:将一个40KHz的频率源连接到LM567的3脚,将LM567的OUT端连接至电压表,然后调节5、6脚之间的电位器直到OUT端的电平变低。

  

   至此,微弱的回波电信号在此已转化为LM567的OUT端输出的可被单片机识别的数字电平信号。

1.3超声波测距程序设计

  程序流程 

源代码:

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

/* 文件名; clock_c                                              */

/* 程序描述:显示时钟                                            */

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

//系统包含的头文件

#include <hidef.h>

#include <MC68HC908QY4.h>

//中断函数和子函数声明部分

void _ADC_Interrupt(void); //ADC中断子程序

void _KBD_Interrupt(void); //键盘中断子程序

void _TOF_Interrupt(void); //定时器溢出中断子程序

void _TCH1_Interrupt(void);//定时器通道1中断子程序

void _TCH0_Interrupt(void);//定时器通道0中断子程序

void _IRQ_Interrupt(void); //外部中断中断子程序

void _Startup(void);       //复位中断子程序

//用户子程序定义

void SYS_Init(void);       //系统初始化子程序

void pled(unsigned char k);//串行数据输出子程序

void display(unsigned char dispchar,unsigned char n);//数码管显示子程序

//宏定义

#define CONFIG1_VAL  0x3D     //用户配置config1寄存器的值

#define CONFIG1_ADR  0xFDEA   //CONFIG1_VAL存放的地址

#define JMP_TAB_ADR  0xFDEB   //用户中断向量起始地址

#define JMP_Code     0xCC     //跳转指令直接寻址方式的指令码

typedef void (*tIntFunc)(void); //声明一个指向函数的数据类型

typedef struct jumpEntry {      //声明一个结构体jumpEntry类型

   unsigned char jmpIstr;

   tIntFunc      intFunc;       //定义一个tIntFunc类型的变量

} JumpEntry;

//CONFIG1_VAL存放到CONFIG1_ADR定义的地址中

const unsigned char CONFIGX @CONFIG1_ADR = CONFIG1_VAL;

//定义各中断向量的中断入口

const JumpEntry IntJmpTable[] @JMP_TAB_ADR = {   //定义数组IntJmpTable,元素为JumpEntry类型

           JMP_Code, _ADC_Interrupt,            //AD转换中断矢量地址:$FDEB

           JMP_Code, _KBD_Interrupt,        //键盘唤醒中断矢量地址:$FDEE

           JMP_Code, _TOF_Interrupt,        //定时计数器溢出中断矢量地址:$FDF1

           JMP_Code, _TCH1_Interrupt,       //定时器通道1溢出中断矢量地址:$FDF4

           JMP_Code, _TCH0_Interrupt,       //定时器通道0溢出中断矢量地址: $FDF7

           JMP_Code, _IRQ_Interrupt,        //IRQ矢量地址: $FDFA

           JMP_Code, _Startup               //复位矢量地址:$FDFD

};

//数码管显示编码 内容为:{0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,-,三}

const unsigned char sgcode[20]={0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,

0,0x40,0x49,0x66} ;

unsigned char dspbf[4]={0x0d,0x0c,0x0d,0x0c};       //存放待显示的数据

//unsigned char mscnt;                        //定时器溢出计数位

int backtime;                         //定义一个全局变量,存储超声波传播时间

Bool  intflag=0;                        //定义一个全局变量,存储超声接收中断标志

Bool  intflag2=0;                         //定义一个全局变量,存储超声发射标志

int temp;

int temp1;

//主程序开始

void main(void)

{   unsigned char i;                             

      unsigned char j;

      SYS_Init();

      TSC_TSTOP=0;//允许开始计数 

     

       

      for(;;)

      {    

         DisableInterrupts;    //禁止所有的中断        

         if(intflag=0)     //intflag标志是为了判断是否有超声波接收中断产生

          {            //如果有接收中断产生,则将其置位,如果没有,则为0,此时数码管上显示"dcdc"

            

            dspbf[0]=0x0d;

            dspbf[1]=0x0c;

            dspbf[2]=0x0d;

            dspbf[3]=0x0c;

          }     

           

            for(i=0;i<4;i++){  display(dspbf[i],i); }     //分别送去显示

           for(i=0;i<4;i++){  display(dspbf[i],i); }     //分别送去显示 

            intflag2=0;

         intflag=0;

 

         TSC_TOIE=0;                      //禁止计数中断

         backtime=0;

         TSC_TOIE=1;

                        

         for(i=0;i<5;i++)               //发射一个短脉冲      40KHz

           {

          PTA^=0x12;               //PTA1 和PTA4共同驱动超声波发射探头  ^为按位异或

          _asm(nop);

         }

         for(i=0;i<10;i++) //发射完超声后,延时一小段时间禁止所有的接收中断,防止造成误接收

         { 

          _asm(nop);         //C语言中嵌入的空操作指令

         } 

         EnableInterrupts;    //开启所有的中断

         intflag2=1;           //超声波的发射标志,在超声波发射后置位,在接收后清0

                 

          for(j=0;j<20;j++)        //显示并等待较长的时间 等待接收回流中断并处理距离值

         {

           for(i=0;i<4;i++){  display(dspbf[i],i); }     //分别送去显示  

            for(i=0;i<4;i++){  display(dspbf[i],i); }     //分别送去显示 

            for(i=0;i<4;i++){  display(dspbf[i],i); }     //分别送去显示

          }

   

      }

                                                

}

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

/* 文件名:  系统初始化子程序                                            */

/* 程序描述:包括config寄存器的设置、端口寄存器的设置、定时器寄存器的设置*/

/* 输入参数:无                                                           */

/* 返回:   无                                                            */

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

void SYS_Init(void)

{

  CONFIG2=0x00;           //使用内部晶振,关闭复位引脚

  CONFIG1=0x3d;        //禁止看门狗,禁止LVI模块 禁止LVI复位

  //INTSCR=0x00;

  ////////////////A B口的初始化

  DDRB=0xff;           //PTB7,PTB6为输入,其余为输出

  PTBPUE=0xc0;         //PTB7,PTB6 设置上拉电阻

  PTB=0xff;            //置B口全为1

  DDRA=0x12;           //A口为输入方式  PTA1 PTA4为输出方式

  PTA=0x02;            //A口全为0

/////////////////定时计数器的初始化

  TSC=0x63;            //设置允许定时器溢出中断,设置分频因子为32 n=t*f/p   p为分频因子

  TMOD=1;//设置预置寄存器值 定时器的内部晶振频率为3.2Mhz  //TMOD=0.00001*3.2M/32=1

 

/////////////////键盘控制状态寄存器的初始化

  KBSCR=0x00;      //键盘状态和控制寄存器 允许键盘中断 下降沿触发

  KBIER=0x04;       //键盘中断控制寄存器 禁止键盘中断自动唤醒 设定PTA2为中断输入口

  

  EnableInterrupts;  // 开总中断

 

}

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

/*文件名:display函数                                                    */

/*程序描述:在位置n上,显示数值dspchar                                      */

/*调用子程序:传送数值的pled函数                                           */

/*输入参数:dspchar,n                                                       */

/*         dspchar:段选信号,输入用户要显示的数据                          */

/*               n:位选信号,                                                */

/*返回参数:无                                                               */

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

void display(unsigned char dspchar,unsigned char n) 

 {

  unsigned char i,j,k=1;

 

  for(j=0;j<(n+2);j++){

    k*=2;

  }

 

  pled(sgcode[dspchar]) ;        //发送编码到LED

  PTB=0x00;

  PTB+=k;                        //位选

  for(i=0;i<25;i++)

  {                             //延时

     _asm(nop);

     

  }

          

  PTB=0x00;

 }

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

/*文件名:pled函数                                                         */

/*程序描述:8位并行输出串行移位编程,PTB1为时钟信号,将PTB0的输出并行输出  */

/*输入参数:需显示数值的编码k                                              */

/*返回:    无                                                             */

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

void pled(unsigned char k)

 {unsigned char i;

 PTB=0x00;                  //PTB口全部变成低电平

 for(i=0;i<8;i++){

 PTB_PTB1=0;         //将PTB1变低,即时钟信号变低

 if(k<0x80) PTB_PTB0=1; //从高位开始发送,检查最高位是否为1,为0则PTB0=1,高位为1则默认为0

 PTB_PTB1=1; //给出一个下降沿信号,移位信号

 PTB=0x00;//准备处理下一位

 k<<=1;//左移

 }

 }

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

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

//以下为中断函数,需要用到时,在相应的函数内编写即可

interrupt void _ADC_Interrupt(void) {

}

interrupt void _KBD_Interrupt(void)

{          

                                                  

     if(intflag2==1)                  //如果超声波已发射     

     {

     

            if(intflag==0)         //如果在超声波发射后第一次接收到回波,为了防止杂散回波的干扰

              { 

                 intflag2=0;

                 DisableInterrupts;       // 接收到回波后  禁止所有中断        

                     TSC_TOIE=0;          //禁止定时溢出中断

                  temp=(float)(backtime)*1.89;

                  backtime=0;      //对backtime重新写值时必须禁止定时溢出中断的产生

                  TSC_TOIE=1;                  

                  intflag2=0;

                  intflag=1;             //处理距离值并显示         

               temp1=temp/10;        //距离值除以10之后赋给一个中间变量

                  dspbf[0]=temp/1000;             //把千位存入第0个数码管显存中             

                  dspbf[2]=temp1%10;          //把十位存入第2个数码管显存中

                  temp1=temp/100;

                  dspbf[1]=temp1%10;          //把百位存入第1个数码管显存中                       

                  dspbf[3]=temp%10;                 //把个位存入第一个

              }

                                               

     }

}

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

/* 文件名:  定时器溢出中断子程序                                    */

/* 程序描述:定时器每溢出1次,backtime自动加1,溢出周期为TMOD*32/3.2MHz=10us */

/* 输入参数:无                                                                */

/* 返回:    无                                                                */

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

interrupt void _TOF_Interrupt(void)

{     

     backtime++;

     TSC_TOF=0;                    //清除定时计数器溢出中断标志位,以允许下次计时溢出

 

}

interrupt void _TCH1_Interrupt(void){

}

interrupt void _TCH0_Interrupt(void){

}

interrupt void _IRQ_Interrupt(void){

}

二、总结:

做这个项目使我们受益匪浅。

其实一开始,我们的计划很宏伟,不但想实现简单的计步器功能,超声波测距等功能。可当我们着手开始干的时候,才发现事实远不像想象的那么简单。我们发现做很多事情时往往受到很多限制,这时候需要想办法在有限的条件下做出尽量出色的事情。把实际问题转化为逻辑问题的过程让我们感触良多。误也能纠结我们好几天。在程序调试的过程中,我们发现数学对我们的帮助很大,它帮我们分析,帮我们确定最优化的解决方案。但我们也依然记得当程序调试成功的那一刻,大家的心情是多么激动。我们成功了,虽然离我们的预期还很远,但我们至少做出了一个比较完整的东西。

最重要的,遇到困难不要总想着放弃,要主动和阻力其他成员交流,大家一起想解决方案,团队的力量是伟大的。

三、参考文献

王静霞 《单片机应用技术 (C语言版) 》; 电子工业出版社

更多相关推荐:
超声波测距实验报告

超声波测距实验报告一实验规划1在网上寻找同型号超声波原理图并理解2向学长询问队里关于超声波测距的资料3根据资料将硬件电路搭好然后一边消化资料一边学习单片机的相关知识4将上一届的程序看懂然后稍加改动以适应自己的单...

超声波测距仪设计实验报告

超声波测距仪设计实验报告课题设计目的及意义随着科学技术的快速发展超声波将在测距仪中的应用越来越广但就目前技术水平来说人们可以具体利用的测距技术还十分有限因此这是一个正在蓬勃发展而又有无限前景的技术及产业领域展望...

超声波测距实验报告

课设题目:超声波测距仪1课题设计的目的及意义随着科学技术的快速发展,超声波在测距仪中的应用越来越广,但就目前技术水平而言,人们可以利用的测距技术还十分有限,因此,这是一个正在蓬勃发展而又有无限前景的技术及产业领…

超声波测距实验报告

超声波测距系统实物设计报告一设计要求1测量距离不小于03米数字显示清晰无数字叠加动态显示测量结果更新时间约为05秒左右2测量精度优于01米显示精度001米3距离小于03米时蜂鸣器发出嘀嘀报警4测量距离超过10米...

超声波测距器实验报告

超声波测距器的设计设计说明超声波测距器可应用于汽车倒车建筑施工工地以及一些工业现场的位置监控也可用于如液位井深管道长度物体厚度等的测量也有很多方法可以测量这里用超声波设计一个测距器实现距离的测量1基本部分a测量...

超声波测距实验报告

电子信息系统综合设计报告超声波测距仪目录摘要3第一章111213绪论3设计要求3理论基础3系统概述4第二章方案论证421系统控制模块522距离测量模块523温度测量模块524实时显示模块525蜂鸣报警模块6第三...

PLC超声波测距实验报告0820xx140程稳

利用plc的高速计数模块进行超声波测距实验微型控制计算机暑期设计实验报告0820xx140程稳利用51单片机来驱动超声波模块测距是一件很容易的事只需要结合定时中断和外部中断利用12M或更高的晶振频率即可精确获取...

超声波测距总结报告

电子技术实验课程设计超声波测距系统总结报告自03胡效赫20xx012351自03胡效赫20xx012351一课题内容及分析首先根据课程所给的几个题目进行选择由于自己最近在做电子设计大赛的平台设计希望对超声波测距...

基于单片机的超声波测距倒车雷达设计开题报告

指导文件5毕业设计论文开题报告题目中文基于单片机的超声波测距倒车雷达设计英文课题类型课题来源学生姓名专业班级指导教师称填写日期20年月日

51单片机超声波测距毕业论文开题报告

毕业设计摘要随着科技的发展人们生活水平的提高城市发展建设加快城市给排水系统也有较大发展其状况不断改善但是由于历史原因合成时间住的许多不可预见因素城市给排水系统特别是排水系统往往落后于城市建设因此经常出现开挖已经...

超声波测距开题报告

*******大学毕业设计(论文)开题报告题目名称:基于单片机的超声波测距仪

超声波测距开题报告

山东科技大学本科毕业设计论文开题报告题目学院名称信息与电气工程学院专业班级电气工程及其自动化082学生姓名杜辉学号20xx01100202指导教师填表时间20xx年4月6日1填表说明1开题报告作为毕业设计论...

超声波测距实验报告(26篇)