毕业设计论文《低频数字式相位测量仪》Word下载.docx
《毕业设计论文《低频数字式相位测量仪》Word下载.docx》由会员分享,可在线阅读,更多相关《毕业设计论文《低频数字式相位测量仪》Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
![毕业设计论文《低频数字式相位测量仪》Word下载.docx](https://file1.bdocx.com/fileroot1/2022-12/29/48008188-9652-4046-a479-1a2f3e9157a7/48008188-9652-4046-a479-1a2f3e9157a71.gif)
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"
math.h"
absacc.h"
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;
/*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;
TR1=0;
TH1=TL1=0;
ii=0;
jj=0;
ff=0;
tt=0;
while(!
T0){T0=1;
};
TR1=1;
while(T0){T0=1;
ii=TH1;
jj=TL1;
tt=ii*0x100+jj;
ff=1000000.0/tt;
bit6=1;
if(tt<
=9999){TR1=0;
TL1=0;
TH1=0;
TMOD=0x51;
TL0=0xf0;
ms=98;
bit7=0;
EA=1;
IE=0x82;
bit6=0;
bit7){}
ii=TH1;
ff=tt;
tt=1000000.0/ff;
fff=ff;
IP=0x04;
EA=1;
voidcexwei()
T0=1;
while(T0){if(!
T1)bit2=1;
T1=1;
T0){if(bit2){if(T1){jjb=TL1,iib=TH1;
bit2=0;
}}
else{if(!
}}
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;
voidcexwei6()
{
cexwei();
aaa[0]=fa;
aaa[1]=fa;
aaa[2]=fa;
aaa[3]=fa;
aaa[4]=fa;
aaa[5]=fa;
fa=(aaa[0]+aaa[1]+aaa[2]+aaa[3]+aaa[4]+aaa[5])/6;
/***************************************/
voidcerlc()
T0){};
while(T1){};
T1){};
i=TH1;
j=TL1;
tt2=i*0x100+j;
/*--------------goodl,goodm------------------*/
voidgood(void)
{/*P8279K=0xd1;
0x80;
}*/
P8279K=0x90;
if(bit0){P8279D=0x6f;
P8279D=0x5c;
P8279D=0x5e;
P8279D=0x40;
else{P8279D=0x6f;
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;
=360){uuh=0;
ld[0]=0x77;
ld[1]=0x77;
ld[2]=0x00;
/*------------------------------------------------------*/
voidmain(void)
{aaa:
start();
while(key==0x0f)good();
bbb:
cepin();
if(key==0)dispff();
elsedispfa();
disp();
/*if(bit6)*/
{bit6=0;
while(bit0){if(key==0)dispff();
while(!
bit0){if(key==0)dispff();
gotobbb;
cepin();
cerlc();
if(tt2>
=tt)fa=360.0-fa;
dispff();
dispfa();
/********************float************************
for(i=0;
=49;
i++){}
{for(j=i+1;
j<
j++){if(ua[i]>
ua[j]){uu=ua[i];
ua[i]=ua[j];
ua[j]=uu;
}}}
uul=0;
for(i=10;
=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);
**********************float************************/
gotoaaa;
voidt1int();
0x77,0x7c,0x58,0x5e,