超声波测量身高设计报告Word文档下载推荐.docx
《超声波测量身高设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《超声波测量身高设计报告Word文档下载推荐.docx(20页珍藏版)》请在冰点文库上搜索。
·
1
ABSTRACT·
目录·
2
引言·
3
1传感器
1.1构成及应用·
4
1.2传感器参数·
1.3超声波·
5
1.3.1超声波发生器·
1.3.2压电式超声波发生器·
1.3.3超声波测量仪原理·
2程序设计思路
2.1总框图与设计流程图·
6
2.2模块程序·
7
3超声波测距误差分析·
13
结束语·
附录:
实物图·
14
参考文献·
15
引言
本次设计电路采用超声波在空气中运行原理设计的一种光机电一体化的身高测量仪,该测量仪是由单片机组成的单片机中央控制系统,超声波发射电路由发射驱动电路和设计该驱动电路输出端的超声波换能器构成,超声波接收电路由超声波接收换能器、限位电路和超声波接收集成块电路构成,能测量的最大距离是10m,测试分辨力为1cm,距离显示用三位数的发光二极管,最大显示距离为99cm。
要求传感器有较好的方向性,并对脉冲响应、发送、接收的频带范围要宽。
超声波能测量身高的原理:
测量首先,超声波传感器会从人的头顶发射处一组高频声波,一般为40HZ-50HZ,当声波遇到物体(人脑最高点)后,就会被反弹回去,并被接受到,通过计算声波从发射到返回的时间,再乘以声波在媒介中的传播速度(344米/秒,空气中),就可以获得物体相对于传感器的距离值了。
(注:
人的头发吸收声波,故不影响测量值。
)
因此,本课题的研究是非常有实用和商业价值。
本次设计采用超声波在空气中运行原理设计的一种光机电一体化的身高测量仪,该测量仪是由单片机组成的单片机中央控制系统,超声波发射电路由发射驱动电路和设于该驱动电路输出端的超声波换能器构成,超声波接收电路由超声波接收换能器、限位电路和超声波接收集成块电路构成。
1传感器
1.1构成及应用
传感器超声波传感器是利用超声波的特性研制而成的传感器。
超声波是一种振动频率高于声波的机械波,由换能晶片在电压的激励下发生振动产生的,它具有频率高、波长短、绕射现象小,特别是方向性好、能够成为射线而定向传播等特点。
超声波对液体、固体的穿透本领很大,尤其是在阳光不透明的固体中,它可穿透几十米的深度。
超声波碰到杂质或分界面会产生显著反射形成反射成回波,碰到活动物体能产生多普勒效应。
因此超声波检测广泛应用在工业、国防、生物医学等方面。
以超声波作为检测手段,必须产生超声波和接收超声波。
完成这种功能的装置就是超声波传感器,习惯上称为超声换能器,或者超声探头。
超声波探头主要由压电晶片组成,既可以发射超声波,也可以接收超声波。
小功率超声探头多作探测作用。
它有许多不同的结构,可分直探头(纵波)、斜探头(横波)、表面波探头(表面波)、兰姆波探头(兰姆波)、双探头(一个探头反射、一个探头接收)等。
超声波传感技术应用在生产实践的不同方面,而医学应用是其最主要的应用之一,下面以医学为例子说明超声波传感技术的应用。
超声波在医学上的应用主要是诊断疾病,它已经成为了临床医学中不可缺少的诊断方法。
超声波诊断的优点是:
对受检者无痛苦、无损害、方法简便、显像清晰、诊断的准确率高等。
因而推广容易,受到医务工作者和患者的欢迎。
超声波诊断可以基于不同的医学原理,我们来看看其中有代表性的一种所谓的A型方法。
这个方法是利用超声波的反射。
当超声波在人体组织中传播遇到两层声阻抗不同的介质界面是,在该界面就产生反射回声。
每遇到一个反射面时,回声在示波器的屏幕上显示出来,而两个界面的阻抗差值也决定了回声的振幅的高低。
在工业方面,超声波的典型应用是对金属的无损探伤和超声波测厚两种。
过去,许多技术因为无法探测到物体组织内部而受到阻碍,超声波传感技术的出现改变了这种状况。
当然更多的超声波传感器是固定地安装在不同的装置上,“悄无声息”地探测人们所需要的信号。
在未来的应用中,超声波将与信息技术、新材料技术结合起来,将出现更多的智能化、高灵敏度的超声波传感器。
1.2参数
超声探头的核心是其塑料外套或者金属外套中的一块压电晶片。
构成晶片的材料可以有许多种。
晶片的大小,如直径和厚度也各不相同,因此每个探头的性能是不同的,我们使用前必须预先了解它的性能。
超声波传感器的主要性能指标包括:
(1)工作频率。
工作频率就是压电晶片的共振频率。
当加到它两端的交流电压的频率和晶片的共振频率相等时,输出的能量最大,灵敏度也最高。
(2)工作温度。
由于压电材料的居里点一般比较高,特别是诊断用超声波探头使用功率较小,所以工作温度比较低,可以长时间地工作而不失效。
医疗用的超声探头的温度比较高,需要单独的制冷设备。
(3)灵敏度。
主要取决于制造晶片本身。
机电耦合系数大,灵敏度高;
反之,灵敏度低。
1.3超声波工作原理
1.3.1超声波发生器
为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。
总体上讲,超声波发生器可以分为两大类:
一类是用电气方式产生超声波,一类是用机械方式产生超声波。
电气方式包括压电型、磁致伸缩型和电动型等;
机械方式有加尔统笛、液哨和气流旋笛等。
它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。
目前较为常用的是压电式超声波发生器。
1.3.2压电式超声波发生器原理
压电式超声波发生器实际上是利用压电晶体的谐振来工作的。
超声波发生器内部结构由两个压电晶片和一个共振板构成。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。
反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。
超声波测量仪测量仪原理
1.3.3超声波测量仪原理
本设计是以超声波作为检测手段,必须产生超声波和接收超声波。
传感器通过声波的波长和发射声波以及接收到返回声波的时间差就能确定人体的身高,在发送脉冲的同时,接收器的计数器启动并计数,直至接收传感器接收反射回波后,计数停止,该时间差相当于测量的距离,从而可测算出测量仪与头顶之间的距离,即人体的身高。
超声波测量仪的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。
由此可见,超声波测距原理与雷达原理是一样的。
测量的公式表示为:
L=C×
T
式中:
L为测量的距离长度;
C为超声波在空气中的传播速度;
T为测量距离传播的时间差(T为发射到接收时间数值的一半)。
(图一)
超声波测量仪主要应用于医院、学校、机场等公共场所的体质测量,虽然目前的测距量程上能达到百米,但测量的精度往往只能达到厘米数量级。
由于超声波易于定向发射、方向性好、强度易控制、与被测量物体不需要直接接触的优点,是作为液体高度测量的理想手段。
在精密的液位测量中需要达到毫米级的测量精度,但是目前国内的超声波测距专用集成电路都是只有厘米级的测量精度。
通过分析超声波测量仪误差产生的原因,提高测量时间差到微秒级,以及用LM92温度传感器进行声波传播速度的补偿后,我们设计的高精度超声波测量仪能达到毫米级的测量精度。
2.程序设计思路
2.1总框图和设计流程图
单片机发出40KHZ的信号,经过放大后通过超声波发射器输出;
超声波接收器将接收到的超声波信号经过放大器放大,用锁相环电路经过检波处理后,启动单片机中断程序,测得时间为T,再由软件进行判别、计算,得出距离冰传送至LCD显示。
(图二)超声波测距总体框图
(图三)程序流程图
2.2模块程序
主函数:
主程序分为两部分,分别是完成初始化工作和各路超声波发射接收顺序控制的主函数,以及中断服务程序。
定时中断服务子程序完成超声波的轮流发射,外部中断子程序主要完成时间值的读取、距离的计算以及结果的输出。
(图四:
外部中断原理图)
#include<
mega16.h>
avr_1602.h>
avr_isd1700.h>
#definestart_PORTPORTC.1//20us脉冲引脚
#definestart_DDRDDRC//C口方式选择
#definewave_DDRDDRD//检测口方式选择
#definewave_inputPIND//检测口定义
#definetest_PINPIND
voidDisplay_Value(longs);
//显示测试值
voidDisplay_Empty(void);
//空值显示
voidStart(void);
//产生20us脉冲
interrupt[TIM0_OVF]voidtimer0_ovf_isr(void);
//定时器0中断
interrupt[EXT_INT0]voidext_int0_isr(void);
//外部中断0
interrupt[EXT_INT1]voidext_int1_isr(void);
//外部中断1
voidDisplay_time(longS);
uchardisbuff[4]={4,3,2,7};
uchardisbuff1[5]={0,0,0,0,0};
uchardisbuff2[4]={'
0'
'
m'
};
longdistance=0;
longtime=0;
intflag=0;
ucharASCII[15]={'
1'
2'
3'
4'
5'
6'
7'
8'
9'
.'
-'
M'
//显示数组
delay.h>
//0:
0x0015,0x0018
//1:
0x001C,0x001F
//2:
0x0025,0x0028
//3:
0x002C,0x002F
//4:
0x0033,0x0037
//5:
0x003C,0x003F
//6:
0x0044,0x0047
//7:
0x004A,0x004E
//8:
0x0050,0x0053
//9:
0x0054,0x0058
unsignedintsound[20]={0x0015,0x0018,0x001C,0x001F,0x0025,0x0028,0x002C,0x002F,0x0033,0x0037
0x003C,0x003F,0x0044,0x0047,0x004A,0x004E,0x0050,0x0053,0x0054,0x0058};
//voidSetREC(unsignedcharcNum);
//voidGetToneAdd(unsignedcharcNum,unsignedint*ipStartAdd,unsignedint*ipEndAdd);
主程序首先是对系统环境初始化,设置定时器T0的工作模式为16位定时计数器模式。
置位总中断玉虚EA并给现实端口清零。
然后调用超声波发生子程序送出一个超声波脉冲,这中间需要一个延时(这就是会有一个最小可测试距离的原因),然后才打开中断0接收返回的超声波信号。
当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间),即可测得距离。
测得的结果以十进制BCD码方式送往LCD显示。
/**************************************************************************
*函数原型:
voidSetREC(ucharcNum);
*功能:
定点录音
**************************************************************************/
/*voidSetREC(unsignedcharcNum)
{
unsignedintAdd_ST,Add_ED;
unsignedcharAdd_ST_H,Add_ST_L,Add_ED_H,Add_ED_L;
do{
ISD_Rd_Status();
}while((SR0_L&
0x01)||(!
(SR1&
0x01)));
//if(SR0_L^0==1){systemErr}<
CMD_Err==1>
//ISD_Clr_INT();
GetToneAdd(cNum,&
Add_ST,&
Add_ED);
Add_ST_L=(unsignedchar)(Add_ST&
0x00ff);
Add_ST_H=(unsignedchar)((Add_ST>
>
8)&
Add_ED_L=(unsignedchar)(Add_ED&
Add_ED_H=(unsignedchar)((Add_ST>
ISD_SendByte(SET_REC);
ISD_SendByte(0x00);
ISD_SendByte(Add_ST_L);
//S7:
S0开始地址
ISD_SendByte(Add_ST_H);
//S10:
S8
ISD_SendByte(Add_ED_L);
//E7:
E0结束地址
ISD_SendByte(Add_ED_H);
//E10:
E8
Set_SS;
delay_ms(10);
//延迟10ms
//if(SR0_L^0==1){systemErr}<
}*/
voidGetToneAdd(ucharcNum,Uint*ipStartAdd,Uint*ipEndAdd);
取出当前语音的首末地址
**************************************************************************/
/*voidGetToneAdd(unsignedcharcNum,unsignedint*ipStartAdd,unsignedint*ipEndAdd)
//先通过独立按键模式每隔0.6-1.0秒分别录取发音(0,1,2,3,4,5,6,7,8,9,十,点,摄氏度)
*ipStartAdd=sound[cNum*2];
//ipStartAdd为每段起始地址
*ipEndAdd=sound[cNum*2+1];
//ipEndAdd为每段结束地址
}*/
interrupt[TIM0_OVF]voidtimer0_ovf_isr(void)
TCNT0=0xFE;
//4us定时
GICR=0x80;
//开外部中断一
time++;
}
interrupt[EXT_INT0]voidext_int0_isr(void)
{
TIMSK=0x01;
//开定时器0
GICR=0x00;
//关闭所有中断
}
interrupt[EXT_INT1]voidext_int1_isr(void)
{inti;
TIMSK=0x00;
//全关
distance=((time*3.4)/10);
Display_time(time);
Display_Value(distance);
time=0;
if(test_PIN&
=0X02)
{
//delay_ms(60);
disbuff2[0]=ASCII[disbuff[