超声多普勒测速仪设计与测试报告
天津大学
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
#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++;
}
lcd_pos(0x4A); //设置显示位置为第二行第二个字符
i = 0;
while(dis2[i] != '\0')
{
lcd_wdat(dis2[i]); //显示字符". KM/H"
i++;
}
lcd_pos(0x44); //设置显示位置为第二行第二个字符 i = 0;
while(dis3[i] != '\0')
{
lcd_wdat(dis3[i]); //显示字符"HZ"
i++;
}
}
void GetFrequency() //用定时器和计数器配合获得频率
{
TMOD=0x51;
EA=1;
ET0=1;
ET1=1;
m=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=0;
TL1=0;
TR0=1;
TR1=1;
while(TR0==1);
l= m*65536+TH1*256+TL1;
Fre[0]= l%10;
Fre[1]= (l/10)%10;
Fre[2]= (l/100)%10;
Fre[3]= (l/1000)%10;
}
void GetCarVelocity() //频率转换为速度{
v=l/TRANSFORM_FRE_TO_VELOCITY;
led[0]= v%10;
led[1]= (v/10)%10;
led[2]= (v/100)%10;
led[3]= (v/1000)%10;
}
void main()
{
xianshi2();
while(1)
{
GetFrequency();
GetCarVelocity();
xianshi();
delay(10);
}
}
四性能指标测试
超声探头计算得夹角45度可得最佳效果
五总结与感想
实践是检验真理的唯一标准。
大学上了两年,学到最多本事的课就是李老师的课了。理论若不应用与实际之中就是空谈,电路自己不亲手设计搭建就不能理解其中的门道,实验中,我不仅掌握了电路搭建,更学会了从别人身上吸取知识,每次实验和做超声波的小伙伴进行交流互相讲一讲自己设计的精彩与不足,比一个人闷头苦做不知道多学习了多少。每天晚上李老师都会来实验室知道我们,感谢李老师的谆谆教诲。
实验中困难重重,实验室各个仪器也会出现各种意外,同轴电缆也有坏的,这些都会影响实验,所以我养成了每次实验前检查仪器和导线的好习惯。实验中电路板也不是没有烧过,芯片因为接入电源过大也烧了2个,小手也被烫过,手上的伤可不就是我们这些实践者的勋章。检验时老师满意的笑容和我们心中的自豪之情不就是对我们辛苦实践的最好回报吗。
实验到比较器之前还是很顺利的,但是差频信号无论如何都不能进行比较,这个事情我卡了一个星期,每天焦灼的实验,和小伙伴沟通,向老师询问,但就是无法解决,最后将示波器调至直流耦合,发现我的波形被抬得很高,所以在后面接入跟随器与高通后我的波形就能正常输入了。实验的排查与思考非常重要,必须要从抄电路到设计电路,出现象到出性能。
科研的道路是辛苦而又曲折的,不能因为一次小小的挫败就放弃自己,也不能因为一次小小的成功就沾沾自喜。我知道我做的测速仪还有巨
大的上升空间,我要走的路很长。本次电路实践不仅对我的知识有巨大提升,甚至改变了我的人格,由本来的毛躁自大变得有一些沉稳,切忌眼高手低。
感谢我的伙伴们与我的分享交流,感谢李老师的不厌其烦的指导。怎么努力都不过分,大学生不可怨天尤人,所有的让自己不够满意的结果都是因为自己不够努力。
只要我们敢,我们够努力,可上九天揽月,可下五洋捉鳖!