电能质量检测设计报告.docx

上传人:b****2 文档编号:2573320 上传时间:2023-05-04 格式:DOCX 页数:23 大小:126.08KB
下载 相关 举报
电能质量检测设计报告.docx_第1页
第1页 / 共23页
电能质量检测设计报告.docx_第2页
第2页 / 共23页
电能质量检测设计报告.docx_第3页
第3页 / 共23页
电能质量检测设计报告.docx_第4页
第4页 / 共23页
电能质量检测设计报告.docx_第5页
第5页 / 共23页
电能质量检测设计报告.docx_第6页
第6页 / 共23页
电能质量检测设计报告.docx_第7页
第7页 / 共23页
电能质量检测设计报告.docx_第8页
第8页 / 共23页
电能质量检测设计报告.docx_第9页
第9页 / 共23页
电能质量检测设计报告.docx_第10页
第10页 / 共23页
电能质量检测设计报告.docx_第11页
第11页 / 共23页
电能质量检测设计报告.docx_第12页
第12页 / 共23页
电能质量检测设计报告.docx_第13页
第13页 / 共23页
电能质量检测设计报告.docx_第14页
第14页 / 共23页
电能质量检测设计报告.docx_第15页
第15页 / 共23页
电能质量检测设计报告.docx_第16页
第16页 / 共23页
电能质量检测设计报告.docx_第17页
第17页 / 共23页
电能质量检测设计报告.docx_第18页
第18页 / 共23页
电能质量检测设计报告.docx_第19页
第19页 / 共23页
电能质量检测设计报告.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

电能质量检测设计报告.docx

《电能质量检测设计报告.docx》由会员分享,可在线阅读,更多相关《电能质量检测设计报告.docx(23页珍藏版)》请在冰点文库上搜索。

电能质量检测设计报告.docx

电能质量检测设计报告

简易电能质量监测装置

一、系统设计方案及原理图3

1.1设计要求3

1.2设计思想3

二、系统硬件设计5

2.1信号波一周期采样点数的确定5

22电路设计图5

2.2.1移相电路5

2.2.2整形电路5

2.2.3采样电路6

2.2.4总电路图7

2.3电路分析7

3软件设计8

3.1主程序流程图8

3.2各子程序流程图8

4系统测试14

4.1测试仪器及测量方法14

4.2测试结果及分析14

5结束语15

参考文献15

附录16

程序附录1:

16

摘要:

本简易电能质量检测装置由单片机控制模块,电源模块,信号变换与处理模块

等构成。

C805仆020为主控单片机,它能准确的完成同时对一路工频交流电的频率、电压有效值、电流有效值、有功功率、无功功率、功率因素等进行测量。

通过软件对输入电压信号进行实时采样。

系统调试时,用函数发生器输出正弦电压信号作为交流信号的电压信号输入,此电压信号经自制的移向电路相后代表同一路信号的电路信号输入。

关键词:

电能质量单片机工频交流电

、系统设计方案及原理图

1.1设计要求

1、测量交流输入电压有效值

频率:

50Hz;测量范围:

100〜500V;准确度:

土0.5%。

2、测量交流输入电流有效值

频率:

50Hz;测量范围:

10〜50A;准确度:

土0.5%。

3、测量有功功率P(单位为W)、无功功率Q(单位为var)、视在功率S(单位为VA)及功率因数PF(功率因数为有功功率与视在功率之比)。

有功功率、无功功率、视在功

率准确度:

土2%;功率因数显示格式:

0.00~0.99。

4、在交流电压、交流电流、有功功率、无功功率、视在功率的测试过程中,能够记录

它们的最大值和最小值。

1.2设计思想

通过分析题目,本检测装置主要有主控制器模块、显示模块、按键模块和信号变换与处

理模块等组成。

电压输入

电流输入

方案一、分别测量电压信号和电流信号,但是,电流信号不易测量,需用到大量元器件,

硬件电路会变得很复杂,成本也高。

方案二、直接测量电压信号,通过模拟测量电流信号,即对电压信号移相测量电流信号,再通过对电压和电流的采样和处理,计算出频率,相位差、电压有效值,最大电压,最小电压、电流有效值,最大电流,最小电流、有功功率,无功功率,视在功率,功率因素,同

时通过打点的方法将正弦波输出到Icd12864显示器上。

设计中,对电压进行移相得到模拟

电流,再通过采样保持电路实现对同一时刻的电压和电流两路信号的分别保持,将采样得到

的电压电流进行模数转换,以得到实际电压电流。

再对电路进行整形,通过捕获上升沿来测

量相位及频率,这样能确保功率测量的准确性,而且成本比较低。

设计图如图表1:

图表1

显示模块中通过按键1、2、3、4分别在lcd1602显示频率,相位差、电压有效值,最大电压,最小电压、电流有效值,最大电流,最小电流、有功功率,无功功率,视在功率,

功率因素。

及在Icd12864显示电压和电流各自的信号。

、系统硬件设计

2.1信号波一周期采样点数的确定

AD

在一个周期内,每次都从同一起点开始通过定时来采样64个点。

将每采集的点,通过

转换。

2.2电路设计图

221移相电路

图1

通过硬件模拟来达到电能质量监测的。

考虑到电压信号所相对的电流信号与电压信号之间存在90度的相位差,电流信号滞后于电压信号。

所以通过移相电路即对输入电压信号移相来模拟电流信号。

2.2.2整形电路

3W

-1V~+4.3V内。

整形模块利用比较器LM393,将正弦波转换成方波,再由IN4148整流二极管来限制方波的幅值,将输出的方波幅值限定在

2.2.3采样电路

图3

采样保持模块我们采用LF398采样/保持器来设计采样电路。

LF398是一种高性能单片采样/保持器。

它通过1k的电位器来实现调零的作用,8引角

的采样控制信号可以由单片机来设定实现,也可利用函数信号发生器的产生脉冲信号来实现

控制LF398的采样的点数。

224总电路图

2.3电路分析

对电压进行移相得到模拟电流,再通过采样保持电路实现对同一时刻电压和电流两路信号的分别保持,将采样得到的电压电流进行模数转换后,以得到实际电压电流。

再对电路进

行整形,通过捕获上升沿来测量相位及频率。

测量相位时,通过D触发器来判断相位超前

还是滞后,

如果输出为0则相位滞后,如果输出为1则相位超前。

3软件设计

3.1主程序流程图

 

 

 

3.2各子程序流程图

(1)电压、电流测量

等待完成两次捕获

调用函数采集一个周期内的电压和电流数据

查找电压和电流最大值和

最小值

计算电压和电流有

效值

将电压和电流的数字量转换为实际值

显示电压和电流最大值、最小值和有效值

显示电压和电流的波形

(结束}

(2)频率测量

(3)功率测量

「开始];

 

清零捕获次数计数器

等待完成两次捕获

调用函数采集一个周期内的电压和电流数据

查找电压和电流的最大值、最小值

计算有功功率

记录有功功率的最大值

r

计算视在功率和功率因素

输出视在功率、功率因素、有功功率及其最大值

1

「结束]

(4)定时器0中断

(5)PCA0中断

[、开始';

[结束]

 

 

4系统测试

4.1测试仪器及测量方法

测试仪表:

函数信号发生器,数字万用表,示波器

测试方法:

用函数信号发生器产生正弦信号波作为电压信号波输入,此电压信号经移

相电路移相后作为同一路的电流信号输入,经采样送单片机处理后显示,将显示的各数值同

示波器观察值作比较,计算出各误差值。

4.2测试结果及分析

〔N」2

电压有效值:

u=vu.n

Nnz0

[IN-1?

电流有效值:

匸j—送i.(n)

XN心

1NA

有功功率:

P=—'u(n)i(n)

Nnz0

视在功率:

S=U*I无功功率:

Q=S-P

P

功率因素:

’=—

S

输入信号峰峰值

3V2V

1V

最大电压

1.49

1

0.52

最小电压

-1.49

-1

-0.52

相对误差

0.006667

0

-0.04

理论电压有效值

1.0608

0.7072

0.3536

电压有效值

1.0526

0.7102

0.3746

相对误差

0.00773

-0.00424

-0.05939

最大电流

1.5

1.01

0.54

最小电流

-1.5

-1.01

-0.54

相对误差

0

-0.01

-0.08

理论电流有效值

1.0608

0.7072

0.3536

电流有效值

1.053

0.7132

0.3787

相对误差

0.007353

-0.00848

-0.07098

理论有功功率

0.974507

0.433114

0.108279

有功功率

0.84

0.38

0.1

相对误差

0.138026

0.122633

0.076456

理论视在功率

1.125297

0.500132

0.125033

视在功率

1.05

0.47

0.12

相对误差

0.071711

0.06411

0.041941

理论功率因素

0.866

0.866

0.866

功率因素

0.8

0.81

0.8

相对误差

0.076212

0.064665

0.076212

5结束语

通过此次实验对于软件和硬件方面的调试能力有所提高。

在软件编程方面,对于单片机中的一些芯片的接口的定义和调用接口的数据。

根据单片机编程需要对硬件的一些指标有所了解。

在按电路图焊接完,进行硬件调试是发现LM393的2脚和6脚的输入信号中有一些毛

刺信号的干扰,为了消除这些毛刺信号的干扰,于是在这两个引脚上加了两个对地小电容。

测相位的引脚也存在同样的问题,就用了同样的方法来解决。

在软件调试过程中发现,用定时器2、3来启动ADCO,虽然理论上是可以的,但是,

由于ADC0启动和完成转换,需要一定时间,而我们是在启动ADC0转换的下一个时刻就

直接读取转换结果,所以,中间出现了一些差错。

于是,改用了置一ADOBUSY的方式来

启动,并且使用while语句等到ADC0转换完成时才读取转换结果。

这些天实验中发现目前所做的效率显然高于之前的每一个实验,原因很多,一是因为没有其他旁事,这样会更专注。

二是学习氛围,学习氛围很浓厚,每天都是12小时都在编

程。

更多的是得到了太多的帮助,学长一次次解决了我们看似无解的麻烦,并教会我们一些

无从得知的基础知识,让我们在单片机这条路上走得更长。

这些天学会了很多,但是最重要

的还是学会自主学习,问题学会自己解决,这样才能永无止尽地学下去。

北京:

电子工业出版社,2004年

北京:

机械工业出版社,2008年

上海:

复旦大学出版社,2000年

参考文献

1•黄志伟主编,全国大学生电子设计竞赛训练教程

2•赵佩华,眭碧霞主编,单片机原理及接口技术

3•张友德主编,单片机微型机原理应用于实验

附录

程序附录1:

#inelude"c8051F020.h"

#inelude"sysinit.h"

#inelude"lcd1602.h"

#inelude"keysean.h"

#include"ade.h"

#inelude"led12864.h"

#inelude"math.h"

#include

externunsignedcharxdatalcd_buffO[16];〃16O2显示缓冲区

externunsignedcharxdataled_buff1[16];

unsignedcharxdatatab10[];

unsignedcharxdatatab20[];

unsignedcharxdatatab30[];

unsignedcharxdatatab40[];

unsignedcharcodezuobiao[];

unsignedintzhouqi,jiange;

unsignedcharj=0,ccfO_overflow,key,key_value;

floatfreqvalue,xiangweicha,U,Umax,Umin,U0,l,lmax,lmin,IO,power,S,pf,t;

floatpowerl=0;

floatxdataadc0_buff0[64];

floatxdataadc0_buff1[64];

sbitcontrol=P0A3;

sbitflag=P0A5;

voidpl(void);

voiddy(void);

voiddl(void);

voidgl(void);

voidcaiji(unsignedcharade0_buff0[],unsignedcharadc0_buff1[]);

voidtuxing(floatade0_buff0[],floatadc0_buff1[]);

voidPrintString(unsignedchar*str);

voidpho_disp(unsignedchar*tab);

voidmain(void)

{

WDTCN=OxDE;

WDTCN=OxAD;

SysClklnit();//配置系统时钟,使用外部晶振,系统上电默认使用内部2M时钟

Portlnit();//I/O端口配置

LCD1602」nit();〃lcd1602初始化

LCD12864」nit();

ADCO_Init();

PCA0CPM0=0x21;

PCA0CPM1=0x21;

PCAOMD=OxO1;

EA=1;

ET0=1;

EIE1=0x08;

PCA0CN=0x40;//启动PCA0计数器工作

TMOD=0x01;

THO=OxFD;

TL0=0x8F;

AMX0CF=0x00;

while

(1)

{

key_value=Get_Key();

if(key_value!

=0xff)key=key_value;

while(key==1)

{

pl();key_value=Get_Key();if(key_value!

=0xff)

key=key_value;

}

while(key==2)

{

dy();key_value=Get_Key();

if(key_value!

=0xff)

key=key_value;

}while(key==3)

{

dl();key_value=Get_Key();

if(key_value!

=0xff)key=key_value;

}

while(key==4)

gi();

key_value=Get_Key();

if(key_value!

=Oxff)

key=key_value;

}

}

}

voidpl(void)

{

ccfO_overflow=0;〃清零捕获次数计数器,开始测量频率信号

while(ccf0_overflow<2);//等待第二次捕获

freqvalue=2000000.0/zhouqi;〃计算频率值xiangweicha=jiange*1.0/(zhouqi*1.0)*360-0.14;if(xiangweicha>180)

",xiangweicha);

",xiangweicha);

”,freqvalue);

xiangweicha=360-xiangweicha;if(flag==0)

sprintf(lcd_buff0,"pd:

+%-6.3fif(flag==1)

sprintf(lcd_buff0,"pd:

-%-6.3fLCD_SET_CURSOR(1,1);

PrintString(lcd_buffO);

sprintf(lcd_buff1,"freq:

%-8.4fLCD_SET_CURSOR(2,1);

PrintString(lcd_buff1);Delay_Ms(100);

}

voiddy(void)

{

ccf0_overflow=0;〃清零捕获次数计数器,开始测量频率信号

while(ccf0_overflow<2);〃等待第二次捕获

caiji(adcO_buffO,adcO_buff1);

U=0;

Umax=adcO_buffO[O];

Umin=adcO_buffO[O];for(j=0;j<64;j++)

{

if(adc0_buff0[j]>Umax)Umax=adc0_buff0[j];

if(adc0_buff0[j]

Umin=adc0_buff0[j];}for(j=0;j<64;j++){

U=U+pow(adcO_buffO|]]-(Umax+Umin)/2,2);

}

U=sqrt(U/64);

U=U/4095.0*3.0+0.025;〃将电压数字量转换为实际电压值

U0=Umax;

Umax=(Umax-(Umax+Umin)/2)/4095.0*3.0+0.025;

Umin=(Umin-(UO+Umin)/2)/4095.0*3.0-0.025;

sprintf(lcd_buffO,"l:

%-6.2fs:

%-6.2f',Umax,Umin);

LCD_SET_CURS0R(1,1);

PrintString(lcd_buffO);

sprintf(lcd_buff1,"Urms:

%-6.4f",U);

LCD_SET_CURSOR(2,1);

PrintString(lcd_buff1);

tuxing(adcO_buffO,adcO_buff1);

Delay_Ms(100);

}

voiddl(void)//电流测量

{

ccf0_overflow=0;//清零捕获次数计数器,开始测量频率信号

while(ccf0_overflow<2);

caiji(adcO_buffO,adcO_buff1);

1=0;

lmax=adc0_buff1[0];

Imin=adc0_buff1[0];

for(j=0;j<64;j++)

{

if(adc0_buff1[j]>Imax)

Imax=adc0_buff1[j];

if(adc0_buff1[j]

Imin=adc0_buff1[j];

}

for(j=0;j<64;j++)

{

I=I+pow(adc0_buff1[j]-(Imax+Imin)/2,2);

}

I=sqrt(I/64);

I=I/4095.0*3.0+0.035;〃将电压数字量转换为实际电压值

I0=Imax;

Imax=(Imax-(Imax+Imin)/2)/4095.0*3.0+0.05;

Imin=(Imin-(l0+lmin)/2)/4095.0*3.0-0.05;

sprintf(lcd_buff0,"l:

%-6.2fs:

%-6.2f',lmax,lmin);

LCD_SET_CURSOR(1,1);

PrintString(lcd_buff0);

sprintf(lcd_buff1,"lrms:

%-6.4f",l);

LCD_SET_CURS0R(2,1);

PrintString(lcd_buff1);

tuxing(adcO_buffO,adcO_buff1);

Delay_Ms(100);

}

voidgl(void)

{

ccfO_overflow=0;

while(ccf0_overflow<2);

caiji(adcO_buffO,adcO_buff1);

Umax=adcO_buffO[O];

Umin=adcO_buffO[O];

lmax=adc0_buff1[0];

Imin=adc0_buff1[0];

for(j=0;j<64;j++)

{

if(adcO_buffO[j]>Umax)

Umax=adc0_buff0[j];

if(adc0_buff0[j]

Umin=adc0_buff0[j];

if(adc0_buff1[j]>Imax)

Imax=adc0_buff1[j];

if(adc0_buff1[j]

Imin=adc0_buff1[j];

}

power=0;

for(j=0;j<64;j++)

{

U=(adc0_buff0[j]-(Umax+Umin)/2)/4095.0*3.0;

I=(adc0_buff1[j]-(Imax+Imin)/2)/4095.0*3.0;power=U*l+power;

}

U=0;

I=0;

for(j=0;j<64;j++)

{

U=U+pow(adc0_buff0[j]-(Umax+Umin)/2,2);

I=I+pow(adc0_buff1[j]-(Imax+Imin)/2,2);

}

U=sqrt(U/64);

U=U/4095.0*3.0;

I=sqrt(I/64);

I=1/4095.0*3.0;

power=power/64.0;

if(abs(t-Umax)>136)

powerl=0;

if(power>powerl)

powerl=power;

t=Umax;

sprintf(lcd_buffO,"P:

%-5.2fPL:

%-5.2f",power,powerl);

LCD_SET_CURS0R(1,1);

PrintString(lcd_buffO);

S=U*I;

pf=power/S;

sprintf(lcd_buff1,"S:

%-5.2fpf:

%-3.2f",S,pf);

LCD_SET_CURSOR(2,1);

PrintString(lcd_buff1);

Delay_Ms(100);

}

voidPCA0_0int(void)interrupt9

{

if(CF==1)

{

CF=0;//计数器溢出标志清零,必须用软件清零,硬件不能自动清零

}

if(CCF0==1)//捕获中断处理

{

CCF0=0;

if(ccf0_overflow==0)//第一次捕获发生时候清零计数器

{

PCA0L=0;

PCA0H=0;

}

if(ccf0_overflow==1)//第二次捕获发生后,就可以计算周期

zhouqi=PCA0CPH0*256+PCA0CPL0;

ccf0_overflow++;//捕获次数加调整

if(ccf0_overflow>=2)ccf0_overflow=2;

}

if(CCF1==1)//捕获中断处理

{

CCF1=0;

if(ccf0_overflow==1)

jiange=PCA0CPH1*256+PCA0CPL1;

}

voidcaiji(floatadcO_buffO[],floatadcO_buff1[])

{

j=0;

TR0=1;

while(j<64);

TR0=0;

}

voidtuxing(floatadcO_buffO[],floatadcO_buff1[])

{

clrgdram();〃将GDRAM中的数据全部置为0

set_coord(0,0);

Icd12864_show_str(tab10,16);set_coord(0,1);

lcd12864_show_str(tab20,16);set_coord(0,2);

Icd12864_show_str(tab30,16);set_coord(0,3);

lcd12864_show_str(tab40,16);

pho_disp(zuobiao);〃显示坐标

for(j=0;j<64;j++)〃打点显示电压和电流的波形

{

U=adc0_buff0[j]/4095.0*3.0;

I=adc0_buff1[j]/4095.0*3.0;

draw_point(31-U*10,j+47,1);

draw_point(63-l*10,j+47,1);

}

}

voidtimer。

」sr(void)interrupt1

{

TF0=0;//清除中断标志位

TH0=0xFD;

TL0=0x8F;

control=0;

AMX0SL=

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2