课程设计报告课程名称:多用户电能表的设计
姓名:专业:电气工程及其自动化班级:学号:
指导老师:
开课时间:
提交时间:
前言
多用户电子式单相电能表采用单片机作为中央处理器,每块电能表可对多达24户的用电情况进行集中检测、循环显示。各户的用电量可以就地读取。多用户电子式电能表采用了“分户用电、集中检测”的方式,与传统感应式电能表相比,有效地提高了电能计量的准确性,而且整机体积小、质量轻、安装方便。
在多用户电子式电能表的前面板上有6位LED显示器,前两位为分户号,后4位为分户用电量,所显示的用电量与分户号相对应,分户循环显示,每3s切换一户。
此外,电能表还必须有断电保护功能,确保用户在断电后能够保存之前的用电数据,在恢复供电时能够继续按照断电前得数据开始计数。
同时,该类电能表还必须有清零功能,每个控制单元上都对每户设置了相应的清零开关,当相应的用户开关按下时,该用户的用电量亦随之清零。
目录
一设计任务及要求-----------------------------------------------------4二设计原理分析--------------------------------------------------------4 三硬件电路设计--------------------------------------------------------4 3.1设计参数----------------------------------------------------------------4 3.2参数计算----------------------------------------------------------------5 3.3器件选择-----------------------------------------------------------------6 3.4AD7755相关电路---------------------------------------------------------8 3.5互感器采样电------------------------------------------------------------9 3.6用户清零电路的设计----------------------------------------------------10四软件设计--------------------------------------------------------------11 4.1 流程图-------------------------------------------------------------------11 4.2 程序内容----------------------------------------------------------------15 五设计总结--------------------------------------------------------------24 六参考资料--------------------------------------------------------------24
一设计任务及要求
设计任务:多用户电子式单相电能表设计与调试
设计目的:了解单片机在电力系统中的应用,在全面掌握单片机的功能的基础上,初步接触它在本专业的应用范围。要求独立完成,培养我们独立自主的习惯。
设计内容:硬件设计与软件设计。硬件设计包括:C8051F360单片机整体电路设计、基于AD7755的电能脉冲发生器电路设计;软件设计包括:用C8051F360单片机及编写具有掉电保存功能和清零功能的用户电量显示程序。
设计要求:①AD7755电能脉冲发生器电路仅作电路硬件设计,其电能脉冲由C8051F360单片机P2口所接拨码开关产生的脉冲模拟。②用户电量显示要求精确到小数点后3位③1000个电量脉冲为1度电④每个用户显示时间为3S左右⑤为防止突然停电而使用户电量数据丢失,要求能将电量数据保存,需要设计单片机24C16模块,使其具有掉电保存功能。⑥为了能够方便记取各个用户电量,需要为每一户设计清零程序。
二设计原理分析
设计总体框图:
三硬件电路设计
3.1设计参数
基准电压:240V×±10%
基准电流:Ib=5A
最大电流:Imax=4Ib=20A
计量精度:1%
最小电流:Imin=2%Ib=0.1
脉冲数:3200/kw.h
3.2参数计算
①以AD7755设计的电能表的相关参数计算
配合C8051F360芯片的16进制算法与课程设计的参数要求,参考基本电流与脉冲的建议数,选定基准电流Ib=5A,每kw.h计度需要的脉冲数为1000,即CF的输出为1000imp/ kw.h。
线路电压240V,基本电流Ib为5A,动态范围400(规定准确度的电流范围为2%Ib~Imax,即100mA~40A);计度器的电表常数C为1000imp/ kw.h,即AD7755发1000个脉冲,单片机记录1 kw.h电。为满足电流通道的动态范围且留有充分的余量,选用350μΩ的分流器;以其将负载电流转换为电压,接V1P和V1N。线路电压经电压分压器分压,也降到允许的最大电压范围之内,接V2P和V2N。负载电流为基本电流(5A)时,线路的功耗为P=240×5=1.2 kw。
选择f1-4=3.4Hz,SCF=0,S1=0, S0=1,此时CF频率为f1的32倍,所要求的频率恰为f1,f2段的脉冲计数标准为100imp/ kw.h。
乘以此常数得Ib情况下的输出频率:
fF1=P×C=1.2×1000/3600=0.33333333Hz
查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滤波和7805 IC稳压产生。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 。 ③电源参数
240V~5V 的共两套,一套给AD7755,另一套给显示模块和5V~3.3V 电源。5V~3.3V 电源供给C8051F360和24C16。
240V~5V 转换电路中,相关参数如下:
C1=330uf ,为滤波电容;C2=0.33uf ,用于抵消输入线较长时的电感效应,以防止电路产生自激震荡;C3=1uf ,用于消除输出电压中的高频噪声。
3.3器件选择
本设计采用的是C8051F360单片机为核心的电路板。C8051F360单片机整体电路板包含:C8051F360单片机、LED/FMQ 报警、RS-232通信、USB 接口、电源接口、LM336-2.5、下载/复位、外接器件、5V--3.3V 、两路AD 输入、信号输入、PCF8563、24C16、74HC165、74HC164显示等模块。本次设计中主要用到的部分有C8051F360单片机、PCF8563、24C16和74HC164显示等模块。
C8051F360单片机为主要部件,它具有片内上电复位电路、VDD 监视器、看门狗定时器和时钟振荡器器件,是真正能独立工作的片上系统。FLASH 存储器还具有在系统重新编程能力,可用于非易失性数据存储,并允许现场更新8051 固件。用户软件对所有外设具有完全的控制,可以关断任何一个或所有外设以节省功耗。其P1.0,P1.1口产生的脉冲向74HC164显示输送数据,使其显示相关信息,P2口接拨码开关,模拟AD7755电量脉冲,PCF8563、24C16部件实时存储用户电量信息,并在掉电后保存,单片机上电复位后能够从中读取数据。
以下是电路板的相关电路图。
C1104/0.L22-L19L4L5L6L11-L13L14 74HC164显示电路
C8051F360电路
E2PROM 24C16芯片
两组稳压电源
3.4AD7755相关电路
AD7755在低频输出端提供平均功率信息,在高频输出端输出频率正比有效功率的脉冲,AD7755还有自校准功能。AD7755内部包含一个对AVdd电源引脚的监控电路。在AVdd上升到4V之前,AD7755一直保持在复位状态。当AVdd降到4V以下,AD7755也被复位,此时F1、F2和CF都没有输出。下图是AD7755的相关电路图。
AD7755功能框图
AD7755性能测试电
AD7755引脚排列图
表1
3.5互感器采样电路
当使用互感器采样时,其电路如图所示:
P
V1N
H1
互感器采样电路
使用互感器采样时,G1、G0都接低电平,增益选择1,电流采样通道最大
差动峰值电压为±470mV ,其差动信号由互感器的二次侧电流流过电阻R30和R31产生,互感器二次侧额定电流为5mA ,当过载4倍时,二次侧电流为20mA ,其流过电阻R30和R31产生的差动信号为96mV ,远小于峰值电压半满度值(235 mV )。 R1C1和R2C2组成两个低通滤波器,衰减掉那些无用的高频分量,从而防止有用频带内的失真。R1、R2、C1、C2阻值、容值的选取对电表的性能有很大的影响,因此取值为R1= R2=300欧,C1=C2=27nF 。
3.6用户清零电路的设计
排阻
如图,即为电能表的用户清零电路,采用74HC165芯片作为清零信号的接收和发出的端口。74HC165是8位并行输入,互补串行输出移位寄存器。当移位/置入控制端/PL为低电平时,并行数据(P0-P7)被置入寄存器中,而时钟信号(CLK1,CLK2)及串行数据(SER)均无关。当移位/置入控制端(/PL)为高电平时,置数功能被禁止。当时钟信号CLOCK1、CLOCK2中任意一个为低电平且/PL端为高电平时,另一个时钟可以输入;当时钟信号CLOCK1、CLOCK2中任意一个为高电平时,另一个时钟被禁止。
四软件设计4.1 流程图设计4.1.1主函数流程图
4.1.2 AT24C16读写函数流程图
4.1.4数码管显示函数流程图
4.2 程序内容
$NOMOD51
$include (c8051f360.inc)
ORG 00H
CLK EQU P1.1;74164时钟输入端
DATE EQU P1.0;74164数据输入端
SDA EQU P1.3;串行数据/地址输入端
SCL EQU P1.6;串行时钟输入端
KEY0 EQU P2.0
KEY1 EQU P2.1
KEY2 EQU P2.2
KEY3 EQU P2.3
KEY4 EQU P2.4
KEY5 EQU P2.5
KEY6 EQU P2.6
KEY7 EQU P2.7;设置8个开关(8户)引脚
XIN0 EQU 10H
XIN1 EQU 11H
XIN2 EQU 12H
XIN3 EQU 13H
XIN4 EQU 14H
XIN5 EQU 15H
XIN6 EQU 16H
XIN7 EQU 17H;定义新脉冲存放的地址单元
PL EQU P1.2
QL EQU P1.4
CLK165 EQU P1.5
JR EQU 20H
////0000000
JMP MAIN
ORG 000BH
LJMP TO_INT
ORG 0100H
MAIN: CALL CHUSHI ;初始化
CALL I2C_RD ;读24C16
MOV JR,P2 ;读取外部P2口的状态
MAIN1: MOV TMOD,#01H
MOV TH0,#0D8H
MOV TL0,#0F0H ;设定时初值,中断时间为0.01s
SETB ET0
SETB EA
SETB TR0 ;定时时间到进入T0中断,检查外部脉冲
BEGIN: LCALL JIANPAN
MOV R0,#XIN0 ;取第一户新增的脉冲数
MOV R1,#1 ;循环显示8户电能,R1代表户数
LOP: MOV R6,#00H
MOV A,@R0
CALL SHUCHU ;显示千分位
CALL SHUCHU ;显示百分位
CALL SHUCHU ;显示十分位
MOV B,#10
DIV AB
PUSH ACC
MOV A,B
CALL XSD ;显示带小数点的数
MOV A,#0
POP ACC
CALL XIANSHI
CALL XIANSHI
MOV A,#10 ;显示-
CALL XIANSHI
MOV A,R1 ;显示用户
CALL XIANSHI
CALL DELAY
INC R1
INC R0
CJNE R1,#9,LOP
LCALL JIANPAN
JMP MAIN1
;***************初始化子程序******************
CHUSHI:
MOV SFRPAGE,#0FH
MOV P1MDIN,#0FFH ;数字输入
MOV P1MDOUT,#0EFH ;推挽输出
MOV XBR1,#40H ;交叉开关使能
MOV PCA0MD,#00H ;关闭看门狗
MOV PSCTL,#13H
MOV OSCICN,#83H ;内部振荡器允许,不分频
MOV DPTR,#tab
RET
;***************读24C16子程序******************
I2C_RD: MOV R0,#XIN0
MOV R4,#7
CALL STA0
MOV A,#0A0H
CALL SDBYTE
JB F0,I2C_RD
MOV A,#0
CALL SDBYTE
JB F0,I2C_RD
CALL STA0
MOV A,#0A1H
CALL SDBYTE
JB F0,I2C_RD
RERD: CALL DUSHU
MOV @R0,A
INC R0
DJNZ R4,RERD
INC R0
SETB F0
CALL DUSHU
MOV @R0,A
CALL STP0
RET
;**************定时中断子程序************
TO_INT: MOV TH0,#0D8H
MOV TL0,#0F0H ;重装初值
PUSH ACC
MOV A,JR ;将原来P2口的状态送给寄存器A
MOV JR,P2 ; 分别读各位脉冲并记录脉冲数
JNB ACC.0,COMP1 ;通过电平的比较判断新脉冲与NEXT2: JNB ACC.1,COMP2 ;原来的脉冲是否一样,一样则
NEXT3: JNB ACC.2,COMP3 ;判断下一个开关状态,若不一样
NEXT4: JNB ACC.3,COMP4 ;则将相应的用户脉冲数加一
NEXT5: JNB ACC.4,COMP5
NEXT6: JNB ACC.5,COMP6
NEXT7: JNB ACC.6,COMP7
NEXT8: JNB ACC.7,COMP8
JMP JIXU
COMP1: JB KEY0,JIA1
JMP NEXT2 ;依次判断8个开关的状态COMP2: JB KEY1,JIA2
JMP NEXT3
COMP3: JB KEY2,JIA3
JMP NEXT4
COMP4: JB KEY3,JIA4
JMP NEXT5
COMP5: JB KEY4,JIA5
JMP NEXT6
COMP6: JB KEY5,JIA6
JMP NEXT7
COMP7: JB KEY6,JIA7
JMP NEXT8
COMP8: JB KEY7,JIA8
JMP JIXU ;8个开关状态全部检查完返回程序
JIA1: INC XIN0 ;将新增加的脉冲数存入到新的地址单元中
JMP NEXT2
JIA2: INC XIN1
JMP NEXT3
JIA3: INC XIN2
JMP NEXT4
JIA4: INC XIN3
JMP NEXT5
JIA5: INC XIN4
JMP NEXT6
JIA6: INC XIN5
JMP NEXT7
JIA7: INC XIN6
JMP NEXT8
JIA8: INC XIN7
JIXU: INC R6
POP ACC
RETI
;****************取余并显示*************
SHUCHU: MOV B,#10
DIV AB ;将取到的脉冲数除以10,商存入寄存器A,余数存入寄存器B
PUSH ACC ;将商压入堆栈
MOV A,B
CALL XIANSHI
POP ACC
RET
;******************显示子程序****************
XIANSHI:PUSH ACC
MOVC A,@A+DPTR ;取余数的段码值
MOV R4,#8
LOP1: RRC A
JC SET1
JNC SET0
SET1: CLR CLK
SETB DATE
SETB CLK ;捕捉一个上升沿,写入数据
DJNZ R4,LOP1
JMP RETURN
SET0: CLR CLK
CLR DATE
SETB CLK
DJNZ R4,LOP1
RETURN: POP ACC
RET ;分别写入一个数的八位二进制码;******************显示带小数点的数******************
XSD: PUSH ACC
MOVC A,@A+DPTR
ANL A,#0F7H ;与点的显码与
MOV R4,#8
LOOP1: RRC A
JC SETO1
JNC SETO0
SETO1: CLR CLK
SETB DATE
SETB CLK
DJNZ R4,LOOP1
JMP RETURN2
SETO0: CLR CLK
CLR DATE
SETB CLK
DJNZ R4,LOOP1
RETURN2:POP ACC
RET
;**************延时3s程序****************
DELAY: ;误差 0us
MOV R7,#0FFH
DL1:
MOV R6,#7FH
DL0:
MOV R5,#20H
DL2:
DJNZ R5,DL2
DJNZ R6,DL0
DJNZ R7,DL1
NOP
RET
;**************写数据到24C16************
I2C_WR: CALL STA0
MOV A,#0A0H
CALL SDBYTE
JB F0,I2C_WR
MOV A,#0
CALL SDBYTE
JB F0,I2C_WR
MOV R3,#8
MOV R0,#10H
REWR: MOV A,@R0
CALL SDBYTE
JB F0,I2C_WR
INC R0
DJNZ R3,REWR
CALL STP0
CALL LYANSHI
MOV R0,50H
POP PSW
POP ACC
RET
;************软件延时10ms子程序************** LYANSHI: MOV R4,#60 LOOP3: MOV R5,#0FAH
LOOP4: NOP
DJNZ R5,LOOP4
DJNZ R4,LOOP3
RET
;**************启动24C16***************
STA0: SETB SCL
NOP
SETB SDA
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
;************终止24C16***********
STP0: CLR SDA
NOP