最新日志

发表于:2008-6-4 11:22:00
标签:无标签

0

[转载]使用运放构成电压跟随器的稳定性问题

题外话:用运放构成电压跟随器的电路,传统教科书仅是简单的把输出和反相输入端连接起来完事儿,而实际电路要复杂的多,稳定性问题不可忽视!本文是在一家日本IC厂家网站上找到的,希望对实际应用有一点帮助。
 
Q. 用电压跟随器使运算放大器保持稳定,须注意哪些问题?

A:对于采用负反馈的放大电路,如何减少振荡以保持稳定,目前尚无定论。电压跟随器也不例外。(Fig1.)

运算放大器理想的运行状态是输出电压和输入电压为同相,即,当负输入端的印加电压引起输出增大时,运算放大器能够相应地使增加的电压降低。不过,运算放大器的输入端和输出端的相位总有差异。当输出和输出之间的相位相差180°时,负输入与正输入正好相同,原本应该减少的输出却得到了增强。(成为正反溃的状态。)如果在特定频段陷入这一状态,并且仍然保持原有振幅,那么该输出频率和振荡状态将一直持续下去。



FIg1. 电压跟随器和反馈环路


2. 输入输出端出现相位差的主要原因

其原因大致可分为两种:
1,由于运算放大器固有的特性
2,由于运算放大器以外的反馈环路的特性

 2.1. 运算放大器的特性
Fig2a 及Fig2b分别代表性地反映了运算放大器的电压增益—频率特性和相位—频率特性。数据手册中也有这两张曲线图。
如图所示,运算放大器的电压增益和相位随频率变化。运算放大器的增益与反馈后的增益(使用电压跟随器时为0dB)之差,即为反馈环路绕行一周的增益(反馈增益)。如果反馈增益不足1倍(0dB),那么,即使相位变化180o,回到正反馈状态,负增益也将在电路中逐渐衰减,理论上不会引起震荡。
反而言之,当相位变化180o后,如频率对应的环路增益为1倍,则将维持原有振幅;如频率对应的环路增益为大于1倍时,振幅将逐渐发散。在多数情况下,在振幅发散过程中,受最大输出电压等非线性要素的影响,振幅受到限制,将维持震荡状态。
为此,当环路增益为0dB时的频率所对应的相位与180o之间的差是判断负反馈环路稳定性的重要因素,该参数称为相位裕度。(Fig2b.)
如没有特别说明,单个放大器作为电压跟随器时,要保持足够相位裕度的。
注:数据手册注明「建议使用6dB以上的增益」的放大器,不可用作电压跟随器。

 2.2. 运算放大器周边电路对反馈环路的影响

在实际应用中,构成电压跟随器并非象Fig1.那样简单地将输入端和输出端直接连接在一起。至少输出端是与某个负载连接在一起的。因此,必须考虑到该负载对放大器的影响。
例如,如Fig3.所示,输出端和接地之间接电容时,这一容量与运算放大器的输出电阻构成的常数造成相位滞后。
(Fig2b.所示之状态可能变化为Fig2c所示之状态)这时,环路增益在输出电阻和C的作用下降低。同时,相位和增益之间不再有比例关系,相位滞后成为决定性因素,使反馈环路失去稳定,最糟糕时可能导致震荡。单纯地在输出端和接地之间连接电容,构成电压跟随器时,每种运算放大器之间的稳定性存在差异。
Fig4.为输入端需要保护电阻的运算放大器可能发生的问题。
为解决Fig3.出现的问题,可采用Fig5.(a)、(b)所示之方法。(a)图中插入R,消除因CL而产生的反馈环路相位滞后。(在高频区,R作为运算放大器的负荷取代了CL而显现出来。) (b)则用C1来消除CL造成的相位滞后。

为解决Fig4.的问题,则可在输入保护电阻上并联一个尺寸适当的电容。一般被叫做“输入电容取消值”的近似值约为10pF~100pF。


FIg5. FIg3.解决方法
 

点击此处查看原文 >>

系统分类: 模拟技术   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(387)
发表于:2008-3-18 17:54:36
标签:VHDL  AHDL  component  端口映射  

0

AHDL和VHDL两种语言的Component端口映射

VHDL中,Component端口映射有2种方法:位置映射和名称映射。前者书写简单,但后者代码可读性更高,且不容易出错。Hustzq就习惯于后一种方法。

如果component中端口的比特位数和实际电路中的位宽一致,那么直接映射就可以了。那么,不一致的时候如何处理呢?

实例:用lpm_bustri做总线控制,一个元件控制总线的地址数据线(32位)和控制信号线(若干条)。

AHDL(部分代码):

--数据/地址线32

AD_B[31..0] = lpm_bustri.result[31..0];

AD_A[31..0] = lpm_bustri.tridata[31..0];

lpm_bustri.data[31..0] = AD_B[31..0];

--控制字4

C _B[3..0] = lpm_bustri.result[35..32];

C _A[3..0] = lpm_bustri.tridata[35..32];

lpm_bustri.data[35..32] = C _B[3..0];

--控制信号线2

F_B = lpm_bustri.result[36];

F_A = lpm_bustri.tridata[36];

lpm_bustri.data[36] = F_B;

      

In_B = lpm_bustri.result[37];

In_A = lpm_bustri.tridata[37];

lpm_bustri.data[37] = In_B;

 

VHDL(部分代码):

result(31 DOWNTO 0) => AD_B,

tridata(31 DOWNTO 0) =>AD_A,

data(31 DOWNTO 0) => AD_B,

 

result(35 DOWNTO 32) => C_B,

tridata(35 DOWNTO 32) => C_A,

data(35 DOWNTO 32) => C_B,

 

result(36) => F_B,

tridata(36) => F_A,

data(36) => F_B,

 

result(37) => In_B,

tridata(37) => In_A,

data(37) => In_B,

 

第一次接触AHDL2种语言同时使用时还真容易搞混淆,VHDL差点写成“result[31..0] => AD_B”。总体感觉,VHDL的语法是很严格的,用什么数据类型、位宽多少都必须先定义,否则就是错误,AHDL就要宽松些。

 

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

评论(0) | 阅读(367)
发表于:2008-3-13 18:10:09
标签:FPGA  LPM函数  

1

LPM函数的LPM_PIPELINE参数研究

    本文研究含有LPM_PIPELINE参数的LPM函数(如:LPM_ADD_SUBLPM_MULT等),对LPM_PIPELINE参数的作用做了一些探讨。

LPM_PIPELINE参数的说明是:“Specifies the number of clock cycles of latency associated with the result [] output. The default value of zero indicates that no latency exists, and that a purely combinatorial function will be instantiated. The default value is zero (non-pipelined).”——from LPM quick reference guide》。翻译过来就是:“(此参数)指定了输出值result []的时钟延时周期。缺省值是0,也就是没有延时,是纯粹的组合逻辑电路。缺省值是0,即流水线级数为0。”

那么,该参数除了能使输出结果延时,对提升系统整体处理速率还有什么帮助呢?今天hustzq就利用LPM_MULT函数做了这样的实验。实验程序是利用3次乘法和3次加/减法完成一次复数乘:R+jI=(x+jy)(c+js)。将此等式化成:R=(c-s)y+c(x-y)I=(c+s)x-c(x-y)。在Quartus II中使用Cyclone III芯片仿真。LPM_MULTLPM_PIPELINE参数设为3

第一组实验:clk=50ns。不使用LPM_PIPELINE参数和使用LPM_PIPELINE参数的对比:

点击看大图

1  不使用LPM_PIPELINE参数,clk=50ns

点击看大图

2  使用LPM_PIPELINE参数,clk=50ns

第二组实验:clk=5ns。不使用LPM_PIPELINE参数和使用LPM_PIPELINE参数的对比:

点击看大图

3  不使用LPM_PIPELINE参数,clk=5ns

点击看大图

4  使用LPM_PIPELINE参数,clk=5ns

    分析第一组实验:图2比图1输出延时3clk,计算速度并没有增加,实际计算耗时都是6ns左右。

    分析第二组实验:两个图的计算结果不同。第二个才是正确的按照时钟输出的结果。

    结论:如果时钟周期比计算过程本身所耗费时间大很多,即计算、处理的时间很小、可忽略不计,则在一个时钟内完全可以完成计算,pipeline的作用仅仅是延时输出结果。如果计算处理的时间和时钟周期相当,在一个时钟内不能完成计算,则必须使用pipeline,否则前一次计算还没完成,又有新数据输入要求计算,此时输出是错误结果。

原来在一个时钟内不能完成运算,现在加入pipeline,虽然输出延迟几个clk周期,但可以正确的完成计算,如果把系统作为一个“黑盒”,设置pipeline “加快”了运算速度。这也就是pipeline的最终作用。

 

 

参考文献:

1. Altera公司:《LPM quick reference guide

2. Uwe Meyer-Baese著 刘凌 胡永生 译:《数字信号处理的FPGA实现》

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

评论(1) | 阅读(251)
发表于:2008-1-3 9:16:34
标签:无标签

0

[转]抗混淆滤波器放大器的选择

作者:德州仪器 (TI) 高级应用工程师 Bonnie C. Baker

 

对一个模拟信号进行数字化时,在该模拟信号到达 ADC 之前可使用一款低通滤波器来阻止带外噪声混淆错误的发生,并防止模拟信号出现叠加性高频噪声。如果输入信号噪声超过转换器采样频率的二分之一,那么其噪声幅度保持不变,但是信号出现混淆时频率就会改变。在对信号进行数字化以后,您就无法再通过使用一款数字滤波器来降低带内噪声。因此,您必须要记住这样一条经验法则:“无用输入;无用输出”。

 

为一个有源低通滤波器电路选择正确的运算放大器 (op amp) 是重中之重,特别是当您通读放大器产品说明书并浏览所有相关规范时。我于数天前阅读了放大器产品说明书,该产品说明书竟然一共有 24 条规范!事实上,在为您的有源低通滤波器选择合适的放大器时,在开始阶段只需要考虑 2 条重要规范。一旦您根据这两条规范选定放大器以后,在做出最终决定以前,还有两条规范是您需要考虑到的。

 

有源二阶低通滤波器中最常使用的拓扑结构是:(1)非反相 Sallen-Key 结构以及(2)反相多反馈结构[1]。如果您需要的是一款更高阶滤波器,那么可以对以上两种拓扑结构进行级联。在设计中使用以上任一种拓扑结构时,您在一开始就应该考虑到的两个运算放大器规范分别为:(1)增益带宽乘积以及(2)转换速率。在选择放大器之前,要先确定滤波器截止频率 (fCUT),亦称为 –3 dB 频率。滤波器设计方案,如 FilterProTM [3] ,可用于确定滤波器的电容和电阻值。

 

 

在确定截止频率大小后,选择一款具有合理带宽的放大器就比较容易了。当 Q < 1(见图 1)时,放大器 (fAMP) 的增益带宽乘积必须最少为 100 x 增益 x fCUT x ki。当 Q > 1 时,fAMP = 100 x 增益 x (fCUT/ai) x Ö [(Qi2 – 0.5)/(Qi2 – 0.25)],其中,在微分滤波器 (partial filter) 传输函数中,ai ith 的系数,同时 Qi ith 微分滤波器的分解因子 (quality factor)。运算放大器的增益带宽乘积可以参见各个产品说明书的规格表。

 

除了要注意带宽,您还应该对放大器转换速率的影响进行评估。这样可以确保您的滤波器不会由于转换限制而产生信号失真。放大器转换速率取决于内部 IC 电流及电容。当较大的信号在放大器中进行传输时,内部电流将对这些内部电容进行充电。这个充电过程的速度取决于放大器内部电阻值、电容容量和电流强度。为了确保您的有源滤波器没有处在一个转换状态下,应选择一款转换速率 (πVOUT P-P fCUT) 的放大器,这种情况下,VOUT P-P 表示在滤波器的截止频率以下达到预期的峰至峰输出电压摆幅。

 

在使用 Sallen-Key 滤波器电路时,另外两种规范也会对您的滤波器电路产生影响,即输入共模电压范围 (VCMR) 和输入偏置电流 (IB)。在 Sallen-Key 这种配置中,VCMR 会限定您的输入信号的范围。此外,输入偏置电流还会对外部电源电阻进行导电。由 IB 误差产生的压降会以一个额外输入偏置电压的形式出现。同时,需注意该电路有高频馈通。

通过遵循这些简单的指南,您会发现成功地设计一款高效的低通滤波器并不困难,并且您很快就会得到一款高效的电路。 

点击看大图

 

1 通过级联一阶和/或二阶滤波器您可以构建一款多阶模拟滤波器。您可以利用滤波器系数计算出放大器所需的带宽。

 

推荐参考书目:

1.FilterProTM MFB Sallen-Key 低通滤波器设计方案》TI Bishop, Trump, Stitt, sbfa001a

2. 运放使用文集》Mancini, Ron, Elsevier-Newness, 2003 年版

3. FilterPro模拟滤波软件工具,请登录 www.ti.com

点击此处查看原文 >>

系统分类: 模拟技术   |    用户分类:    |    来源: 无分类

评论(1) | 阅读(297)
发表于:2007-11-6 9:51:22
标签:无标签

0

[转]ModelSim.SE.v6.2b的安装和使用方法总结

因为要学VHDL,从迅雷下载了一个ModelSim.SE.v6.2b。使用时发现license不能用,在google上查到一个前辈的经验:

-*************************安装****************************************
1.安装的文件夹中必须有连个文件:setup.exe,keygen.exe
2.正常安装setup.exe
3.利用keygen产生license,如果上面安装在默认路径下,这时应该把产生的license.dat放在安装目录下:C:\Modeltech_6.2b
4.点击我的电脑--属性--高级--环境变量--新建,变量名为LM_LICENSE_FILE,变量值也就是license所在的路径:.;C:\Modeltech_6.2b\license.dat(类似的EDA软件如果加密,都应该采用此方法,不同的license区别在于路径不同,可以用分号隔开)

**************************使用***************************************
1.先建一个工程,注意所有的文件和文件夹用英文命名而不能出现中文名
2.编写verilog文件
3.verilog激励文件,可以分开编译,也可以一起编译
4.仿真:先simulate,注意6.2b在选择simulate文件test.v的时候,出来的对话框中还有一项,optimization Options,默认是No design object bisibility(并不知道为什么,个人认为没有必要有这样的选择),选择Apply full visibility to all modules(full dubug mode),或者你也自己可以选择需要仿真的模块(Customized visibility),这时就可以选择仿真
5.view-wave ,将仿真出来的变量拖到wave中看波形
6.关于仿真时间的设置,还没搞清楚,还没学好语言,不管先,以后研究。
**********************************************************************

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 转贴

评论(8) | 阅读(1261)
发表于:2007-10-31 11:09:31
标签:无标签

0

俺的博客正式开张了!

2007年10月31日!

开张志喜!

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类: 无分类    |    来源: 无分类

评论(1) | 阅读(427)
总共 , 当前 /