电能质量检测设计报告.docx
- 文档编号:18012608
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:23
- 大小:126.08KB
电能质量检测设计报告.docx
《电能质量检测设计报告.docx》由会员分享,可在线阅读,更多相关《电能质量检测设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
电能质量检测设计报告
简易电能质量监测装置
一、系统设计方案及原理图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=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电能 质量 检测 设计 报告