基于E2PROM24C16芯片单片机课程设计多用户电能表打印资料.docx

上传人:b****5 文档编号:4614051 上传时间:2022-12-07 格式:DOCX 页数:26 大小:400.43KB
下载 相关 举报
基于E2PROM24C16芯片单片机课程设计多用户电能表打印资料.docx_第1页
第1页 / 共26页
基于E2PROM24C16芯片单片机课程设计多用户电能表打印资料.docx_第2页
第2页 / 共26页
基于E2PROM24C16芯片单片机课程设计多用户电能表打印资料.docx_第3页
第3页 / 共26页
基于E2PROM24C16芯片单片机课程设计多用户电能表打印资料.docx_第4页
第4页 / 共26页
基于E2PROM24C16芯片单片机课程设计多用户电能表打印资料.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

基于E2PROM24C16芯片单片机课程设计多用户电能表打印资料.docx

《基于E2PROM24C16芯片单片机课程设计多用户电能表打印资料.docx》由会员分享,可在线阅读,更多相关《基于E2PROM24C16芯片单片机课程设计多用户电能表打印资料.docx(26页珍藏版)》请在冰豆网上搜索。

基于E2PROM24C16芯片单片机课程设计多用户电能表打印资料.docx

基于E2PROM24C16芯片单片机课程设计多用户电能表打印资料

一、设计任务

1、设计目的:

通过计算机编程实现多用户电子式数码显示电能表的功能。

本次设计用户数为八户,即实现八位用户循环显示电能量。

同时,基于E2PROM24C16芯片实现单片机的掉电数据保护。

2、设计要求:

基于AD7755芯片实现电能脉冲的发生;应用单片机C8051F360编制程序完成脉冲的读取、计数、计算、存储、送显示等功能;应用74HC164及八段译码显示器完成数据的显示;应用E2PROM24C16完成数据的定时写入以防停电时数据丢失。

二、设计内容

1、硬件设计:

(1)设计总体框图:

(2)设计参数:

基准电压:

220V×±10%

基准电流:

Ib=5A

最大电流:

Imax=4Ib=20A

计量精度:

1%

最小电流:

Imin=2%Ib=0.1

脉冲数:

3200/kw.h

(3)参数计算:

①以AD7755设计的电能表的相关参数计算

配合C8051F360芯片的16进制算法与课程设计的参数要求,参考基本电流与脉冲的建议数,选定基准电流Ib=5A,每kw.h计度需要的脉冲数为3200,即CF的输出为3200imp/kw.h。

线路电压220V,基本电流Ib为5A,动态范围400(规定准确度的电流范围为2%Ib~Imax,即100mA~40A);计度器的电表常数C为3200imp/kw.h,即AD7755发3200个脉冲,单片机记录1kw.h电。

为满足电流通道的动态范围且留有充分的余量,选用350μΩ的分流器;以其将负载电流转换为电压,接V1P和V1N。

线路电压经电压分压器分压,也降到允许的最大电压范围之内,接V2P和V2N。

负载电流为基本电流(5A)时,线路的功耗为P=220×5=1.1kw。

选择f1-4=3.4Hz,SCF=0,S1=0,=S0=1,此时CF频率为f1的32倍,所要求的频率恰为f1,f2段的脉冲计数标准为100imp/kw.h。

乘以此常数得Ib情况下的输出频率:

fF1=P×C=1.1×3200/3600=0.9777778Hz

查AD7755数据表,所选择f1-4=3.4Hz,满足最大电流为40A和再留有足够余量的要求。

fF1=8.06×U1×U2×G×f1-4U2REF

U1=5×350=1750μV=1.75mV

并以最大电流产生的压降和表1,选择G=16

U2=fF1×U2REF8.06×U1×G×f1-4=0.030555×2.528.06×1.75×16×3.4=248.9mV

原理图中R1、C1,R2、C2,R3、C3,R4∥(R5~R16)、C4为抗混叠滤波器。

因为AD7755以900kHz过采样速率采样,故大大简化了抗混叠滤波器的设计。

不过,两个通道之间的相位匹配非常重要。

例如,当cosφ=0.5时,0.2°的外部相位误差将产生0.6%的测量误差。

为使两个通道的相位匹配,电阻、电容的取值分别为R1=R2=R3=R4=1kΩ(精度为1%);C1=C2=C3=C4=33nF;R5=300kΩ,R6=150kΩ,R7=75kΩ,R8=39kΩ,R9=18kΩ,R10=9.1kΩ,R11=5.1kΩ,R12=2.2kΩ,R13=1.2kΩ,R14=560Ω,R15=R16=330kΩ。

考虑到选用的分流器和基准源都存在允差,原理图中设置了校准网络,通过短接或断开J1~J10,可在±30%范围内进行调节。

因为R15+R16=660kΩ,大于大于R4(1kΩ),因此,即使R5~R14全部短接,这条支路的-3dB频率仍由R4和C4的值决定。

据厂家介绍,从J1~J10全部接通变化到J1~J10全部断开,50Hz处产生的相移仅为0.0004°。

考虑到分流器存在寄生电感,较大时需要进行补偿。

当分滤器阻值很小时,如,小于200μΩ,特别要注意此问题。

AD7755的供电电压由电容分压器分压、二极管整流、RC滤波和7805IC稳压产生。

7805的输出以C13(10μF)和C12(100nF)退耦,接AD7755的DVDD。

VDD再经R22(10Ω)、C10(100nF)和C11(220μF)滤波,接AD7755的模拟电路电源管脚AVDD。

AD7755的CLKIN和CLKOUT管脚接3.579545MHz晶体和2只22pF陶瓷电容。

考虑抗电磁干扰,除原有的滤波电路外,原理图电流输入通道中增加了Z3、Z4铁氧体,电源电路部分增加了由Z1铁氧体、C16电容和MOV1金属氧化物压敏电阻组成的滤波网络等。

②C8051F360单片机部分管脚及参数

由原理图知:

P1.0~P1.7分配给八个用户,作为脉冲输入端口。

P2.0和P2.1分配给LED显示部分作为时钟信号和数据输入。

P2.4和P2.5分配给24C16作为SCL和SDA信号脚。

此外,C8051F360功能强大,结构复杂,其余端口与本设计无关,故其分配情况不再详述。

晶振采用11..0592MHz,电源使用3.3V。

③电源参数

220V~5V的共两套,一套给AD7755,另一套给显示模块和5V~3.3V电源。

5V~3.3V电源供给C8051F360和24C16。

220V~5V转换电路中,相关参数如下:

C1=330uf,为滤波电容;C2=0.33uf,用于抵消输入线较长时的电感效应,以防止电路产生自激震荡;C3=1uf,用于消除输出电压中的高频噪声。

(4)器件选择:

AD7755电能脉冲发生器的选择:

AD7755是美国AD公司生产的专用于功率/电能测量的低成本集成电路。

它的技术指标满足GB/T17215-1998标准规定的准确度等要求。

AD7755有24条引脚,以DIP和SSOP形式封装。

AD7755在电子电能表中的连接如图1所示。

管脚功能如下:

P1DVDD,数字电路电源,5(±5%)V;P2AC/DC,高通滤波选择脚,逻辑高,高通滤滤器使能;P3AVDD,模拟电路电源,5(±5%)V;P4、P19NC,未接;P5-P6V1P-V1N,通道1(电流通道)模拟输入,最大差动输入电压为±470mV;P7-P8V2N-V2P,通道2(电压通道)模拟输入,最大差动输入电压为±660mV;P9RESET,复位引脚,逻辑低使ADC和数字电路保持复位状态,清内部寄存器;P10REFIN/OUT,电压基准脚,片上基准为5(±8%)V,可接外部基准源;P11AGND,模拟电路参考地;P12SCF,校准频率选择脚;P13、P14S1、S0,数-频转换频率选择脚;P15、P16G1、G0,通道1增益选择脚;P17-P18CLKIN-CLKOUT,外接时钟,钟频3.579545MHz;P20REVP,负功率指示脚,电压信号和电流信号之间的相位差>90°时变为逻辑高;P21DGND,数字电路参考地;P22CF,校准频率输出;P23、P24F2、F1,低频输出。

AD7755的内部功能框图如下图:

它由模拟电路(模数转换电路、基准电路与电源电压监测电路)和数字信号处理电路两部分组成。

被测电压、电流转换为数字量后,接下来的信号处理都在数字域实现;AD7755内部的相位校正电路、高通滤波器、乘法器、低通滤波器、数字-频率转换器等都为数字电路。

AD7755内有两个以900kHz过采样速率采样的16位2阶Σ-Δ模数转换器(ADC)。

被测电流经可编程增益放大器(PGA)放大后接电流通道的ADC,并由此ADC转换为对应的数字信号。

再经相位校正和高通滤波,进入乘法器。

乘法器的另一路输入是由电压通道ADC转换而来的、与被测电压对应的数字信号。

相乘后产生瞬时功率信号。

此信号经低通滤波器滤除其中的交流分量,提取出负载消耗的瞬时有功功率。

AD7755对这个瞬时有功功率信号进行一段时间的累计、平均,求得平均有功功率,以较短时间对瞬时有功功率进行累计,求得与瞬时有功功率成正比的高频频率并经CF输出,用于校准或送微控制器累加计数,实现对电能的计量。

电流通道的PGA的增益受管脚G1、G0控制。

  高通滤波器是否接入受管脚AC/DC控制。

逻辑高,HPF使能。

用来去除电流通道的直流偏移和由此引起的误差。

高通滤波器接入或断开造成的相移,由相位校正电路校正,使电压通道和电流通道的相位匹配。

如前所述,管脚F1、F2输出与平均有功功率成正上的电压有效值具有下列关系:

fF1=fF2=8.06×U1×U2×G×f1-4U2REF

(1)

式中,U1、U2分别为电流通道和电压通道输入端的rms差动电压(V),G为电流通道的增益,选择方法见表1;UREF为基准电压值(V);f1-4为以S1、S0逻辑输入选择的频率(Hz),选择方法见表2。

表2 f1-4等选择表

  表2第7列是与两个通道都输入最大电压所对应的最高输出频率(Hz)。

考虑到实际电网电压存在波动和负载电流可能超载,设计电能表时,两个模拟通道的输入电压一般都留有足够的超量程余地。

比如,取允许的最大值的一半。

表2第5列是用管脚SCF、S1、S0逻辑输入选择的转换系数,CF脚输出的频率为fCF=KfF1

(2)由表2知,CF端输出的频率能高达fF1的2048倍。

(5)设计原理图:

①单片机实际原理图:

②八段译码显示:

……

74HC164共六个

③E2PROM24C16芯片

 

④AD7755电能脉冲发生器

⑤电源

两组稳压电源

 

⑥C8051F360与24C16接线部分

 

2、软件设计:

(以100个/度为例)

(1)程序框图:

(2)设计程序

$NOMOD51

$include(c8051f360.inc)

//用户空间:

8*3=24字节,30h——47h

HOUSE0EQU30H

HOUSEENDEQU48H

//6字节的显示缓冲区50H——55H

DISPLAYREGION1EQU50H

DISPLAYREGION2EQU51H

DISPLAYREGION3EQU52H

DISPLAYREGION4EQU53H

DISPLAYREGION5EQU54H

DISPLAYREGION6EQU55H

//P2口的原状态

ORIGIONSTATEEQU56H

//用于显示读开关的特殊位

CLKDISPLAYEQUP1.1

DATEDISPLAYEQUP1.0

PLEQUP1.2

DATE165EQUP1.4

CLK165EQUP1.5

SCLEQUP1.6

SDAEQUP1.3

//延时计数

TIMEQU05H

;**************************************************ORG0000H

LJMPMAIN

ORG000BH

LJMPINTDELAY

ORG0100H

MAIN:

LCALLCHUSHI//调用初始化程序

MOVSP,#80H

MOVORIGIONSTATE,#0

MOVR4,#0//R4存用户号

MOVR2,#TIM//R2用于延时计数

SETBET0

SETBEA

MOVTMOD,#11H

MOVTH0,#00H

MOVTL0,#00H//中断初始化,T0,T1全为方式1

LCALLREAD//从24C16内读用户空间的数据存入对应空间

SETBTR0

//**********主程序循环处******************

MAIN0:

CLRPL//串行读入开关状态

NOP

NOP

SETBPL

MOVR1,#HOUSE0//R1指向house0首地址

CLRING:

CLRCLK165

SETBCLK165

JBDATE165,NOTCLR//判断开关状态

LCALLCLR24C16//将R1指向的连续3个空间清零并写入对应的//24C16内R1不变

NOTCLR:

INCR1

INCR1

INCR1

CJNER1,#HOUSEEND,CLRING//循环8次,每次进三字节

LCALLREADPULSE//读脉冲程序并计数

SJMPMAIN0

//*****T0的中断服务程序INTDELAY***************

INTDELAY:

PUSHACC

MOVA,R1

PUSHACC//保护主程序的A和R1

CLRTR0

MOVTH0,#00H

MOVTL0,#00H

DJNZR2,NOCHANGE//R2减至0后才调用传送,调用显示

MOVR2,#TIM

LCALLDELIVER//将第R4户的数据传到显示缓冲区

LCALLDISPLAY//将显示缓冲区数据送显示

INCR4//户号加1

CJNER4,#8,NOCHANGE

MOVR4,#0//显示到第7户后清零

NOCHANGE:

SETBTR0

POPACC

MOVR1,A

POPACC

RETI

//****************初始化子程序****************

CHUSHI:

MOVSFRPAGE,#0FH

MOVP1MDIN,#0FFH;数字输入

MOVP1MDOUT,#0EFH;推挽输出

MOVXBR1,#40H;交叉开关使能

MOVPCA0MD,#00H;关闭看门狗

MOVPSCTL,#13H

MOVOSCICN,#83H;内部振荡器允许,不分频

MOVDPTR,#tab

MOVR1,#HOUSE0//将用户空间全部清零

ZERO:

MOV@R1,#0

INCR1

CJNER1,#48H,ZERO

RET

//**********读脉冲子程序*******************

//用R1指向内存地址用于进位和加1

READPULSE:

MOVA,P2

PUSHACC//保护P2口状态

XRLA,ORIGIONSTATE//与原状态异或,有边沿为1

MOVR1,#HOUSE0

LOOP:

RRCA//依次右移

JNCNOPULSE

INC@R1//有脉冲加1

LCALLCONSERVR//将R1指向的数据存入24C16内的对应的空间CJNE@R1,#200,NOPULSE//每个脉冲读2次小数位满200进位清零

MOV@R1,#0

LCALLCONSERVR

INCR1

INC@R1

LCALLCONSERVR

CJNE@R1,#100,DEC1//个位、十位满百进1清零

MOV@R1,#0

LCALLCONSERVR

INCR1

INC@R1

LCALLCONSERVR

SJMPDEC2

NOPULSE:

INCR1

DEC1:

INCR1

DEC2:

INCR1

CJNER1,#HOUSEEND,LOOP

POPACC

MOVORIGIONSTATE,A

RET

//*****传送至显示缓冲区子程序******************

//入口参数为R4=通道号

DELIVER:

MOVDISPLAYREGION6,R4//户号

INCDISPLAYREGION6

MOVA,R4

MOVB,#3

MULAB

MOVB,#HOUSE0

ADDA,B

MOVR0,A//根据户号算出该用户的首地址

MOVA,@R0

MOVB,#2

DIVAB//小数位除2

MOVB,#10

DIVAB

MOVDISPLAYREGION1,B//百分位

MOVDISPLAYREGION2,A//十分位

INCR0

MOVA,@R0

MOVB,#100

DIVAB

MOVA,B

MOVB,#10

DIVAB

MOVDISPLAYREGION3,B//个位

MOVDISPLAYREGION4,A//十位

INCR0

MOVDISPLAYREGION5,@R0//百位

RET

;*****************显示子程序*****************

//无入口参数

DISPLAY:

MOVDPTR,#TAB

MOVA,DISPLAYREGION1

MOVCA,@A+DPTR

LCALLDATEOUT//将A串行输出程序

MOVA,DISPLAYREGION2

MOVCA,@A+DPTR

LCALLDATEOUT

MOVDPTR,#TAB2//个位带小数

MOVA,DISPLAYREGION3

MOVCA,@A+DPTR

LCALLDATEOUT

MOVDPTR,#TAB

MOVA,DISPLAYREGION4

MOVCA,@A+DPTR

LCALLDATEOUT

MOVA,DISPLAYREGION5

MOVCA,@A+DPTR

LCALLDATEOUT

MOVDPTR,#TAB2

MOVA,DISPLAYREGION6

MOVCA,@A+DPTR

LCALLDATEOUT

LCALLDATEOUT

LCALLDATEOUT

RET

//************数据输出子程序DATEOUT*************

DATEOUT:

MOVR3,#8

LOOOOOOP:

RLCA

CLRCLKDISPLAY

MOVDATEDISPLAY,C

SETBCLKDISPLAY

DJNZR3,LOOOOOOP

RET

//*************掉电保护数据子程序*************

//入口参数:

R1=需保护数据所在地址

CONSERVR:

PUSHACC

MOVA,R1

MOVR7,A

MOVA,@R1

MOVR6,A

LCALLI2C_WR//入口参数R6=数据;R7=EEPROM地址

POPACC

RET

//**********24C16连续3字节清零程序*************

//入口参数:

R1=需清零空间的首地址

CLR24C16:

MOV@R1,#0

LCALLCONSERVR

INCR1

MOV@R1,#0

LCALLCONSERVR

INCR1

MOV@R1,#0

LCALLCONSERVR

DECR1

DECR1//保证R1不变

RET

//***********上电读24C16子程序******************

READ:

MOVR1,#HOUSE0

READING:

MOVA,R1

MOVR7,A

LCALLI2C_RD//入口参数:

R7=24C16地址出口参数:

R7=数据

MOVA,R7

MOV@R1,A

INCR1

CJNER1,#HOUSEEND,READING

RET

//**************写入24C16**************

//入口参数:

R6=数据;R7=EEPROM地址

I2C_WR:

LCALLSTAR;发起始条件

MOVA,#0A0H;发器件地址

LCALLSENDI2C

JBF0,RETURN1;数据接收错误

MOVA,R7;发字节地址

LCALLSENDI2C

JBF0,RETURN1;接收数据错误

MOVA,R6

LCALLSENDI2C;发一个数据

JBF0,RETURN1;接收数据错误

LCALLSTP

LCALLLDELAY10MS;写周期延时约10ms

RETURN1:

RET

//*****************读24C16****************

//入口参数:

R7=EEPROM地址

//出口参数:

R7=数据

I2C_RD:

LCALLSTAR;发送起始条件

MOVA,#0A0H;发器件地址

LCALLSENDI2C

JBF0,RETURN;接收数据错误

MOVA,R7;发地址

LCALLSENDI2C

JBF0,RETURN

LCALLSTAR;重新发送起始标志

MOVA,#0A1H;发读操作命令

LCALLSENDI2C

JBF0,RETURN

SETBF0

LCALLLOADI2C

MOVR7,A

LCALLSTP;发终止条件

RETURN:

RET

/////////////I2C启动条件//////////

STAR:

SETBSDA

NOP

SETBSCL

NOP

NOP

NOP

NOP

CLRSDA

NOP

NOP

NOP

NOP

CLRSCL

RET

///////////I2C终止条件///////////////

STP:

CLRSDA

NOP

SETBSCL

NOP

NOP

NOP

NOP

SETBSDA

NOP

NOP

NOP

NOP

RET

////////LOADI2C/////////

LOADI2C:

SETBSDA;置数据线为输入方式

MOVR5,#08H

RCV:

NOP

CLRSCL;置低准备接收数据位

NOP

NOP

NOP

NOP

NOP

SETBSCL;置高使数据线上数据有效

NOP

NOP

CLRC

JNBSDA,RCV0;读数据位,若为0则置0

SETBC;读数据位,若为1则置1

RCV0:

RLCA;接收数据位放入ACC中

NOP

NOP

DJNZR5,RCV;没接收完继续

CLRSCL;接收完置低发应答或非应答信号

NOP

NOP

NOP

CLRSDA

JNBF0,SENDACKB;判断继续接收数据?

如需转发送应答位

SETBSDA;发送非应答信号

SENDACKB:

NOP

NOP

SETBSCL;置高使应答有效

NOP

NOP

NOP

NOP

CLRSCL;准备接收停止条件

CLRF0;清接收非应答信号

RET

///////////SENDI2C///////

SENDI2C:

MOVR5,#08H

AR_LP1:

RLCA

MOVSDA,C;传送1位数据

NOP

NOP

SETBSCL;接收数据

NOP

NOP

NOP

NOP

NOP

CLRSCL;准备接收下一位

DJNZR5,AR_LP1;8位发送完

NOP

NOP

SETBSDA;发送完,准备接收应答位

NOP

NOP

SETBSCL;开始接收应答位

NOP

NOP

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1