毕业设计182西华大学智能仪器课程失真度分析仪设计.docx

上传人:b****7 文档编号:10829396 上传时间:2023-02-23 格式:DOCX 页数:29 大小:935.80KB
下载 相关 举报
毕业设计182西华大学智能仪器课程失真度分析仪设计.docx_第1页
第1页 / 共29页
毕业设计182西华大学智能仪器课程失真度分析仪设计.docx_第2页
第2页 / 共29页
毕业设计182西华大学智能仪器课程失真度分析仪设计.docx_第3页
第3页 / 共29页
毕业设计182西华大学智能仪器课程失真度分析仪设计.docx_第4页
第4页 / 共29页
毕业设计182西华大学智能仪器课程失真度分析仪设计.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

毕业设计182西华大学智能仪器课程失真度分析仪设计.docx

《毕业设计182西华大学智能仪器课程失真度分析仪设计.docx》由会员分享,可在线阅读,更多相关《毕业设计182西华大学智能仪器课程失真度分析仪设计.docx(29页珍藏版)》请在冰豆网上搜索。

毕业设计182西华大学智能仪器课程失真度分析仪设计.docx

毕业设计182西华大学智能仪器课程失真度分析仪设计

目录

1前言1

2总体方案设计2

2.1失真度仪原理2

2.2方案选择4

2.2.1方案一4

2.2.2方案二4

2.2.3方案三5

2.3方案论证选择5

3软件设计6

3.1软件设计所用工具6

3.1.1KeiluVision2仿真软件7

3.1.2Wave6000仿真软件7

3.2软件程序结构7

3.3软件设计模块设计8

3.3.1初始化模块8

3.3.2扫描键盘控制程序9

3.3.3读数程序模块12

4系统调试和仿真15

4.1硬件系统的调试仿真15

4.1.1前置放大电路的电路原理图及仿真波形15

4.1.2高通滤波电路电路原理图及仿真波形17

4.1.3有效值转换电路电路原理图图及仿真波形18

4.1.4选择开关模块电路原理图及仿真波形19

4.2软件系统的调试仿真21

4.2.1软件调试工具介绍21

4.2.2调试过程21

5.总结21

6.参考文献22

1前言

失真度是无线电信号的一个重要参数。

在无线电计量测试中,许多参数的准确测量都涉及失真度测量问题。

例如:

在检定电压表、功率表和交流数字式电压表时,为了减小不同检波式仪表的波形误差、提高检定的准确度,就必须减小信号源的失真。

近几十年来,随着计量测试的需要和电子技术的发展,失真度的测量技术指标有了较大的提高。

20世纪60年代以前工作频段20Hz~20kHz,测量范围为10-3~10-1数量级,测量误差限在10%左右。

目前,失真度测量从原来的10-3量级,向下延伸到10-5,乃至10-6量级。

测量误差限保持在5%~30%,频率范围已扩展到200kHz,国外有的达到600kHz(如美国HP公司的333A和334A),少数达到1MHz。

相对其它无线电参数而言,目前失真度测量的准确度较低,一般仅可达1%~10%左右;而对低失真度,尚难达到这个水平.失真度测量方法不同,其特点和性能指标也不同,如频率范围,失真度测量范围、测量精度等指标。

由此,本文对失真度测量中的各种方案进行了比较和分析,结合自身的知识状况,设计一款失真度分析仪。

 

2总体方案设计

2.1失真度仪原理

失真度仪用来测量信号波形的畸变率,定义为各次谐波的能量与基波的能量比(或者是各次谐波的电压有效值与基波的电压有效值比),当然在精度要求不是太高的情况下我们通常采用各次谐波的能量(电压有效值)与原始信号的能量

(电压有效值)之比,可以用公式

(1)表示为:

(1)

目前,测量失真度的仪器根据测量原理大致可分为二大类:

基波剔除法(模拟实现)和频谱分析法(数字实现)。

一般模拟式的失真度测量仪都采用基波剔除,它是采用高通滤波器剔除基波,得出谐波和原始信号相除,这种仪器测量的误差较大;而频谱分析法,则是利用频率分析仪测量各次谐波的含量并计算出波形失真度的方法。

它可分析测量出被测信号中的1~10次谐波分量。

采用该方法较好地解决了超低频率失真度的测量,缺点是仪器结构复杂,设计难度大,价格较贵,操作繁琐。

下面是分别用模拟方式和数字方式来实现失真度测量的方框图:

          图1模拟方式实现

图2数字方式实现

2.2方案选择

2.2.1方案一

图3方案一

测量原理:

用A/D转换器采样得到信号的离散值,然后用87C196kc单片机采用FFT分析法计算出各次谐波分量,代入失真度计算公式可得失真度。

系统流程为:

输入信号先进入低通滤波,由自动增益控制组成的信号调理电路,把信号加强放大去除干扰,然后利用倍频器进行信号采样保持,通过A/D转换把模拟信号变为数字信号,在把数字信号输入单片机进行傅立叶变换求失真度值,通过I/O口驱动LED显示.方案特点:

该方案采用数字方式实现失真度的测量,较好地解决了超低频率失真度的测量.设计过程中有两大难点,一是倍频器的设计:

FFT分析过程是将截取周期信号若干个整数周期进行分析。

如果截取周期信号不是其周期的整数倍,那么周期拓展后出现不连续点,与截取前信号不同,使得精度大大降低;二是此次方案把频谱分析的任务交个了单片机来完成,理论上单片机可以实现傅立叶的复杂运算,但实际以单片机的频率还不敢保证.

2.2.2方案二

图4方案二

该方案跟方案一相似,输入信号先经过放大使信号加强,然后进入采保电路采样,通过A/D转换电路把模拟信号变成数字信号,最后把数字信号输入DSP芯片进行复杂的傅立叶变换,求出失真度输出显示,该方案的采样频率由DSP发出采样脉冲得到.

方案特点:

该方案也是采用数字方式实现失真度的测量,不过这次的采样脉冲不是由倍频器说得,而是直接由DSP发出使控制更简单只能话,而且解决了因为运算量大使单片机无法运行的缺陷,采用专门的数字信号处理芯片进行复杂的傅立叶变换进行频谱分析,最后求的失真度通过LED显示

2.2.3方案三

 

图5方案三

该方案是采用模拟方式测量失真度,方案原理是利用剔除基波的方法实.首先输入信号跟前面相似先经过前置放大,然后分两路进入选择开关,一路经过高通滤波器剔除基波得到各次谐波分量,进入选择开关,另一路直接进入选择开关,然后由选择开关出来进入有效值转换电路把信号的有效值得出,经过A/D转换电路把模拟信号变成数字信号经I/O口进入单片机,利用单片机把两个有效值相除得到失真度通过LCD显示,并且实现键盘控制.

方案特点:

该方案采用模拟方式实现失真度的测量,在实现方面比数字方式要简单,容易实现!

并且用键盘实现控制,使系统更加智能灵活.缺点是精度不高.

2.3方案论证选择

方案一和方案二采用数字方式实现失真度的测量,需要对信号采样保持,然后进行傅立叶变换进行频谱分析,用频谱分析仪或波形分析仪检测信号中的基波和各次谐波的电压,获得基波和各次谐波的电压,从而计算出失真度。

谐波分析法的优点是能获得各次谐波的含量,对信号的频谱能够直观地显示出来。

它可以解决频率范围从几Hz到几GHz、失真度为1×10-5~100%的测量,其测量准确度为±(10%~30%)左右。

针对复杂的傅立叶变换;由于在实际的数据采集很难做到整周期采样,由此导致FFT分析泄漏引入方法误差。

总之,频谱泄漏引入的误差是影响FFT法失真度测量精度的主要因素。

当前,通过一般加窗方法减小频率泄漏,但效果并不理想,尤其测量小失真时误差较大。

FFT法失真度测量存在“泄漏”、“栏栅效应”和谐波阶次截断造成的误差。

为使得做到整周期采样,在采样频率的地方需要一定难度.

方案一采用单片机进行处理,试图用单片机编辑程序对采样信号进行傅立叶变换,进而求出失真度,理论上是可以实现的,考虑到单片机的频率和运算速度,实现起来有一定的难度,从软件编辑程序来看,进行频谱分析的编程也需要很高的软件基础;

方案二频谱分析部分采用数字信号处理芯片DSP芯片处理,利用专用的数字处理芯片DSP芯片进行傅立叶变换,可以解决单片机难以实现的处理运算,但考虑到设计时间的限制,以及对DSP处理芯片的陌生,软件编程的难度,本次设计采用方案二也有相当一定难度.

方案三从另外一个角度入手,选择用模拟方法设计失真度测量仪.原理是用滤波器剔除基波剩下的谐波电压有效值除以原始波形电压的有效值近似的求出波形的失真度,该方案采用的电路结构简单,难度较低,缺点是精度稍微有点低,不过通过键盘控制,单片机进行数据简单计算,LCD显示,很好的体现了智能化!

而且节约时间和经济成本.

其实在方案参考的过程中我们也考虑到用FPGA设计该电路,不过最终从经济因素,技术难度,以及实用性考虑,我们选择了方案三对本次设计进行设计.

3软件设计

3.1软件设计所用工具

本作品使用KeiluVision2仿真软件和Wave6000仿真软件作为编程器件,以及汇编编辑器!

它是以WINDOWS为设计平台,在使用时先在KeilC环境下编辑程序,然后保存程序、建立新项目、设置项目,接着编译程序,最后调试和执行这样一步步来实现仿真。

3.1.1KeiluVision2仿真软件

KeiluVision2仿真软件提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发(uVision)将这些部分组合在一起。

虽然它的功能强大,但它的仿真调试没有Wave6000用起来方便直观。

3.1.2Wave6000仿真软件

WAVE6000IDE环境,由于是国产软件所以用起比较好用,且它有配套的仿真器,故调试非常方便。

用户源程序的大小不再有任何限制。

有丰富的窗口显示方式,多方位,动态地展示仿真的各种过程,使用极为便利。

仿真器同时还可以直接工作于KeiluVision调试环境下,适应不同的用户操作习惯。

但都采用keilC5的编译器,keilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

用过汇编语言后再使用C来开发,我的体会更加深刻。

KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。

另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的优势。

在以前的学习中也涉及过keilc51软件,但都是用汇编语言进行编程,因此对C语言还不熟悉,在刚开始编程的时候遇到了很多困难,虽然有C语言的基础,但keilc51中用的C语言和以前我们学的语言有很大区别。

在keilc51中用C语言编程有很多优点:

C语言是一个通用的编程语言,它提供高效的代码,结构化的编程,和丰富的操作符C不是一种大语言,不是为任何特殊应用领域而设计。

它一般来说限制较少,可以为各种软件任务提供方便和有效的编程。

许多应用用C比其他语言编程更方便和有效。

优化的Cx51C编译器完整的实现了ANSI的C语言标准,对8051来说,Cx51不是一个通用的C编译器,它首先的目标是生成针对8051的最快和最紧凑的代码,Cx51具有C编程的弹性和高效的代码和汇编语言的速度。

C语言不能执行的操作(如输入和输出)需要操作系统的支持,这些操作作为标准库的一部分提供,因为这些函数和语言本身无关,所以C特别适合对多平台提供代码。

既然Cx51是一个交叉编译器,C语言的某些方面和标准库就有了改变或增强,以适应一个嵌套的目标处理器的特性。

3.2软件程序结构

上电开始后,先进行单片机的和芯片的初始化,然后进行键盘扫描,把A/D转换后的数据经74LS373锁存器输入到单片机进行读数,然后把读的数据按照失真度公式进行数据处理运算求得失真度值及失真度=谐波电压/输入电压;把失真度结果经过74LS373锁存器通过LCD显示;对矩阵键盘按键进行控制编程,实现智能控制等

图6软件总体流程图及其结构介绍

3.3软件设计模块设计

3.3.1初始化模块

初始化模块,实现功能是在电路上电的过程中把89S52单片机上电初始化,以及给其它芯片的片选信号,给予初始化脉冲。

任何程序,上电后我们都必须给起初始化。

在初始化中包括定义变量,给特殊寄存器赋初值等。

(define.c):

#include

#include

#include

#include

SbitP1.0=P1^0;

sbitP1.1=P1^1;

sbitP1.2=P1^2;

sbitP1.3=P1^3;

sbitP1.4=P1^4;

sbitP1.5=P1^5;

sbitP1.6=P1^6;

sbitP1.7=P1^7;

sbitcslcd=P3^2;

sbitcsadc=P3^3;

sbitclk=P3^5;

#defineUcharunsignedchar

3.3.2扫描键盘控制程序

键盘模块可以用两种方法实现软件编程:

中断实现,或者扫描方式实现,本次设计运用扫描方式实现键盘的软件编程。

图7扫描键盘程序流程图及原理介绍

voidkeyscan()//按键扫描程序

{

p1=0xff;

p1_0=0;

temp=p1;

temp&=0xf0;

if(temp!

=0xf0)

{delay10ms

(1);

temp=p1;

temp&=0xf0;

if(temp!

=0xf0)

{

temp=p1;

temp&=0xf0;

swich(temp)

{

case0xE0;

key=1;break;

case0xD0;

key=2;break;

case0xB0;

key=3;break;

}

;dspaly(key);

}

}

p1=0xff;

p1_1=0;

temp=p1;

temp&=0xf0;

if(temp!

=0xf0)

{

delay10ms

(1);

temp=p1;

temp&=0xf0;

if(temp!

=0xf0)

{

temp=p1;

temp&=0xf0;

swich(temp)

{

case0xE0;

key=4;break;

case0xD0;

key=5;break;

case0xB0;

key=6;break;

}

;dspaly(key);

}

}

p1=0xff;

p1_2=0;

temp=p1;

temp&=0xf0;

if(temp!

=0xf0)

{

delay10ms

(1);

temp=p1;

temp&=0xf0;

if(temp!

=0xf0)

{

temp=p1;

temp&=0xf0;

swich(temp)

{

case0xE0;

key=7;break;

case0xD0;

key=8;break;

case0xB0;

key=9;break;

}

;dspaly(key);

}

}

p1=0xff;

p1_3=0;

temp=p1;

temp&=0xf0;

if(temp!

=0xf0)

{

delay10ms

(1);

temp=p1;

temp&=0xf0;

if(temp!

=0xf0)

{temp=p1;

temp&=0xf0;

swich(temp)

{

case0xE0;

key=14;break;

case0xD0;

key=0;break;

case0xB0;

key=15;break;

}

;dspaly(key);

}

}

}

3.3.3读数程序模块

由A/D转换得到的数据,要通过74LS373锁存器经由P0口进入89S52单片机,然后单片机在把数据送入存储器等待数据的处理运算。

图8读数程序流程图及原理说

#include

unsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsignedchardispbuf[8]={10,10,10,10,10,0,0,0};

unsignedchardispcount;

sbitST=P3^7;

sbitOE=P3^6;

sbitEOC=P3^2;

unsignedcharchannel=0xbc;//IN3

unsignedchargetdata;

voiddspaly(void)

{

TMOD=0x01;

TH0=(65536-4000)/256;

TL0=(65536-4000)%256;

TR0=1;

ET0=1;

EA=1;

P3=channel;

while

(1)

{

ST=0;

ST=1;

ST=0;

while(EOC==0);

OE=1;

getdata=P0;

OE=0;

dispbuf[2]=getdata/100;

getdata=getdata%10;

dispbuf[1]=getdata/10;

dispbuf[0]=getdata%10;

}

}

voidt0(void)interrupt1using0

{

TH0=(65536-4000)/256;

TL0=(65536-4000)%256;

P1=dispcode[dispbuf[dispcount]];

P2=dispbitcode[dispcount];

dispcount++;

if(dispcount==8)

{

dispcount=0;

}

}

3.3.4送数显示

送数显示模块,是把前面有效值运算得出的结果,从存储器取出,经过编码以后,经PO口送入74LS373锁存,然后在LCD显示的子程序。

图9送数显示方框图

#include"define.h"

externinit();

voiddisplay();

main()

{

init();

EA=1;

TR0=1;

ET0=1;

TMOD=0X21;

TL0=0XAF;

while

(1)

{;}

}

voidto-int(void)interrupt1

{

TR0=0;

TH0=0XB1;

TL0=0XDF;

TR0=1;

display();

}

voiddisplay()

{

Uchari,h,k,m,n,temp;

init();

EA=1;TR0=1;

while

(1)

{

for(i=0;i<16;i++)

{

for(k=i;k<16;k++)

{

for(m=0;m

{

temp=XBYTE[8*k+m];

for(n=0;n<8;n++)

{

clk=1;

clk=0;

}

}

if(k==15)k=0;

st=1;

for(h=0;h<250;h++)

{

h++;

h--;

}

st=0;

P1=P1+0x10;

}

}

led=~led;

}

#include"define.h"

externinit();

voiddisplay();

main()

{

init();

EA=1;

TR0=1;

ET0=1;

TMOD=0X21;

TL0=0XAF;

while

(1)

{;}

}

voidto-int(void)interrupt1

{

TR0=0;

TH0=0XB1;

TL0=0XDF;

TR0=1;

display();

}

voiddisplay()

{

Uchari,h,k,m,n,temp;

init();

EA=1;TR0=1;

while

(1)

{

for(i=0;i<16;i++)

{

for(k=i;k<16;k++)

{

for(m=0;m

{

temp=XBYTE[8*k+m];

for(n=0;n<8;n++)

{

clk=1;

clk=0;

}

}

if(k==15)k=0;

st=1;

for(h=0;h<250;h++)

{

h++;

h--;

}

st=0;

P1=P1+0x10;

}

}

led=~led;}

4系统调试和仿真

通过电路原理图的绘制,以及软件程序的编辑我们在理论上实现了用模拟方式测试失真度,但系统具体是否可以稳定实现,我们需要通过仿真调试来验证,在本次的课程设计中,我们使用ISIS仿真软件对电路图进行硬件仿真调试,采用wave6000对编辑的软件程序进行仿真编译调试.以测试系统是否能够实现预想的功能,并且在调试中把系统更加完善.

4.1硬件系统的调试仿真

4.1.1前置放大电路的电路原理图及仿真波形

前置放大电路在本设计中采用差分放大器,原因是由于差动放大器具有双相输入-单端输出,共模抑制比高的特点,通常用做传感放大器或者测量一起的前端放大器, 实现功能是将原来的来自传感器的微弱信号放大至1千或者数千倍.前级采用同相放大器,可获得很高的输入阻抗,后级采用差动放大器可获得较高的共模抑制比,增强电路的抗干扰能力.

图10输入振幅5mv频率为50Hz的正弦波仿真波形

由上图(图10)可发现,当输入振幅为5mv频率为50Hz的正弦信号时,输出信号经过前置放大电路,变成了振幅为12V频率为50HZ的正弦信号,放大系数为240!

由此证明,前置放大电路可以有效放大微弱的正弦信号!

由下图(图11)可发现,当输入振幅为5mv频率为50Hz的方波信号时,输出信号经过前置放大电路,变成了振幅为12V频率为50HZ的方波信号,放大系数为240!

由此证明,前置放大电路可以有效放大微弱的方波信号!

图11输入振幅5mv频率为50Hz的矩形波仿真波形

通过前置放大电路的仿真,验证了该电路模块可以实现放大功能,使微弱的信号加强,以保证在后来的电路中不被消耗尽.

4.1.2高通滤波电路电路原理图及仿真波形

此次设计采用二阶无限增益多路反馈高通滤波器,作为实现剔除基波提出谐波功能的高通滤波电路模块,由原理不难想到,该电路目的是把基波剔除,从信号中提取谐波信号,以用来求失真度.

图12输入振幅5V频率为100Hz的正弦波仿真波形

由图12可发现,当输入振幅为5v频率为100Hz的正弦波信号时,输出信号经过高通滤波电路模块,振幅和频率均保持输入时的参数,振幅5V频率100Hz,由此可见,高通滤波器对频率高的信号不起作用,固称高通滤波器.

由图13可发现,当输入振幅为5v频率为10Hz的正弦波信号时,输出信号经过高通滤波电路模块,频率仍保持输入时频率100Hz,振幅几乎为零,经思考不为0的原因是系统误差导致,由此可见,高通滤波器对频率低的信号起剔除作用,固可实现剔除基波提取谐波的功能

图13输入振幅5V频率为10Hz的正弦波仿真波形

由图14可发现,当输入振幅为5v频率为100Hz的正弦波信号时,输出信号经过高通滤波电路模块,频率仍保持输入时频率100Hz,但波形发生重大变化,这是由于方波是由多种频率的正弦波合成,其中包括低频和高频,经过高通滤波器时,滤除的低频信号导致波形变化,再次证明高通滤波器对频率低的信号起剔除作用,固可实现剔除基波提取谐波的功能

图14输入振幅5V

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1