导航:首页 > 操作系统 > 单片机电表

单片机电表

发布时间:2022-08-23 17:06:26

❶ 怎样设计一个用ADE7755和用AT89S51的单片机设计出一个电能表

随着电力的需求越来越大,不同时间段用电量不均衡的现象日趋严重。为了合理地调控电力负荷和节约能源,电力公司已开始鼓励使用多费率电能表。传统的多费率电能表一般采用机械转盘式计量方式,计量精度随机械磨损而降低,时段设置单一,人工抄表劳动强度大,且偶有窃电情况发生等诸多弊端。本文给出基于AT89S52单片机一种新型多费率单相电能表设计,采用AD7755电能计量芯片,电能计量准确。该电能表具有分时段计量,液晶显示,自动回抄,时段设置灵活,时间校正及时,新颖的防窃电,功耗低的特点。并对该电能表实验测试数据进行性了误差分析,指出电能计量中减小与消除误差的方法。

1硬件电路设计

1.1总体结构

基于AT89S52单片机完成多费率单相电能表的设计,AT89S52有以下功能,8k字节Flash闪速存储器,三级加密程序存储器,256字节内部RAM,32个可编程I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路,两种低功耗电工作方式。是一个比较适合于以开关量信号输入检测的性价比较高的8位单片机。电能表硬件设计主要包括六大模块,电压和电流检测电能计量电路AD7755模块,串行存储与看门狗X25045电路模块,HT1621液晶显示电路模块,串行时钟S3530A电路模块,

RS485总线通讯电路模块,防窃电检测电路模块,总体结构如图1所示。

图1:系统总体结构框图

1.2电能计量

单相电能计量采用美国ADI公司的AD7755低功耗芯片实现。AD7755内部除了ADC和滤波、相乘电路外都采用了数字电路,有效的消除了尖脉冲等干扰信号,使得它在恶劣的环境条件下仍能保持极高的正确度和稳定性。对单相回路中的电压、电流信号采样,计算出功率并积分将其转换为电能脉冲输出,CPU对来自AD7755输出端CF的脉冲进行计量,计算出电能表的累计用电量。电能与脉冲的关系为:W=M/C,式中的W为电能,单位为千瓦时,M为脉冲累计个数,C为电表脉冲常数,选取C=1600,每千瓦时为1600个脉冲。

1.3RS485通讯MAX487芯片实现多费率电能表的RS485通讯控制

MAX487芯片具有RS485通讯协议,可以带下位机128个、传输间隔大于1km、传输速率达250kb/s。电能表通过RS485总线与用电治理计算机相连,每只电能表都有一个确定的唯一的八位十六进制的表号,初次安装,电工需要把用户信息与表号记录后输进用电治理计算机中,完成用户与治理计算机的连接。治理计算机采用广播式通讯方式下传时段设置与校时信息,此时不带有地址信息,而电能表中断接收;上位机采用呼唤地址的方式上传信息,即呼唤谁的地址,那只电能表便把信息及其校验码打包向上传送给用电治理计算机,实现电能回抄。MAX487的DE为发送器使能端,DE为1时发送器可以工作,DI为输进端,A、B为输出端。当DE为0时,停止发送输出端为高阻。RE为输进使能端,RE为0时答应接收器工作,A、B为输进端,RO为输出端;RE为1时,接收器被禁止,RO为高阻状态。因此,采用半双工通讯方式,把DE和RE相连然后接AT89S52的P1.4,通过AT89S52的P1.4引脚来控制收发工作状态。

1.4串行存储器

串行存储器采用美国XICOR公司的X25045低功耗芯片,它具备看门狗定时器WTD、电源电压监控和具有512字节的串行E2PROM存储器三种功能。WTD可以设置为200ms、600ms、1400ms喂狗定时间隔,软件编程写进X25045中。在程序正常运行期间,WTD在定时间隔内收到触发信号,确保程序正常运行,一端WTD在定时间隔内没有收到触发信号,X25045便通过RESET引脚输出一个高电平信号,触发电能表复位来防止程序跑飞。X25045作为串行存储芯片,512字节分别用于存储电能表编码,多费率时段设置,上月和当月分时段的峰、平、谷电量和总累计电量等信息,存储次数可改写十万次,数据可保存一百年,它与AT89S52可采用SPI协议总线接口相连。

1.5时钟电路

时钟电路采用S3530A芯片完成,它是一种支持I2C总线的低功耗时钟芯片,它按照CPU经RS485通讯接收校时的数据来设置时钟和日历,靠自身的振荡继续走时。在S3530A的Xin和Xout引脚之间跨接32.768kHz的晶体器振荡器。它通过两线式与CPU连接,SDA脚和SCL脚分别接AT89S52的P2.0和P2.1,并有两个中断报警引脚可设置为输出秒或分同步脉冲,向AT89S52提供周期为1秒的中断信号,单片机系统将根据该信号通过I2C通讯接口读取当前的时间,计算出该时刻所属的时段,实现多费率电能表的分时段计量电能。该时钟电路带有备用锂电池,正常工作时有电源Vcc供电,同时给3.6V锂电池充电;当出现停电时,自动切换锂电池为时钟电路供电,即使停电时钟走时也正确。

1.6液晶显示

采用HOLTEK公司HT1621的LCD显示驱动芯片,实现十六位LCD数字显示。HT1621是具有128段(32×4)内置存储器的LCD驱动器,它片内包括控制与计时电路、显示RAM、LCD驱动及偏置、监视定时器等,采用了48脚SSOP封装,具有体积小和功耗低的优点,非常适合于应用电能表中,其接口电路和外围电路简单,它和AT89S52之间采用串行接口,只需三根线。AT89S52的P2.4、P2.5、P2.6分别接到它的CS片选、WR写答应、DATA串行数据三个引脚上,来控制刷新显示RAM缓冲区。另外应用中,在VDD、VLCD间接一个20kΩ可调电阻,用来调节LCD显示对比度,调节电阻,使得VDD=5V,VLCD=4V对比度较好。

1.7防窃电检测等

记录电能表接线端子盖被人为打开的次数而分析是否窃电。电能表被安装好后将表壳打上铅封,用户不能私自打开电能表接线的表盖破坏铅封,否则属于窃电行为。因此我们采用霍尔传感器,检测接线端子盖是否被打开。假如接线端子盖被打开,AT89S52的P1.6引脚的电平变化,就检测到开盖一次,记录表的接线端子盖被人为打开和破环的次数,判定是否有窃电发生,当发现有窃电现象时,给出报警、断电并及时上传到上位治理计算机。实践证实该新奇的防窃电技术有效的防止窃电情况发生,效果较好。检测电路框图如图2所示。

图2:防窃电检测框图

掉电保护电路,用AT89S52的P1.7输进引脚检测掉电信号,当系统正常工作是P1.7位高电平,当忽然发生断电时,P1.7变成低电平,采用查询方式检测到P1.7的变为低电平后,将进进掉电保护程序。电源电路中有个大滤波电容1000uf/25v,当掉电后能维持系统十多秒的工作时间,确保电能表存储好重要数据。光电隔离电路,在系统中AD775的脉冲输出端,继电器控制端,RS485通讯端分别使用了4N35光电隔离器。通过光的耦合作用传递电信号,把干扰源和易受干扰的部分隔离开来,进步系统抗干扰的能力。

2软件程序设计

2.1软件程序资源分配

多费率单相电能表软件程序共包括初始化及主程序,X25045读写程序,RS485串行通讯处理程序,中断处理程序,定时器处理程序,HT1621显示控制程序,电能分时段计量与掉电处理程序,系统自检与软件抗干扰处理八大程序模块。系统的中断资源分配为INT0中断用于AD7755脉冲检测,INT1用于秒同步检测,定时器T0用于定时100ms,T1未使用,T2用于串行通讯程序波特率发生器,串行口中断设置为RS485异步通讯接收中断。

2.2程序模块的设计

电能表的工作过程主程序模块如图3所示,每次上电要进行初始化,初始化包括对AT89S52单片机定时器、串行口、中断等工作方式的设定,写进串行存储芯片X25045的控制字,串行时钟芯片S3530A控制字,串行液晶驱动芯片HT1621控制字。新电能表的初次工作要对X25045初始值设定,包括电能表表号的设置,时段的设置,时钟的设置,存储地址的分配等。本系统设置了三个时段,单片机每秒从时钟芯片S3530A中读取时钟值,然后根据串行存储芯片X25045中预先设置好的时段,分析该时刻属于哪个时段,根据相应的时段把电能存储AT89S52的RAM存储器中,然后电能每累计够1度便写进到X25045相应的地址中。16位液晶显示器轮流显示时段与电能信息。若有通讯请求将采用中断方式与上位机进行数据通讯。若停电,将执行掉电保护程序。其它程序模块流程图略。

图3:主程序流程图

测试结果

该电能表在淄博贝林电子有限公司进行了误差测试和运行试验,上位计算机完成用电治理时段设置,设置三个费率时段,第一时段00点00分点到06点30分,为谷电量时段,第二时段06点30点到22点30分,为峰电量时段,第三时段22点30点到24点00分,为平电量时段。费率时段设置由电力供电公司根据国家政策规定设定到计算机治理系统中,通过RS485串行通讯传送到电能表中,并存储于X25045中。每月峰、平、谷、累计电量存进电能表中,并打包传送到上位计算机治理系统,通讯波特率设为9600bit/s。用0.1级标准电子式电能表校验台作为标准表,该多费率电能表为被测表,贝林电子有限公司针对不同负荷的情况下进行测试,限于篇幅仅列出负荷为5KW时的实测数据如表1所示。测试结果表明该复费率电能表误差小于1%,属于1.0级标准。经实验得知减小电能计量误差方法,一是通过调节AD7755的匹配电阻调整到精确值;二是该匹配电阻阻值要求随温度变化阻值变化较小;三是在电能计量过程中,在时间段的切换时,计量电能的尾数部分不足0.01度的电能计进下一个时间段中,避免了不足0.01度的电能丢失而造成累计电量有误差。

表1:标准表与被测表丈量值符合5KW

结束语

多费率电能表根据不同的时段设置,实现电能分时计量,采用RS485串行通讯,实现电量自动回抄,实时校时。该电能表经淄博贝林电子有限公司生产表明,设计技术新奇,计量正确,走时精确,时段设置灵活,防窃电设计新奇,各项技术指标均达到国家多费率电能表的技术标准,具有广阔的应用远景。

本文作者创新点在于采用AD7755电能计量芯片计量正确;串行X25045存储灵活可靠,串行时钟S3530A走时精确,RS485总线传输可靠性高,防窃电新奇设计。采用I2C总线结构多费率单相电能表设计更加公道,具有性价比高的特点

❷ 单片机->rs232/rs485转换器->电能表

1、指示灯只是反应数据线上有数据跳变信息。不一定代表通信成功!(你说的单片机是232接口 ,通过232转485连接到电表的485抄表通信口,是吗?)
2、如果换一个电能表或者单片机能通信成功,另当别论。
3、八成是单片机协议不正确。具体表现在:
a)波特率设置不正确
b)通信方式不正确,11位方式还是10位方式?
c)电表地址不正确。
d)协议解析不正确,各信息域处理长度,校验。
4、调试办法,PC机上打开串口调试助手,设置成相应波特率。用另一个232转485,485与电表口并接,监视单片机的命令帧和电能表的应答帧,是否符合协议要求。

❸ 如何用单片机做电压表

需要用到A/D转换,原理上就是将被电阻分压后的待测电压送入A/D,然后利用单片机计算出A/D转化后的电压,在求出待测电压的值。

❹ 基于单片机的智能电表的设计

基于单片机控制的智能电表抄表系统 摘 要 近年来,随着单片机成本的降低、通信技术的快速发展以及通信技术的多样化

❺ 单片机数字电表程序修改

这个程序一看就知道是菜鸟级的人,很多地方都会出问题,

有时候会正常,有时候会不正常

工作起来相当不稳定

高手们给改改吧!

❻ 电表用什么单片机

用51单片机。

SST-300智能型电力表,以采用16位单片机为主,与传统电能表相比,基本上采用全数字方式计算电能。元器件为微型贴片元件和专用高精度集成电路为主。电容和电阻均为贴片方式生产。是一款高性能电力表产品。

简介

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。

❼ 单片机设计制作数字电压表

3.系统板上硬件连线

a)把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。

b)把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。

c)把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。

d)把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。

e)把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。

f)把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。

g)把“模数转换模块”区域中的A2A1A0端子用导线连接到“把其他形式的能转换成电能的装置叫做电源">电源模块”区域中的GND端子上。

h)把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压">电压模块”区域中的VR1端子上。

i)把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。

4.程序设计内容

i.由于ADC0809在进行转换为相应的数宇量的电路">A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。因此产生CLK信号的方法就得用软件来产生了。

ii.由于ADC0809的参考电压VREF=VCC">CC,所以转换之后的数据要经过数据处理,在数码管">数码管上显示出电压值。实际显示的电压值(D/256*VREF)

5.汇编源程序

(略)

6.C语言源程序

#include<AT89X52.H>

unsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsignedchardispbuf[8]={10,10,10,10,0,0,0,0};

unsignedchardispcount;

unsignedchargetdata;

unsignedinttemp;

unsignedchari;

sbitST=P3^0;

sbitOE=P3^1;

sbitEOC=P3^2;

sbitCLK=P3^3;

voidmain(void)

{

ST=0;

OE=0;

ET0=1;

ET1=1;

EA=1;

TMOD=0x12;

TH0=216;

TL0=216;

TH1=(65536-4000)/256;

TL1=(65536-4000)%256;

TR1=1;

TR0=1;

ST=1;

ST=0;

while(1)

{

if(EOC==1)

{

OE=1;

getdata=P0;

OE=0;

temp=getdata*235;

temp=temp/128;

i=5;

dispbuf[0]=10;

dispbuf=10;

dispbuf=10;

dispbuf=10;

dispbuf[4]=10;

dispbuf[5]=0;

dispbuf[6]=0;

dispbuf[7]=0;

while(temp/10)

{

dispbuf[i]=temp%10;

temp=temp/10;

i++;

}

dispbuf[i]=temp;

ST=1;

ST=0;

}

}

}

voidt0(void)interrupt1using0

{

CLK=~CLK;

}

voidt1(void)interrupt3using0

{

TH1=(65536-4000)/256;

TL1=(65536-4000)%256;

P1=dispcode[dispbuf[dispcount]];

P2=dispbitcode[dispcount];

if(dispcount==7)

{

P1=P1|0x80;

}

dispcount++;

if(dispcount==8)

{

dispcount=0;

}

}

❽ 51单片机做数字电表

这是用数码显示的程序
#include<reg51.h>
unsigned char code dispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char dispbuf[4];
unsigned int i;
unsigned int j;
unsigned char getdata;
unsigned int temp;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
sbit a=P3^4;
sbit b=P3^5;
sbit c=P3^6;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P17=P1^7;
void display();
void timeinitial();
void delay(unsigned int i);
void timeinitial()
{
TMOD=0x10;
TH1=(65536-200)/256;
TL1=(65536-200)%256;
EA=1;
ET1=1;
TR1=1;
}
void delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<50;j++)
{;}
}
}
void display()
{
if(dispbuf[3]!=0)
P1=dispbitcode[dispbuf[0]];
P20=0;
P21=1;
P22=1;
P23=1;
delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[1]];
P17=1;
P20=1;
P21=0;
P22=1;
P23=1;
delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[2]];
P20=1;
P21=1;
P22=0;
P23=1;
delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[3]];
P20=1;
P21=1;
P22=1;
P23=0;
delay(10);
P1=0x00;
}
void main()
{
timeinitial();
while(1)
{
ST=0;
OE=0;
ST=1;
ST=0;
a=1;
b=1;
c=0;
while(EOC==0);
OE=1;
getdata=P0;
OE=0;
temp=getdata*1.0/255*500;
dispbuf[3]=temp%10;
dispbuf[2]=temp/10%10;
dispbuf[1]=temp/100%10;
dispbuf[0]=temp/1000;
display();
}
}
void t1(void)interrupt 3 using 0
{
TH1=(65536-200)/256;
TL1=(65536-200)%256;
CLK=~CLK;
}

❾ 如何利用51单片机来采集485电表的数据

用TTL转485模块接到电表A\B两端,通过单片机串口发送电表读取电量规约格式(数据格式哼重要,仔细看DL645-1997通讯协议),等待数据返回,再通过串口2或液晶显示出来。

❿ 如何用单片机制作电流表和电压表

一般测试电流,需要毫欧级的采样电阻和差分输入的AD。另外考虑电流可能双向(电池充电和放电),最好AD的负电源略低于地电平。

阅读全文

与单片机电表相关的资料

热点内容
趣质猫app是什么 浏览:59
皮带压缩机经常吸不上 浏览:201
西部随行版怎样加密 浏览:996
钉钉上如何压缩图片 浏览:924
cad输入命令不显示窗口 浏览:618
小米视频加密之后怎么看 浏览:76
超级程序员刘芳阅读 浏览:832
顾家九爷在哪个app 浏览:820
我的世界怎么在联机大厅做服务器 浏览:290
分手程序员 浏览:447
php将html导出为word 浏览:801
腾讯加密视频能破解吗 浏览:1007
反编译后导入eclipse 浏览:948
买阿里云服务器有邮箱吗 浏览:825
pdf卡片2004 浏览:309
e算量加密锁检测不到 浏览:777
python串口读取数据类型 浏览:760
17年新款宝来压缩机不跳 浏览:107
王者打着为什么服务器升级 浏览:847
aliyunlinux安装 浏览:981