一种基于FPGA幅度偏置可调的波形发生电路及方法,广泛用于电子电路、自动控制和科学实验等领域。电路由FPGA、DAC、滤波电路、程控放大电路构成。方法包括确定波形数据宽度和波形数据范围。上位机根据设定的波形发生参数产生一个周期的波形数据和对应的控制字。上位机将波形数据传送给FPGA,FPGA将得到的波形数据存储到波形RAM中。FPGA根据得到的频率控制字和相位控制字利用DDS和波形存储RAM产生波形。DDS产生的波形经过幅度调节模块进行幅度控制。设定偏置,将幅度调整后的波形数字量经过加减法器,进行偏置调整。根据实际测试,确定由于频率效应引起的波形幅度的损失,确定波形幅度和频率的关系,从而据此关系控制程控放大进行波形幅度补偿,确保幅度的精确性。
1.应用基于FPGA幅度偏置可调的波形发生电路的方法,该电路由FPGA、DAC、滤波电路和程控放大电路组成,其特征在于包括以下步骤:1)DAC的选择确定了波形数据宽度,如选择波形数据宽度为N;2)确定波形数据范围;根据步骤1)设定的波形数据宽度为N,则最大存储波形数据范围应为0-2N;设DAC的负载电阻为R
0,上下接地电阻分别为R
1、R
2,输出最大电流为I,负载电阻上电压峰峰值为U
PP,负载电阻上电流峰峰值为I
PP,则U
PP=R
0*I
PP;现需要计算I
PP与I
P的关系;根据叠加定理:I
P+I
N=I;其中:I
P:同相输入电流;I
N:反相输入电流;I
P单独作用,设向上电流为I
P1,向下电流为I
P2,则:I
P=I
P1+I
P2 I P 1 = R 0 + R 2 R 0 + R 1 + R 2 I p ]]>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="406"/>
I P 2 = R 1 R 0 + R 1 + R 2 I p ]]>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="413"/>I
N单独作用,设向上电流为I
N1,向下电流为I
N2,则:I
N=I
N1+I
N2 I N 1 = R 2 R 0 + R 1 + R 2 I N ]]>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="414"/>
I N 2 = R 0 + R 1 R 0 + R 1 + R 2 I N ]]>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="422"/>则差分后电流输出为:
I P 2 - I N 1 = R 1 R 0 + R 1 + R 2 I P - R 2 R 0 + R 1 + R 2 I N = R 1 R 0 + R 1 + R 2 I P - R 2 R 0 + R 1 + R 2 ( I - I P ) = R 1 + R 2 R 0 + R 1 + R 2 I P - R 2 R 0 + R 1 + R 2 I ]]>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/>设差分后电流输出为I
out,则存在下述关系:
m a x [ I o u t ] = R 1 + R 2 R 0 + R 1 + R 2 I P m a x - R 2 R 0 + R 1 + R 2 I ]]>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/>
m i n [ I o u t ] = R 1 + R 2 R 0 + R 1 + R 2 I P m i n - R 2 R 0 + R 1 + R 2 I ]]>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/>
I P P = max [ I o u t ] - min [ I o u t ] = R 1 + R 2 R 0 + R 1 + R 2 I P max - R 1 + R 2 R 0 + R 1 + R 2 I P min = R 1 + R 2 R 0 + R 1 + R 2 ( I P max - I P min ) ...... ( 1 ) ]]>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/>其中:I
Pmax指I
P的最大值;I
Pmin指I
P的最小值;由于没有负电压,在无直流偏置输出时得出如下等式:
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/> 由等式(1)、(2)得到如下结果:
I P m i n = R 0 + R 1 + R 2 2 ( R 0 + R 1 ) I P P + R 2 R 1 + R 2 I ]]>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="685"/>
I P m a x = 3 ( R 0 + R 1 + R 2 ) 2 ( R 0 + R 1 ) I P P + R 2 R 1 + R 2 I ]]>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/>由上述等式得到,在无直流偏置时输出电流范围
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/>而根据所选择的DAC,输出最大电流为I,且存储的波形为最大幅度的波形数据,故最终确定波形存储器存储的波形数字量为
( R 0 + R 1 + R 2 2 ( R 0 + R 1 ) I P P + R 2 R 1 + R 2 I ) I * 2 16 ~ ( 3 ( R 0 + R 1 + R 2 ) 2 ( R 0 + R 1 ) I P P + R 2 R 1 + R 2 I ) I * 2 16 ; ]]>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/>3)上位机根据设定的波形发生参数产生一个周期的上述范围的波形数据和对应的控制字,波形控制字包括频率控制字、相位控制字和幅度控制字;4)上位机通过PCI-e总线将一个周期的波形数据传送给FPGA,FPGA将得到的波形数据存储到波形存储RAM中;5)FPGA根据得到的频率控制字和相位控制字利用DDS和波形存储RAM产生波形;6)DDS产生的波形数据经过幅度调节模块进行幅度控制;幅度调节模块主要包括乘法器和除法器;DDS产生的波形数据首先经过乘法器进行幅度放大,然后经过除法器进行幅度衰减;乘法系数和除法系数共同决定最终波形输出幅度;7)设定偏置,将幅度调整后的波形数字量经过加减法器,进行偏置调整;8)根据实际测试,确定由于频率效应引起的波形幅度的损失,确定波形幅度和频率的关系,从而根据此关系控制程控放大电路进行波形幅度补偿,确保幅度的精确性。
技术领域本发明涉及电子技术领域的信号产生技术,具体涉及一种基于FPGA幅度偏置可调的波形发生电路及方法。
背景技术波形发生器是一种常用的信号源,广泛用于电子电路、自动控制和科学实验等领域。随着现代电子技术的不断发展,波形发生器的应用也越来越广泛,并且要求也越来越高。波形发生器正在向着高精度、高带宽、高稳定度、小型化、低功耗方向发展。高精度是指波形频率、幅度、相位等的高精度。小型化则依赖于简化外部电路。目前的幅度和偏置可调的波形发生方法依赖于硬件电路实现,这就使得外部电路复杂,调试难度大。
发明内容为了解决上述问题,本发明提供了一种基于FPGA幅度偏置可调的波形发生电路及方法。本发明所采用的系统由上位机、FPGA、DAC、滤波电路、程控放大电路组成。FPGA通过PCI-e总线与上位机相连。FPGA差分输出与DAC差分输入端相连,DAC输出端与滤波电路的输入端相连,滤波电路的输出端与程控放大电路的输入端相连,程控放大电路的输出结果即为所需波形。整个系统的工作流程描述如下:首先用户在上位机软件界面中设定波形种类、波形参数(包括幅度、频率、相位、直流偏置等)等信息,然后上位机通过PCI-e总线将波形数据和波形参数传送给FPGA。FPGA根据接收到的波形数据和波形参数产生相应的数字信号送入DAC。DAC完成数模转换后将模拟波形信号送入滤波电路进行滤波。最后通过程控放大电路进行幅度补偿即可完成整个波形信号产生。所述的基于FPGA幅度偏置可调的波形发生电路由FPGA、DAC、滤波电路、程控放大电路构成。FPGA用于与上位机通信及波形数据的发生。波形数据送于DAC产生对应的波形模拟量经过后级滤波电路滤除噪声。最终经由程控放大电路进行波形幅度放大及补偿,改善频率效应引起的波形幅度的损失。所提供的设计方案在最后一级之前使用差分输出,抑制共模噪声,提高电路的抗干扰能力。最后一级将差分信号转为单端信号作为整个系统的输出。所述的基于FPGA幅度偏置可调的波形发生方法步骤如下:1.确定波形数据宽度。DAC的选择确定了波形数据宽度,如选择波形数据宽度为N。2.确定波形数据范围。根据1设定的波形数据宽度为N,则最大存储波形数据范围应为0-2N。设DAC的负载电阻为R
0,上下接地电阻分别为R
1、R
2,输出最大电流为I,负载电阻上电压峰峰值为U
PP,负载电阻上电流峰峰值为I
PP,则U
PP=R
0*I
PP。现需要计算I
PP与I
P的关系。根据叠加定理:I
P+I
N=I。
其中:IP:同相输入电流;
In:反相输入电流; I
P单独作用,设向上电流为I
P1,向下电流为I
P2,则:I
P=I
P1+I
P2 ![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="406"/>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="413"/> I
N单独作用,设向上电流为I
N1,向下电流为I
N2,则:I
N=I
N1+I
N2 ![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="413"/>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="421"/> 则差分后电流输出为:
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/> 设差分后电流输出为I
out,则存在下述关系I
PP:
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/> 其中:I
Pmax指I
P的最大值;I
Pmin指I
P的最小值;由于没有负电压,在无直流输出时应满足直流等于输出电流的峰峰值。因此可以得到如下等式:
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/> 由等式(1)、(2)可以得到如下结果:
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="686"/>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/> 由上述等式可以得到,在无直流偏置时输出电流范围
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/>而根据所选择的DAC,输出最大电流为I,且存储的波形为最大幅度的波形数据,故最终可以确定波形存储器存储的波形数字量为
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/> 3.上位机根据设定的波形发生参数产生一个周期的上述范围的波形数据和对应的控制字,波形控制字包括频率控制字、相位控制字、幅度控制字。4.上位机通过PCI-e总线将一个周期的波形数据传送给FPGA,FPGA将得到的波形数据存储到波形RAM中。5.FPGA根据得到的频率控制字和相位控制字利用DDS和波形存储RAM产生波形。6.DDS产生的波形经过幅度调节模块进行幅度控制。幅度调节模块主要包括乘法器和除法器。DDS产生的波形数据首先经过乘法器进行幅度放大,然后经过除法器进行幅度衰减。乘法系数和除法系数共同决定最终波形输出幅度。设波形数据宽度为N
1,乘法系数宽度为N
2,则乘法器输出宽度必须大于等于(N
1+N
2)。对应除法器数据宽度与乘法器输出宽度相同,最终进行位数转换以满足后端DAC数据宽度。7.设定偏置,将幅度调整后的波形数字量经过加减法器,进行偏置调整。8.根据实际测试,确定由于频率效应引起的波形幅度的损失,确定波形幅度和频率的关系,从而根据此关系控制程控放大进行波形幅度补偿,确保幅度的精确性。本发明提供的基于FPGA幅度偏置可调的波形发生电路及方法,支持动态幅度、偏置调节,且精度高,系统适应性较好。本发明的有益效果是:(1)将幅度调节和偏置调节放到FPGA内部实现,简化了外界电路,节约设计成本。(2)使用软硬件实现幅度调节和偏置调节,修正了由于频率效应引起的波形幅度的损失,提高了波形幅度的精确度。(3)此幅度偏置可调的波形发生方法对差分输出电路进行了详细分析,具有修改简单,可变范围广等特点。
附图说明图1是本发明所涉及的系统功能框图。图2是本发明所涉及的FPGA内部波形发生(非调制波形)框图。图3是本发明所涉及的偏置控制说明图。图4是本发明所涉及的下位机的系统框图。图5是本发明所涉及的单端转差分等效电路的框图。图5(a)差分电流共同作用下负载电阻电流示意图。图5(b)I
P单独作用下负载电阻电流示意图。图5(c)I
N单独作用下负载电阻电流示意图。图6是存储的数字量到输出电压峰峰值转换的示意图。图7(a)补偿前波形。图7(b)补偿后波形。
具体实施方式下面结合附图对本发明作进一步说明:本发明所涉及的FPGA差分输出的幅度偏置可调的波形发生电路及方法,系统采用Xilinx xc5vlx110t作为主控器件。上位机主要包括应用程序和驱动程序,应用程序主要完成用户界面的设计和调用驱动程序,驱动程序完成于FPGA通过PCI-e总线通信。FPGA作为波形发生的主控器件,主要完成接收上位机的控制命令和波形数据,并完成根据控制命令完成相应波形发生,输出数字量送给DAC。此处DAC根据输出波形指标要求及成本等的综合考虑,最后选择的是16bit差分电流型输出数模转换器MAX5888A,DAC根据接收到的数字信号进行数模转换输出差分电流通过负载电阻转化为电压送到滤波电路。滤波电路将输出的波形进行滤波送到程控放大电路。程控放大电路进行固定放大倍数的电压放大达到指标要求输出电压。整个波形发生过程完成。FPGA内部波形发生主要采用DDS结构,频率控制字和相位控制字控制DDS输出40bit相位,进行相位截断后作为波形存储RAM地址输入,RAM输出结果即为对应频率的波形数字量然后经过幅度调节模块,幅度调节模块主要由除法器和位数转换组成,幅度调节后进行偏置调节输出差分数字量送给DAC即得到对应的波形输出。对于本发明所涉及的偏置控制,由于本设计中不存在负电压,设定偏置为0时偏置=V
pp,正偏对应于向上加直流,负偏对应于向下减直流。FPGA差分输出的幅度偏置可调的波形发生方法的步骤如下:1.确定波形数据宽度。根据设计要求选择MAX5888A这款DAC,因此确定其波形数据宽度为16bit,输出为差分电流型输出,根据数据手册所讲,输出最大电流范围在2mA-20mA可调,此处选择输出最大电流为I=20mA。2.确定波形数据范围。由于N=16,则最大存储波形数据范围为0-16384。选择DAC的负载电阻R
0=100Ω,上下接地电阻分别R
1=R
2=50Ω,满偏电流为I=20mA,负载电阻上电压为U
PP,负载电阻上电流为I
PP,则U
PP=100*I
PP。同相输入电流为I
P,反相输入电流为I
n,则根据叠加定理:I
P+I
N=20mA。I
P单独作用,设向上电流为I
P1,向下电流为I
P2,则:I
P=I
P1+I
P2 ![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="382"/>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="382"/> I
N单独作用,设向上电流为I
N1,向下电流为I
N2,则:I
N=I
N1+I
N2 ![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="390"/>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="398"/> 则差分后电流输出为:
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/> 设差分后电流输出为I
out,则其电流峰峰值为I
PP:
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="446"/>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="430"/>
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/> 又根据项目需求,由于没有负电压,在无直流输出时应满足直流等于输出电流的峰峰值。因此可以得到如下等式:
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/> 由等式(1)、(2)可以得到如下结果:I
Pmin=10mA+I
PPI
Pmax=10mA+3I
PP由上述等式可以得到,在无直流偏置时输出电流范围(10+I
PP)~(10+3I
PP),而根据所选择的DAC芯片,输出最大电流为20mA,且存储的波形为最大幅度的波形数据,故最终可以确定波形存储器存储的波形数字量为49152-57344。3.上位机根据设定的波形发生参数产生一个周期的波形数字范围为49152-57344的波形数据和对应的控制字。控制字包括频率控制字、相位控制字、幅度控制字、偏置控制字。上位机产生波形数据根据各种波形公式,保证数字量在49152-57344,下面以正弦为例,波形数据产生公式为
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="646"/> 其中i表示第i个数,i=1...16384。4.上位机通过PCI-e总线将一个周期的波形数据传送给FPGA,FPGA将得到的波形数据存储到波形存储RAM中。上位机与FPGA连接是通过PCI-e总线连接,FPGA内部调用PCI-e IP核并在FPGA内部编写DMA引擎。上位机调用驱动程序与FPGA连接,将用户输入的波形参数和波形数据一同发送至FPGA,FPGA内部完成波形参数和波形数据分离的过程,并将波形数据送至波形RAM存储。5.FPGA根据得到的频率控制字和相位控制字利用DDS和波形存储RAM产生波形。DDS工作时,频率控制字FCW在每个时钟周期内与相位累加器相加,得到的相位值(0-2π)在每一个时钟周期内以二进制码的形式去寻址波形RAM,将相位信息转变为相应的数字化波形幅度值。由于DDS采用的采样时钟为200M,相位宽度选择为40bit,因此频率控制字和相位控制字分别为:
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="414"/> 其中f
out为最终输出频率,FCW为频率控制字。
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="334"/> 其中P
out为最终输出频率,PCW为频率控制字。6.DDS产生的波形数据经过幅度调节模块进行幅度控制。DDS控制波形存储RAM输出的为满幅度的波形数据,本发明中波形数据范围为49152-57344,此时对应的为输出波形峰峰值为10V,若产生波形峰峰值200mV的波形,则需要进行以下处理:设波形RAM输出数据为wave,乘法系数为Mux_Amp,除法系数为Div_Amp。幅度调节后的波形数据为wave_Amp,则
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="700"/> 其中
![]()
ntent="drawing" img-format="TIF" inline="no" orientation="portrait" wi="534"/>由于波形数据宽度为16bit,乘法系数宽度为16bit,则乘法器输出宽度必须大于等于32bit。对应除法器数据宽度设为32bit,最终进行位数转换为16bit以满足后端DAC数据宽度。7.将幅度调整后的波形数字量经过加减法器,进行偏置调整。若进行正向偏置调节则选择加法器,负向偏置调节选择减法器。设偏置调节控制字为offset,则offset=偏移度*16384。8.根据实际测试,确定由于频率效应引起的波形幅度的损失,确定波形幅度和频率的关系。如测试得到在波形输出频率在f
0~f
1之间需要补偿k
0倍,f
1~f
2之间需要补偿k
1倍等。则根据上述原则控制程控放大器进行相应幅度补偿。如图7所示,要实现1MHz 200mV的正弦波,实测幅度只有163mV,进行1.23倍补偿后幅度达到195mV。