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

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

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

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

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

f1-4U2REF

U1=5×

350=1750μV=1.75mV

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

U2=fF1×

U2REF8.06×

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(±

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×

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

SETBPL

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

CLRING:

CLRCLK165

SETBCLK165

JBDATE165,NOTCLR//判断开关状态

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

NOTCLR:

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

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

INC@R1

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

MOV@R1,#0

INCR1

INC@R1

SJMPDEC2

NOPULSE:

DEC1:

INCR1

DEC2:

INCR1

CJNER1,#HOUSEEND,LOOP

POPACC

MOVORIGIONSTATE,A

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

//入口参数为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

MOVDISPLAYREGION3,B//个位

MOVDISPLAYREGION4,A//十位

INCR0

MOVDISPLAYREGION5,@R0//百位

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

//无入口参数

DISPLAY:

MOVDPTR,#TAB

MOVA,DISPLAYREGION1

MOVCA,@A+DPTR

LCALLDATEOUT//将A串行输出程序

MOVA,DISPLAYREGION2

LCALLDATEOUT

MOVDPTR,#TAB2//个位带小数

MOVA,DISPLAYREGION3

MOVDPTR,#TAB

MOVA,DISPLAYREGION4

LCALLDATEOUT

MOVA,DISPLAYREGION5

MOVDPTR,#TAB2

MOVA,DISPLAYREGION6

LCALLDATEOUT

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

DATEOUT:

MOVR3,#8

LOOOOOOP:

RLCA

CLRCLKDISPLAY

MOVDATEDISPLAY,C

SETBCLKDISPLAY

DJNZR3,LOOOOOOP

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

//入口参数:

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

DECR1

DECR1//保证R1不变

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

READ:

MOVR1,#HOUSE0

READING:

MOVR7,A

LCALLI2C_RD//入口参数:

R7=24C16地址出口参数:

R7=数据

MOVA,R7

MOV@R1,A

CJNER1,#HOUSEEND,READING

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

R6=数据;

I2C_WR:

LCALLSTAR;

发起始条件

MOVA,#0A0H;

发器件地址

LCALLSENDI2C

JBF0,RETURN1;

数据接收错误

MOVA,R7;

发字节地址

接收数据错误

MOVA,R6

LCALLSENDI2C;

发一个数据

LCALLSTP

LCALLLDELAY10MS;

写周期延时约10ms

RETURN1:

RET

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

//出口参数:

R7=数据

I2C_RD:

LCALLSTAR;

发送起始条件

MOVA,#0A0H;

LCALLSENDI2C

JBF0,RETURN;

MOVA,R7;

发地址

JBF0,RETURN

重新发送起始标志

MOVA,#0A1H;

发读操作命令

SETBF0

LCALLLOADI2C

LCALLSTP;

发终止条件

RETURN:

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

STAR:

SETBSDA

NOP

SETBSCL

CLRSDA

CLRSCL

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

STP:

CLRSDA

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

LOADI2C:

SETBSDA;

置数据线为输入方式

MOVR5,#08H

RCV:

NOP

CLRSCL;

置低准备接收数据位

SETBSCL;

置高使数据线上数据有效

CLRC

JNBSDA,RCV0;

读数据位,若为0则置0

SETBC;

读数据位,若为1则置1

RCV0:

RLCA;

接收数据位放入ACC中

DJNZR5,RCV;

没接收完继续

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

JNBF0,SENDACKB;

判断继续接收数据?

如需转发送应答位

SETBSDA;

发送非应答信号

SENDACKB:

置高使应答有效

NOP

准备接收停止条件

CLRF0;

清接收非应答信号

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

SENDI2C:

MOVR5,#08H

AR_LP1:

RLCA

MOVSDA,C;

传送1位数据

接收数据

准备接收下一位

DJNZR5,AR_LP1;

8位发送完

发送完,准备接收应答位

开始接收应答位

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

当前位置:首页 > 法律文书 > 调解书

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

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