全国大学生电子设大赛之单相用电器分析监测装置方案报告含程序Word文件下载.docx
《全国大学生电子设大赛之单相用电器分析监测装置方案报告含程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《全国大学生电子设大赛之单相用电器分析监测装置方案报告含程序Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
电流互感器检测电流
理想电流互感器两侧的额定电流大小和它们的绕组匝数成反比。
并且常数为K。
K=I1/I2=N1/N2
电流互感器的一次电流取决于一次性电路的电压和阻抗。
电流互感器的工作状态接近于短路状态。
因此对电能的消耗量较小。
优点:
结构简单可靠,寿命较长,便于维护。
价格较低。
缺点:
不能用于高频检测,但可用于市区电检测。
综合三个方案,经比较发现,方案三更适合用于单相用电器分析监测,故采用方案三。
方案设计
运用电流互感器检测电路中的电流,利用整流电路将220v交流电转化为直流电实现单相用电器分析监测。
采用大规模集成电路ADC0809实现数模(A/D)转换,就是把模拟量信号转换成对应的数字量信号。
数字信号传入单片机进行数据处理及控制,然后通过显示屏显示具体的电流值及各电性参数。
能达到理想精确值。
工作流程图
2检测电路设计及理论分析
检测电路设计
见图一:
检测电路
当一次绕组中有电流1I通过时,一次绕组的磁动势11产生的磁通绝大部分通过铁芯而闭合,从而在二次绕组中感应出电动势2E。
如果二次绕接有负载,那么二次绕组中就有电流2I通过,有电流就有磁动势,所以二次绕组中由磁动势22I产生磁通,这个磁通绝大部分也是经过铁芯而闭合。
因此铁芯中的磁通是由一、二次绕组的磁动势共同产生的合成磁通为主磁通。
根据磁动势平衡原理可以得到
I1N1+I2N2=I10N1
I10N1——励磁动势。
电流互感器两侧的额定电流大小和它们的绕组匝数成反比。
K=I1/I2=N2/N1
运用电流互感器检测电路中的电流、功率和电能大小。
特征参量设计
设计要求及思路
设计要求:
电路电流范围—。
设计思路:
由互感器测量电流值(运用K=I1/I2=N2/N1),运用整流电路将交流电转化为直流电,再采用大规模集成电路ADC0809实现数模(A/D)转换,把模拟量信号转换成对应的数字量信号。
数字信号传入单片机进行数据处理,然后通过显示屏显示具体的电压值和电流值及各电性参数。
参量设计
所使用的互感器的匝数比为I1/I2=N2/N1=850/10。
半波整流电路由于二极管的单向导电作用,使流过负载电阻的电流为脉动电流,电压也为一单向脉动电压,其电压的平均值(输出直流分量)为
流过负载的平均电流为
流过二极管D的平均电流(即正向电流)为
加在二极管两端的最高反向电压为
由于传入ADC0809的基准电压UREF=5V,因此利用电阻降压到5V。
输出电压公式
其中:
为输出电压;
为基准电压;
D为输出二进制代码对应的十进制数,该路模拟电压转换为8位二进制代码。
3硬件电路设计与程序设计
硬件电路设计
检测整流电路
见图二:
互感器将一次系统的高电压,大电流变换为二次测的低电压(标准值),小电流(标准值),使测量,计量仪表和继电器等装置标准化,小型化,并降低了对二次设备的绝缘要求。
采用整流电路具有单向导电性能的整流元件,将正负交替的正弦交流电整流成为单向的脉动电,再用滤波器将输入或输出经过过滤而得到纯净的直流电。
对特定频率的频点或该频点以外的频率进行有效滤除。
在自动测量和控制系统中,利用滤波电路进行模拟信号的处理,用于数据传送,抑制干扰。
利用78LDS和电阻对直流电进行降压,稳压得到理想的直流电。
选用ADC0809,单片机AT89C51
数模(A/D)转换电路图
见附件2数模(A/D)转换电路图
模数(A/D)转换原理
数模(A/D)转换,就是把模拟量信号转换成对应的数字量信号。
单片机AT89C51电路设计
见图三:
单片机AT89C51电路
单片机是由运算器,控制器,主要寄存器组成。
具有执行各项逻辑运算,指令控制等功能。
运用单片机处理数据信息及调控显示时间。
程序设计
见附件3
4测量结果分析
测量列表:
频率为
用电器
电流
电压
范围(V)
二进制代码
显示用电器
最大值
最小值
机顶盒
00001011
Thesettopbox
无线路由器
00001101
router
USB充电器(带负载)
00011110
Usbcharger
热水壶
Thewaterneater
电风扇
00011010
Electricfan
存在测量误差:
由于使用不同的测量电器其内阻不同。
因此所得到的电压值范围有所偏移。
数模(A/D)转换得到二进制代码,经过单片机控制响应时间不大于2,及识别代码从而识别用电器类型。
通过显示器直接显示电源线上的电特征参数,电器的种类及其工作状态。
随机增加用电器(电风扇,USB充电器(带负载)和热水壶同时使用),可以实时指示用电器的类别和工作状态。
用电阻自制一件最小电流的用电器,可以识别的最小电流值为。
参考文献:
[1]余孟尝.数字电子技术基础简明教程(第三版)高等教育出版社2006年7月
[2]杨素行.模拟电子技术基础简明教程(第三版)高等教育出版社2006年5月
[3]侯殿有.单片机C语言程序设计北京:
人民邮电出版社2010年11月
[4]孙焕铭.51单片机C程序应用实例详解北京航空航天大学出版社2011年3月
附件1:
电路总图
单片机AT89C51电路图
附件2:
调试结果图
程序附录:
#include<
>
#include<
#defineuintunsignedint
#defineucharunsignedchar
sbitST=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitCLK=P3^3;
sbitlcdrs=P2^0;
sbitlcdrw=P2^1;
sbitlcden=P2^2;
voiddelayms(uintz);
//延时1ms函数
uintADC_convert();
//ADC转换
voidinit();
//液晶初始化
voidwrite_com(ucharcom);
//1602写指令
voidwrite_date(uchardate);
//1602写数据
voidRefresh_show();
//刷新显示
voidLCD_display(uchar*str);
//输出字符串
uintdat_adc0808;
uchardisplay_buffer[][16]={
{"
Currentvoltage:
"
},
{"
(vol)="
}
};
ucharcodetable1[]={"
noElectric"
};
//14
ucharcodetable2[]={"
JIANCEDIANLU"
//11
ucharcodetable3[]={"
i=2mARouter"
ucharcodetable4[]={"
i=4mAUSBcharger"
ucharcodetable5[]={"
i=190mAEleFAN"
ucharcodetable6[]={"
i=40mALEDLight"
ucharcodetable7[]={"
i=6600mAW-Herter"
//
/*&
&
向1602写指令函数&
*/
voidwrite_com(ucharcom)
{
lcdrs=0;
lcdrw=0;
lcden=0;
P1=com;
delayms(5);
lcden=1;
}
向1602写指令结束&
/*%%%%%%%%%%%%%向1602写数据函数%%%%%%%%%%%%%%%%%%%%%*/
voidwrite_date(uchardate)
lcdrs=1;
P1=date;
/*%%%%%%%%%%%%%%%%%%%%向1602写数据结束%%%%%%%%%%%%%%%%%*/
/***************液晶初始化**********************/
voidLCD_init()
ucharnum;
write_com(0x38);
//初始化显示模块设置
write_com(0x0c);
//显示光标
write_com(0x06);
//当读或写一个字符后地址指针加1,且光标加1
write_com(0x01);
//显示清屏
write_com(0x80);
//不显示光标
for(num=0;
num<
10;
num++)//显示table1[]={"
POWERSOURCE"
}有十四个字
write_date(table1[num]);
delayms(10);
write_com(0x80+0x40);
//指针设置这里让他第二行开始显示
16;
num++)//table2[]={"
welcome"
write_date(table2[num]);
/******************液晶初始化结束*******************/
/*******************模数转换并用于显示显示*********/
uintADC_convert()
{
while
(1)
{
ST=0;
ST=1;
while
(1){CLK=!
CLK;
if(EOC==1)break;
}//等待转换结束
OE=1;
dat_adc0808=P0;
OE=0;
returndat_adc0808;
}}
/*************模数转换结束**********************/
/*&
刷新显示函数&
voidRefresh_show()
uintt=dat_adc0808*256;
display_buffer[1][7]=t/100+'
0'
;
display_buffer[1][9]=t/10%10+'
display_buffer[1][10]=t%10+'
刷新显示函数结束&
/***************lcd显示字符串*******************/
voidLCD_display(uchar*str)
uchari;
for(i=0;
i<
strlen(str);
i++)
write_date(str[i]);
/***************lcd显示字符串结束*******************/
/*###############延时1ms子函数################*/
voiddelayms(uintz)
uintx,y;
for(x=z;
x>
0;
x--)
for(y=125;
y>
y--);
/*##############延时1ms子函数结束################*/
voidmain()
{
ucharnum;
LCD_init();
while
(1)
ADC_convert();
Refresh_show();
LCD_display(display_buffer[1]);
write_com(0xC0);
if((display_buffer[1][7]==48)&
(display_buffer[1][9]==50)&
((display_buffer[1][10]==51)|(display_buffer[1][10]==52)|(display_buffer[1][10]==53)|(display_buffer[1][10]==54)))
{for(num=0;
num++)//显示
{write_date(table3[num]);
delayms(20);
}}
(display_buffer[1][9]==53)&
((display_buffer[1][10]==53)|(display_buffer[1][10]==54)|(display_buffer[1][10]==55)|(display_buffer[1][10]==56))|(display_buffer[1][10]==57))
num++)
{write_date(table4[num]);
if((display_buffer[1][7]==52)&
(display_buffer[1][9]==54)&
((display_buffer[1][10]==51)|(display_buffer[1][10]==52)|(display_buffer[1][10]==53)|(display_buffer[1][10]==54))|(display_buffer[1][10]==55))
{write_date(table7[num]);
((display_buffer[1][10]==48)|(display_buffer[1][10]==49)|(display_buffer[1][10]==50)|(display_buffer[1][10]==51))|(display_buffer[1][10]==52))
{write_date(table5[num]);
(display_buffer[1][9]==48)&
((display_buffer[1][10]==48)))
{write_date(table1[num]);