怎样设计一个用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总线结构多费率单相电能表设计更加公道,具有性价比高的特点

看门狗在51单片机电路里的作用是防止程序 “跑飞”、“死机”后,系统不动作,而采取复位的办法“唤醒”系统。

89S51、89S52系列单片机自带有看门狗功能,片内数据区A6H寄存器具有看门狗功能,使用很简单:

#include<reg51.h>

...

sfr WDTRST = 0xA6

...

void main()

{

WDTRST=0x1E//初始化看门狗

WDTRST=0xE1//初始化看门狗

for()

{

WDTRST=0x1E//喂狗指令

WDTRST=0xE1//喂狗指令

}

}

可见,你只要在程序的大循环体内加一条喂狗指令就行。但这种看门狗功能有限,不是很可靠的,它依靠晶振工作,一旦晶振不起振,就无效了。

实践中多采用外部看门狗的方法,可以选用的芯片很多:MAX708、MAX813

、X25045.....具体编程就要看芯片的参考资料了。

例如:X25045是SPI总线的看门狗芯片,复位端和单片机复位端连接,SPI数据输入你可以选择合适的IO接口。

WREN0x06 设置写允许位

WRDI 0x04 复位写允许位

RDSR0x05 读状态寄存器

WRSR 0x01写状态寄存器

READ0x03/0x0b 读 *** 作时内部EEPROM页地址

WRITE 0x02/0x0a 写 *** 作时内部EEPROM页地址

#include <reg51.h>

sbit CS= P2^7

sbit SO= P2^6

sbit SCK= P2^5

sbit SI= P2^4

#define WREN 0x06 //

#define WRDI 0x04 //

#define RDSR 0x05 //

#define WRSR 0x01//

#define READ0 0x03 //

#define READ1 0x0b //

#define WRITE0 0x02 //

#define WRITE1 0x0a //

#define uchar unsigned char

uchar ReadByte() //read a byte from device

{

bit bData

uchar ucLoop

uchar ucData

for(ucLoop=0ucLoop<8ucLoop++)

{

SCK=1

SCK=0

bData=SO

ucData<<=1

if(bData)

}

return ucData

}

void WriteByte(uchar ucData)//write a byte to device

{

uchar ucLoop

for(ucLoop=0ucLoop<8ucLoop++)

{

if((ucData&0x80)==0)//the MSB send first

else

SCK=0

SCK=1

ucData<<=1

}

}

uchar ReadReg() //read register

{

uchar ucData

CS=0

WriteByte(RDSR)

ucData=ReadByte()

CS=1

return ucData

}

uchar WriteReg(uchar ucData) //write register

{

uchar ucTemp

ucTemp=ReadReg()

if((ucTemp&0x01)==1) //the device is busy

return 0

CS=0

WriteByte(WREN)//when write the WREN, the cs must have a high level

CS=1

CS=0

WriteByte(WRSR)

WriteByte(ucData)

CS=1

return 1

}

void WriteEpm(uchar cData,uchar cAddress,bit bRegion)

/* 写入一个字节,cData为写入的数,cAddress为写入地址,bRegion为页 */

{

while((ReadReg()&0x01)==1) //the device is busy

CS=0

WriteByte(WREN)//when write the wren , the cs must have a high level

CS=1

CS=0

if(bRegion==0)

//write the page addr

else

WriteByte(cAddress)

WriteByte(cData)

SCK=0 //

CS=1

}

uchar ReadEpm(uchar cAddress,bit bRegion)

/* 读入一个字节,cAddress为读入地址,bRegion为页 */

{

uchar cData

while((ReadReg()&0x01)==1)//the device is busy

CS=0

if(bRegion==0)

else

WriteByte(cAddress)

cData=ReadByte()

CS=1

return cData

}

main()

{

WriteReg(0x00)//set the watchdog time as 1.4s

CS=1

CS=0 //reset the watchdog

}

回复: xuzhimin9514

所有的89S系列都带狗,所有的80C系列都不带狗。

所以89S51 89S52都带狗,80C51、80C52都不带狗。

看门狗定时器是单片机的一个组成部分,在单片机程序的调试和运行中都有着重要的意义。它的主要功能是在发生软件故障时,通过使器件复位(如果软件未将器件清零)将单片机复位。也可以用于将器件从休眠或空闲模式唤醒,看门狗定时器对微控制器提供了独立的保护系统,当系统出现故障时,在可选的超时周期之后,看门狗将以RESET信号作出响应,像x25045就可选超时周期为1.4秒、600毫秒、200毫秒三种。当你的程序死机时,x25045就会使单片机复位。

大多数看门狗定时器IC产生一个单一的,有限的输出脉冲持续时间当看门狗超时。这适用于触发复位或中断微处理器,但有些应用需要输出(故障指示灯)的锁存器。

考虑到安全性问题,汽车电子系统需要监控电路监测故障容限或安全性。看门狗定时器可理想满足这类需求,通过对微控制器正常工作条件下产生的周期脉冲进行检测,侦测电路或IC的失效状态,一旦发生故障可立即切换到备份/冗余系统。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存