《基于MCS一51单片机的谐波检测仪的研究.doc》由会员分享,可在线阅读,更多相关《基于MCS一51单片机的谐波检测仪的研究.doc(26页珍藏版)》请在三一办公上搜索。
1、河北农业大学现代科技学院 本科毕业论文(设计)题 目: 基于单片机的谐波检测仪的研究 学 部: 工学部 专业班级: 电子信息科学与技术0801 学 号: XXXXXXXXX 学生姓名: XXXX 指导教师姓名: XXXX 指导教师职称: 讲 师 二O一 二年 六 月三日摘 要本文首先介绍了谐波分析算法的理论依据。在广泛使用的FFT算法的基础上,对谐波检测的对象进行数据分析,为系统的设计提供参考数据。本文完成了系统硬件电路的设计和仿真。硬件电路以MCS一51单片机为核心,配以适当的外围接口电路来完成各项功能。主要包括AD采样电路、数据处理电路(单片机)、D/A转换器。软件设计以快速傅立叶变换(F
2、FT)为主要部分,通过对所采集的数据来测量电参数。进行了相关软件算法的设计,完成每周期256点的离散采样,由单片机进行基2一FFT运算,运算结果可用于63次以下的谐波分析。系统程序采用模块化的设计思想,在软件设计中对每个模块都完成了框图设计和相关的编码设计。关键字:单片机;谐波检测;FFTAbstractThis paper first introduced the harmonic analysis algorithm theory basis. In the extensive use of FFT algorithm, on the basis of the object of harm
3、onic detection of data analysis, for the design of the system with reference data. We completed a hardware circuit and the design of system simulation. Hardware circuit to 51 single-chip microcomputer is a MCS, match with appropriate interface circuit to the periphery of the complete all the functio
4、n. Mainly includes A/D sampling circuit, data processing circuits (SCM), D/A converter. The software design with fast Fourier transform (FFT) as the main part, from all the data to measure electric parameters. Some software algorithm design, complete each cycle of discrete sampling 256 points, by MC
5、U and 2 a FFT calculation, the operation result can be used for 63 times of the harmonic analysis. System programming the modularized design thought, in the software design of each module completed the block diagram design and relevant code design.Key word: single chip microcomputer;the harmonic det
6、ection; FFT目 录1前言11.1目的意义11.2 谐波检测的现状11.3 本文研究内容21.3.1 谐波检测的仿真设计思路21.3.2课题的主要任务22系统整体设计22.1硬件系统设计22.1.1数据采集模块32.1.2 D/A转换器与51的接口模块42.1.3显示模块62.1.4系统整体结构72.2系统软件设计72.2.1数据采集软件模块92.2.2算法实现92.2.3.开方在单片机中的原理103.系统仿真124结论14参考文献15附录:161前言谐波的危害十分严重。谐波使电能的生产、传输和利用的效率降低,使电气设备过热、产生振动和噪声,并使绝缘老化,使用寿命缩短,甚至发生故障或烧
7、毁。谐波可引起电力系统局部并联谐振或串联谐振,使谐波含量放大,造成电容器等设备烧毁。谐波还会引起继电保护和自动装置误动作,使电能计量出现混乱8。对于电力系统外部,谐波对通信设备和电子设备会产生严重干扰。1.1目的意义由于谐波的危害,给生产生活带来了严重的危害,就有必要去检测它,主要有以下这些方面的意义:首先,它可以提高企业设备的供电质量,提高设备运行的可靠性,减少因设备误动作而造成的经济损失;其次,可以减少谐波电流在输配电线路上产生的损耗,同时降低用电设备发热,减少绝缘老化,从而提高设备的使用寿命,减少设备的维护费用;第三,谐波治理能够减少电网11中补偿电容器的谐振机率7,同时,减少谐波对系统
8、信号传输的影响,增加系统的可靠性;第四,可以减少谐波对公共电网的污染。1.2 谐波检测的现状对于国内外来说,主要是对谐波的治理方面的研究。因为检测到谐波的存在就得去治理它,毕竟谐波是有危害的,主要表现在以下这些方面,谐波使电能的生产、传输和利用的效率降低,使电气设备过热、产生振动和噪声12,并使绝缘老化,使用寿命缩短,甚至发生故障或烧毁。谐波可引起电力系统局部并联谐振或串联谐振,使谐波含量放大,造成电容器等设备烧毁。谐波还会引起继电保护和自动装置误动作,使电能计量出现混乱。对于电力系统外部,谐波对通信设备和电子设备会产生严重干扰。目前对谐波的治理主要采用两种方法无源滤波装置和有源滤波器;无源滤
9、波装置主要采用LC回路,并联于系统中,LC回路的设定,只能针对于某一次谐波,即针对于某一个频率为低阻抗,使得该频率流经为其设定的LC回路,达到消除(滤除)某一频率的谐波的目的。LC回路在滤除谐波的同时,在基波对系统进行无功补偿。这种滤波装置简单,成本低,但不能滤除干净。其主要元件为投切开关、电容器、电抗器以及保护和控制回路。有源电力滤波器,这种滤波器是用电力电子元件产生一个大小相等,但方向相反的谐波电流,用以抵销网络中的谐波电流,这种装置的主要元件是大功率电力电子器件,成本高,在其额定功率范围内,原则上能全部滤除干净。综合现有的文献,国内外对APF的研究主要集中在三个方面:拓扑结构,无功、谐波
10、和负序检测算法,电流跟踪控制算法。1.3 本文研究内容1.3.1 谐波检测的仿真设计思路谐波分析通常采用傅立叶变换理论。目前,基于傅立叶变换理论的FFT技术已相当成熟,且FFT是目前谐波检测中应用最广泛的一种谐波检测方法。因此在系统软件设计中,我们采用FFT算法作为谐波检测方法。FFT算法的核心单元是蝶型运算。一个点FFT,需要进行m次蝶型运算。在FFT运算中,涉及到算子(第L级第J个算子X(J)与蝶型因子的乘法运算。根据复数乘法法则,可以看作是正弦值和余弦值的组合,由于余弦函数可以用正弦来替代,为了程序查表方便,程序预制正弦表并按照规律存放。正弦表在固化到程序存储器前,要进行归一化处理。程序
11、采样完毕后,先读取正弦表,然后调用FFT子程序10。1.3.2课题的主要任务本课题的主要任务是在基于AT89C51的基础上,来扩展外围电路,实现对谐波的检测,整个系统的搭建都是在protues环境下进行。在此环境下,选择了一款傅里叶分析表,对经过处理后的波形,观察其的幅频特性曲线,从而直观的去了解什么是基波,1次谐波,3次谐波等正弦波,总的来说,就是基于protues的谐波检测的利用。Proteus ISIS 是一款集电子仿真、单片机仿真于一体的 EDA 软件,是极具竞争力的仿真软件。Proteus ISIS 可以仿真各种复杂的输入电压、电流信号,因此,很容易用来仿真谐波信号的输入。在Prot
12、eus ISIS 中,可以仿真各种单片机,这些单片机可以根据各种输入信号,如按键、标准与自定义波形、运行程序,并与仿真各种接口芯片进行通信、仿真 LED 数码管或 LCD 显示。因此,将 Proteus ISIS 应用于谐波检波器的设计,既经济又方便,使得选择这款仿真软件成为必然。2系统整体设计2.1硬件系统设计单 片 机数据采集A/DD/A0832显 示信号预处理图2-1系统原理图本系统只是在protues下的仿真,对于信号的预处理这个模块就简化了,直接给出模拟信号,让ADC008对模拟信号进行处理。2.1.1数据采集模块数据采集模块主要用的是ADC0808芯片图2-2 ADC0808ADC
13、0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟信号中的一个进行A/D转换。ADC0808是ADC0809的简化本,功能基本相同。一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。ADC0808是CMOS单片型逐次逼近式A/D转换器,它有8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器。2.1.2 D/A转换器与51的接口模块图2-3 DAC0832DAC0832是8分辨率的D/A转换集成芯片34。与微处理器完全兼容。这个DA芯片以其价格低廉
14、、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。D/A转换器用来将数字量转换成模拟量。它的基本要求是输出电压VO应该和输入数字量成正比,即:VO=D*VR 其中, VR为参考电压。每一个数字量都是数字代码的按位组合,每一位数字代码都有一定的“权”,对应一定大小的模拟量。为了将数字量转换成模拟量,应该将其每一位都转换成相应的模拟量,然后求和既可得到与数字量成正比的模拟量。 DA转换器可分成两大类:1.直接DA转换器是指直接将输入的数字信号转换为输出的模拟信号。2.间接DA转换器是先将输入的数字
15、信号转换为某种中间量,然后再把这种中间量转换成为输出的模拟信号。其中,间接DA转换方式在集成DA转换器中很少使用。D0D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);ILE:数据锁存允许控制信号输入线,高电平有效;CS:片选信号输入线(选通数据锁存器),低电平有效;WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;WR2:DAC寄存器
16、选通输入线,负脉冲(脉宽应大于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的
17、数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。DAC0832引脚功能电路应用原理图DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。在进行仿真的时候,可以观察到,如果不外提供电源的话,DAC0832的数据输入口呈现出灰色。这种情况表明凭借8051端口的输出电压,不能够驱动DAC0832,故的需要外加一个上拉电阻,如图2-4所示。如图2-4 DAC0832另外在使用DAC0832时因考虑的一
18、些因素,如分辨率、线性度、转化精度以及建立时间。分辨率这里指最小输出电压(对应的输入数字量只有最低有效位为“1”)与最大输出电压(对应的数字输出信号所有有效位全为“1”)之比。分辨率越高,转换时,对应数字输入信号最低位的模拟信号电压数值越小,也就越灵敏。线性度通常用非线性误差的大小表示DA转换器的线性度。并且,把理想的输入输出特性的偏差与满刻度输出之比的百分数,定义为非线性误差。转换精度转换精度以最大的静态转换误差的形式给出。这个转换误差应该是非线性误差、比例系数误差以及漂移误差等综合误差。所谓建立时间,系指数模拟转换器中的输入代码有满度值的变化时,其输出模拟信号电压(或模拟信号电流)达到满刻
19、度值的1/2LSB(或满刻度值差百分之多少)时所需的时间。 2.1.3显示模块在显示模块选用了TL082双运算放大器,把DA转换后的微小电压放大;TL082是一通用的J-FET双运算放大器。其特点有:较低的偏置电压和偏置电流;输出设有短路保护;输入级具有较高的输入阻抗;内建频率补偿电路;较高的压摆率。最大工作电压:VCCmax=18V;图2-5显示电路2.1.4系统整体结构图2-6系统整体构成2.2系统软件设计在设计本系统时,选择C语言作为软件编写语言。其编译环境选择了keil。Keil C519 是美国keil software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语
20、言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括c编译器、宏编译器、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境将这些部分组合在仪器。运行keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用c语言编程,那么keil几乎是你的不二之选,即使不使用c语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。以下是本系统的整体流程图:开始启动ADC0808是否转换结束YN打开OE单片机从中读取数据继续等待判断EOCYN在单片机中进行FFT变换输出到DAC0832显示结束
21、图2-7软件流程图2.2.1数据采集软件模块ADC0808的启动,在本设计系统中,只选择了一路外部模拟信号作为输入,所以在选路端,ABC同时接地,已达到选择第一路信号。所以从单片机引出来的控制线,主要是控制START、EOC以及OE。在程序运行前,对其进行定义。Sbit OE= P37;Sbit EOC=P36;Sbit START=P35;OE=0;/初始化START=0;/初始化START =1;/启动_nop_();_nop_();START =0;_nop_();_nop_();While(!EOC);等待判断是否转换结束;OE=1;从中读取数据;把从ADC0808中读取的数据,存放在
22、一个数组里面,为进行傅里叶变换做准备;2.2.2算法实现在单片机中进行如下编程控制10;Void FFT( int XR , int XI ) / /初始化及倒序/ /FFT算法for(L = 1; L 0) b = b3 2; i - - ; for( j = 0; j 0)p = p3 2; i - - ; P = p3 j;for( k = j; k = 128; k = k + 23 b) / /第三层循环FFT(XR, XI) ; 在FFT算法中,蝶形运算是怎么样的。2点DFT运算称为蝶形运算,而整个FFT就是由若干级迭代的蝶形运算组成,而且这种算法采用原位运算,故只需N个存储单元。
23、图2-8 蝶形运算2.2.3.开方在单片机中的原理 因为排版的原因,用pow(X,Y)表示X的Y次幂,用B0,B1,.,Bm-1表示一个序列, 其中x为下标。 假设: Bx,bx都是二进制序列,取值0或1。 M = Bm-1*pow(2,m-1) + Bm-2*pow(2,m-2) + . + B1*pow(2,1) + B0*pow (2,0) N = bn-1*pow(2,n-1) + bn-2*pow(2,n-2) + . + b1*pow(2,1) + n0*pow (2,0) pow(N,2) = M (1) N的最高位bn-1可以根据M的最高位Bm-1直接求得。 设 m 已知,因为
24、 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 pow(2, 1/2+k) N = pow(2, k-1/2) pow(2, k-1), n-1=k-1,n=k=m/2 所以bn-1完全由Bm-1决定。 余数 M1 = M - bn-1*pow(2, 2*n-2) (2) N的次高位bn-2可以采用试探法来确定。 因为bn-1=1,假设bn-2=1,则 pow(bn-1*pow(2,n-1) + bn-1*pow(2,n-2), 2) = b
25、n-1*pow(2,2*n-2) + (bn-1*pow(2,2*n-2) + bn-2*pow(2,2*n-4), 然后比较余数M1是否大于等于 (pow(2,2)*bn-1 + bn-2) * pow(2,2*n-4)。这种比较只须根据Bm-1、Bm-2、.、B2*n-4便可做出判断,其余低位不做比较。 若 M1 = (pow(2,2)*bn-1 + bn-2) * pow(2,2*n-4), 则假设有效,bn-2 = 1; 余数 M2 = M1 - pow(pow(2,n-1)*bn-1 + pow(2,n-2)*bn-2, 2) = M1 - (pow(2,2)+1)*pow(2,2*
26、n-4); 若 M1 (pow(2,2)*bn-1 + bn-2) * pow(2,2*n-4), 则假设无效,bn-2 =0; 余数 M2 = M1。 (3) 同理,可以从高位到低位逐位求出M的平方根N的各位。 使用这种算法计算32位数的平方根时最多只须比较16次,而且每次比较时不必把M的各位逐一比较,尤其是开始时比较的位数很少,所以消耗的时间远低于牛顿迭代法。 在进行了大量的资料的收集和比对,在显示部分选择了,用图表仿真,这样的效果是比较直观的,选择的分析仪是FOURIER(傅里叶分析)。在之前的学习中,对一这方面的运用是空白的,有必要去了解它如何使用。傅里叶分析方法用于分析一个时域信号的
27、直流分量、基波分量和谐波分量,即把被测结点处的时域变换信号作为离散傅里叶变换,求出它的频域变换规律,将被测结点的频谱显示在分析窗口中。在进行傅里叶分析时,必须先选择被分析的节点,一般将电路中的交流激励源的频率设为基频,若在电路中有几个交流电源时,可将基频设在这些电源频率的最小公因数上。PROTEUES ISIS系统为模拟电路频域分析提供了傅里叶分析图表,使用该图表可以显示电路的频域分析。以下简单介绍一下如何使用FOURIER12。首先,单击工具箱中的Simulation Graph按钮。在对象选择器中将出现各种仿真分析所用的图表(如:模拟、数字、噪声、混合和A/C变换等),选择FOURIER仿
28、真图形;光标指向编辑窗口,按下左键拖出一个方框,松开左键确定方框的大小,则傅里叶分析图表被添加到原理图。其次,添加探针,在需要测试的节点上添加电流或者电压探针并将探针添加到FOURIER表中,这里可以直接拖拽探针到FOURIER表中,也可以通过添加图线来完成。最后,进行仿真,选择Graph simulate菜单项,开始仿真。图表也随仿真的结果进行更新。图2-9 傅里叶分析图表3.系统仿真谐波有效值计算按照上式编程计算,程序执行过程中,对系统操作和发生的各项事件如各种故障信息和操作事件进行记录,为系统维护提供依据。仿真效果如下:图3-1 FFT变换图为验证设计的谐波分析算法的正确性,算法的验证采
29、用方波作为输入的128点FFT,其谐波分析的结果与用matlab中的运算进行比较。方波经过FFT运算之后应该是一个sinc函数。图3-2给出方波原始数据实部为方波幅值5,虚部为零的谐波分析计算波形。可以看到,经过FFT运算之后的实部、虚部及求模后的波形是一个sinc函数。图3-2 方波傅里叶变换4结论课题是经过广泛的查阅资料、反复推敲实验设计出来的。在这个过程中,不断有新的方法思路出现,改变甚至取消原定的方法。整个系统的目的、基本理论依据、完成的功能始终是明确的,但具体实现上还是出现很多问题。由于时间上的限制,课题中还有未完成的工作和需进一步研究。由于单片机的性价比高,因此在数据采集及频谱分析
30、系统中往往取代DSP芯片而被广泛使用。在数字信号处理中,离散傅里叶变换(Discrete Fourier Transform,DFT)是常用的变换方法,它在各种数字信号处理系统中扮演着重要的角色。快速傅里叶变换(Fast Fourier Transfonn,FFT)并不是与离散傅里叶变换不同的另一种变换,而是为了减少DFT计算次数的一种快速有效的算法,且它们都是为了将信号变换到频域并进行相应的频谱分析。虽然FFT是一种快速的运算方法,但是为了计算N点的FFT依然需要Nlog2N次加法和05Nlog2N次乘法。当N比较大时,其运算复杂度对RAM的需求也是很大的。在本文中,我们探讨了如何优化FFT
31、算法,并将其在单片机中实现。另一个重要的问题是开方在单片机中的运行问题。我在keil下进行过尝试,直接写的开方,单片机是不能运行的,算法需要改进,或者自己编写开发函数。要在单片机上实现开根号的操作。目前开平方的方法大部分是用牛顿迭代法。我在查了一些资料以后找到了一个比牛顿迭代法更加快速的方法。参考文献1周润景基于protues的电路及单片机系统设计与仿真北京航空航天大学出版社,20062朱清慧protues教程-电子线路设计、制版与仿真清华大学出版,2008.93潘新明微型计算机控制技术实用教程电子工业出版社,2006.14张友德单盘微机原理、运用与实验第五版,复旦大学出版社,20035丁玉美
32、,数字信号处理第二版,西安电子科技大学出版社,2000.126廖志凌,三相三线制系统中零序谐波对谐波检测的影响,江苏大学学报(自然科学版)2005年03期7李强单片机软件设计中的几中基础编程技术电子世界,2002(10):31-33.8 赵玲 吴文军,电力谐波实时检测系统的研究,华东电力,2001年第6期9耿国强 李振军基于keil C51的单片机仿真器的研究与实现甘肃科技,200723(6):45-4610伍文平 李永红 张明,基于单片机的FFT算法分析与实现,科学技术与工程,2009年8月第16期11 罗安电网谐波治理和无功补偿技术及装备M北京:中国电力出版社,200612 WAGER V
33、 EEffects of Harmonics on EquipmentJIEEE Tram on PD,1993,8(2):672680附录:#include#include#include#include#define PI 3.1415926#define N 8/void sine_out();voidchushihua();voiddac0832();void mefft(float pr,float pi,int n,float fr,float fi);void meifft(float fr,float fi,int n,float pr,float pi);void delay
34、_us(unsignedinttime);void delay_ms(unsignedinttime);sbit oe=P37;sbit eoc=P36;sbit star=P35;sbitkey=P32;sbit D1=P20;sbitCS=P27;sbitXFER=P26;sbitDAdata=P0;/sbitW_R=P34;float codefrN,fiN,piN;floatprN;unsigned int AN;unsigned int getdata;void main() unsigned int i,j,m,n;/EA=1;/IT0=1;/EX0=1;chushihua();w
35、hile(1)unsigned int i;unsigned char WaveCount=0;eoc=0;_nop_();_nop_();for(j=0,i=0;i8;i+)eoc=1;oe=1;getdata=P1;delay_ms(8);Ai=(float)getdata;prj=Ai;j+;if(getdata!=1);D1=0;mefft(pr,pi,8,fr,fi);/meifft(fr,fi,8,pr,pi);/dac0832();/getdata=P1;for(n=0;n8;n+)/frn=squrt(prn*prn+pin*pin);CS=0;P0=frn;delay_us(
36、100);XFER=0;CS=1;_nop_();_nop_();oe=0;star=1;_nop_();_nop_();star=0;_nop_();_nop_();void mefft(float pr,float pi,int n,float fr,float fi) int i,k; for(k=0;kn;k+) frk=0; fik=0; for(k=0;kn;k+) for(i=0;in;i+) frk=frk+pri*cos(-2*PI*i*k/n)-pii*sin(-2*PI*i*k/n); fik=fik+pii*cos(-2*PI*i*k/n)+pri*sin(-2*PI*
37、i*k/n); for(i=0; i=n-1; i+) pri = sqrt(fri*fri+fii*fii); if(fabs(fri)0) pii = 90.0; else pii = -90.0; else pii = atan(fii/fri)*360.0/6.283185306; return; void meifft(float fr,float fi,int n,float pr,float pi) int i,j,k; for(i=0;in;i+) pri=0; pii=0; for(i=0;in;i+) for(k=0;k1);voiddelay_ms(unsignedint
38、time)while(time!=0)delay_us(1000);time-;Employment tribunals sort out disagreements between employers and employees.You may need to make a claim to an employment tribunal if: you dont agree with the disciplinary action your employer has taken against you your employer dismisses you and you think tha
39、t you have been dismissed unfairly.For more information about dismissal and unfair dismissal, seeDismissal.You can make a claim to an employment tribunal, even if you haventappealedagainst the disciplinary action your employer has taken against you. However, if you win your case, the tribunal may reduce any compensation awarded to you as a result of your failure to appeal.Remember that in