简易电能质量检测装置设计方案.docx
《简易电能质量检测装置设计方案.docx》由会员分享,可在线阅读,更多相关《简易电能质量检测装置设计方案.docx(37页珍藏版)》请在冰豆网上搜索。
![简易电能质量检测装置设计方案.docx](https://file1.bdocx.com/fileroot1/2023-2/4/38041d80-fa1a-4f5f-8c42-bcef78a606e2/38041d80-fa1a-4f5f-8c42-bcef78a606e21.gif)
简易电能质量检测装置设计方案
简易电能质量检测装置设计方案
一、系统设计方案及原理图
1.1总体设计思想
通过分析赛题得,本检测装置主要有主控制器模块、显示模块、按键模块和信号变换与处理模块等组成,系统整体框图如下图1所示。
图1系统整体框图
单片机只能处理数字量,其I/0口的TTL电平有一定的限制:
一般高电平在2.4V-5V之间,低电平在0V-0.4V之间,并且模数转换器一般只能采样正的信号值,故输入的交流电压与电流信号要分别经电压变换与处理模块和电流变换与处理模块处理后,才能送数模转换器进行采样与量化处理。
其工作过程为:
主控制器模块将数模转换器输入的数据处理后,通过显示模块进行显示,按键模块可通过主控制器模块,来间接控制显示模块显示容的切换。
1.2主要单元模块电路图及分析
1.2.1电源部分电路
图2电源部分电路图
为便于本试题的设计与制作,设定待测的100~500V交流输入电压、10~50A交流输入电流均经由相应的变换器转换为对应的1~5V交流电压。
设计中,通过采样保持电路实现了对电压和电流两路信号的分别保持,保证了电压信号和电流信号采样的同时性,从而确保了功率测量的准确性。
1.2.2单片机主控制电路
图3主控制器部分原理图
电源电路提供稳定的+3.3V工作电压,时钟电路用于产生单片机工作所需的时钟信号,复位电路使单片机实现初始化状态复位。
C8051F340中的串行接口能方便的与其它串行传送信息的外围设备实现双机,多机通信。
它的部有一个10位SARADC和一个差分输入多路选择器,可提供10位AD转换电路。
系统用C8051F340作为MCU,通过LF353运放,进行整波,并用18V稳压源进行稳压。
利用RC震荡电路实现一个信号输入同时产生电压与电流信号输入的效果,来得到其波形的相位差。
同时通过调节连端的电阻来校正输入数据的准确程度。
因为模数转换器ADC不能采集二维数轴负半轴的信号,所以要在电压和电流两个数模转换通道前各加一个波形移位电路,其原理图如上图3所示,使输入波形不失真的全部移到二维数轴的正半轴以上。
1.2.3移相电路
在交流电路中,电阻电路是线性的,电容的相位超前90度,电感的相位滞后90度。
选择不同的RC数值,能使RC组成电路的输出相对输入产生不同的相移,理论上一级RC最大相移可达90度,通常可以2级、3级串联使用(在振荡器中),这样最大相移可达2700。
适当改变R和C的值,则可满足不同的相移要求。
本系统移相电路将输入的电压信号移位后代表同一路的电流信号,便于系统的调试。
1.2.4显示系统
图5显示电路原理图
显示模块我们使用了12864F这款液晶模块。
这块液晶是点阵型液晶模块,自带中文字库。
选择这块液晶模块是从系统实际需要和将来的扩展空间出发考虑的。
由于显示模块只需显示设定输出值和实际输出值,从降低成本出发不必使用更高级的液晶模块。
二、系统硬件设计与计算
2.1信号波一周期采样点数的确定
由奈奎斯特采样定理得,在信号频率变化时若都能保证对信号周波等间隔、均匀采样60个点,经FFT算法后不仅能够达到工频交流电测量的要求,而且可以对普通信号的30次以下的谐波进行分析,这足以满足赛题要求测量5次的谐波含量的要求,同时考虑到采样点数较少时,积分法进行运算的误差就难以达到系统的精度要求。
所以AD采样时,一周期采样的点数我们取64,即用软件倍频的方法对输入信号的频率64倍频,然后以此频率作为AD采样频率。
2.2采样信号的处理
2.2.1对输入的交流电压、电流信号的公式证明
假设输入信号的基波信号为频率为ω的正弦波电压
其中2,
则
=+
(1)
若将看作的复数振幅,则
(2)对信号每周采样次产生采样序列
=,其中为采样间隔。
对进行离散傅里叶变换得到基波分量的频谱系数。
==
对正弦输入信号可证明(3)
是输入信号的基波频谱系数,k为小于N的正整数,代表第k
次的采样。
由式
(1)﹑
(2)和(3)三式可得出与的关系。
=
对于x次谐波,同样可得其复数振幅的实部和虚部:
,
对另一路输入的交流电流信号可同样应用上述公式求出x次谐波分量的复数振幅的实部和虚部…。
2.2.2交流电压有效值﹑电流有效值﹑有功功率、无功功率和视在功率的计算。
设、、、分别为基波或x次谐波交流电压、电流、有功功率、无功功率(x=0时,表示基波,x=1、3、5.....时,表示对应的谐波),则有:
总的输入信号的有效值,有功、无功功率,功率因数为:
,
,,
上两式可采用近似计算公式
,,其相对误差为。
三、系统软件设计
系统软件流程见附录Ⅳ。
四、系统的检测方法及理解
4.1测试仪器及测试方法
测试仪表:
函数信号发生器/计数器,数字万用表,示波器
测试方法:
用函数信号发生器产生正弦信号波作为电压信号波输入,此电压信号经移相电路移相后作为同一路的电流信号输入,经采样送单片机处理后显示,将显示的各数值同示波器观察值和万用表侧得值作比较,计算出各误差值。
4.2基本部分测试结果及分析
4.2.1交流电压有效值和交流电流有效值测试结果如下表1
4.2.2功率测试结果如下表2
视在功率PF=cosΦ=P/S
4.3发挥部分测试结果及分析
4.3.1交流电压输入频率的测试结果如下表3
五、小结
在本次设计中我们仔细分析了电路图的排版结构,用最适合的方式接线,大大缩小了电路的规模,使系统部的干扰及串扰大大降低,这使系统调试的难度降低。
通过对器件的仔细挑选,我们力图使硬件系统简单化,在不降低系统参数的条件下降低成本。
现分析设计过程中系统产生误差的原因:
(1)单片机输出PWM误差。
(2)采样电阻精度误差。
(3)A/D采样电路转换误差和量化误差。
(4)整个系统版由手工焊接完成,布线时无法避免线路之间和外界的电池干扰。
(5)功率的测量是由电压、电流的测量值间接计算所得,由于误差的累计效应会使有功功率、无功功率和视在功率与理论值存在误差。
经过多日努力,我们的设计基本完成了题目要求,由于仿真软件的限制,可能效果不是非常理想。
本次设计极大的锻炼了我们各方面的能力,虽然我们遇到很多困难和障碍,但是合作与努力,困难与希望并存。
通过本次设计,我们深刻体会到共同协作和团队精神的重要,也强烈的意识到课本知识与实际相结合的重要性。
我们将继续努力争取更大的进步。
附录Ⅰ主要元器件清单
元器件
型号
数目
单片机
C8051F340
1
整流桥
KBP310
1
变压器
220V10W
12V*2
1
三端稳压芯片
L7809CV
1
三端稳压芯片
KA7909
1
三端稳压芯片
HT7533
1
三端稳压芯片
L7805CV
1
集成运放
LM353
2
集成运放
LM311P
2
与非门芯片
74HC00
1
三端稳压管
LM385B2-2.5
1
高速二极管
IN4148
8
液晶显示模块
12864F
1
电解电容
2200uF25V
2
电解电容
220uF25V
2
电解电容
10uF25V
2
电解电容
100uF25V
1
电解电容
1uF25V
3
电容
0.1uF
13
电容
1uF
3
电阻
1kΩ
2
电阻
10kΩ
5
电阻
510Ω
1
电阻
2kΩ
2
电阻
12kΩ
4
按钮
3
电感
10uH
2
电位器
0~10kΩ
1
附录Ⅱ总程序图
附录Ⅲ数据表
表1电压有效值和电流有效值测试结果
输入电压有效值(V)
测得电压有效值(V)
测量误差(%)
允许误差(%)
是否满足要求
1.20
1.204
0.33
1
是
2.42
2.429
0.037
是
3.81
3.79
0.5
是
输入电流有效值(A)
测得电流有效值(A)
测量误差(%)
允许误差(%)
是否满足要求
0.48
0.482
0.42
1
是
1.23
1.236
0.48
是
1.96
1.968
0.408
是
表2功率测试结果
输入(峰值)
各功率理论值
各功率测得值
各功率测量误差(%)
电压/V
电流/A
P/W
Q/var
S/W
P/W
Q/var
S/W
P
Q
S
1.20
0.48
0.456
0.342
0.57
0.448
0.344
0.572
1.2
0.53
1.45
2.42
1.23
1.778
2.384
2.98
表3交流输入电压信号频率测试结果
输入频率实际值
输入频率测得值
测量误差
允许误差(%)
是否满足要求
46Hz
46.001Hz
0.001Hz
0.001Hz
是
49Hz
49.0004Hz
0.0004Hz
是
51Hz
51.0007Hz
0.0007Hz
是
54Hz
54.0009Hz
0.0009Hz
是
附录Ⅳ主程序源代码
#include
#include"intrins.h"
#include"math.h"
#include"table.h"
#include"12864.h"
#include
sbitkey2=P0^3;//基本和发挥部分多个界面切换
sbitkey1=P0^4;//基本发挥切换,开关形式1=基本部分;0=发挥部分
sbitkey3=P0^2;//发挥部分谐波显示/波形显示切换
/********************************************************************
*常量及全局变量定义
********************************************************************/
#defineSYSCLK000000
#defineADC_CLK1600000
#defineK15
#defineK11.07
#definewavek0.0491
#definefeqk1.00806
intcodevxiebo[6]={1270,5,422,3,252,1};
intcodeixiebo[6]={1271,4,421,4,250,3};
floatdoudong;
unsignedintvmax=0;
unsignedintimax=0;
unsignedcharmaxindex=0;
unsignedintvmin=0;
unsignedintimin=0;
unsignedcharminindex=0;
unsignedcharkeynum=0;
/*显示*/
longxdatac[6];//有效值
longxdatav[6];
intvxiebozx[6];
intixiebozx[6];
unsignedintluxiebozx;
unsignedintlixiebozx;
//floatxdatavxieboyx[6];
floatxdataixieboyx[6];
floatxdatavxbyx;
floatxdataixbyx;
floatidatavta;
floatidataita;
floatidatacosvalue;
floatidatasinvalue;
floatidatacostemp;
longidatapw;
longidataqw;
longidatasw;
floatpf;
longidatafeq;
//////////////////
sbitkey=P1^0;
sbitmode=P1^1;
unsignedintj=0;
unsignedinttime=0;
//unsignedintcos=0;
unsignedintcounter0=0;
unsignedintcounter1=0;
unsignedinti=0;
unsignedinttime0=0;
unsignedinttime1=0;
longtemp=0;
unsignedinttemp1=0;
unsignedinttemp_th0=0;
bitflag=0;
bitwaveflag=0;
bittimeflag=0;
bittime_get_flag=0;
//bitoverflag=0;
bitint0flag=0;
bitadfin_flag=0;
unsignedintxdataad_v0[129];//电流采样
unsignedintxdataad_v1[129];//电压采样
unsignedintidataUmax_last,Umin_last,Imax_last,Imin_last;//历史电压电流最值
unsignedcharidatakey1_lishi;//发挥部分按键次数记录
unsignedcharidatakey_lishi;//基本部分按键次数记录
/********************************************************************
*函数声明
********************************************************************/
voidOSCILLATOR_Init();//部振荡器初始化
voidPORT_Init();//端口初始化函数
voidADC_Init();//AD初始化函数
voidADC_Enable();//AD使能函数
voidADC_Disable();////AD除能函数
voidtimer2_Init();//定时器初始化程序
voidTimer0_Init();
voidExt_Interrupt_Init();
voidTimer1_Init();
voidDelay_us(unsignedinttimes)
{
unsignedinti;
for(i=0;i{
_nop_();//调用NOP,延时1us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
voiddisplay_NUmber(char*st,unsignedintnumber)
{
chara[3];
a[3]='\0';
lcddisplay(st);
a[2]=number%10+48;
number/=10;
a[1]=number%10+48;
number/=10;
a[0]=number%10+48;
lcddisplay(a);
}
voidW_Display()//功率显示
{
WriteCommand(0x01);//清屏
Delay_us(3000);
startp(0);
display_NUmber("U:
",v[keynum]/2);
Delay_us(10);
startp(3);
lcddisplay("V");
Delay_us(10);
startp(4);//电流
lcddisplay("I:
");
startp(5);
WriteData(c[keynum]/2/100+0x30);
WriteData(c[keynum]/2/10%10+0x30);//"."
WriteData(0x2E);//"."
WriteData(c[keynum]/2%10+0x30);
startp(7);
lcddisplay("A");
Delay_us(10);
startp(16);
display_NUmber("S:
",sw/4);
Delay_us(10);
startp(16);
display_NUmber("S:
",sw/4);
Delay_us(10);
if(pf>=100)
{
pf=99;
}
startp(20);
display_NUmber("F:
0.",pf);
Delay_us(10);
startp(8);
display_NUmber("P:
",pw/4);
Delay_us(10);
startp(12);
display_NUmber("Q:
",qw/4);
Delay_us(10);
}
voidmax_display()//最大值最小值显示界面
{
WriteCommand(0x01);//清屏
Delay_us(3000);
//比较最值
if(key_lishi==1)//第一次,人为赋最值
{
Umax_last=v[keynum];
Umin_last=v[keynum];
Imax_last=c[keynum];
Imin_last=c[keynum];
}
if(v[keynum]>Umax_last)//最大电压改变
{
Umax_last=v[keynum];
}
if(v[keynum]{
Umin_last=v[keynum];
}
if(c[keynum]>Imax_last)//最大电流改变
{
Imax_last=c[keynum];
}
if(c[keynum]{
Imin_last=c[keynum];
}
//显示
startp(3);
WriteData(key_lishi+0x30);//5组编号
startp(4);
lcddisplay("组");
Delay_us(10);
startp(16);//最大电压
display_NUmber("Umax",Umax_last/2);
Delay_us(10);
startp(20);//最小电压
display_NUmber("Umin",Umin_last/2);
Delay_us(10);
startp(8);//最大电流
lcddisplay("Imax");
startp(10);
WriteData((Imax_last/2)/100+0x30);
WriteData((Imax_last/2)/10%10+0x30);//"."
WriteData(0x2E);//"."
WriteData((Imax_last/2)%10+0x30);
startp(12);//最大电流
lcddisplay("Imin");
startp(14);
WriteData((Imin_last/2)/100+0x30);
WriteData((Imin_last/2)/10%10+0x30);//"."
WriteData(0x2E);//"."
WriteData((Imin_last/2)%10+0x30);
startp(24);//实时电压
display_NUmber("U:
",v[keynum]/2);
Delay_us(10);
startp(28);//最大电流
lcddisplay("I:
");
startp(29);
c[keynum]=123;
WriteData((c[keynum]/2)/100+0x30);
//WriteData(0x31);
WriteData((c[keynum]/2)/10%10+0x30);//"."
WriteData(0x2E);//"."
WriteData((c[keynum]/2)%10+0x30);
Delay_us(10);
}
//发挥部分谐波显示界面
voidxiebo_display()
{
WriteCommand(0x01);//清屏
Delay_us(3000);
startp(0);//频率
lcddisplay("f:
");
startp
(1);
WriteData(feq/100+0x30);
WriteData(feq/10%10+0x30);
WriteData(0x2E);//"."
WriteData(feq%10+0x30);
Delay_us(10);
startp(5);
display_NUmber("",key1_lishi+1);//N
Delay_us(10);
startp(7);//次谐波
lcddisplay("次");
Delay_us(10);
startp(16);//电压谐波含量
lcddisplay("电压谐波");
startp(21);
WriteData((int)vxiebozx[key1_lishi]/1000+0x30);
WriteData(0x2E);//"."
WriteData((int)vxiebozx[key1_lishi]/100%10+0x30);
WriteData((int)vxiebozx[key1_lishi]/10%10+0x30);
WriteData((int)vxiebozx[key1_lishi]%10+0x30);
Delay_us(10);
startp(8);////电流谐波含量
lcddisplay("电流谐波");
startp(13);
WriteData((int)ixiebozx[key1_lishi]/1000+0x30);
WriteData(0x2E);//"."
WriteData((int)ixiebozx[key1_lishi]/100%10+0x30);
WriteData((int)ixiebozx[key1_lishi]/10%10+0x30);
WriteData((int)ixiebozx[key1_lishi]%10+0x30);
Delay_us(10);
startp(24);//本次谐波电压有效值