本发明属于数字模拟混合电路技术领域,具体涉及一种基于FPGA的精度可程控的数字模拟转换器及其方法。
背景技术
从数字音乐解码等娱乐应用方面,到电机驱动控制等工业应用方面,再到可编程精密基准电压源等实验室仪器应用方面,都需要具有高精度的数字模拟转换器,以实现数字量到模拟电压的精确转换。例如,在数字音频解码中,数字模拟转换器的精度会直接影响输出声音的音质,因此必须使用高分辨率的DAC以最大程度降低音质的畸变。数字模拟转换器作为一座桥梁,沟通了以离散数字量为特征的数字世界和以连续模拟量为特征的模拟世界。因此数字模拟转换器的电路结构,一直是电路领域的重点研究对象。
目前已经有权电阻网络结构、T型电阻网络结构、倒T型电阻网络结构及权电流型结构等不同结构的数字模拟转换器电路。但是这些结构都比较复杂,而且精度不可程控。
技术实现要素:
为了克服现有技术中的数字模拟转换器存在电路结构复杂、精度不可程控等问题,本发明提供了一种基于FPGA的精度可程控的数字模拟转换器及其方法,不需要使用专门的数字模拟转换器集成电路芯片,结构更简单,相应的成本也有明显降低;并具有转换精度可由FPGA程序控制、适应不同应用场景对数字模拟转换器转换精度的要求等特点。
本发明通过如下技术方案实现:
一种基于FPGA的精度可程控的数字模拟转换器,包括FPGA1、电阻网络2、模拟开关3、反馈电阻4、运算放大器5及译码器6;所述FPGA1用于输出逻辑状态和用程序控制数字模拟转换器的精度;电阻网络2用于将FPGA1输出的数字逻辑转换成模拟电流;模拟开关3用于控制模拟电流通断;反馈电阻4和运放5用于将模拟电流转换成模拟电压,译码器6用于控制模拟开关3的闭合和断开。
进一步地,所述FPGA1包含N个三态端口和K个译码输入端口,其中,N为大于1的整数,K为大于等于log2N的最小整数,所述三态端口编号为Px,其中,1≤x≤N,x为整数,所述译码输入端口编号为Ci,其中,1≤i≤K,K为大于等于log2N的最小整数;
所述电阻网络2包含2N个电阻,所述电阻编号为R(x,y),其中,1≤x≤N,x为整数,1≤y≤2,y为整数,其中,R(x,1)和R(x,2)的电阻值均为3x.r,r>0,且r为自然数;
所述模拟开关3包含N个模拟开关,所述模拟开关编号为Wx,1≤x≤N,x为整数,每个模拟开关有一个控制端和两个连接端;
所述反馈电阻4包含一个电阻RF;
所述运算放大器5包含一个同相输入端(标记有“+”号的一端)、一个反相输入端(标记有“-”号的一端)及一个输出端;
所述译码器6包含K个译码输入端口Si及N个译码输出端口SWx,其中,K为大于等于log2N的最小整数。
进一步地,所述FPGA1的三态输出端口Px分别与电阻网络2中的电阻R(x,1)的一端和电阻R(x,2)的一端相连;FPAG1的译码端口Ci与译码器6的译码输入端口Si相连接;电阻网络2中的所有电阻R(x,1)的另一端均与电压VIO相连;电阻网络2中的电阻R(x,2)的另一端均与模拟开关3的一个连接端相连,模拟开关3的控制端与译码器6的译码输出端口SWx相连,当译码器6的译码输出端口SWx输出为1时,模拟开关3闭合;当译码器6的译码输出端口SWx输出为0时,模拟开关3断开;模拟开关3的另一个连接端分别与运算放大器5的反相输入端和反馈电阻4的一端相连;反馈电阻4的另一端与运算放大器5的输出端相连,运算放大器5的同相输入端与地电位相连。
本发明的另一目的在于提供一种基于FPGA的精度可程控的数字模拟转换器的转换方法,具体包括如下步骤:
步骤一:将FPGA1的所有译码端口Ci输出均设置为1时,根据译码器6的译码原则,译码器6的所有N个译码输出端口SWx都输出1,设置模拟开关3的所有模拟开关Wx都闭合;
步骤二:FPGA1的三态端口Px可输出三种逻辑状态,分别为地电位、高阻态、电压VIO;
当FPGA1的三态端口Px输出零伏时,由于电阻网络2中的电阻R(x,2)的一端与Px相连,所以电阻网络2中的电阻R(x,2)的一端电压为地电位,而电阻网络2中的电阻R(x,2)的另一端与模拟开关3的一个连接端相连相连,模拟开关3的另一个连接端与运放5的反相输入端(标记有“-”号的一端)连接,由于运放的虚拟地作用,模拟开关3的另一个连接端的电压也为地电位,R(x,2)两端没有电位差,所以流过电阻R(x,2)的电流Ix(1≤x≤N,x为整数)为:
Ix=0 (1)
当FPGA1的三态端口Px输出高阻态时,流过电阻R(x,2)的电流Ix为:
当FPGA1的三态端口Px输出电压VIO时,流过电阻R(x,2)的电流Ix为:
步骤三:将FPGA1的三态端口Px输出的逻辑状态编码成数字量Dx,其中,1≤x≤N,x为整数;
当Px输出零伏时,对应编码为Dx=0;
当Px输出高阻态时,对应编码为Dx=1;
当Px输出电压VIO时,对应编码为Dx=2;
对于上述Px输出三种不同逻辑状态时,电阻R(x,2)流过的电流统一为:
所有的流过电阻R(x,2)的电流总和为:
所有的流过电阻R(x,2)的电流最终流过反馈电阻4,使运算放大器5的输出端电压Vout为:
上式(6)即为数字量Dx和模拟量Vout的函数关系;由式(6)可知,该数模转换器通过不同的Dx组合,可以输出3N个不同的电压,其数字模拟转换的精度可以用3N来表征。其中,数字量Dx(1≤x≤N,x为整数)是由FPGA1通过程序控制三态端口Px输出不同逻辑电压并编码得到的。
与现有技术相比,本发明的优点如下:
(1)、本发明的基于FPGA的精度可程控的数字模拟转换器,不需要使用专门的数字模拟转换器集成电路芯片,比传统的数字模拟转换器的电路结构更简单,相应的成本也有明显降低;
(2)、该基于FPGA的精度可程控的数字模拟转换器,具有转换精度可由FPGA程序控制、适应不同应用场景对数字模拟转换器转换精度的要求等特点。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍。在所有附图中,类似的元件或部分一般由类似的附图标记标识。附图中,各元件或部分并不一定按照实际的比例绘制。
图1为本发明的一种基于FPGA的精度可程控的数字模拟转换器;
图中:FPGA1、电阻网络2、模拟开关3、反馈电阻4、运算放大器5、译码器6。
具体实施方式
下面将结合附图对本发明技术方案的实施例进行详细的描述,以下实施例仅用于更加清楚地说明本发明的技术方案,因此只作为示例,而不能以此来限制本发明的保护范围。
需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本发明所属领域技术人员所理解的通常意义。
实施例1
如图1所示,本实施例提供了一种基于FPGA的精度可程控的数字模拟转换器,包括FPGA1、电阻网络2、模拟开关3、反馈电阻4、运算放大器5及译码器6;所述FPGA1用于输出逻辑状态和用程序控制数字模拟转换器的精度;电阻网络2用于将FPGA1输出的数字逻辑转换成模拟电流;模拟开关3用于控制模拟电流通断;反馈电阻4和运放5用于将模拟电流转换成模拟电压,译码器6用于控制模拟开关3的闭合和断开。
所述FPGA1包含N个三态端口和K个译码输入端口,其中,K为大于等于log2N的最小整数,所述三态端口编号为Px,其中,1≤x≤N,x为整数,所述译码输入端口编号为Ci,其中,1≤i≤K,K为大于等于log2N的最小整数;
所述电阻网络2包含2N个电阻,所述电阻编号为R(x,y),其中,1≤x≤N,x为整数,1≤y≤2,y为整数,R(x,1)和R(x,2)的电阻值均为3x.r(r>0,r为自然数;
所述模拟开关3包含N个模拟开关,所述模拟开关编号为Wx,1≤x≤N,x为整数,每个模拟开关有一个控制端和两个连接端;
所述反馈电阻4包含一个电阻RF;
所述运算放大器5包含一个同相输入端(标记有“+”号的一端)、一个反相输入端(标记有“-”号的一端)及一个输出端;
所述译码器6包含K个译码输入端口Si及N个译码输出端口SWx,其中,K为大于等于log2N的最小整数。
所述FPGA1的三态输出端口Px分别与电阻网络2中的电阻R(x,1)的一端和电阻R(x,2)的一端相连;FPAG1的译码端口Ci与译码器6的译码输入端口Si相连接;电阻网络2中的所有电阻R(x,1)的另一端均与电压VIO相连;电阻网络2中的电阻R(x,2)的另一端均与模拟开关3的一个连接端相连,模拟开关3的控制端与译码器6的译码输出端口SWx相连,当译码器6的译码输出端口SWx输出为1时,模拟开关3闭合;当译码器6的译码输出端口SWx输出为0时,模拟开关3断开;模拟开关3的另一个连接端分别与运算放大器5的反相输入端和反馈电阻4的一端相连;反馈电阻4的另一端与运算放大器5的输出端相连,运算放大器5的同相输入端与地电位相连。
进一步地描述译码器6的译码原则:译码器6包含K个译码输入端口Si(K为大于等于log2N的最小整数)和N个译码输出端口SWx(1≤x≤N,x为整数)。每个译码输入端口Si(K为大于等于log2N的最小整数)可以输出二级制1或者0。每个译码输出端口SWx可以输出二级制1或者0。当K个译码输入端口Si(K为大于等于log2N的最小整数)的数值按SKSK-1...S2S1的顺序排序成序列时,可将SKSK-1...S2S1组成的二进制序列的数值对应成十进制值S(例如S2S1=2’B11(二进制)=S=3(十进制))。在该译码器中,SKSK-1...S2S1=S时,前S+1个译码输出端口SWx(1≤x≤S+1,x为整数)输出值为1,后N-S-1个译码输出端口SWx(S+2≤x≤N,x为整数)输出值为0。
本发明的一种基于FPGA的精度可程控的数字模拟转换器的转换原理如下:
当FPGA 1控制其所有译码端口Ci输出序列值CKCK-1...C2C1=C(0≤C<N)时,由于FPGA1的译码端口Ci与译码器6的译码输入端口Si相连,所以SKSK-1...S2S1=CKCK-1...C2C1=C(0≤C<N);根据译码器6的译码规则,前C+1个译码输出端口SWx(1≤x≤S+1,x为整数)输出值为1,后N-C-1个译码输出端口SWx(C+2≤x≤N,x为整数)输出值为0;由于模拟开关3的控制端与译码器6的译码输出端口SWx相连,当译码器6的译码输出端口SWx输出为1时,模拟开关3闭合;当译码器6的译码输出端口SWx输出为0时,模拟开关3断开。当模拟开关3闭合时,模拟电流Ix可以流过R(x,2);当模拟开关3断开时,模拟电流Ix不能流过R(x,2);所以上述前C+1个译码输出端口SWx(1≤x≤S+1,x为整数)输出值为1,后N-C-1个译码输出端口SWx(C+2≤x≤N,x为整数)输出值为0的情况下,模拟开关3的模拟开关Wx(1≤x≤C+1,x为整数)闭合,模拟电流Ix(1≤x≤S+1,x为整数)可以流过R(x,2)(1≤x≤C+1,x为整数);模拟开关3的模拟开关Wx(C+2≤x≤N,x为整数)断开,模拟电流Ix(C+2≤x≤N,x为整数)不能流过R(x,2)(C+2≤x≤N,x为整数),即Ix=0(C+2≤x≤N,x为整数);将Ix=0(C+2≤x≤N,x为整数)带入式子(6),则运放5的输出端电压Vout:
由式子(7)可知,该数模转换器通过D1到DC+1取值的不同组合,可以输出3C+1个不同的电压,其精度可以用3C+1表征。通过FPGA1控制CKCK-1...C2C1=C(0≤C<N)不同,即C(0≤C<N)取不同的数值,可以使该数字模拟转换器的精度在31、32、…、3N之间切换,实现基于FPGA的可程序控制精度的数字模拟转换器。
实施例2
本实施例提供了一种基于FPGA的精度可程控的数字模拟转换器的转换方法,具体包括如下步骤:
步骤一:将FPGA1的所有译码端口Ci输出均设置为1时,根据译码器6的译码原则,译码器6的所有N个译码输出端口SWx都输出1,设置模拟开关3的所有模拟开关Wx都闭合;
步骤二:FPGA1的三态端口Px可输出三种逻辑状态,分别为地电位、高阻态、电压VIO;
当FPGA1的三态端口Px输出零伏时,由于电阻网络2中的电阻R(x,2)的一端与Px相连,所以电阻网络2中的电阻R(x,2)的一端电压为地电位,而电阻网络2中的电阻R(x,2)的另一端与模拟开关3的一个连接端相连相连,模拟开关3的另一个连接端与运放5的反相输入端(标记有“-”号的一端)连接,由于运放的虚拟地作用,模拟开关3的另一个连接端的电压也为地电位,R(x,2)两端没有电位差,所以流过电阻R(x,2)的电流Ix(1≤x≤N,x为整数)为:
Ix=0 (1)
当FPGA1的三态端口Px输出高阻态时,流过电阻R(x,2)的电流Ix为:
当FPGA1的三态端口Px输出电压VIO时,流过电阻R(x,2)的电流Ix为:
步骤三:将FPGA1的三态端口Px输出的逻辑状态编码成数字量Dx,其中,1≤x≤N,x为整数;
当Px输出零伏时,对应编码为Dx=0;
当Px输出高阻态时,对应编码为Dx=1;
当Px输出电压VIO时,对应编码为Dx=2;
对于上述Px输出三种不同逻辑状态时,电阻R(x,2)流过的电流统一为:
所有的流过电阻R(x,2)的电流总和为:
所有的流过电阻R(x,2)的电流最终流过反馈电阻4,使运算放大器5的输出端电压Vout为:
上式(6)即为数字量Dx和模拟量Vout的函数关系;由式(6)可知,该数模转换器通过不同的Dx组合,可以输出3N个不同的电压,其数字模拟转换的精度可以用3N来表征。其中,数字量Dx(1≤x≤N,x为整数)是由FPGA1通过程序控制三态端口Px输出不同逻辑电压并编码得到的。
实施例3
如图1所示,搭建一种基于FPGA的精度可程控的数字模拟转换器,以N=8为例,FPGA1包含8个三态端口,这些三态端口编号为Px(1≤x≤8,x为整数),对应的数字量为Dx(1≤x≤8,为整数)。电路中的FPGA1选择英特尔公司的EP4CE6F22C8N芯片,该芯片的VIO=3.3v,选择N=8时,令芯片的任意8个三态引脚作为三态端口Px(1≤x≤6,x为整数),令芯片的任意3个引脚作为译码输入端口Ci(1≤i≤3,i为整数),那么该基于FPGA的精度可程控的数字模拟转换器的精度可用38表征,电阻网络2包含2N个电阻,这些电阻编号为R(x,y)(1≤x≤8,x为整数,1≤y≤2,y为整数),R(x,1)和R(x,2)的电阻值均为3x.r(r>0,r为自然数,1≤x≤N,x为整数)。选取r=1k欧姆,R(1,1)=R(1,2)=3k欧姆,R(2,1)=R(2,2)=9k欧姆,R(3,1)=R(3,2)=27k欧姆,R(4,1)=R(4,2)=81k欧姆,R(5,1)=R(5,2)=243k欧姆,R(6,1)=R(6,2)=729k欧姆,R(7,1)=R(7,2)=2187k欧姆,R(8,1)=R(8,2)=6561k欧姆;运放5选择常用的精密运放OP07,反馈电阻4则选择RF=1K欧姆。
根据以上的电路参数选择以及式子(6),可以得到运放5的输出端电压Vout与数字量Dx(1≤x≤8,x为整数)的函数关系:
例如,当FPGA1的Px(1≤x≤8,x为整数)都输出地电位时,则对应的数字量Dx(1≤x≤8,x为整数)均为0,则根据式子(8),运放5的输出电压Vout为:
Vout=-RF·∑Ix=0v (9)
例如,当FPGA1通过程序控制译码输入端口C3C2C1=3时,根据所述的精度程序可控原理,该数字模拟转换器的精度可用34表征,实现了精度程序可控的功能。根据式子(6),运算放大器5的输出电压Vout为:
综上所述便完成了本发明的一种基于FPGA的精度可程控的数字模拟转换器。采用本发明的设计数字模拟转换器比一般的数字模拟转换器结构更简单,相应的成本也有明显降低,而且本发明的数字模拟转换器精度可以用FPGA程序控制。
以上结合附图详细描述了本发明的优选实施方式,但是,本发明并不限于上述实施方式中的具体细节,在本发明的技术构思范围内,可以对本发明的技术方案进行多种简单变型,这些简单变型均属于本发明的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本发明对各种可能的组合方式不再另行说明。
此外,本发明的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明的思想,其同样应当视为本发明所公开的内容。