用于电表中振荡器补偿的方法和装置
本发明一般涉及用于计量电能的电力公司电表领域。具体来说,本发明涉及多种可使电度表或其它与时间相关设备中所用的振荡器的精度达到最大的方法和装置。
用于测量各种形式电能的计量仪器已经广为人知。电力公司的电表一般有三种类型,即,基于电动机械的电表(其输出由一个旋转圆盘产生)、基于纯电子元件的电表(其输出元件不含任何旋转部分)以及机械/电子混合电表。在混合式电表中,一个所谓的电子寄存器与一旋转圆盘产生耦合(通常利用光来完成)。旋转圆盘所产生的脉冲(例如:从转盘涂点上反射回来的光)被用于产生一个电子输出信号。
在电能表中使用电子元件已经因它们的可靠性和更宽的操作环境温度范围而得到了广泛的采用。另外,现代电子信号处理设备(如微控制器)在计算电能的使用方面比从前的机械设备具有更高的精确程度。因此,人们已经提出了各种形式的电子式电表,它们完全不含任何可移动的部分。
在Hemminger等人的美国专利No.5,548,527和Munday等人的美国专利No.5,555,508中揭示了多种电能表的实例,它们将作为本文的参考。在这些电表中,信号处理一般被分配于数字信号处理集成电路设备和微控制器设备之间。而这些设备的操作则需要有时钟信号的产生,这一点在以后将会清楚。实际上,对于利用电子设备来监视时基参数(如使用时间的测量)的应用来说,这种时钟信号的精度可对数据监视的精确程度产生很大的影响。在计量应用中,时钟信号一般可通过两种方式来产生,即,相对于线路频率或通过利用一内部振荡器。
在美国,相对于线路频率(即,向给定用户提供的60Hz的电压信号的频率)可产生高质量的时钟信号。众所周知,美国电网的频率在很长的时间周期内都是极为稳定的。而在国际上,基于线路频率的时钟信号的稳定性则各不相同,尤其是在第三世界国家中。在这种环境下,就需要利用其它的方法来监视时间,例如,利用内部振荡器。
鉴于上述情况,如果一个基于电子的电能表在各种环境(即,电网频率稳定的环境以及电网频率不稳定的环境)中都能精确地监视时间,则它将具有最好的销路。另外,在对所用时间进行测量的仪器中,必须保持全部时间的实时测量,甚至在电源断电期间也要如此。为了达到这些目的,上述专利中所揭示的电表采用了两个晶体振荡器,其中一个用于在断电期间进行实时测量,即,执行低功率电池操作。
晶体振荡器的精度代表了它随时间而产生一个不变信号的能力。这个特性以PPM(百万分率)的形式来表述。一个具有±10PPM误差的1MHz晶体每秒钟将产生个数介于999,990到1,000,010之间的脉冲。由于在计量应用中,顾客帐单是以所测得的时间为依据,所以测量的精度就非常重要。当前,许多电力公司都要求具有5PPM的精度。
一种用于保证晶振信号精度的方法是通过商业购买具有所需精度特性的可靠振荡器。不幸的是,这种振荡器相对较贵,而且对于大量使用的产品来说(如电能计),这种价格在经济上是不可接受的。另外,在电源断电期间,如以上专利所述的这些电表将进入低功率模式。32.768KHz的晶体振荡器已被用于这种低功率操作,因为它们价格便宜而且很适于低功率操作。但不幸的是,这种晶体的初始和长期精度一般为50PPM或更多。要想使这种振荡器的精度达到所需的精度规格,其花费也是不可接受的。
因此,对一个电子电表来说,仍有必要引入精确、低成本的晶体振荡器。
通过在一种电子电表中使用一些用于计量电能的方法和装置,就可以解决上述问题并使本发明的优点得到实现。这种电表包括:用于在第一精度内产生第一时钟信号的第一振荡器;用于在第二精度内产生第二时钟信号的第二振荡器;以及一处理器,它可根据时钟信号来测量时间并可周期性地对第一振荡器的精度进行补偿。第一时钟信号用于在电表上加载有电源时对时间进行测量,而第二时钟信号则被处理器用于在电力从电表中消失时对时间进行测量。第一振荡器的精度可根据一保存于存储器之中的补偿因子而得到周期性地补偿。在一个实例中,处理器含有一个计数器,它可响应第一时钟信号而从一第一值计数到一第二值。在这种结构中,处理器用第一补偿因子来替换第一值。该电表还可包括一计时器,处理器可响应该第一计时器而用第一补偿因子来替换第一值。处理器还利用一处理过程来对第二振荡器的精度进行补偿。该过程相对于第一振荡器补偿第二振荡器的精度。为了实现这个目的,该处理过程将计算出一个第二补偿因子。第二补偿因子是在电力从电表中消失又恢复之后当电源重新加载到电表上时而确定的,该第二补偿因子用来对第二振荡器在电力消失期间所测得的时间进行补偿。
通过以下的详细文字说明并参考以下附图,本发明的各个目的和优点对熟练人员来说将变得更为清晰易懂。以下附图中:
图1是具有本发明所述结构的一种电子电表的框图;
图2是图1所示A/D&DSP处理器的框图;
图3是在图1所示微处理器中执行的程序流程图;
图4是在图1所示微处理器中的计时器、软件计数器以及程序的框图;
图5是图3所示程序部分的更为详细的流程图。
图1中显示了一种用于计量电能的新颖电表,它一般用10来表示。应该注意,一开始该电表的组成使得它可以支持含有更高级计量功能的未来应用。
图中所示的电表10包括三个电阻分压网络12A、12B和12C;一第一处理器14~一ADC/DSP(模一数转换器/数字信号处理器)芯片(以下称DSP14);一第二处理器16~在本优选实例中为一个三菱模块M38207微控制器(以下称MCU16);三个电流传感器18A、18B和18C;一个12V开关电源20,它能够接收96-528V范围内的输入;一个5V线性电源22;一个非易失性电源24,它可在当5V电源22不工作时切换到一电池26;一个2.5V精度电压基准;一液晶显示器(LCD)30;一个32.768KHz的晶体振荡器32;一个12.28608 MHz的晶体振荡器34,它可向芯片14提供定时信号,该周期信号被除以2以向MCU16提供一6.14304MHz的时钟信号;16kByte的EEPROM35;一串行通信线36;一选择连接器38;以及一光通信端口40,它可用于读取电表。
6.14304MHz的时钟信号可被用作系统时钟。应该注意,其中还提供了一个代表线路频率的信号,如图1中的120Hz。在本优选实例中,该线路频率代表了A相电压的线路频率。除了DSP14、MCU16、LCD30、晶体振荡器32、晶体振荡器34和EEPROM35的确定情况以外,所有图1所示单元之间的相互关系都在美国专利No.5,555,508中得到了说明,本文引入了这些说明以作为参考。
在电源断电期间,MCU16切换至低功率操作模式,在此模式中,振荡器34或线路频率将停止作为系统时钟源,而振荡器32将作为替代系统时钟。该模式中,振荡器32被作为时基以用于确定电源断电的延续时间。
本优选实例中,振荡器34应选择相对稳定的,即,长期处于3个百万分率(PPM)之内。但是,它可实际频率可以稍微偏离标称值。振荡器32可选择随时间变化而较不稳定的,即,大约50PPM。尽管这种工作特性将随着长期操作而变差,但是众所周知,这种类型的晶体振荡器却可表现出好的短期稳定性。本发明的一个方面吸取了这种短期稳定性的优点,并且能够对一可接受的低成本晶体振荡器中出现的长期不稳定性进行补偿。
在电表10的优选实例中使用了两级振荡器补偿以用于产生长期的稳定性。首先,通过利用MCU16施加一个恒定的偏置校正因子,就可对振荡器34中出现的任何偏离厂商所列出的值进行校正。因此就可在电源打开时获得一个稳定的时基。通过在组装期间使该振荡器工作、对其输出进行一段时间周期的测量并将测量结果与它在相同时间周期内的标称值进行比较,就可确定此用于振荡器34的校正因子。该结果偏置值可被保存在存储器35中以供MCU16在其后使用,其过程将在后面说明。
然后,振荡器34经校正的输出被MCU16用来对振荡器32的输出进行实时监视。这种对振荡器32进行的实时监视过程是通过使MCU16根据振荡器34经校正输出的一部分来计算出一个校正因子而实现的。在电源断电期间,MCU16可利用电池26来保持对基于振荡器32的时间的跟踪。当电源恢复时,MCU16通过将测得的时间与上次确定的校正因子相乘,就可对断电时间进行修正。此断电时间被保存并被与电源断电开始的时间相加以用于确定当前时间。
在对补偿过程进行详细说明之前,首先要考虑电表10的综合操作。电表操作
可以估计到,电能既具有电压的特性也具有电流的特性。对于电表10,多个电压信号被提供给电阻分压器12A-12C,而且多个电流信号被导入一变流器(CT)并被分流。CT/分流组合体的输出18A-18C被用于确定电能。
首先,DSP14被接入以用于接收分压器12A-12C及分流器18A-18C所提供的电压和电流信号。如以下将要详细说明的那样,DSP14将电压和电流信号转换为电压和电流的数字信号、从电压和电流数字信号中确定出电能并产生一代表电能确定结果的电能信号。DSP14将总是产生供给瓦时(Whr Del)和接收瓦时(Whr Rec)信号,并且根据待测能量的类型,它将或者产生供给无功伏安时(VARhr Del)/接收无功伏安时(VARhr Rec)信号,或者产生供给伏安时(VAhr Del)/接收伏安时(VAhrRec)信号。在本优选实例中,导线42~48上的各个变化(从逻辑低至逻辑高或者相反)都代表了一个基数电能的测量。MCU16接收此能量信号并且产生一个代表该能量信号的说明信号。
对于电表10的这个优选实例来说,电流和电压是分别利用传统的变流器(CT)和电阻分压器而得到检测的。正确的相乘工作是在一个新的集成电路(即,DSP14)中得到实现的。尽管对DSP14将参考图2进行更为详细的说明,但DSP14实质上是一个带有多个内置模一数(A/D)转换器的可编程数字信号处理器(DSP)。这些转换器能够对三个输入通道同时进行各20位分辨率的采样,采样频率最高可达14,400Hz,然后集成DSP将对采样结果进行各种计算。
电表10可通过编程而作为一个计量使用时间(TOU)的仪表。可以看到,TOU仪表因其对电能收费的不同而正在逐渐流行起来。例如,高峰时间测得的电能,其收费可以与非高峰期间的电能收费不同。如以下将要更加详细说明的那样,DSP14可确定电能基数,而MCU16在TOU模式中将根据这些电能基数被确定的时间(即,季节和日期时间)而对这些能量基数进行审验。
大部分的标示和测试特性可通过电表10的面板(未示出)显示出来,或是通过合成橡胶开关输入而显示在LCD30上,或是通过光通信端口40。另外,其它连接(如中继输出或远程通信)也可通过选择连接器38在该电表上得以显示。用于电子线路的电源20是一个开关电源,它可提供低压线性电源22。这种解决方法允许电表10有较宽的操作电压范围。
在本发明的优选实例中,所谓的标准电表元件和电子寄存器全部位于一个印刷电路板(未示出)上以作为一个电子组件。该电子组件容纳有电源20、22、24和28,三相电阻分压器12A-12C,分流电阻18A-18C,振荡器34,DSP14,MCU16,EEPROM35,振荡器32,光学部分元件40,LCD30以及一个可选板接口38。配置和帐单数据保存在EEPROM35中,通过仅使用电池26并对EEPROM35中的配置数据进行重新编程,就可将该组件用于TOU测量应用之中。
可以看到,能量基数主要由DSP14通过将电压和电流相乘而计算出来。本优选实例中所用的特殊公式都列于表1之中。如图2所示,DSP14包括A/D转换器70和可编程DSP72。
本优选实例中,三个电压输入Va,Vb和Vc由A/D之一进行采样,而三个电流输入Ia,Ib和Ic则由一个第二A/D来采样。第三个A/D用于或者采集Va,Vb,Vx,或者采集Ib。之所以通过第三转换器对电压或电流输入进行采样,其原因在于,对特定的应用来说,它需要在同时对其它相位的电压和电流进行采样。例如,所谓的双元电表需要使B相电压与其它相位的电压混合起来以产生一个线电压。具有第三个A/D可以使这些量得到同时采样,因而提高了测量的精度。此举还可提高DSP14内的信噪比。
附加输入Vx作为一个备用通道输入。有一个应用就是利用该通道来进行温度补偿,其方法是通过向Vx输入提供一个代表温度的输入信号,然后再利用DSP对基准电压实行进一步的补偿。
DSP72是一个精简指令集(RISC)处理器,它可从经转换的电压和电流采样中计算出所需的电能量。图中所示的DSP72含有一个随机存取存储器(RAM)80,它可容纳256字节的数据。存储器80用于保存计算结果和子程序堆栈。图中还显示出了一个只读存储器(ROM)78,它可容纳2,304字节的数据。存储器78用于保存一般能量计算所共有的测量用子程序。图中还有另一个RAM存储器76,它可容纳256字节的数据。存储器76用于保存主线程序以及DSP72的专用子程序。
DSP72还包括乘法器82和一个累加器84,它们用于对电压和电流数字信号进行处理,并籍此产生电能信息。DSP72还含有一个算数减法单元86,它置于乘法器82和累加器84之间。
由上所述,可以看出,程序ROM(即,存储器78)是在氧化阶段被产生的。由于这个产生步骤在DSP14的制造过程中出现的相对较晚,因此对程序进行改变所作的工作也就最少。
各相位的标定常数和确定的电势线性化常数都保存在存储器80中。在电表10通电时,MCU16将EEPROM35中的程序依次下载到存储器76和80中。这种实例具有一个优点,即,它能够廉价地提供出各种电表形式并能在无需改动硬件的情况下进行标定。它还能够允许在将来进行额外的VAR或VA测量。这种操作所使用的公式包含在表1之中。另外,通过只对DSP14进行重新编程,就可以获得将来要进行的计算(尽管尚未定义出来)以及复杂的计量量。
DSP14还含有一个串行接口88,电源失效检测电路90以及当前电势输出A、B和C。一个12.28608MHz的晶体振荡器34为DSP14提供了一个时钟信号。DSP14可直接利用该信号来驱动DSP并可将其间接地用于A/D采样。该频率还可为时钟发生器92所利用,时钟发生器92可将振荡器34的输出(被输入至DSP14的XIN和XOUT上)除以2.0、将被除后的时钟信号缓存起来并向MCU16的CK端输出6.14304MHz的时钟信号。这个时钟输出被指定用于在电源电压降为2.0VDC的情况下工作。
电源失效检测电路90是一个比较器,它可将一个由12V电源电压20分出来的表示量与一精确基准进行比较。电源失效信号(PFAIL)将根据电源电压20的损失而被提出。在电源失效时,最好使DSP14复位。在这种情况下,输出管脚Whr、Whd等被强制变为逻辑低电压电平。另外,DSP14将进入一低功率模式以减少从电源22拉出的电流。在这个低功率模式中,比较器和振荡器的操作并不受影响,而DSP72则停止工作。
A相、B相和C相电势标示输出受DSP14的控制,它们是对电压出现的一般指示。尽管图中并未示出,但是应该注意,A、B和C输出是通过响应对各相位电压与一可编程门限进行的比较而产生的逻辑电平输出。一信号线(在图1和图2中标为120Hz)提供了一个与接收到的线性频率成正比的频率,即,一两倍于该线性频率的频率。这个频率可在一个替代结构中被MCU16用来保持基于线路频率保持时间。振荡器操作
现在来考虑一下晶体振荡器32和34的操作以及它们与MCU16之间的相互作用。这里假设不使用线性频率(一般为50或60Hz)来测量时间,而是利用振荡器34和32来进行这项工作。但是,在看过以下说明之后应该明白,无论是利用系统(电网)频率还是利用内部振荡器34来测量时间,振荡器补偿操作都将被执行。
在通电操作期间,MCU16将从DSP14接收到6.14304MHz的时钟输入(如上所述)。该信号被除以十六(16),其结果信号(383,940Hz)被用于驱动一个第一计时器TIMER X(图4中表示为132)。这个第一计时器用于在通电操作期间保持时间。当出现电源失效时,MCU16将转移至32.768KHz的晶体振荡器32以用于在低功率模式下对时间进行跟踪。为达到此目的,一个WIT指令将被执行,该指令将把MCU16置于一个只有32.768KHz振荡器和相关计时器能够进行操作的模式之中。在该模式中,计时器被设置每隔振荡器32的32,768个周期就“唤醒”MCU16以计录下一秒。
通过以下说明将可以明白,各种计时器的控制、各种计时器数值的获取以及振荡器补偿的计算都最好由MCU16中使用的软件来完成。本发明并不受该特定应用的限制。但是,出于说明的目的,它就被如此说明。首先考虑图3所示的流程图。
为了对振荡器的不稳定性进行补偿,MCU16首先在步骤100处初始化该确定功能。当MCU16在非易失性电源24的电压下降至约2.5V以下的情况中进入复位时,就有必要进行这种初始化,否则,MCU16将执行操作以从电源断电状态恢复正常,该操作发生于步骤102。
在初始化期间,MCU16将对某些参数进行初始化或设定,以便使振荡器补偿工作能够开始。通过在通电操作期间动态地计算一个校正因子(以下称CF32),然后用CF32在电源断电期间对根据振荡器32测量得到的断电延续时间进行修改,就可以校正振荡器32。为了达到该目的,CF32的数值应处于0到2.0之间。CF32在初始化期间被设置为1.0,该值是振荡器32被精确校正时的标称值。
如同将要参考图4和图5来进行的更为详细的说明那样,CF32的计算与由各种计时器所作的测量有关,这些计时器包括TIMER X(图4中用132代表)和TIMER Y(图4中用150代表)以及秒计数器NUMSEC32(图4中用154代表)。在本优选实例中,TIMER X和TIMER Y是MCU硬件计时器,它们都被设置了一个数值并能响应一时钟信号而从此数值倒计数至0。初始化期间,TIMER X和TIMER Y将被设置一个缺省值。本优选实例中,TIMER X被设定为2,999而TIMER Y被设定为32,768。这些数值的重要性将在下面参考图4进行说明。NUMSEC32则是一个软件计时器。
一般来说,MCU16将在一个主循环程序中进行操作,在此主循环程序中,电源被打开并且电表10测量和记录电能的消耗或产生。但是,电源会偶尔消失(例如在断电期间)。当电源恢复之后,如果MCU16消失了电池转接,则它将执行程序初始化并进入复位状态,其过程如上。否则,MCU16将执行操作以从电源断电状态恢复正常,该操作发生于步骤102。
可以从上述内容中回忆出,MCU16是通过对CF32进行计算来补偿振荡器32的稳定性缺陷。而这个计算是利用数值X0、X1、Y1和SAVSEC32来完成的,其中X0是TIMER X在当前间隔开始时的计数值,X1是TIMER X在当前间隔结束时的计数值,Y1是TIMER Y对当前间隔的计数值,而SAVSEC32则是当前间隔结束时的秒计数值,它是由NUMSEC32响应振荡器32的操作而计下的数值。所有执行操作都将参考图4而得到更为详细的说明。另外MCU16在判断出确定时间间隔之后,才进行振荡器34的补偿以及CF32的计算。这些间隔由一些起讨论目的的COMP12和COMP32(图4中分别用142和144表示)来确定。这些计时器从0开始计数到某个间隔。在电源恢复期间,COMP12和COMP32也被初始化。
如根据图4所作的说明那样,可以看出,COMP12计时器被设定为10秒而COMP32计时器被设定为20秒。但是,COMP12和COMP32计时器不能同时结束它们各自的间隔,因这种情况可能在所需值为它们两个的乘积时出现。因此,在恢复过程102期间,间隔值被设定为使COMP32间隔先开始,然后COMP12在5秒钟之后再开始。10秒钟之后,COMP12间隔结束并且振荡器34得到补偿。再过5秒钟,COMP32将结束并且CF32得到了计算。
在恢复过程102之后,MCU16进入一主循环程序,图3显示了该程序的三个步骤。应该明白,主循环程序含有许多项目,而不仅仅是图3中所示出的那些。但是,图3所示的步骤是实行振荡器补偿所必需的步骤。这三个步骤包括:在104上对电源失效中断作出响应,在106上对可执行时钟中断作出响应,以及在108上确定执行一个新CF32的计算。
104上电源失效中断的确定说明了电源失效已被检测出来并且该电源将要丢失。这种中断是根据对DSP14的PFAIL输出上的一个适当信号的检测而产生的。在这种环境下,MCU16将开始步骤110以处理该电源失效中断并启动低功率模式。可以回忆出,在低功率模式期间,MCU16将根据振荡器32而进入“睡眠”或“唤醒”状态。如图4所示,MCU16通过TIMER Y在112计下一秒钟并在114确定是否电源已经恢复。如果电源仍未恢复,MCU16将返回至112并在TIMER Y达到适当计数值时再计下另一秒钟。当电源恢复时,MCU16将在116开始全功率操作。在118上,电源断电期间所计下秒钟数将被修改,即,与电源丢失之前所计算出的CF32相乘。这个经补偿后的数值,除了被作为断电延续而记录下来以外,还在120处被与上次已知的日期和时间相加,从而用于建立当前的日期和时间。然后MCU16将返回至102的恢复操作上。
如果在104上没有电源失效中断被提出,MCU16将在106上接着确定是否有可执行时钟中断请求出现。如果出现这种请求,则MCU16将在122上对该中断进行处理;可执行时钟中断操作包括确定是否对振荡器34进行补偿,监视振荡器32并对通电秒数进行计数。尽管在此只对这些操作进行一般说明,但是它们在图5中得到了更为具体的说明。如将要在图4中说明的那样,可执行时钟中断会在当TIMER X计数到一秒钟的1/128(即每隔7.8125ms)时出现。
在122上,MCU16将确定补偿振荡器34所需的校正因子(以下称CF12)是否被加载入TIMER X。TIMER X最好是一个倒计时的计时器,它在一个10秒钟的周期上将以一个指定的缺省再加载值(以下称DEFAULT12,图4中用134表示)向下计数1,279次至0,该缺省再加载值一般代表从振荡器34产生的时钟信号的1/128秒并因此具有一个383,940Hz的频率(DEFAULT12最好为2,999)。TIMER X的第1280次操作将使得该计时器从制造期间就已确定的补偿值(即,CF12,图4中用136表示)倒计数至0。在本优选实例中,CF12是通过对振荡器34的实际频率进行测量并利用以下公式而确定的:
CF12=((测得的频率-6,143,040Hz)/1.6Hz)+2999+680
结果取最接近的整数
如果MCU16在122上确定TIMER X刚好从CF12倒计数至0,则它将给TIME X再加载DEFAULT12,即,2999值。在本优选实例中,如果保存有CF12的存储区出现错误,不论是什么原因,MCU16都将使用一个标称补偿值(最好为2999+680)。如果MCU16确定出TIMER X刚刚从CF12开始计数,则它也将对说明振荡器34的补偿刚刚开始的标志进行复位。
在122上,MCU16还保持有TIMER Y的秒计数。可以回忆出,TIMER Y是由以32.768KHz工作的振荡器32来驱动的,并且TIMER Y最好从数值32,768(以下称COUNT32,图4中用152代表)开始倒计数至0。因此,如果振荡器32是稳定的,则每次当TIMER Y到达0时,就代表经过了1秒钟。TIMER Y最好通过一个再加载寄存器而自动加载COUNT32,每次当TIMER Y到达0时,都有一个标志被设定为可以说明TIMER Y已到达0。因此,在122上,MCU16将检查TIMER Y的再加载标志是否被设定。如果是,则MCU16将在NUMSEC32(振荡器32基于秒的计数)中计下1秒并将该再加载标志复位。
在122上,还需要对由TIMER X确定的各个秒进行计数。可以回忆出,TIMER X是以约1/128秒的时间变化量倒计数至0的。因此,需要有一个计数器(以下称SECCNTR,图4中用138表示),它在每次当TIMER X到达0时开始从128倒计数计数。当SECCNTR到达0时,它将提供一个信号以说明已经经过了1秒钟的时间(用于通电时的时间保持)。可执行时钟中断(图4中用140表示)被该计数器驱动。当确定出已经经过1秒钟时,将有多个界面程序(boundary routine)被执行。
首先将有一个检查工作被执行以确定是否已经到达对振荡器34进行校正的时间。为达到该目的,COMP12将在由SECCNTR表示的各个秒上从0开始计数至10秒钟。当COMP12到达10秒时,MCU16将使得CF12被加载入TIMER X。然后COMP12将再次开始从0计数至10秒。
另一个界面程序是确定是否已经达到对振荡器32进行补偿的时间,即,计算一个新的CF32。与确定COMP12的时间周期是否已经经过的过程相类似,MCU16也将利用COMP32计时器,该计时器在每次当SECCNTR给出一个说明已经经过1秒钟的指示后都将从0开始向上计数20秒。一旦MCU16确定出已经经过20秒,它将在124上计算一个新的CF32。然后COMP32将再次开始从0向上计数至20秒。
在对122和124上执行的处理进行说明之前,要计算一个新的CF32,就需要考虑如图4所示的数据流。在图4中,6.14304MHz的时钟信号被从DSP14接收到,并且被除法器130除以16。其383,940Hz的结果时钟信号被提供给TIMER X(132)。TIMER X在一个10秒钟的间隔内从一缺省值DEFAULT12(134)开始倒计数计数1,279次至0,该缺省值是从再加载寄存器133中调出的。在第1,280次上,寄存器133将被加载入补偿值CF12(136)。
当计时器132到达0时,将有一个时钟信号被提供给SECCNTR(138)以用于确定已经经过了1秒钟。为了作出这个判断,SECCNTR138将被加载入一个计数值,最好是128。SECCNTR138将倒计数至0。当SECCNTR138到达0时,将提供一个时钟信号。该时钟信号约为1Hz,它用于说明经过1秒钟的时间。SECCNTR138发出的时钟信号被提供给计时器COMP12(142)和COMP32(144)。COMP12从0开始向上计数10秒钟。当COMP12到达10秒钟时,将有一个标志被设定以用于说明又到了对振荡器34进行补偿的时间。COMP32(144)从0开始向上计数20秒钟。当COMP32到达20秒钟时,将有一个标志被设定以用于说明又到了就该为振荡器32重新计算新的补偿值的时间。
在TIMER X(132)进行计数期间,由振荡器32产生的时钟信号将被提供给TIMER Y(150)。TIMER Y通过加载寄存器151加载入一个缺省值COUNT32(152)。TIMER Y(150)响应从振荡器32发出的信号而从该加载缺省值倒计数至0。每次当TIMER Y(150)到达0时,它都会向计数器NUMSEC32(154)提供一个时钟信号(理想为1秒)。NUMSEC32(154)则对TIMER Y(150)到达0的次数进行计数。
通过图5所示的流程图,也可以明白MCU16在图3中122上的操作。图5是图3中122的详细流程图。在160上将确定是否有一个12MHz的补偿刚刚已经发生。如果这个补偿已经发生,则TIMER X将在162上重新加载一个缺省值。在164上将确定TIMER Y是否刚被重新加载。如果TIMER Y是刚被重新加载,则在166上NUMSEC32将被加1。如果TIMER Y未被重新加载或者一旦NUMSEC32已被加1,则在168上SECCNTR将被减1。
在170上将确定SECCNTR中的计数是否为0。如果不是,则说明尚未经过一整秒的时间。因此,就还未到执行界面程序的时间。如果SECCNTR中的计数等于0,则SECCNTR将在172上被复位为数值128。在174上提供出了一个用于说明已经经过1秒钟的信号。COMP12将在176被加1,并且在178上将确定COMP12中的计数是否等于10。如果COMP12中的计数值等于10,则COMP12将在180上被复位为0。然后TIMER X将在182上被重新加载以补偿因子CF12,并且在184上将给出一个信号以说明此12MHz的补偿正在进行。一旦此12MHz的补偿信号被给出或者如果在178上确定出COMP12中的计数不等于10秒钟,则在186上COMP12中的计数将被加1。
在188上将确定COMP32是否等于20。如果COMP32不等于20,则说明还不到计算CF32的时间并且程序将结束。如果确定了COMP32等于20,则COMP32将在190上被复位为0。在200上,X0项被赋予上次确定的X1计数值。可以回忆出,X0代表了TIMER X在20秒间隔开始处的计数值,它与前一个间隔结尾处的计数值相同。因此,X0与上次确定的X1相等。然后程序将在202上等待TIMER Y的下一个信号。
在204上,X1被赋予TIMER X的当前值。该值将是TIMER X在当前间隔结尾处的计数。在206上,Y1被赋予存在于TIMER Y之中的计数。在208上还确定了TIMER Y是否刚被重新加载。如果TIMER Y是刚被重新加载,则NUMSEC32中的计数将被加1。在209上SAVSEC32被设置为等于NUMSEC32的当前值,然后在211上NUMSEC32将被置为0。在212上将产生一个信号以用于执行32KHz的校正因子计算和过滤程序。
现在来考虑从图5中190开始的32KHz振荡器补偿过程。为了计算一个新的CF32,MCU16必须首先收集确定的信息,即,进行“快照”或者获取某个计时器和计数器的数值。为了达到此目的,MCU16在190上将COMP32设置为0。然后MCU16通过先前的CF32计算而将X0项设置为等于TIMER X的X1项(图5中的200)。应该注意,TIMER X中的计数被用于CF32计算,其目的是为了计算出时间中的小偏移量,该偏移量将在MCU16通过其程序流到达CF32计算程序进行循环时而产生。
在202上,MCU16接着确定TIMER Y将在什么时间产生其下一个“信号”或计数变化(约每隔30.5μs出现一次)。当MCU16作出确定后,它将读出此存在于TIMER X之中的计数并将此计数保存或存储在X1中。然后MCU16将读出TIMER Y中的计数并将其保存在Y1中。接下来,MCU16将确定它所等待的TIMER Y的信号是否为可导致TIMER Y被重新加载的信号。此举是通过对TIMER Y的再加载标志是否被设定进行检查而完成的。如果是,则MCU16将对NUMSEC32(154)中的计数加1。然后MCU16将把NUMSEC32中的计数保存进SAVSEC32并将NUMSEC32置为0。这样,计算CF32所需的四个变量就被分别保存进了X0、X1、Y1和SAVSEC32。然后MCU16将设置一个标志以说明对一个新CF32的计算已准备好。等待TIMER Y的下一个信号可将误差减小至最低,否则误差会被引入补偿过程。由于TIMER Y的下一个信号有可能是一个导致TIMER Y进行重新加载的信号,所以TIMER Y重新加载标志将被检查。还需要注意的是,该过程必须是一个连续进行的过程,这样才能将先前计算出的X1项作为下一次计算中的X0项。
现在考虑一下图3中122上进行的处理。MCU16将读出秒计数器154中的计数。此处,MCU16计算出校正因子CF32以对振荡器32中的不精确性进行补偿。利用经校正的12MHz振荡器作为标准,MCU16就可计下在一个20秒钟的间隔内所出现的振荡器信号数目。该数值与标准值之比就是校正因子。在本优选实例中,校正因子是通过一个过滤功能来运行的,该过滤功能能够进行较为长期的确定。这种长期确定倾向于滤除校正因子中的任何突变。
在本优选实例中,用于计算32KHz校正因子的公式如下: 其中:
CF32=本叠代校正因子
X0=TIMER X的初始采样
X1=TIMER X的结尾采样
y=从32768减去TIMER Y的结尾采样,即,32768-Y1。因为在本优选实例中TIMER Y是一个倒计数计数器,所以要进行相减。
由于方程(1)可在分子和分母中产生很大的数值,所以可使用以下公式来保存结果:
在本优选实例中,校正因子是通过首先确定y=32768-Y1、然后再利用以下公式而计算出来的:
CF32=(655360/((SAVSEC32×32768)+y))
+((X0-X1)/(((y/32,768)+SAVSEC32)×383,940))
最好利用一种指数过滤滤波来使用该叠代校正因子。一种这样的过滤滤波公式如下:
F1=CF32×(1/M)+F0×((M-1)/M)
其中:
F1=新的滤波校正因子
F0=旧的滤波校正因子
CF32=当前叠代校正因子
M=滤波常数
在本优选实例中,M被选择为32。它提供了适当的时间常数并使得该方程在附加项和位偏移的情况下能够被容易地使用。
表1
计量公式
Watt公式
注:下标指的是输入的相位。子下标指的是进行采样的A/D周期。-7应用的Va实际上是一条中性线。
VA公式
RMS测量是在一个线路周期上进行的,而且它最好从各电压的零交叉点开始。
VAR公式
其中下标与Watts和VA的I个项有关,并且每个周期中执行的计算如下:
上述公式采用了以下定义:
-2代表3线三角形应用中的2元素;
-3代表4线星型应用中的3元素;
-8代表4线星型应用中的21/2元素;
-5代表3线三角形应用中的2元素;
-7代表4线三角型应用中的21/2元素;
尽管对本发明的说明是参考特定实例进行的,但熟练人员应该明白,任何对本发明的修改和变换都不会脱离本发明的原理,这些原理已在上述内容中得到了说明并且将在以下的权利要求中被专门提出。