基于MCS一51单片机的谐波检测仪的研究毕业设计.docx
- 文档编号:12667960
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:26
- 大小:555.55KB
基于MCS一51单片机的谐波检测仪的研究毕业设计.docx
《基于MCS一51单片机的谐波检测仪的研究毕业设计.docx》由会员分享,可在线阅读,更多相关《基于MCS一51单片机的谐波检测仪的研究毕业设计.docx(26页珍藏版)》请在冰点文库上搜索。
基于MCS一51单片机的谐波检测仪的研究毕业设计
河北农业大学现代科技学院
本科毕业论文(设计)
题目:
基于单片机的谐波检测仪的研究
学部:
工学部
专业班级:
电子信息科学与技术0801
学号:
XXXXXXXXX
学生姓名:
XXXX
指导教师姓名:
XXXX
指导教师职称:
讲师
二O一二年六月三日
摘要
本文首先介绍了谐波分析算法的理论依据。
在广泛使用的FFT算法的基础上,对谐波检测的对象进行数据分析,为系统的设计提供参考数据。
本文完成了系统硬件电路的设计和仿真。
硬件电路以MCS一51单片机为核心,配以适当的外围接口电路来完成各项功能。
主要包括A/D采样电路、数据处理电路(单片机)、D/A转换器。
软件设计以快速傅立叶变换(FFT)为主要部分,通过对所采集的数据来测量电参数。
进行了相关软件算法的设计,完成每周期256点的离散采样,由单片机进行基2一FFT运算,运算结果可用于63次以下的谐波分析。
系统程序采用模块化的设计思想,在软件设计中对每个模块都完成了框图设计和相关的编码设计。
关键字:
单片机;谐波检测;FFT
Abstract
Thispaperfirstintroducedtheharmonicanalysisalgorithmtheorybasis.IntheextensiveuseofFFTalgorithm,onthebasisoftheobjectofharmonicdetectionofdataanalysis,forthedesignofthesystemwithreferencedata.Wecompletedahardwarecircuitandthedesignofsystemsimulation.Hardwarecircuitto51single-chipmicrocomputerisaMCS,matchwithappropriateinterfacecircuittotheperipheryofthecompleteallthefunction.MainlyincludesA/Dsamplingcircuit,dataprocessingcircuits(SCM),D/Aconverter.ThesoftwaredesignwithfastFouriertransform(FFT)asthemainpart,fromallthedatatomeasureelectricparameters.Somesoftwarealgorithmdesign,completeeachcycleofdiscretesampling256points,byMCUand2aFFTcalculation,theoperationresultcanbeusedfor63timesoftheharmonicanalysis.Systemprogrammingthemodularizeddesignthought,inthesoftwaredesignofeachmodulecompletedtheblockdiagramdesignandrelevantcodedesign.
Keyword:
singlechipmicrocomputer;theharmonicdetection;FFT
1前言
谐波的危害十分严重。
谐波使电能的生产、传输和利用的效率降低,使电气设备过热、产生振动和噪声,并使绝缘老化,使用寿命缩短,甚至发生故障或烧毁。
谐波可引起电力系统局部并联谐振或串联谐振,使谐波含量放大,造成电容器等设备烧毁。
谐波还会引起继电保护和自动装置误动作,使电能计量出现混乱[8]。
对于电力系统外部,谐波对通信设备和电子设备会产生严重干扰。
1.1目的意义
由于谐波的危害,给生产生活带来了严重的危害,就有必要去检测它,主要有以下这些方面的意义:
首先,它可以提高企业设备的供电质量,提高设备运行的可靠性,减少因设备误动作而造成的经济损失;
其次,可以减少谐波电流在输配电线路上产生的损耗,同时降低用电设备发热,减少绝缘老化,从而提高设备的使用寿命,减少设备的维护费用;
第三,谐波治理能够减少电网[11]中补偿电容器的谐振机率[7],同时,减少谐波对系统信号传输的影响,增加系统的可靠性;
第四,可以减少谐波对公共电网的污染。
1.2谐波检测的现状
对于国内外来说,主要是对谐波的治理方面的研究。
因为检测到谐波的存在就得去治理它,毕竟谐波是有危害的,主要表现在以下这些方面,谐波使电能的生产、传输和利用的效率降低,使电气设备过热、产生振动和噪声[12],并使绝缘老化,使用寿命缩短,甚至发生故障或烧毁。
谐波可引起电力系统局部并联谐振或串联谐振,使谐波含量放大,造成电容器等设备烧毁。
谐波还会引起继电保护和自动装置误动作,使电能计量出现混乱。
对于电力系统外部,谐波对通信设备和电子设备会产生严重干扰。
目前对谐波的治理主要采用两种方法无源滤波装置和有源滤波器;无源滤波装置主要采用LC回路,并联于系统中,LC回路的设定,只能针对于某一次谐波,即针对于某一个频率为低阻抗,使得该频率流经为其设定的LC回路,达到消除(滤除)某一频率的谐波的目的。
LC回路在滤除谐波的同时,在基波对系统进行无功补偿。
这种滤波装置简单,成本低,但不能滤除干净。
其主要元件为投切开关、电容器、电抗器以及保护和控制回路。
有源电力滤波器,这种滤波器是用电力电子元件产生一个大小相等,但方向相反的谐波电流,用以抵销网络中的谐波电流,这种装置的主要元件是大功率电力电子器件,成本高,在其额定功率范围内,原则上能全部滤除干净。
综合现有的文献,国内外对APF的研究主要集中在三个方面:
拓扑结构,无功、谐波和负序检测算法,电流跟踪控制算法。
1.3本文研究内容
1.3.1谐波检测的仿真设计思路
谐波分析通常采用傅立叶变换理论。
目前,基于傅立叶变换理论的FFT技术已相当成熟,且FFT是目前谐波检测中应用最广泛的一种谐波检测方法。
因此在系统软件设计中,我们采用FFT算法作为谐波检测方法。
FFT算法的核心单元是蝶型运算。
一个
点FFT,需要进行m次蝶型运算。
在FFT运算中,涉及到算子(第L级第J个算子X(J))与蝶型因子
的乘法运算。
根据复数乘法法则,
可以看作是正弦值和余弦值的组合,由于余弦函数可以用正弦来替代,为了程序查表方便,程序预制正弦表并按照规律存放。
正弦表在固化到程序存储器前,要进行归一化处理。
程序采样完毕后,先读取正弦表,然后调用FFT子程序[10]。
1.3.2课题的主要任务
本课题的主要任务是在基于AT89C51的基础上,来扩展外围电路,实现对谐波的检测,整个系统的搭建都是在protues环境下进行。
在此环境下,选择了一款傅里叶分析表,对经过处理后的波形,观察其的幅频特性曲线,从而直观的去了解什么是基波,1次谐波,3次谐波等正弦波,总的来说,就是基于protues的谐波检测的利用。
ProteusISIS是一款集电子仿真、单片机仿真于一体的EDA软件,是极具竞争力的仿真软件。
ProteusISIS可以仿真各种复杂的输入电压、电流信号,因此,很容易用来仿真谐波信号的输入。
在ProteusISIS中,可以仿真各种单片机,这些单片机可以根据各种输入信号,如按键、标准与自定义波形、运行程序,并与仿真各种接口芯片进行通信、仿真LED数码管或LCD显示。
因此,将ProteusISIS应用于谐波检波器的设计,既经济又方便,使得选择这款仿真软件成为必然。
2系统整体设计
2.1硬件系统设计
图2-1系统原理图
本系统只是在protues下的仿真,对于信号的预处理这个模块就简化了,直接给出模拟信号,让ADC008对模拟信号进行处理。
2.1.1数据采集模块
数据采集模块主要用的是ADC0808芯片
图2-2ADC0808
ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟信号中的一个进行A/D转换。
ADC0808是ADC0809的简化本,功能基本相同。
一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。
ADC0808是CMOS单片型逐次逼近式A/D转换器,它有8路模拟开关、地址锁存与译码器、比较器、8位开关树型
A/D转换器。
2.1.2D/A转换器与51的接口模块
DAC0832是8分辨率的D/A转换集成芯片[3][4]。
与微处理器完全兼容。
这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。
D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
D/A转换器用来将数字量转换成模拟量。
它的基本要求是输出电压VO应该和输入数字量成正比,即:
VO=D*VR其中,VR为参考电压。
每一个数字量都是数字代码的按位组合,每一位数字代码都有一定的“权”,对应一定大小的模拟量。
为了将数字量转换成模拟量,应该将其每一位都转换成相应的模拟量,然后求和既可得到与数字量成正比的模拟量。
D/A转换器可分成两大类:
1.直接D/A转换器是指直接将输入的数字信号转换为输出的模拟信号。
2.间接D/A转换器是先将输入的数字信号转换为某种中间量,然后再把这种中间量转换成为输出的模拟信号。
其中,间接D/A转换方式在集成D/A转换器中很少使用。
D0~D7:
8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);
ILE:
数据锁存允许控制信号输入线,高电平有效;
CS:
片选信号输入线(选通数据锁存器),低电平有效;
WR1:
数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。
由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;
XFER:
数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;
WR2:
DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。
由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换
IOUT1:
电流输出端1,其值随DAC寄存器的内容线性变化;
IOUT2:
电流输出端2,其值与IOUT1值之和为一常数;
Rfb:
反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
Vcc:
电源输入端,Vcc的范围为+5V~+15V;
VREF:
基准电压输入线,VREF的范围为-10V~+10V;
AGND:
模拟信号地
DGND:
数字信号地
DAC0832的工作方式:
根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:
直通方式、单缓冲方式和双缓冲方式。
DAC0832引脚功能电路应用原理图DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。
在进行仿真的时候,可以观察到,如果不外提供电源的话,DAC0832的数据输入口呈现出灰色。
这种情况表明凭借8051端口的输出电压,不能够驱动DAC0832,故的需要外加一个上拉电阻,如图2-4所示。
如图2-4DAC0832
另外在使用DAC0832时因考虑的一些因素,如分辨率、线性度、转化精度以及建立时间。
分辨率这里指最小输出电压(对应的输入数字量只有最低有效位为“1”)与最大输出电压(对应的数字输出信号所有有效位全为“1”)之比。
分辨率越高,转换时,对应数字输入信号最低位的模拟信号电压数值越小,也就越灵敏。
线性度通常用非线性误差的大小表示D/A转换器的线性度。
并且,把理想的输入/输出特性的偏差与满刻度输出之比的百分数,定义为非线性误差。
转换精度转换精度以最大的静态转换误差的形式给出。
这个转换误差应该是非线性误差、比例系数误差以及漂移误差等综合误差。
所谓建立时间,系指数模拟转换器中的输入代码有满度值的变化时,其输出模拟信号电压(或模拟信号电流)达到满刻度值的1/2LSB(或满刻度值差百分之多少)时所需的时间。
2.1.3显示模块
在显示模块选用了TL082双运算放大器,把DA转换后的微小电压放大;TL082是一通用的J-FET双运算放大器。
其特点有:
较低的偏置电压和偏置电流;输出设有短路保护;输入级具有较高的输入阻抗;内建频率补偿电路;较高的压摆率。
最大工作电压:
VCCmax=±18V;
图2-5显示电路
2.1.4系统整体结构
图2-6系统整体构成
2.2系统软件设计
在设计本系统时,选择C语言作为软件编写语言。
其编译环境选择了keil。
KeilC51[9]是美国keilsoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括c编译器、宏编译器、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境将这些部分组合在仪器。
运行keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
如果你使用c语言编程,那么keil几乎是你的不二之选,即使不使用c语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
以下是本系统的整体流程图:
2.2.1数据采集软件模块
ADC0808的启动,在本设计系统中,只选择了一路外部模拟信号作为输入,所以在选路端,ABC同时接地,已达到选择第一路信号。
所以从单片机引出来的控制线,主要是控制START、EOC以及OE。
在程序运行前,对其进行定义。
SbitOE=P3^7;
SbitEOC=P3^6;
SbitSTART=P3^5;
OE=0;//初始化
START=0;//初始化
START=1;//启动
_nop_();
_nop_();
START=0;
_nop_();
_nop_();
While(!
EOC);等待判断是否转换结束;
OE=1;从中读取数据;
把从ADC0808中读取的数据,存放在一个数组里面,为进行傅里叶变换做准备;
2.2.2算法实现
在单片机中进行如下编程控制[10];
VoidFFT(intXR[],intXI[])
{⋯⋯ //初始化及倒序//FFT算法
for(L=1;L<=7;L++) //第一层循环
{
b=1;i=L+1;
while(i>0)
{
b=b32;i--;}
for(j=0;j<=b-1;j++) //第二层循环
{
p=1;i=7-L;
while(i>0)
{
p=p32;i--;}
P=p3j;
for(k=j;k<=128;k=k+23b) //第三层循环
{
FFT(XR,XI);
}
}
}
}
在FFT算法中,蝶形运算是怎么样的。
2点DFT运算称为蝶形运算,而整个FFT就是由若干级迭代的蝶形运算组成,而且这种算法采用原位运算,故只需N个存储单元。
图2-8蝶形运算
2.2.3.开方在单片机中的原理
因为排版的原因,用pow(X,Y)表示X的Y次幂,用B[0],B[1],...,B[m-1]表示一个序列,
其中[x]为下标。
假设:
B[x],b[x]都是二进制序列,取值0或1。
M=B[m-1]*pow(2,m-1)+B[m-2]*pow(2,m-2)+...+B[1]*pow(2,1)+B[0]*pow
(2,0)
N=b[n-1]*pow(2,n-1)+b[n-2]*pow(2,n-2)+...+b[1]*pow(2,1)+n[0]*pow
(2,0)
pow(N,2)=M
(1)N的最高位b[n-1]可以根据M的最高位B[m-1]直接求得。
设m已知,因为pow(2,m-1)<=M<=pow(2,m),所以pow(2,(m-1)/2)<=N<=
pow(2,m/2)
如果m是奇数,设m=2*k+1,
那么pow(2,k)<=N n-1=k,n=k+1=(m+1)/2 如果m是偶数,设m=2k, 那么pow(2,k)>N>=pow(2,k-1/2)>pow(2,k-1), n-1=k-1,n=k=m/2 所以b[n-1]完全由B[m-1]决定。 余数M[1]=M-b[n-1]*pow(2,2*n-2) (2)N的次高位b[n-2]可以采用试探法来确定。 因为b[n-1]=1,假设b[n-2]=1,则pow(b[n-1]*pow(2,n-1)+b[n-1]*pow(2,n-2), 2)=b[n-1]*pow(2,2*n-2)+(b[n-1]*pow(2,2*n-2)+b[n-2]*pow(2,2*n-4)), 然后比较余数M[1]是否大于等于(pow(2,2)*b[n-1]+b[n-2])*pow(2,2*n-4)。 这种比较只须根据B[m-1]、B[m-2]、...、B[2*n-4]便可做出判断,其余低位不做比较。 若M[1]>=(pow(2,2)*b[n-1]+b[n-2])*pow(2,2*n-4),则假设有效,b[n-2]=1; 余数M[2]=M[1]-pow(pow(2,n-1)*b[n-1]+pow(2,n-2)*b[n-2],2)=M[1]- (pow(2,2)+1)*pow(2,2*n-4); 若M[1]<(pow(2,2)*b[n-1]+b[n-2])*pow(2,2*n-4),则假设无效,b[n-2]=0; 余数M[2]=M[1]。 (3)同理,可以从高位到低位逐位求出M的平方根N的各位。 使用这种算法计算32位数的平方根时最多只须比较16次,而且每次比较时不必把M的各位逐一比较,尤其是开始时比较的位数很少,所以消耗的时间远低于牛顿迭代法。 在进行了大量的资料的收集和比对,在显示部分选择了,用图表仿真,这样的效果是比较直观的,选择的分析仪是FOURIER(傅里叶分析)。 在之前的学习中,对一这方面的运用是空白的,有必要去了解它如何使用。 傅里叶分析方法用于分析一个时域信号的直流分量、基波分量和谐波分量,即把被测结点处的时域变换信号作为离散傅里叶变换,求出它的频域变换规律,将被测结点的频谱显示在分析窗口中。 在进行傅里叶分析时,必须先选择被分析的节点,一般将电路中的交流激励源的频率设为基频,若在电路中有几个交流电源时,可将基频设在这些电源频率的最小公因数上。 PROTEUESISIS系统为模拟电路频域分析提供了傅里叶分析图表,使用该图表可以显示电路的频域分析。 以下简单介绍一下如何使用FOURIER[1][2]。 首先,单击工具箱中的SimulationGraph按钮。 在对象选择器中将出现各种仿真分析所用的图表(如: 模拟、数字、噪声、混合和A/C变换等),选择FOURIER仿真图形;光标指向编辑窗口,按下左键拖出一个方框,松开左键确定方框的大小,则傅里叶分析图表被添加到原理图。 其次,添加探针,在需要测试的节点上添加电流或者电压探针并将探针添加到FOURIER表中,这里可以直接拖拽探针到FOURIER表中,也可以通过添加图线来完成。 最后,进行仿真,选择Graphsimulate菜单项,开始仿真。 图表也随仿真的结果进行更新。 图2-9傅里叶分析图表 3.系统仿真 谐波有效值计算按照上式编程计算,程序执行过程中,对系统操作和发生的各项事件如各种故障信息和操作事件进行记录,为系统维护提供依据。 仿真效果如下: 图3-1FFT变换图 为验证设计的谐波分析算法的正确性,算法的验证采用方波作为输入的128点FFT,其谐波分析的结果与用matlab中的运算进行比较。 方波经过FFT运算之后应该是一个sinc函数。 图3-2给出方波原始数据实部为方波幅值5,虚部为零的谐波分析计算波形。 可以看到,经过FFT运算之后的实部、虚部及求模后的波形是一个sinc函数。 图3-2方波傅里叶变换 4.结论 课题是经过广泛的查阅资料、反复推敲实验设计出来的。 在这个过程中,不断有新的方法思路出现,改变甚至取消原定的方法。 整个系统的目的、基本理论依据、完成的功能始终是明确的,但具体实现上还是出现很多问题。 由于时间上的限制,课题中还有未完成的工作和需进一步研究。 由于单片机的性价比高,因此在数据采集及频谱分析系统中往往取代DSP芯片而被广泛使用。 在数字信号处理中,离散傅里叶变换(DiscreteFourierTransform,DFT)是常用的变换方法,它在各种数字信号处理系统中扮演着重要的角色。 快速傅里叶变换(FastFourierTransfonn,FFT)并不是与离散傅里叶变换不同的另一种变换,而是为了减少DFT计算次数的一种快速有效的算法,且它们都是为了将信号变换到频域并进行相应的频谱分析。 虽然FFT是一种快速的运算方法,但是为了计算N点的FFT依然需要Nlog2N次加法和0.5Nlog2N次乘法。 当N比较大时,其运算复杂度对RAM的需求也是很大的。 在本文中,我们探讨了如何优化FFT算法,并将其在单片机中实现。 另一个重要的问题是开方在单片机中的运行问题。 我在keil下进行过尝试,直接写的开方,单片机是不能运行的,算法需要改进,或者自己编写开发函数。 要在单片机上实现开根号的操作。 目前开平方的方法大部分是用牛顿迭代法。 我在查了一些资料以后找到了一个比牛顿迭代法更加快速的方法。 参考文献 [1]周润景《基于protues的电路及单片机系统设计与仿真》北京航空航天大学出版社,2006 [2]朱清慧《protues教程---电子线路设计、制版与仿真》清华大学出版,2008.9 [3]潘新明《微型计算机控制技术实用教程》电子工业出版社,2006.1 [4]张友德《单盘微机原理、运用与实验》第五版,复旦大学出版社,2003 [5]丁玉美,《数字信号处理》第二版,西安电子科技大学出版社,2000.12 [6]廖志凌,三相三线制系统中零序谐波对谐波检测的影响,江苏大学学报(自然科学版)2005年03期 [7]李强《单片机软件设计中的几中基础编程技术》电子世界,2002(10): 31-33. [8]赵玲吴文军,电力谐波实时检测系统的研究,华东电力,2001年第6期 [9]耿
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MCS 51 单片机 谐波 检测 研究 毕业设计