基于E2PROM 24C16芯片单片机课程设计多用户电能表打印.docx
- 文档编号:8341541
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:26
- 大小:400.42KB
基于E2PROM 24C16芯片单片机课程设计多用户电能表打印.docx
《基于E2PROM 24C16芯片单片机课程设计多用户电能表打印.docx》由会员分享,可在线阅读,更多相关《基于E2PROM 24C16芯片单片机课程设计多用户电能表打印.docx(26页珍藏版)》请在冰豆网上搜索。
基于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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于E2PROM 24C16芯片单片机课程设计多用户电能表打印 基于 E2PROM 24 C16 芯片 单片机 课程设计 多用户 电能表 打印