毕业设计论文《低频数字式相位测量仪》.docx
- 文档编号:5628180
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:22
- 大小:153.10KB
毕业设计论文《低频数字式相位测量仪》.docx
《毕业设计论文《低频数字式相位测量仪》.docx》由会员分享,可在线阅读,更多相关《毕业设计论文《低频数字式相位测量仪》.docx(22页珍藏版)》请在冰豆网上搜索。
毕业设计论文《低频数字式相位测量仪》
毕业设计论文《低频数字式相位测量仪》
摘要
该数字式相位测量仪以单片机(89c52)为核心,通过高速计数器CD4040为计数器计算脉冲个数从,而达到计算相位的要求,通过8279驱动数码管显示正弦波的频率,不采用一般的模拟的振动器产生,而是采用单片机产生,从而实现了产生到显示的数字化.具有产生的频率精确,稳定的特点.相移部分采用一般的RC移相电路,节省了成本。
一方案论证与比较:
1常见正弦信号的测量方法:
方案一:
采用模拟分离元件如二极管,三极管等非线性元件,实现频率的测量,检相的功能,使用起来方便,价格便宜,但采用分离元件由于分散性太大,不便于集成及数字化,而且测量误差大。
方案二:
采用集成的检相器,检频器实现频率及相位的测量。
这种方法的实现框图如下:
这种方法虽然可实现比较精确的测量,但由于模拟信号易受外界的干扰,不易调节,无法实现智能化,数字化的缺点,一般在要求较低的情况下使用。
方案三:
此方案采用高速信号发生器产生20MHz的高频信号,其主要特点是采用CD4040高频计数器结合单片机,利用计数脉冲实现测量相位与频率的目标。
这种方法克服了模拟电路的缺点,实现了数字化与集成化。
本设计采用了这种方法。
这种方案的组成框图:
二系统总体设计
按照题目要求,我们设计的相位测量系统包括三部分:
正弦波产生系统(包括频率调整电路),移相电路和相位显视系统,其总体框图如下:
三各部分硬件电路设计及参数计算
1、正弦波产生电路
• 方案一:
利用8038芯片或MAX038可以实现压控的函数发生器通过改变少量的外围元件,可实现正弦波,方波,三角波,并可实现频率调节,但采用模拟器件由于元件分散性太大,即使使用单片函数发生器,参数也与外部元件有关,外接的电阻,电容对参数影响很大,因而产生的频率稳定度差,精度低,抗干扰能力差,调节困难,成本也高。
而且灵活性差,不能实现智能化。
实现步进更困难
• 方案二:
利用单片机89c52芯片,发送脉冲信号,在一定频率范围内,再经过低通滤波,可以实现正弦信号。
这种方法可以实现频律的步进与预置,实现数字智能化。
它的原理框图:
这种方法的缺点是产生的波的频率较低,难以达到高频的要求。
题目要求是:
20HZ—20KHZ的正弦波,若对每个周期的信号取样64个点。
则要求的CP脉冲的频率:
1280HZ—1280KHZ可以实现。
通过可编程计数器的计数初值的预置,调节计数器2的时序脉冲,设计中由于采样64个存储数据,所以计数器2为64进制计数器,即通过高速计数器送出64个脉冲后,实现一个周期的正弦波输出,这样计数器2处于不断的循环寻址中,从而存储器输出连续不断单位周期内64个采样正弦波数值,通过DA转换取得相应于正弦波形的电压,再通过电容滤波就可得到正弦波。
由于全过程采用了数字化,容易实现高精度的步进控制,而且通过对计数器2起始计数时间的控制(如在计数器2前再加一计数器,使该计数器达到某一数值时计数器2开始计时寻址),还可实现数字化的相移。
由于须采取两套相同的系统,本装置中没有采用。
2移相电路:
根据题目的要求,要实现相移在-45度---+45度的调节,而提高部分要求移相在0—359度之间,且可实现步进1度要求。
采用高精度的延时电路或移相电路,虽可实现数控和步进,但由于成本高,调节较困难,不易实现,我们采用了简单的RC移相电路,比较容易的实现了相移的连续调节。
节省了制作成本,且达到了题目的基本要求。
此电路的基本原理
:
图一 图二
其中图一是无源RC滞后网络,其传递函数为:
h(jw)=1/(1+jwrc),相移角=arctan2*3。
14*r*c,图二为无源RC超前网络。
其传递函数为:
h(jw)=1/(1-j1/wrc),相移角=arctan(1/(2*3.14*r*c).
它们的相频特征曲线为
本设计使用的电路图:
ewb的仿真波形:
按照相移与F,R,C的关系式,在滞后电路中取相移角为:
45o,有tanA=2*3.14*r*c*f=1,当f=20hz时,r*c=0.008,当f=20khz时,r*c=0.000008,从而取r=4.7千欧c=1微法。
在超前网络中,取相移为45o,有tanB=1/(2*3.14*r*c*f).当f=20hz时,r*c=0.008,当f=20khz时r*c=0.000008,从而取r=4.7kΩ,c=1μF这样,相移可达+60o--60o
3'相位测量及显示电路:
本部分电路不采用相敏整流法,避免了模拟电路得不好控制,不易数字化的缺点,而是采用单片机89c52,利用高频计数器cd4040和逻辑电路来实现的相位测量。
这部分的电路图是
工作原理:
由于这部分的输入是有相移的两路正弦信号,而要实现其数字化,所以要把正弦信号转化成方波信号,其电路如下:
output输出的波形为
output输出的波形再与固定的晶振脉冲相与非产生新的脉冲信号,作为CD4040的CP脉冲,计算脉冲个数。
CD4040工作方式:
当RST脚为“0”时,计数器开始计数,CLK脚为脉冲输入端;当RST脚为“+1”时,计数器的各脚清零。
所以在output脚输出的信号的一个周期内,计数器计数一次。
为扩大测量的相移差的范围,采用两片CD4040.达到24位的要求。
计算参数如下:
设晶振的周期为Ts,两个正弦波变换成方波后的周期为To,output输出的信号的低电平的时间为T,则对应的相移对应的时间为To/2-T;CD4040计数的数值为N.则T=N*Ts,则T'=To-N*Ts;得相移对应的晶振个数N'=(To-N*Ts)/Ts;每个晶振个数对应一定的相移:
A0
则总的相移:
A0*N'
在一个周期内,测得的计数脉冲的个数通过8255传给单片机89c52,进行计算,从而达到通过软件达到现视的目的。
此设计通过8279达到显示管的驱动。
四系统软件设计:
1系统软件工作流程图
• 测量及显示程序流程图:
2)信号产生程序流程图:
2,主要程序:
见附页
五测试指标:
1测试仪器:
示波器:
HitachiV-1060
频率计:
SAMPOCN3165
万用表:
DT9202
• 本设计能达到的技术指标:
1)相位测量:
(a)频率范围:
10HZ---100HZ.(b)相位测量仪的输入阻抗〉=100千欧。
(c)允许两路输入正弦信号的峰峰值可在0.5v---5vf范围内变化。
(d)相位测量绝对误差<=2度。
(e)具有频率测量及数字显示功能.(f)相位差数字显示:
相位读数为0o~359.9o,分辨力为0.1°
2)移相网络:
(a)输入频率范围:
20KHZ—200KHZ(b)连续相移范围-45度---+45度.(c)输出的正弦信号峰峰值可在0.3v—5v之间变化.
3)信号产生:
(a)频率范围:
10HZ—20KHZ;(b)频率可实现可调.(c)输入相位可欲置.
六,结论
本设计基本完成了基本部分和发挥部分的要求,用单片机89C52产生了频率在10HZ—20KHZ的正弦波,实现了相移在-60度--+60度的连续可调,测量部分采用高速计数器与单片机实现了在0度—359.9度的测量。
精确度达到了0.1度。
其实现了数字化的相位测量。
但此设计在高频的性能稍差。
有待改进。
附:
#pragmaoptimize(4)
#include"stdio.h"
#include"math.h"
#include"absacc.h"
#include"reg51j.h"
voidstart();
voidcepin();
voidcexwei();
voidcexwei6();
voidcerlc();
voidgood();
voiddisp();
voiddispff();
voiddispfa();
voidint0();
voidt0int();
codeunsignedcharled[36]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x58,0x5e,0x79,0x71,/***01...9AbcdEF***/
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,
0xf7,0xfc,0xd8,0xde,0xf9,0xf1,/*0.1...9.A.b...F.*/
0x00,0xff,0x73,0x38/***灭,亮,P,L***/};
dataunsignedcharld[8],i,j,ii,jj,iia,jja,iib,jjb,l;
dataunsignedcharms,it11,t1s;
dataunsignedcharix10,ix11;
dataunsignedcharkey;
dataunsignedinttt,tt1,tt2,tta,ttb;
dataunsignedintuuh=0;
dataunsignedintuul=0;
dataunsignedintaaa[6];
datafloatff,fff,fa;
bdatabitbit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7;
#defineP8279DXBYTE[0x2000]
#defineP8279KXBYTE[0x2001]
#defineP8255AXBYTE[0x4000]
#defineP8255BXBYTE[0x4001]
#defineP8255CXBYTE[0x4002]
#defineP8255KXBYTE[0x4003]
#defineAD0XBYTE[0x6000]
#defineAD1XBYTE[0x6001]
#defineAD2XBYTE[0x6002]
#defineAD3XBYTE[0x6003]
#defineAD4XBYTE[0x6004]
#defineAD5XBYTE[0x6005]
#defineAD6XBYTE[0x6006]
#defineAD7XBYTE[0x6007]
#defineDA0832XBYTE[0x8000]
/*xdatasignedintua[255];*/
/*------------------INT------------------------*/
voidint0()interrupt0using1
{P8279K=0x40;key=P8279D;key=key&0x01;}
voidt0int()interrupt1using1/*10ms!
*/
{TL0=0xf0;TH0=0xd8;TR0=1;
ms++;
if(ms==50){bit0=0;}
if(ms>=100){ms=0;bit0=1;bit7=1;
}
}
/*---------------------------------------------*/
voidstart()
{TL0=0xf0;TH0=0xd8;/*T0=d8f0=55536=10ms*/
TL1=0;TH1=0;/*T1--*/
IE=0x83;IP=0x00;/*int1ishigh*/
TMOD=0x11;TCON=0x05;
P8279K=0xd1;for(i=0;i<98;i++){i++;}
P8279K=0x00;P8279K=0x2f;
P8279K=0x40;P8279K=0x90;
P8255K=0x89;/*PA,PBisoutput;PCisinput;*/
i=j=l=0;
key=0x0f;
ms=t1s=0x00;
bit0=bit1=bit2=bit3=bit4=bit5=bit6=bit7=0;
TR0=1;TR1=0;
}
/*********************************************/
voidcepin()
{EA=0;
TR0=1;TR1=0;TH1=TL1=0;
ii=0;jj=0;ff=0;tt=0;
while(!
T0){T0=1;};
TR1=1;
while(T0){T0=1;};
while(!
T0){T0=1;};
TR1=0;ii=TH1;jj=TL1;
tt=ii*0x100+jj;
ff=1000000.0/tt;
TR1=0;TH1=TL1=0;
bit6=1;
if(tt<=9999){TR1=0;TL1=0;TH1=0;TMOD=0x51;
TL0=0xf0;TH0=0xd8;TR0=1;
ms=98;bit7=0;EA=1;IE=0x82;bit6=0;
while(!
bit7){}
TR1=1;bit7=0;
while(!
bit7){}
TR1=0;bit7=0;ii=TH1;jj=TL1;
tt=ii*0x100+jj;
ff=tt;
tt=1000000.0/ff;
TR1=0;TH1=TL1=0;
}
fff=ff;
TL0=0xf0;TH0=0xd8;
TL1=0;TH1=0;/*T1--*/
IE=0x83;IP=0x04;/*int1ishigh*/
TMOD=0x11;TCON=0x05;
TR0=1;
EA=1;
}
/*********************************************/
voidcexwei()
{EA=0;
TR0=1;TR1=0;TH1=TL1=0;
ii=0;jj=0;ff=0;tt=0;
while(!
T0){T0=1;};
TR1=1;T0=1;
while(T0){if(!
T1)bit2=1;}
T0=1;T1=1;
while(!
T0){if(bit2){if(T1){jjb=TL1,iib=TH1;bit2=0;}}
else{if(!
T1)bit2=1;}}
TR1=0;iia=TH1;jja=TL1;
tta=iia*0x100+jja;
ff=1000000.0/tta;
ttb=iib*0x100+jjb;
tt=tta-ttb;
if(fff>20000.0){tta=1000000.0/fff;}
fa=360.0-360.0*tt/tta;
if(fa<=0.0001)fa=0.001;
TL0=0xf0;TH0=0xd8;
TL1=0;TH1=0;/*T1--*/
IE=0x83;IP=0x04;/*int1ishigh*/
TMOD=0x11;TCON=0x05;
TR0=1;
EA=1;
}
voidcexwei6()
{
cexwei();aaa[0]=fa;
cexwei();aaa[1]=fa;
cexwei();aaa[2]=fa;
cexwei();aaa[3]=fa;
cexwei();aaa[4]=fa;
cexwei();aaa[5]=fa;
fa=(aaa[0]+aaa[1]+aaa[2]+aaa[3]+aaa[4]+aaa[5])/6;
}
/***************************************/
voidcerlc()
{EA=0;
TR1=0;TH1=TL1=0;
while(!
T0){};
TR1=1;
while(T1){};
while(!
T1){};
TR1=0;i=TH1;j=TL1;
tt2=i*0x100+j;
EA=1;IE=0x83;
TH1=TL1=0;
}
/*--------------goodl,goodm------------------*/
voidgood(void)
{/*P8279K=0xd1;for(i=0;i<0x80;i++){i++;}*/
P8279K=0x90;
if(bit0){P8279D=0x6f;P8279D=0x5c;P8279D=0x5c;P8279D=0x5e;
P8279D=0x40;P8279D=0x40;P8279D=0x40;P8279D=0x40;}
else{P8279D=0x6f;P8279D=0x5c;P8279D=0x5c;P8279D=0x5e;
P8279D=0x80;P8279D=0x80;P8279D=0x80;P8279D=0x80;}
}
voiddisp()
{P8279K=0x90;
P8279D=ld[0];P8279D=ld[1];P8279D=ld[2];P8279D=ld[3];
P8279D=ld[4];P8279D=ld[5];P8279D=ld[6];P8279D=ld[7];}
voiddispff()
{ff=fff;
uuh=ff;uul=100*ff-uuh*100;
if(uuh>=65000){uuh=65000;uul=0;}
ld[0]=0x71;
i=uuh/10000;ld[1]=led[i];uuh=uuh-i*10000;
i=uuh/1000;ld[2]=led[i];uuh=uuh-i*1000;
i=uuh/100;ld[3]=led[i];uuh=uuh-i*100;
i=uuh/10;ld[4]=led[i];uuh=uuh-i*10;
i=uuh;ld[5]=led[i+0x10];
i=uul/10;ld[6]=led[i];uul=uul-i*10;
i=uul;ld[7]=led[i];
if(ld[1]==0x3f){ld[1]=0x00;
if(ld[2]==0x3f){ld[2]=0x00;
if(ld[3]==0x3f){ld[3]=0x00;
if(ld[4]==0x3f)ld[4]=0x00;}}}
}
voiddispfa()
{uuh=fa;uul=100*fa-uuh*100;
if(uuh>=360){uuh=0;uul=0;}
ld[0]=0x77;ld[1]=0x77;ld[2]=0x00;
i=uuh/100;ld[3]=led[i];uuh=uuh-i*100;
i=uuh/10;ld[4]=led[i];uuh=uuh-i*10;
i=uuh;ld[5]=led[i+0x10];
i=uul/10;ld[6]=led[i];uul=uul-i*10;
i=uul;ld[7]=led[i];
if(ld[3]==0x3f){ld[3]=0x00;
if(ld[4]==0x3f)ld[4]=0x00;}
}
/*------------------------------------------------------*/
voidmain(void)
{aaa:
start();
while(key==0x0f)good();
bbb:
cepin();
cexwei();
if(key==0)dispff();
elsedispfa();
disp();
/*if(bit6)*/
{bit6=0;
while(bit0){if(key==0)dispff();
elsedispfa();
disp();}
while(!
bit0){if(key==0)dispff();
elsedispfa();
disp();}
}
gotobbb;
cepin();
cexwei();
cerlc();
if(tt2>=tt)fa=360.0-fa;
dispff();
dispfa();
gotobbb;
/********************float************************
for(i=0;i<=49;i++){}
{for(j=i+1;j<=49;j++){if(ua[i]>ua[j]){uu=ua[i];ua[i]=ua[j];ua[j]=uu;}}}
uul=0;
for(i=10;i<=39;i++){uu=ua[i];uul=uul+(long)uu;}
uuf=(float)uul/30000.0;
uuf=2.0+x0;x0++;
ff0=100.0*uuf*uuf+88.0;ff0=sqrt(uuf);
ff0=ff0*0.1414;ff1=ff0*0.1732;
ff1=cos(ff1);
disp();
**********************float************************/
gotoaaa;
}
#pragmaoptimize(4)
#include"stdio.h"
#include"math.h"
#include"absacc.h"
#include"reg51j.h"
voidstart();
voidcepin();
voidcexwei();
voidcexwei6();
voidcerlc();
voidgood();
voiddisp();
voiddispff();
voiddispfa();
voidint0();
voidt0int();
voidt1int();
codeunsignedcharled[36]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x58,0x5e,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 低频数字式相位测量仪 毕业设计 论文 低频 数字式 相位 测量仪
![提示](https://static.bdocx.com/images/bang_tan.gif)