
多用户电子式电能表的设计和调试
课程名称:单片机在电力系统的应用
课题名称:多用户电子式电能表的设计和调试
班 级:自动化
学 号:XXXXXX
前 言
多用户电子式单相电能表采用单片机作为处理器,每块电能表可对多达24户的用电情况进行集中检测、循环显示。各户的用电量可以就地读取。多用户电子式电能表采用了“分户用电、集中检测”的方式,与传统感应式电能表相比,有效地提高了电能计量的准确性,而且整机体积小、质量轻、安装方便。
在多用户电子式电能表的前面板上有6位LED显示器,前两位为分户号,后4位为分户用电量,所显示的用电量与分户号相对应,分户循环显示,每3s切换一户。
此外,电能表还必须有断电保护功能,确保用户在断电后能够保存之前的用电数据,在恢复供电时能够继续按照断电前得数据开始计数。
同时,该类电能表还必须有清零功能,每个控制单元上都对每户设置了相应的清零开关,当相应的用户开关按下时,该用户的用电量亦随之清零。
目录
一 设计任务及要求----------------------------------------------------4
二 设计原理分析-------------------------------------------------------4
三 硬件电路设计-------------------------------------------------------4
3.1 单片机电路板设计-----------------------------------------------------4
3.2 +5V稳压电源----------------------------------------------------------7
3.3 光电隔离电路----------------------------------------------------------7
3.4 AD7755相关电路-------------------------------------------------------7
3.5 参数设定----------------------------------------------------------------11
3.6 用户清零电路的设计-----------------------------------------------------12
四 软件设计--------------------------------------------------------------12
4.1 流程图-------------------------------------------------------------------12
4.2 程序内容----------------------------------------------------------------18
五 设计总结--------------------------------------------------------------26
六 参考资料--------------------------------------------------------------21
一 设计任务及要求
设计任务:多用户电子式单相电能表设计与调试
设计目的: 了解单片机在电力系统中的应用,在全面掌握单片机的功能的基础上,初步接触它在本专业的应用范围。要求完成,培养我们自主的习惯。
设计内容:硬件设计与软件设计。硬件设计包括:C8051F360单片机整体电路设计、+5V稳压电源电路设计、光电隔离电路设计、基于AD7755的电能脉冲发生器电路设计;软件设计包括:用C8051F360单片机及编写具有掉电保存功能和清零功能的用户电量显示程序。
设计要求:①AD7755电能脉冲发生器电路仅作电路硬件设计,其电能脉冲由C8051F360单片机P2口所接拨码开关产生的脉冲模拟。②用户电量显示要求精确到小数点后3位③1000个电量脉冲为1度电④每个用户显示时间为3S左右⑤为防止突然停电而使用户电量数据丢失,要求能将电量数据保存,需要设计单片机24C16模块,使其具有掉电保存功能。⑥为了能够方便记取各个用户电量,需要为每一户设计清零程序。
二 设计原理分析
电子式电能表是在数字功率表的基础上发展起来的,采用乘法器实现对电功率的测量,其工作原理框图如图3-10所示。被测量的高电压u、大电流i经电压变换器和电流变换器转换后送至乘法器M,乘法器M完成电压和电流瞬时值相乘,输出一个与一段时间内的平均功率成正比的直流电压U,然后再利用电压/频率转换器,U被转换成相应的脉冲频率f,将该频率分频,并通过一段时间内计数器的计数,显示出相应的电能。
图1 电子式电能表工作原理框图
三 硬件电路设计
3.1 单片机电路板设计
本设计采用的是C8051F360单片机为核心的电路板。C8051F360单片机整体电路板包含:C8051F360单片机、LED/FMQ报警、RS-232通信、USB接口、电源接口、LM336-2.5、下载/复位、外接器件、5V--3.3V、两路AD输入、信号输入、PCF8563、24C16、74HC165、74HC1显示等模块。本次设计中主要用到的部分有C8051F360单片机、PCF8563、24C16和74HC1显示等模块。
C8051F360单片机为主要部件,它具有片内上电复位电路、VDD监视器、看门狗定时器和时钟振荡器器件,是真正能工作的片上系统。FLASH 存储器还具有在系统重新编程能力,可用于非易失性数据存储,并允许现场更新8051 固件。用户软件对所有外设具有完全的控制,可以关断任何一个或所有外设以节省功耗。其P1.0,P1.1口产生的脉冲向74HC1显示输送数据,使其显示相关信息,P2口接拨码开关,模拟AD7755电量脉冲,PCF8563、24C16部件实时存储用户电量信息,并在掉电后保存,单片机上电复位后能够从中读取数据。
FM24C16是用先进的铁电技术制造的16K位的非易失性的记忆体铁电随机存储器FRAM具有非易失性并且可以象RAM一样快速读写数据在掉电可以保存10年且比EEPROM或其他非易失性存储器可靠性更高系统更简单不象EEPROM FM24C16以总线速度进行写操作无延时数据送到FM24C16直接写到具体的单元地址下可以立即执行FM24C16可以承受超过100亿次的读写或者是比EEPROM高一万倍的写操作FM24C16的写能力使得它在需要对非易失性记忆体快速读写的状况下非常理想举例说数据采集系统中对写入数据的频率要求高即速度要求非常快使用EEPROM可能丢失数据这种优势合并使得系统可以更可靠的实时采集数据FM24C16为使用串EEPROM的用户提供了便利它在硬件上可以直接替换EEPROM。以下是电路板的相关电路图。
图2 74HC1显示电路
图3 24C16与C8051F360连接电路
3.2 +5V稳压电源
电源是电能表设计的重要部分,其设计的好坏对整个系统的性能有较大影响。本设计使用的稳压电源是由MC7805实现的,输入电压220V,输出电压+5V。
集成三端稳压器稳压精度高、工作稳定可靠、外围电路简单、容易设计和制作、体积小、重量轻、成本低、维修简单。7805集成三端稳压器的典型应用电路如图2所示,这是一个输出+5 V直流电压的稳压电路。IC采用集成三端稳压器7805,C1、C 2分别为输入端和输出端滤波电容,RL为负载电阻。电路如下图。
图5 +5V稳压电源电路图
3.3 光电隔离电路
在实际应用中,许多电路链接之间需要非直接的连接,从而在提供数据的同时避免来自系统某一部分的危险电压或电流对另一部分造成破坏,造成这种破坏的可能是电源质量低劣、接地故障等各种故障。电路隔离的主要目的是通过隔离元件把干扰的路径切断,从而达到抑制干扰的目的。
我们选用光电隔离法,光电隔离元件里面包含两个基本元件:光发射元件和光接收元件,因光电隔离元件中的光发射元件和光接收元件中间是以光的形式相互联系的,在电气上没有直接相连,从而达到在电气上的隔离作用。
光电耦合的主要优点是:信号单向传输,输入端与输出端完全实现了电气隔离,抗干扰能力强,工作稳定。光电耦合电路如下图。
图6 光电隔离原理电路图
3.4 AD7755相关电路
AD7755是AD公司推出的脉冲输出的一种高准确度电能测量芯片,AD7755在低频输出端提供平均功率信息,在高频输出端输出频率正比有效功率的脉冲,AD7755还有自校准功能。AD7755内部包含一个对AVdd电源引脚的监控电路。在AVdd上升到4V之前,AD7755一直保持在复位状态。当AVdd降到4V以下,AD7755也被复位,此时F1、F2和CF都没有输出。下图是AD7755的相关电路图。
图7 AD7755功能框图
图8 AD7755性能测试电路
1、电流采样电路:
图2.6 电流采样电路
使用分流器的电流采样电路如图2.6所示,其中F1为分流器,R1、R2为采样电阻,C1、C2为采样电容,他们为电流采样通道提供采样电压信号,采样电压信号的大小由分流器的阻值和流过其上的电流决定。电流采样通道采用完全差动输入,V1P为正输入端,V1N为负输入端。电流采样通道最大差动峰值电压应小于470mV,电流采样通道有一个PGA,其增益可由ADE7755的G1和GO来选择,见表1:
表1
| G1 | G0 | 增益 | 最大差动信号 |
| 0 | 0 | 1 | ±470Mv |
| 0 | 1 | 2 | ±235Mv |
| 1 | 0 | 8 | ±60Mv |
| 1 | 1 | 16 | ±30Mv |
当使用互感器采样时,其电路如图2.7所示:
图2.7 互感器采样电路
使用互感器采样时,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。
2、电压采样电路:
图2.8 电压采样电路
电压输入通道(V2N,V2P)也为差分电路,V2N引脚连接到电阻分压电路的分压点上,V2P接地。电压输入通道的采样信号是通过衰减线电压得到的,其中R6至R15为校验衰减网络,通过短接跳线J1至J9可将采样信号调节到需要的采样值上,我们设计的电能表基本电流时电压采样值为174.2 mV,为了准许分流器的容差和片内基准源8%的误差,衰减校验网络应该允许至少30%的检验范围,根据参数,其调节范围为169.8 mV –250 mV,完全满足了调节的需要。这个衰减网络的-3dB频率是由 R4和C3决定的,R19、R23、R24确保了这一点,即使全部跳线都接通,R19、R23、R24的电阻值仍远远大于R4,R4和C3的选取要和电流采样通道的R1C1匹配,这样才能保证两个通道的相位进行恰当的匹配,消除因相位失调带来的误差影响。
3、轻载调节电路
图2.9轻载调节电路
轻载调节电路如图2.9所示,其原理是用电压采样处的电压值再经分压后加到电流采样的正或负端来增大或减小电流采样,达到调节的目的。当短节S2到I+或I-时,附加到分流器端的电压值为:
Vq=R1×Vx/ (R20+R1)
R1、Vx已知,可通过改变R20的值来改变需要补偿的电压值。根据计算当R5为200k时,Vq约为0.0003mV。在轻载时电流采样值Vi=2.5mV×0.05=0.125mV。轻载误差改变量为0.0003/0.125=0.0024即0.24%,在校验台上表现为轻载误差增大或减小0.24。
图9 AD7755引脚排列图
3.5 参数设定
+5V稳压电源的参数有:变压器副边绕组的交流电压有效值,整流元件的参数,电容C1、C2的数值以及集成三端稳压器的选用。以下即参数计算:
(1)电容C1,可用下式进行计算:
式中:10ms为交流电网电压周期的一半。取Vimin=7.3V。因为在使用三端稳压器时,为了保证稳压性能,输入端和输出端间电位差至少应在2 V以上,一般对输出电压不大于18V的稳压器,输入电压应小于35V, 按输出电流应有10%的余量,取通过计算,得:C1=3014uF。
(2)变压器副边绕组的交流电压有效值,可用下式进行计算:
通过计算,得:V2=9.9V。为了留有一定裕量,取V2=10.5V。
(3)桥式整流电路中,每个整流二极管在交流电网电压最高时承受的最大反向峰值电压为
为了安全,整流管的反向耐压应当比上述值大50%以上,因此选择整流管时,其反向耐压应按下
式考虑:
桥式整流电路中,每个整流二极管的正向电流平均值是输出电流的一半,其最大值是
由于在接通电源瞬间有相当大的冲击电流( 即充电电流) 通过整流管,因此,整流管的参数( 正向电流平均值)应比上述值大0.5~2倍。若按比上述值大0.8倍考虑,则根据上述计算,可选用1A/25V或1A/50V的桥堆。
(4)变压器副边绕组电流的有效值Iac要比输出电流Iomax大,这里我们取
因此,变压器副边绕组导线的粗细应按额定电流(交流有效值)为2 A选用。
(5)电容C 2的作用是减小稳压电源输出端由输入电源引入的低频干扰,其数值在100uF左右。
3.6 用户清零电路的设计
如图,即为电能表的用户清零电路,采用74HC165芯片作为清零信号的接收和发出的端口。P1.5接芯片的两个时钟脉冲信号端,同时P1.2也要有低电平信号才能使165芯片在P1.4口输出相应的信号。
四 软件设计
4.1 流程图设计
4.1.1主函数流程图
N
Y
N
Y
N
N
Y
4.1.2 AT24C16读写函数流程图
4.1.3 用户扫描函数流程图
4.1.4数码管显示函数流程图
4.2 程序内容
$NOMOD51
$include (c8051f360.inc)
CLKLED EQU P1.1;数码管1时钟
LED EQU P1.0 ;数码管数据线
SDA EQU P1.3
SCL EQU P1.6
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_INT
MAIN: LCALL CHUSHI ;调用F360初始化程序
//定义30H-3FH为脉冲存储区域
MOV R7,#10H ;脉冲个数存储区域清零
MOV R1,#30H
MC: MOV @R1,#00H
INC R1
DJNZ R7,MC
LCALL READ ;读24C16
MOV 20H,#1 ;用户名
MOV 21H,#0 ;定时2S的计数单元
MOV 22H,P2 ;暂存P2口的状态
MOV TMOD,#01H
MOV TH0,#0D8H ;定时50ms采样周期
MOV TL0,#0F0H
SETB ET0
SETB EA
SETB TR0
SJMP $
//进入中断子程序
T0_INT: MOV TH0,#0D8H ;进入中断采样
MOV TL0,#0F0H
MOV R1,#3FH ;第八户
MOV R6,#00H
MOV A,P2
XRL A,22H
MOV 22H,P2
AA: JNB ACC.7,AA1 ;判断某户是否有脉冲
LCALL COUNT ;有脉冲,则计数
AA1: INC R6
CJNE R6,#08H,AA2 ;判断8户是否均采样完毕
SJMP LCAL
AA2: DEC R1 ;进入下一户的存储单元
DEC R1
RL A ;左移一位
SJMP AA
LCAL: LCALL SCAN ;判断是否有清零信号
LOO: INC 21H
MOV A,21H
CJNE A,#28H,MM ;定时2S,顺序执行显示
LCALL WRITE ;调用写入程序
MOV 21H,#0
MOV A,20H
DEC A
RL A ;左移,即乘2
ADD A,#30H ;将存储单元与用户联系并对应
MOV R1,A
LCALL DIP ;调用显示程序
INC 20H ;用户名加1
MOV A,20H
CJNE A,#09H,MM
MOV 20H,#1
MM: RETI
//----------初始化子程序-------------------
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
//----------脉冲计数子程序-------------------
COUNT: PUSH ACC
CLR C
MOV A,@R1
ADD A,#1
MOV @R1,A
DEC R1
JNC LL
INC @R1 ;有进位
LL: INC R1 ;某户地位地址
POP ACC
RET
//----------显示子程序-------------------
DIP: MOV 51H,20H ;设51H--56H为数码管显示存储区域
MOV 52H,#10
MOV 53H,#0
MOV A,@R1
MOV B,#80H ;设1000个脉冲为1度电
MUL AB
MOV 25H,A
INC R1
MOV A,@R1
MOV B,#02H
DIV AB
ADD A,25H
MOV B,#100
DIV AB
MOV 54H,A ;十分位
MOV A,B
MOV B,#10
DIV AB
MOV 55H,A ;百分位
MOV 56H,B ;千分位
MOV R0,#56H
MOV R7,#0
RE: CALL dispn
INC R7
DEC R0
CJNE R7,#8,RE
RET
dispn:MOV DPTR,#TAB
MOV A,@R0
PUSH ACC
MOVC A,@A+DPTR
CJNE R0,#53H,NEXT
ANL A,#0F7H
NEXT: MOV R4,#08h
RR1: RRC A
JC SET1
JNC SET0
SET1: CLR CLKLED
SETB LED
SETB CLKLED
DJNZ r4,RR1
JMP RETURN
SET0: CLR CLKLED
CLR LED
SETB CLKLED
DJNZ R4,RR1
RETURN:POP ACC
RET
//------写2416程序---
WRITE :LCALL STR;调开始子程序
MOV A,#0A0H;控制字,2416的物理地址和写控制位
LCALL I2C_W1W;调向2416写一字节并接收信号子程序
JB F0,WRITE;若写失败,从头开始
MOV A,#00H;选择地址
LCALL I2C_W1W
JB F0,WRITE;至此,地址写完
MOV R0,#30H
MOV R7,#10H
II1:
MOV A,@R0;将30h-3FH的内容写到2416中
LCALL I2C_W1W
JB F0,WRITE
INC R0
DJNZ R7,II1
LCALL STP;调停止子程
LCALL DELAY
RET
//------读2416程序---
READ:
LCALL STR
MOV A,#0A0H;控制字,2416的物理地址和写控制位
LCALL I2C_W1W;调向2416写一字节并接收信号子程序
JB F0,READ;若写失败,从头开始
MOV A,#00H;选择地址
LCALL I2C_W1W
JB F0,READ;至此,地址写完
lcall STR
MOV A,#0A1H;控制字,2416的物理地址和读操作位
LCALL I2C_W1W
JB F0,READ
MOV R0,#30H
MOV R7,#16
JJ3: LCALL I2C_R1W;调用从2416中读1字节子程序
MOV @R0,A;将从2416中读出的内容存储到30h-3Fh中
INC R0
DJNZ R7,JJ3
SETB F0
LCALL I2C_R1W
LCALL STP
RET
//--------启动2416子程序----
STR:SETB SDA
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
NOP
CLR SCL
RET
//--------停止2416子程序----
STP:CLR SDA
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
NOP
RET
//--------向2416中写一字节并接收2416返回的信号-------
I2C_W1W:MOV R5,#8
CLR SCL
AR_LP1: NOP
NOP
NOP
NOP
NOP
RLC A
MOV SDA,C
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
DJNZ R5,AR_LP1
NOP
NOP
SETB SDA
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
CLR F0
JNB SDA,ACKEND
SETB F0
ACKEND:NOP
CLR SCL
NOP
NOP
RET
//------从2416中读出1字节,并发送应答或非应答信号
I2C_R1W:MOV R5,#08H
RCV: SETB SDA
NOP
CLR SCL
NOP
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR C
JNB SDA,RCV0
SETB C
RCV0: RLC A
NOP
NOP
DJNZ R5,RCV
CLR SCL
NOP
NOP
NOP
NOP
CLR SDA
JNB F0,SENDACK
SETB SDA
SENDACK:NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
CLR F0
RET
//-----------------清零子程序----------------------
SCAN: MOV R0,#8H
MOV R1,#30H
CLR P1.2
NOP
NOP
NOP
SETB P1.2
QINGLING:CLR P1.5
SETB P1.5
JNB P1.4,CC1
SJMP DD1
CC1: MOV @R1,#0
INC R1
MOV @R1,#0
INC R1
SJMP DD2
DD1: INC R1
INC R1
DD2: DJNZ R0,QINGLING
RET
//----------延时子程序------------------------
DELAY: MOV R3,#30H
MOV R5,#0FFH
loop : NOP
DJNZ R5,LOOP
DJNZ R3,loop
RET
TAB:DB 88H,0ebh,4ch,49h,2bh,19h,18h,0cbh,8h,09h,07fh ;0,1,2,3,4,5,6,7,8,9
END
五 设计总结
本次单片机设计,我收获很多。比如对单片机在电力系统中的应用有了一个更加深入的了解和感悟。同时,也学到了一些处理问题的新的方法和思路,对譬如AD775、24C16等芯片的作用和处理接入方式有了一个比较好的理解。
此外,在编程中,我们对清零程序何时开始运行和单片机的中断和计数等分支程序有了更加深入的了解。
