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

怎样设计一个用ADE7755和用AT89S51的单片机设计出一个电能表?,第1张

随着电力的需求越来越大,不同时间段用电量不均衡的现象日趋严重。为了合理地调控电力负荷和节约能源,电力公司已开始鼓励使用多费率电能表。传统的多费率电能表一般采用机械转盘式计量方式,计量精度随机械磨损而降低,时段设置单一,人工抄表劳动强度大,且偶有窃电情况发生等诸多弊端。本文给出基于 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.3 RS485通讯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中。每月峰、平、谷、累计电量存进电能表中,并打包传送到上位计算机治理系统,通讯波特率设为9600 bit/s。用 0.1级标准电子式电能表校验台作为标准表,该多费率电能表为被测表,贝林电子有限公司针对不同负荷的情况下进行测试,限于篇幅仅列出负荷为 5KW时的实测数据如表1 所示。测试结果表明该复费率电能表误差小于1%,属于 1.0级标准。经实验得知减小电能计量误差方法,一是通过调节 AD7755的匹配电阻调整到精确值二是该匹配电阻阻值要求随温度变化阻值变化较小三是在电能计量过程中,在时间段的切换时,计量电能的尾数部分不足 0.01度的电能计进下一个时间段中,避免了不足 0.01度的电能丢失而造成累计电量有误差。

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

结束语

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

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

这个东西很多吧。

AD7874 ,LC2MOS,4通道,12位ADC; AD7878 ,LC2MOS,DSP接口,12位ADC;

AD7888 ,2.7~5.25V,8通道低功耗12位ADC;AD7895 ,串行12位,3.8μs,ADC,8脚封装;

AD7862 , 4通道双12位ADC; AD7572A, 高速ADC兼容MAX162BCNG;

AD9221 , 1.5Msps 12位ADC;AD9225 ,25Msps 12位ADC;

TI公司的12位AD:

TLV2556 ;TLV2548 ;TLV2545;TLC2558 ;TLC2555.................

太多了,但是我们用的还是最常见的那几种,望采纳!

给你一个51单片机读取模拟信号并转换成数字信号的例程,峰峰值什么的自己再根据需求自己加条件判断吧。

#include<reg51.h>

#include <intrins.h>

#define uint unsigned int

#define uchar unsigned char

sbit adrd=P3^7                          //IO口定义

sbit adwr=P3^6

sbit diola=P2^5

sbit dula=P2^6

sbit wela=P2^7

unsigned char j,k,adval

void delay(unsigned char i) //延时程序

{

  for(j=ij>0j--)

    for(k=125k>0k--)

}

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码

                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}

void display(uchar bai_c,uchar sh_c,uchar g_c) //显示程序

{  

   P0=table[bai_c] //显示百位

   dula=1

   dula=0

   P0=0xfe

   wela=1

   wela=0

   delay(5)

   dula=0

   P0=table[sh_c] //显示十位

   dula=1

   dula=0

   wela=0

   P0=0xfd

   wela=1

   wela=0

   delay(5)

   P0=table[g_c] //显示个位

   dula=1

   dula=0

   P0=0xfb

   wela=1

   wela=0

   delay(5)

}

void main() // 主程序

{

  uchar a,A1,A2,A2t,A3

    while(1)

  {

    wela=1

    P0=0                       //选通ADCS

    adwr=0 //AD写入(随便写个什么都行,主要是为了启动AD转换)

    _nop_()

    adwr=1

    P0=0xff                    //关闭ADCS

    delay(10)

    wela=0                     //关闭有AD片选信号锁存器的锁存端以防止在 *** 作数码管时使AD的片选发生变化

       for(a=20a>0a--)        //需要注意的是ADC0804在写和读之间的时间间隔要足够长否则无法读出数据

    {                           //这里把显示部分放这里的原因也是为了增加写读之间的时间间隔                                                                                                                                                                                                                           

        display(A1,A2,A3)

     } //送去显示各位。

     wela=1                   //重新打开有AD片选信号锁存器的锁存端

     P1=0xff                    //读取P1口之前先给其写全1

     P0=0                       //选通ADCS

     adrd=0                     //AD读使能

     adval=P1 //AD数据读取赋给P1口

     adrd=1

     P0=0xff                     //关闭ADCS

     adwr=0

     P1=adval                    //同时把AD的值送八个发光二极显示

     A1=adval/100 //分出百,十,和个位

     A2t=adval%100

     A2=A2t/10

     A3=A2t%10

   }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11287711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存