一种利用FPGA实现多相电源相位及功率因数实时检测的IP核的制作方法

文档序号:22925705发布日期:2020-11-13 16:20阅读:162来源:国知局
一种利用FPGA实现多相电源相位及功率因数实时检测的IP核的制作方法

本发明涉及电子技术领域,尤其涉及一种利用fpga实现多相电源相位及功率因数实时检测的ip核。



背景技术:

随着现在自动化控制技术、计算机技术、半导体技术的快速发展,电力电子技术迎来了新的发展机遇,电力电子设备越来越与我们的生活息息相关,大到国家电网的直流特高压输电,小到我们天天使用的手机充电头。为了衡量我们电力电子设备的优劣,就需要对电力电子设备的一系列的电能质量参数进行一系列的测量,其中功率因数是众多电能质量参数中的一个尤为重要的参数,比如在光伏发电系统中就需要对并网逆变器的输出功率因数进行实时检测,以便对光伏发电系统发出的电能进行实时调节,又比如在电网中经常用到的静止无功补偿装置(svg)也需要对电网的功率因数进行实时检测,从而控制我们的静止无功补偿装置进行无功补偿使得电网稳定运行。因此检测功率因数在电力电子领域中拥有广泛而重要的应用,关于如何准确的检测功率因数具有重要的研究价值。

目前大多数测量交流功率因数的做法是将adc采样后的电压信号和电流信号通过利用运放构成整形电路,把正弦信号转换成ttl方波信号,再经触发器延迟几个时钟周期产生一个新的信号,再将原来的信号和新的信号经过异或门处理后,产生一系列的触发脉冲,将这一系列触发脉冲送入微处理器的引脚,微处理器通过定时器计算电压触发脉冲与电流触发脉冲之间的时间,再计算出功率因数,但是这类方法往往采用大量模拟电路,不但设计复杂,而且抗干扰能力有限,同时在这个功率因数检测过程中有很多的环节往往不可控,所以这种方案能达到的精度及其有限,并且这种方法只能测量0°~180°的相位差,不能判断该电源发出无功功率为感性无功还是容性无功,因此对于如何准确测量功率因数还需要进行进一步的研究。



技术实现要素:

本发明的目的就在于为了解决上述问题而提供一种利用fpga实现多相电源相位及功率因数实时检测的ip核的设计方案,实现对测量功率因数和多相电源相位任意精度的检测,并且测量范围达到0°~360°。该方案的主要思路是首先利用等精度测量方法测出被测多相电源输出电压的周期包含的时钟个数,然后通过波形变换对多相电源输出电压与电流之间的相位差进行测量,利用niosiicpu计算得出准确的相位差数据,该方案的精度可以通过改变ip核系统时钟实现对多相电源相位以及功率因数精度任意精度控制。

本发明通过以下技术方案来实现上述目的:

本发明包括以下步骤:

(1)首先准确测出被测多相电源的电压周期,也能够测量电流,多相电源的电压和电流周期相同;

(2)测量多相电源输出电压与电流之间的相位差;

(3)将测得的周期数据和相位差数据通过avalon读写总线送入niosiicpu进行处理,从而计算出多相电源的相位差和功率因数。

所述步骤(1)检测交流电源输出电压的周期中硬件描述语言实现等精度测频的具体步骤如下:

a:进行波形变换,要进行等精度测频,必须先要将待测信号ugf变换成方波信号ugr,然后通过测量方波信号ugr的周期便得到待测信号ugf的周期,其硬件描述语言为:assignugr=~ugf[adc_clk-1],其中ugf为电信号的采样值,其位宽为adc_clk,ugr的位宽为1;

b:利用always语句在每个时钟周期clk上升沿或下降沿将方波信号ugr延迟一个时钟周期,生成ugr_delay信号;

c:定义一个计数器cnt2_t来测量方波信号ugr的周期,当ugr为高电平并且ugr_delay为低电平时,使计数器cnt2_t清零,当不满足上述条件时使计数器cnt2_t开始自加1,当下一个ugr为高电平并且ugr_delay为低电平来临时使得计数器cnt2_t重新清零;当ugr为低电平并且ugr_delay为高电平,这时计数器cnt2_t计的数即为方波信号ugr的半个周期,由于计数器cnt2_t数值一直在变化,所以这时将cnt2_t的值赋值给中间寄存器t_clk,这个时候寄存器t_clk寄存器的数值为方波信号ugr的半个周期,所以再通过assign语句将寄存器t_clk的值的两倍赋给寄存器reg_t_clk,这时reg_t_clk寄存的值并不是待检测信号实际的周期,需要进行进一步的转换,假设reg_t_clk寄存的值为ns,时钟信号clk的周期为t,则方波信号ugr的周期ts为:

ts=ns*t

通过上述公式可以看出方波信号ugr的周期精度与ip核的时钟信号clk的频率有关,当clk的频率越大则方波信号ugr的周期精度越高,通过改变clk的频率便可任意的改变测量ugr的周期精度,因此方波信号ugr的周期就是实际信号ugf的周期。

所述步骤(2)中检测交流电源电压与电流之间的相位差具体包括以下步骤:

a:将送入的iof和ugf信号整成方波信号ior和ugr,如assignior=~iof[adc_clk-1],iof和ugf分别代表两路电信号的采样序列值,为adc_clk位的有符号值;

b:利用always语句在每个clk上升沿或下降沿将方波信号ior和ugr各延迟一个时钟周期产生ior_delay和ugr_delay信号;

c:检测电流与电压之间的相位差,首先定义一个相位差计数器cnt3_clk_fs,当ior为高电平ior_delay为低电平时,令该计数器值等于0,在不满足此条件时,使计数器cnt3_clk_fs在每个时钟信号上升沿做加1计数,当电压方波ugr为高电平ugr_delay为低电平时,计数器cnt3_clk_fs所计的数值即为ugr滞后ior的相位差,此时求出的并不是最准确的相位差,必须将相位差计数器cnt3_clk_fs在这时所计的数加1之后才是准确的相位差数据,由于相位差计数器cnt3_clk_fs是在不断变化的所以需要再定义一个相位差寄存器d,在ugr==1并且ugr_delay==0这个时候,将相位差计数器cnt3_clk_fs的值加1后赋给相位差寄存器d,即d=cnt3_clk_fs+1,这时相位差寄存器所寄存的值即为ugr滞后ior的相位差,同时为了实现相位差计数器cnt3_clk_fs持续的测量相位差,需要在电流方波ior为高电平ior_delay为低电平这一时刻将相位差计数器cnt3_clk_fs清零,从而使得下一个测量开始,设相位差检测逻辑已经将ior与ugr之间的相位差已经检测出来,此时检测出来的相位也是交流电源输出电流iof与电压ugf之间的相位差,设相位差寄存器d中储存的相位差数据为n,前面已经得到寄存器reg_t_clk的ugf的周期数据为ns则iof与ugf之间的相位差p为:

由上式可以看出相位差p的检测精度与时钟信号clk的频率有关,时钟频率越高,上式中的ns值越大,相位差的精度1/ns越高,只需要改变输入ip核时钟信号频率即可任意改变检测相位差p的精度,由此便可实现对交流电源功率因数任意精度的检测,同时在相位差检测逻辑中,检测的是电流iof滞后ugf的度数,即当相位差p小于180°的时候交流电源发出或吸收感性无功,即电流相位滞后电压相位,当相位差p大于180°的时候交流电源发出或吸收容性无功,即电流相位超前电压相位。

所述步骤(3)中,avalon总线接口具体为:在ip核设计过程中都需要给其添加avalon总线接口,通过该接口可以使得cpu处理器能够从寄存器中读取数据,为了计算交流电源的相位差和功率因数需要使得cpu处理器中上述的两个检测过程中的寄存器reg_t_clk和相位差寄存器d中读取关键数据,从而使得cpu处理器计算出交流电源的相位差和功率因数,同时定义起始控制寄存器start_reg,通过cpu处理器向start_reg中写入起始命令字,用以控制ip核的启动与停止。

本发明的有益效果在于:

本发明是一种利用fpga实现多相电源相位及功率因数实时检测的ip核,与现有技术相比,本发明解决了传统检测方法中检测方法复杂、检测精度不高并且检测精度不可控等问题,通过硬件描述语言实现对两路信号之间的相位差实现高精度的检测,并且相位差检测范围达到0°~360°;本发明将检测相位差和功率因数的方法设计成为ip核,方便使用,在对多路电源进行相位差和功率因数检测时只需将ip核多次添加即可;能对信号实现高精度的周期检测,并且通过改变ip核的系统时钟便可实现对检测精度任意控制,具有推广应用的价值。

附图说明

图1是本发明的ip核处理过程图;

图2是本发明的测量方波信号ugr的周期时序图;

图3是本发明的交流电源相位差检测时序图;

图4是本发明的ip核内部详细的结构和数据处理过程图。

具体实施方式

下面结合附图对本发明作进一步说明:

如何实现任意精度测量多相电源的相位以及功率因数,实现该功能便是设计本专利提出的ip核的目的,该ip核设计过程包含如下过程:

(1)首先应当准确测出被测多相电源的电压周期(测量电流也可,多相电源的电压和电流周期一般相同);

(2)测量多相电源输出电压与电流之间的相位差;

(3)将测得的待测信号周期数据和相位差数据通过avalon读写总线送入niosiicpu进行处理,从而计算出多相电源的相位差和功率因数。为了更好的解释该过程,其ip核在处理过程如图1所示;

首先利用adc模块对多相电源的电流信号和电压信号采样,得到的电流序列iof和电压序列ugf,将ugf(或者iof,在后面都假设检测电压频率)送入周期检测模块中检测出ugf的周期,将得到的周期数据利用ip核中的avalon读写总线送入niosiicpu,同时将iof和ugf送入相位差检测模块,将检测到的相位差也通过avalon读写总线送入niosiicpu中,niosiicpu利用ip核送入的周期数据和相位差数据计算出多相电源的功率因数

检测交流电源输出电压的周期:

检测交流电源电压周期的目的是为了计算功率因数,因为检测出交流电源输出电压与电流之间的相位差还需要通过信号周期转换实际的相位差数据,因此必须知道被测电源的电压周期才能计算出交流电源的功率因数。

硬件描述语言实现等精度测频的具体步骤如下:

1、进行波形变换,要进行等精度测频,必须先要将待测信号ugf变换成方波信号ugr,然后通过测量方波信号ugr的周期便得到待测信号ugf的周期,其硬件描述语言为:assignugr=~ugf[adc_clk-1],其中ugf为电信号的采样值,其位宽为adc_clk,ugr的位宽为1。

2、利用always语句在每个clk上升沿(或下降沿)将方波信号ugr延迟一个时钟周期,产生ugr_delay信号,具体硬件描述语言为(程序组1):

3、定义一个计数器cnt2_t来测量方波信号ugr的周期,如时序图图2所示,当ugr为高电平并且ugr_delay为低电平时,使计数器cnt2_t清零,当不满足上述条件时使计数器cnt2_t开始自加1,当下一个ugr为高电平并且ugr_delay为低电平来临时使得计数器cnt2_t重新清零;从图2可以看出当ugr为低电平并且ugr_delay为高电平,这时计数器cnt2_t计的数即为方波信号ugr的半个周期,由于计数器cnt2_t数值一直在变化,所以这时将cnt2_t的值赋值给中间寄存器t_clk,这个时候寄存器t_clk寄存器的数值为方波信号ugr的半个周期,所以再通过assign语句将寄存器t_clk的值的两倍赋给寄存器reg_t_clk,这时reg_t_clk寄存的值并不是待测信号实际的周期,需要进行进一步的转换,假设reg_t_clk寄存的值为ns,时钟信号clk的周期为t,则方波信号ugr的周期ts为:

ts=ns*t

通过上述公式可以看出方波信号ugr的周期精度与ip核的时钟信号clk的频率有关,当clk的频率越大则方波信号ugr的周期精度越高,通过改变clk的频率便可任意的改变测量ugr的周期精度,不难理解方波信号ugr的周期就是实际信号ugf的周期。具体硬件描述语言如下(程序组2):

检测交流电源电压与电流之间的相位差:

1、将送入的iof和ugf信号整成方波信号ior和ugr,比如assignior=~iof[adc_clk-1],其中iof和ugf分别代表两路电信号的采样序列值,为adc_clk位的有符号值;

2、利用always语句在每个clk上升沿(或下降沿)将方波信号ior和ugr各延迟一个时钟周期产生ior_delay和ugr_delay信号,具体硬件描述语言为(程序组4):

3、检测电流与电压之间的相位差,首先定义一个相位差计数器cnt3_clk_fs,由相位差检测时序图图3可以看出,在当不满足电流方波ior为高电平ior_delay为低电平时,使得相位差计数器cnt3_clk_fs在每个时钟信号上升沿开始计数,当电压方波ugr为高电平ugr_delay为低电平时这时相位差计数器cnt3_clk_fs所计的时钟信号上升沿个数即为ior滞后ugr的相位差,当然这求出的并不是最准确的相位差,必须将相位差计数器cnt3_clk_fs在这时所计的数加1之后才是准确的相位差数据,由于相位差计数器cnt3_clk_fs是在不断变化的所以需要再定义一个相位差寄存器d,在ugr==1并且ugr_delay==0这个时候,将相位差计数器cnt3_clk_fs的值加1后赋给相位差寄存器d,即d=cnt3_clk_fs+1,这时相位差寄存器所寄存的值即为ior滞后ugr的相位差,同时为了实现相位差计数器cnt3_clk_fs持续的测量相位差,所以在电流方波ior为高电平ior_delay为低电平这一时刻将相位差计数器cnt3_clk_fs清零,从而使得下一个测量开始。假设相位差检测逻辑已经将ior与ugr之间的相位差已经检测出来,当然这时检测出来的相位也是交流电源输出电流iof与电压ugf之间的相位差,假设相位差寄存器d中储存的相位差数据为n,前面已经得到寄存器reg_t_clk的ugf的周期数据为ns,则iof与ugf之间的相位差p为:

由上式可以看出相位差p的检测精度与时钟信号clk的频率有关,时钟频率越高,上式中的ns值越大,相位差的精度1/ns越高,因此我们只需要改变输入ip核时钟信号频率即可任意改变检测相位差p的精度,由此便可实现对交流电源功率因数任意精度的检测,同时在相位差检测逻辑中,检测的是电流iof滞后ugf的度数,即当相位差p小于180°的时候交流电源发出或吸收感性无功(即电流相位滞后电压相位),当相位差p大于180°的时候交流电源发出或吸收容性无功(即电流相位超前电压相位)。其时序图如图3所示,具体的硬件描述语言如下所示(程序组5)

4、avalon总线接口设计

在ip核设计过程中都需要给其添加avalon总线接口,通过该接口可以使得cpu处理器能够从寄存器中读取数据,为了计算交流电源的相位差和功率因数需要使得cpu处理器中上述的两个检测过程中的寄存器reg_t_clk和相位差寄存器d中读取关键数据,从而使得cpu处理器计算出交流电源的相位差和功率因数。同时定义起始控制寄存器start_reg,通过cpu处理器向start_reg中写入起始命令字,用以控制ip核的启动与停止。则ip核的读写控制逻辑的具体实现过程如下(程序组6):

系统设定start_reg寄存器的地址为0,使用c指令也可以使用iowr_32direct(ip_base,0,control)向start_reg寄存器中写入控制命令,其中ip_base代表自定义死区生成ip核在niosiicpu中的基地址,control代表向start_reg寄存器中写入的控制命令字,0代表控制命令字相对于ip_base偏移地址。寄存器d、reg_t_clk都是niosiicpu需要从中读数据,因此需要使用c指令iord_32direct(ip_base,n),其中n为寄存器相对于ip_base偏移地址,寄存器d的偏移地址为4,寄存器reg_t_clk的偏移地址为8。

通过上述介绍已经对ip核设计整个流程有了一个详细的了解,下面对ip核内部详细的数据处理过程进行一个简单的介绍,ip核内部详细的结构和数据处理过程如图4所示;

首先adc模块对多相电源输出电流和电压采样,将采样得到的电压序列和电流序列分别从ugf和iof输入,通过整成方波将ugf和iof分别变换成方波ugr和ior,将ugr送入周期检测模块,同时将ugr和ior延迟一个时钟周期产生ugr_delay和ior_delay,再将ugr_delay和ior_delay送入相位差检测模块。数据经相位差检测模块和频率检测模块处理后,相位差检测模块将数据送给寄存器d,频率检测模块将数据送入寄存器reg_t_clk中,通过avalon读写逻辑通过avalon接口送给cpu处理。图中引脚clk为ip核的系统时钟输入端口,引脚reset用来给系统的寄存器进行复位操作。

使用说明:假设我们向niosⅱ处理器系统中添加的自定义直接电流控制ip核的名字叫qbz,那么fpga的开发环境niosⅱsoftwarebuildtoolsforeclipse中qbz_base就是该ip核的基地址,该基地址的名称由ip核名称的大写再加上“_base”的后缀构成。假设我们想要测量交流电源的功率因数,就通过以下c语言就可以实现。

iowr_32direct(qbz_base,0,1);//向start_reg寄存器中写入1,启动ip核工作

d=iord_32direct(qbz_base,4);//读取相位差d

reg_t_clk=iord_32direct(qbz_base,8);//读取交流电源周期

cos_x=cos(d/reg_t_clk*3.1415926)//求出功率因数。

以上显示和描述了本发明的基本原理和主要特征及本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1