超声多普勒测速仪设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

超声多普勒测速仪设计与测试报告

天津大学

2016年1月

目录

一题目要求 (3)

二总体设计方案 (4)

(一)电路设计框图 (4)

(二)总体电路实物图 (4)

(三)总体电路图 (4)

三单元电路设计 (5)

(一)超声驱动电路 (5)

(二)回波电路 (7)

(三)乘法器电路 (8)

(四)差频信号整形电路 (9)

(五)单片机显示程序 (12)

四性能指标测试 (19)

五总结与感想 (21)

一题目要求

(一)测速范围:0——5M/s;

(二)测量精度:±5%;

(三)采用全模拟电路实现;

(四)允许和鼓励使用单片机;

二总体设计方案(一)电路设计框图

(二)总体电路实物图

(三)总体电路图(芯片双电源5V供电,比较器单电源5V供电)

三单元电路设计

(一)超声驱动电路

1 方波产生电路

使用锁相器CD4046产生40KHz方波,驱动超声发射探头

产生方波如下

接入超声发射探头后

2 滤波电路

将输出方波滤成正弦波输入到乘法器中

滤波后波形

(二)回波电路1 带通滤波电路

2 放大电路

放大后波形

3 滤波电路

将输出方波滤成正弦波输入到乘法器中

波形如下

(三)乘法器电路

产生差频与和频信号,波形如下

(四)差频信号整形电路

1 放大电路与低通滤波电路

滤去多普勒和频信号如下

2 跟随器与高通滤波

差频信号输出发现直流偏置过大,所以加一个高通滤波滤出直流,但发现有前级影响,高通无法工作,所以再加入一个跟随器,隔离前级阻抗,滤出直流成分,输入比较器,才可正常工作。

3 迟滞比较器

计算门限电压600mA左右,输出要能输入到单片机中,芯片单电源5V供电方满足要求。

现象如下

(五)单片机显示程序

代码如下

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

* 描述:

* P3.5口方波输入脚

* #define TRANSFORM_FRE_TO_VELOCITY 2.31

//频率转换为速度的系数 *

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

#include //51寄存器文件

#include

#include

#include <1602.h>

#define uchar unsigned char

#define ulong unsigned long

#define uint unsigned int

#define TRANSFORM_FRE_TO_VELOCITY 2.31 //频率转换为速度的系数速度=频率/

TRANSFORM_FRE_TO_VELOCITY

uchar data led[4]={0,0,0,0,}; //存放速度的个、十、百位uchar data Fre[4]={0,0,0,0,}; //存放频率的个、十、百、千位

uchar count; // 定时器实现50ms*count =1s ulong l,m,v; //l表示频率v表示速度m计数器越过65536的次数

BYTE code dis1[] = {"Frequency Speed"}; //液晶屏初始化的一些显示

BYTE code dis2[] = {". KM/H"};

BYTE code dis3[] = {"HZ"};

void time_0() interrupt 1 using 1 //50ms定时器20*50ms=1s {

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

if(count==20)

{ TR1=0;

TR0=0;

count=0;

}

}

void jishu_1() interrupt 3 using 2 //计数器1s中上升沿的个数=频率

{

m++;

TH1=0;

TL1=0;

}

void xianshi() //实时更新液晶屏

{

uchar k;

for(k=0;k<3;k++)

{

if(k>=1) //写速度

lcd_pos(0x4B-k-1); //移动越过小数点

else

lcd_pos(0x4B-k); //0x40表示第二行A表示第10位第二行第10位写

lcd_wdat(led[k]+0X30);

}

for(k=0;k<4;k++)

{

lcd_pos(0x43-k); //写频率

lcd_wdat(Fre[k]+0X30);

}

}

void xianshi2(void) //液晶屏初始化显示

{

BYTE i;

lcd_init(); //初始化LCD

delay(10);

lcd_pos(1); //设置显示位置为第一行的第5个字符 i = 0;

while(dis1[i] != '\0')

{ //显示字符"VelocityMeasure!"

lcd_wdat(dis1[i]);

i++;

相关文档
最新文档