一种多功能电能表的温度补偿方法

文档序号:6028692阅读:157来源:国知局

专利名称::一种多功能电能表的温度补偿方法
技术领域
:本发明涉及一种电能信息监测装置,特别涉及--种多功能电能表的温度补偿方法。
背景技术
:电能表精度的高低直接关系到用户的切身利益,尤其是用电量大的关键部门。现有的高精度多功能电度表,在恶劣的温度条件下,尤其是在北方寒冷的天气环境下,组成电能表的各个功能块,甚至元器件都受温度变化的影响,对电能表的测量精度产生不同程度的影响。专利92203323.4提出的互感器钕铁硼阻尼体温度补偿法仅是对互感器进行了温度补偿,而对电能表的其他部件没有提出温度补偿的解决方法,不能保证电能表整体的测量精度;采用热敏电阻对晶振进行温度补偿的方法只是保证了晶振的精度,对于电能表的信号采集、信号传输、运算处理等其他功能块的温度补偿没有进行考虑。所以上述方法都不能全面解决温度变化对多功能电能表测量精度的影响,本发明为了克服上述问题,为了从多功能电能表的整体角度解决多功能电能表的温度补偿问题,提供了一种多功能电能表的温度补偿方法,从而提高了多功能电能表在温度影响下的测量精度,满足了用户的需求。
发明内容本发明为了克服现有技术的不足之处,为了全面保证多功能电能表的测量精度,提供了一种多功能电能表的温度补偿方法。所述的温度数据采集电路由数字式温度测量芯片、处理器MCU和外围辅助电路组成。温度测量芯片将采集到的温度数据,根据l-Wire总线协议把数字化的温度数据通过I/O口传给处理器MCU,处理器MCU应用温度补偿算法对多功能电能表测量的电力数据进行针对性的补偿。所述的温度测量芯片采用数字温度测量芯片DS18B20,所述的处理器MCU采用PIC18F6621,所述的温度补偿算法采用MPLAB8.0的C语言环境编译。与现有技术相比,本发明的有益效果是采用1-Wire总线式芯片DS18B20更节省MCU资源;仅用一个芯片就实现了数字化的温度采集,电子线路更简洁可靠,算法从整体性考虑更加全面完善。图l是系统整体原理框图;图2是计量功能块原理图;图3是前端信号调3理功能块原理图;图4是MCU和DS18B20原理图。具体实施例方式参照附图,本具体实施方式如下-所述的温度数据采集电路由数字式温度测量芯片、处理器MCU和外围辅助电路组成。温度测量芯片将采集到的温度数据,根据1-Wire总线协议把数字化的温度数据通过I/O口传给处理器MCU,处理器MCU应用温度补偿算法对多功能电能表测量的电力数据进行针对性的补偿。所述的温度测量芯片采用数字温度测量芯片DS18B20,所述的处理器MCU采用PIC18F6621,所述的温度补偿算法采用MPLAB8.0的C语言环境编译。DS18B20是单总线数字温度计,只需占用单片机的一个I/O口位,其内部自带A/D转换器,通过内部的温度采集、A/D转换等一系列过程,将温度数据以1-Wire总线协议的规定格式转换并输出,处理器MCU可将该数据还原为温度值,其分辨率可以达到12位;数字温度测量芯片DS18B20的测温范围为一55'C+125°C,固有测温分辨率为0.5°C。多功能电能表工作时,因为有表壳保护,温度变化波动不是太快,所以为了节省MCU资源,每隔五分钟向温度芯片索取一次温度数据即可。如图1所示,多功能电能表温度补偿的工作流程如下多功能电能表上电工作后,处理器MCU每隔五分钟向温度芯片索取一次温度数据,数字温度测量芯片DS18B20通过I/O口根据1-Wire总线协议把数字化的温度数据传给处理器MCU,MCU判断温度数据,进行补偿数据的选择。如图2、图3所示,电力信号经前端信号处理采集电路的调制后,传递给以ATT7022B为核心的电力计量电路,经计量芯片处理,转换为数字信号,等待MCU索取数据。如图4所示,数字温度测量芯片DS18B20采用了外部供电模式,外部供电模式就是在数字温度测量芯片DS18B20的电源引脚VDD上外接一个5V电源,且I/O口线上不再需要接一个上拉的M0SFET,进行温度转换时MCU不再需要将DS18B20的DQ引脚上拉到高电平,MCU通过第64脚I/O口RE2向温度测量芯片DS18B20发送请求,DS18B20接收到请求,向MCU发送温度数据。MCU根据接收到的系统温度数据,进行判断,是否进行温度补偿,如果需要就根据温度的具体数值,用温度补偿算法来补偿采集的电量数据;如不需要,就按原有的计量算法,该计算是由处理器MCU进行计算的。数字温度测量芯片DS18B20内部有8个字节的暂存存储器,其中头两个字4节表示测得的温度读数,数据格式如下表所示:<table>tableseeoriginaldocumentpage5</column></row><table>a温度寄存器高8位<table>tableseeoriginaldocumentpage5</column></row><table>b温度寄存器低8位当测得温度为正时,s二0;当测得温度为负时,s:l;其余低位以二进制补码形式表示。当DS18B20配置为12位分辨率时,温度寄存器中的所有位都是有效数据,能分辨的最小温度值为0.0625°C;当DS18B20配置为n位分辨率时,温度寄存器中的位0无效,能分辨的最小温度值为0.125°C;当DS18B20配置为10位分辨率时,温度寄存器中的位0和位1无效,能分辨的最小温度值为0.25°C;当Dsl8B20配置为9位分辨率时,温度寄存器中的位O、位1和位2无效,能分辨的最小温度值为0.5。C。表1给出了DS18B20在12位分辨率时温度/数据的对应关系。表lDS18B20温度/数据的对应关系温度(/c)输出的二进制码对应的十六进制码+125.0000000U1醒000007D0H+85,0000000101010100000550H+25.0600000001!001,0191H+10,13000000001010,00A2H+0.50000000000000讓0008H0.00oopo000000000000OOOOH-0.50imimiiii讓FFF8H-10.Bininiloioi"ioFF5EH-25.06im麵oiioi出FF6FH-55.00im画薩ooooFC90H从表l中可以看出,根据DS18B20输出的二进制码及其配置的分辨率,经过简单的计算就能得到测量的温度值。程序部分/*Copyright(c)2008,HarbinResearchInstituteofElectricalInstruments*AllrightsReserved.*FileName:temperature—compensation.c5*Dependencies:define.h/math.h/picl8.h*Processor:PIC18F6621*FileID:HBSsoftware081101*Date:01\11\2008*Abstract:temperaturecompensationoftheMulti一FuctionMeter*CurrentVersion:vl.0*Author:YuGaobo*/#include<picl8.h>#include<math.h>新nclude<define.h>^include<absacc.h>#defineucharunsignedchar#defineuintunsignedint#defineSETTEMPPI〃定义PI口为设定温皮弁defineSELECTP2〃定义P2口为选择信号sbitRE2=P3A4;〃定义ds18b20通信端口inttempi,temp2,ID=0,set=0,blink;inttempi=27,xs=5;〃定义整数和小数unsignedintmax,mid,min,flag;/*-50°C~50。C,4°C/eachtime*//*D—Ua,D一Ub,D—Uc,D一Ia,D一Ib,D一lc,D—Uab,D—Ubc,D一Uca,D—n,D—F,D—PHa,D—PHb,D一PHc,D一PH,D—Pa,D一Pb,D一Pc,D一P,D—Q4D一Qb,D—Qc,D—Q*/constunsignedcharComp—tab[25][23]={0x25,0x24,0x25,0x23,0x23,0x24,0x22,0x22,0x21,0x23,0x23,0x22,0x22,0x21,0x23,0x23,0x22,0x22,0x21,0x23,0x23,0x22,0x22,〃-50°C0x20,0xlf,0xlf,0x〗e,0x20,0x22,0x21,0x22,0x22,0x21,0x23,0x1f,0x1e,0x20,0x22,0x1f'0xe,0x20,0x22,0x21,0x22,0x21,0x23,〃-46°C08,0x09,0x10,〃460COxl1,0xl2,0)d1,0xl3,0xl3,0xl4,0xl1,0xl2,0xl1,0x13,0x11,0x12,0x11,0xl3,0xl3,0xl4,0xll,0xl2,0xU'0xD,0x13,Oxl4,0xl,〃50°CJ;//根据该类多功能电能表试验所得补偿数据6voidReadTemperature(void);〃读取ds18b20当前温度inttemperature—compensation—signedlongTemper):〃温度数据处理于函类女voidInk—DS18B20(void);voiddelay—18B20(unsignedinti);unsignedcharReadOneChar(void);voidWriteOneChar(uchardat);voiddelay—18B20(unsignedinti);Ua=Ua*Comp—tab[TC];〃dsl8b20初始化函数〃ds脆0延迟于函数〃dsl8b20读一个字节〃dsl8b20^—个字节〃上下限初始化Q=Q*Comp_tab[TC][22];〃各项测M数据的温度补偿inttemperature—compensation(unsignedlongTemper)〃温度补偿的于函数,需要输入无符号长整型的温度数据intmain(void)unsignedlongTemper=0;max=30;min=20;while①{mid=(max+min)/2;motor();—();if(〖D=,displaytemp();temperature_compensation();Ua=Ua*Comp—tab[TC][O];Ub=Ub*Comp_tab[TC][1];Uc=Uc*Comp—tab[TC][2];la=Ia*Comp_tab[TC][3〗;Ib=fb*Comp—tab[TC][4];Ic=lc*Comp_tab[TC][5];Uab=Uab*Comp—tab[TC][6];Ubc=Ubc*Comp_tab[TC〗[7];7Uca=Uca*Comp—tab[TC][8];ln=ln*Comp—tab[TC][9];F=F*Comp—tab[TC][10];PHa=PHa*Comp—tab[TC][11];PHb=PHb*Comp—tab[TC][12];PHc=PHc*Comp—tab[TC][13];PH=PH*Comp—tab[TC][14];Pa=Pa*Comp—tab[TC][15];Pb=Pb*Comp—tab[TC][16];Pc=Pc*Comp—tab[TC][17];P=P*Comp—tab[TC][18];Qa=Qa*Comp—tab[TC][19];Qb=Qb*Comp—tab[TC][20];Qc=Qc*Comp—tab[TC][21];Q=Q*Comp—tab[TC][22];inttemperature—compensation(unsignedlongTemper)unsignedintTC=0;〃定义整数W参数TC=0Temper=Temper+50;〃温度加50,闪为温度测輦范围为-50°C至50°C,而温度补偿数据二维数组的组标号最低是从零开始,所以为了对照补偿数组,把温度提为止值。Temper=Temper/4;〃温度补偿每4°C一组补偿数据TC=ceil(Temper);〃作为标号进行取整运算returnTC;〃TC数值返冋主函数/*********延时>1<*1|115,*'*12.00001112>11.0596有误差********/voiddelayms(intms)uchari;while(ms—)for(i=250;i>0;i--);/***********ds18b20延迟子凼数(晶振11.0596MHz)*******/voiddelay—18B20(unsignedinti)while(i--);Z**********dsl8b20初始化函数**********************/voidfnit一DS18B20(void)unsignedcharx=0;DQ=1;delayj犯20(8);DQ=0;delay一18B20(80);DQ=1;delayj8B20(4);x=DQ;delayj8B20(20);〃DQ复位ds8b20通信端口〃稍做延时〃MCU将DQ拉低〃精确延时人丁.480us〃拉高总线Z/稍做延时后如果!^0则初始化成功x-l则初始化火败Z***********dsl8b20'虔—t^字unsignedcharReadOneChar(void)uchari=0;uchardat=0;for(i=8;i>0;i—)DQ=0;dat=l;DQ=1;if(DQ)dat|=0x80;〃高屯平拉成低电平时读周期开始//给脉冲信号delayJ8B20(4);ret,(dat);Z*************dsl8b2G"~"个字voidWriteOneChar(uchardat)unsignedchari=0;for(i=8;i>0;i響-)DQ=0;DQ=dat&0x01;delayj8B20(5);DQ=1;dat》=l;〃从高屯平拉至低屯平时,巧周期的开始〃数据的最低位先^入〃60us到120us延时〃从最低位到最高位传入"氺水承""氺""'虔取dsl8b20^前温度****沐*******/voidReadTemperature(void)unsignedchara=0;unsignedcharb=0;unsignedchart=0;Init一DS18B20();WriteOneChar(OxCC);髓eOneChar(0x44);delay—18B20(100);1nit一DS18B20();WriteOneChar(OxCC);WriteOneChar(OxBE);dday」8B20(100);a=ReadOneChar();b=ReadOneChar();//跳过读序号列号的操作//启动温度转换〃thismessageisweryimportant〃跳过读序号列号的操作〃读取温度寄存器?(共可读9个寄存器)前两个就是温度〃'虔取温度值低位〃读取温度值高位temp1=b<<4;〃高8位中后二位数的值tempi+=(a&0xfD)>>4;//低8位中的高4位值加上高8位中后二位数的值tempi是温整数值temp2=a&0x0f;〃小数的值权利要求1、一种多功能电能表的温度补偿方法,其特征在于所述的温度数据采集电路由数字式温度测量芯片、处理器MCU和外围辅助电路组成;温度测量芯片将采集到的温度数据,根据1-Wire总线协议把数字化的温度数据通过I/O口传给处理器MCU,处理器MCU应用温度补偿算法对多功能电能表测量的电力数据进行针对性的补偿;2、根据权利要求1所述的一种多功能电能表的温度补偿方法,其特征在于所述的温度测量芯片采用数字温度测量芯片DS18B20;3、根据权利要求1所述的一种多功能电能表的温度补偿方法,其特征在于处理器MCU采用PIC18F6621;4、根据权利要求1所述的一种多功能电能表的温度补偿方法,其特征在于所述温度补偿程序采用MPLABIDEv8.15编译。全文摘要一种多功能电能表的温度补偿方法,本发明涉及一种电能信息监测装置的温度补偿方法,它克服了现有技术中只对多功能电能表局部进行温度补偿的缺陷,全面解决了多功能电能表温度补偿的问题,提高了电能表的精度。所述的温度数据采集电路由数字式温度测量芯片、处理器MCU和外围辅助电路组成。温度测量芯片将采集到的温度数据,根据1-Wire总线协议把数字化的温度数据通过I/O口传给处理器MCU,处理器MCU应用温度补偿算法对多功能电能表测量的电力数据进行针对性的补偿。本发明能够保证多功能电能表在恶劣温度条件下的测量精度,具有电路设计简洁、温度补偿全面的特点。文档编号G01R11/185GK101498741SQ200810209779公开日2009年8月5日申请日期2008年12月25日优先权日2008年12月25日发明者于高波申请人:哈尔滨电工仪表研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1