主要内容

反馈放大器设计

R2026b

此示例说明如何使用 Control System Toolbox™ 设计非反相反馈放大器电路。该设计基于运算放大器展开,运算放大器是电气反馈电路中的标准构建模块。

此示例说明如何使用 Control System Toolbox 提供的工具来对真实的电气系统进行设计、建模和分析。

运算放大器描述

电气反馈电路的标准构建模块是运算放大器 (op amp),这是一种差分电压放大器,设计为具有极高的 DC 增益(通常在 1e5 到 1e7 范围内)。

运算放大器的电气符号如下所示。

此示例假设使用一个具有两个极点(频率分别为 w1 和 w2)和高 DC 增益 (a0) 的未补偿运算放大器。假设此运算放大器在线性模式(未饱和)下工作,因此其开环传递函数可表示为一个线性时不变 (LTI) 系统,如上所示。

尽管物理运算放大器存在更高阶的极点,但此示例假设这些极点位于幅值远低于 1 的频率范围内。

此运算放大器的开环传递函数如下。

a(s)=a0(1+s/ω1)(1+s/ω2)

对于此示例,假设有以下传递函数参数。

a0=1e5

ω1=1e4

ω2=1e6

a0 = 1e5;
w1 = 1e4;
w2 = 1e6;

使用 LTI 模型创建此系统的传递函数模型。

首先,使用 tf 命令定义拉普拉斯变量 s。然后使用 s 构造开环传递函数 a。

s = tf("s");          
a = a0/(1+s/w1)/(1+s/w2)
a = 
           1e15
  ----------------------
  s^2 + 1.01e06 s + 1e10
 
Continuous-time transfer function.
Model Properties

查看此系统的频率响应。

bp = bodeplot(a,"r");
bp.FrequencyUnit = "rad/s";
bp.MagnitudeUnit = "dB";
bp.PhaseUnit = "deg";
bp.YLimits = {[0,110];[-180,0]};

MATLAB figure

使用 stepplot 和 dcgain 命令查看 a 的归一化阶跃响应。

a_norm = a / dcgain(a);
stepplot(a_norm,"r")

title("Normalized Open-Loop Step Response")
ylabel("Normalized Amplitude")

MATLAB figure

右键点击绘图并选择特征 > 稳定时间以显示稳定时间。将鼠标悬停在稳定时间标记上,以显示稳定时间的精确值。

反馈放大器

现在,添加一个电阻反馈网络,并将系统连接为非反相放大器。

此反馈网络 b 实际上就是一个分压器,其输入为 Vo,输出为 Vn。求解比值 Vn/Vo 可得到 b 的传递函数。

     b  =  Vn / Vo  =  R1 / (R1 + R2) 

系统的模块图表示如下所示。

求解比值 Vo/Vp 可得到闭环增益 A。

     A  =  Vo / Vp  =  a / (1 + ab)

如果 a 和 b 的乘积足够大 (>>1),则 A 可近似表示为:

     A  =  1 / b

假设您需要设计一个 DC 增益 (Vo/Vp) 为 10 的放大器,且 R1 固定为 10 kOhm。求解 R2。

A0 = 10;
b = 1 / A0;    % approximation for ab>>1
R1 = 10000;
R2 = R1 * (1/b - 1)
R2 = 
90000

使用 feedback 命令构造闭环系统。

A = feedback(a,b);

使用 bodemag 命令,将 a 和 A 的频率响应绘制在一起。

bodemag(a,"r",A,"b");


ylim([0,110]);

% Add plot annotations.
opampdemo_annotate(1)
legend("Open-Loop Gain (a)","Closed-Loop Gain (A)","","","","");

MATLAB figure

使用负反馈降低低频 (LF) 增益,会使系统带宽(定义为增益较其最大值下降 3 dB 处的频率)相应增大。

这种增益与带宽之间的权衡是设计反馈放大器电路的一个强大工具。

由于增益现在主要由反馈网络决定,因此需要关注的一个有用关系是该增益对运算放大器固有(开环)增益变化的灵敏度。

但是,在推导系统灵敏度之前,最好先定义环路增益 L,即信号在环路中传递时经历的总增益。

L = a * b;

您将使用此量来评估系统的灵敏度和稳定裕度。

系统灵敏度 S 表示 A 对 a 变化的灵敏度。

S=δA/Aδa/a=11+a(s)b(s)=11+L(s)

S 与 L 之间的反比关系揭示了负反馈的另一项益处:增益不敏感性。

S = 1 / (1 + L);

S 与反馈方程具有相同的形式,因此可以使用更稳健的 feedback 命令来构造:

S = feedback(1,L);

可以使用 bodemag 命令将 S 和 A 的幅值绘制在一起:

bodemag(A,"b",S,"g")
legend("Closed-Loop Gain(A)","System Sensitivity(S)", ...
    Location="SouthEast");

MATLAB figure

极低的低频灵敏度(约 -80 dB)表明设计的闭环增益受开环增益变化的影响极小。由于制造差异、温度变化等原因,这种 a 的变化很常见。

您可以使用 stepplot 命令检查 A 的阶跃响应:

stepplot(A)

% Add plot annotations.
opampdemo_annotate(2)

MATLAB figure

采用反馈大幅缩短了稳定时间(约 98%)。但是,阶跃响应现在显示大量振铃,这表明稳定裕度差。

您可以使用 margin 命令绘制环路增益 L 来分析稳定裕度:

margin(L)

MATLAB figure

得到的绘图表明相位裕度小于 6 度。您需要对此放大器进行补偿,将相位裕度提高到可接受的水平(通常为 45 度或更高),从而减小过大的超调和振铃。

反馈超前补偿

此类电路中常用的一种补偿方法是“反馈超前补偿”。该方法通过将一个电容器 C 与反馈电阻 R2 并联来改变 b(s)。

选定的电容器值可在穿越频率附近对 b 引入相位超前,从而提高放大器的相位裕度。

新的反馈传递函数如下所示。

您可以通过将 b 的零点置于 L 的 0 dB 穿越频率处来估算 C 的值:

[Gm,Pm,Wcg,Wcp] = margin(L);
C = 1/(R2*Wcp)
C = 
1.1139e-12

为了研究 C 对放大器响应的影响,请针对 C 在初始猜测值附近的若干取值,创建 b 的 LTI 模型数组:

K = R1/(R1+R2);
C = [1:.2:3]*1e-12;
for n = 1:length(C)
    b_array(:,:,n) = tf([K*R2*C(n) K],[K*R2*C(n) 1]);
end

您可以为 A 和 L 创建 LTI 数组。

A_array = feedback(a,b_array);
L_array = a*b_array;

您可以使用 stepplot 命令,将 LTI 数组 A_array 中所有模型的阶跃响应与 A 的阶跃响应一起绘制出来。

stepplot(A,"b:",A_array,"b",[0:.005:1]*1.5e-6)
title("Closed-Loop Step Response (Compensated)")
        
% Add plot annotations.
opampdemo_annotate(3)

MATLAB figure

使用 margin 命令求出环路增益数组 L_array 的相位裕度。

[Gm,Pm,Wcg,Wcp] = margin(L_array);

现在可以将相位裕度绘制为 C 的函数。

plot(C*1e12,Pm,"g")
ax = gca;
xlim([0.8 3.6])
ylim([45 60])
ax.Box = "on";
xlabel("Compensation Capacitor, C (pF)")
ylabel("Phase Margin (deg)")

% Add plot annotations.
opampdemo_annotate(4)

Figure contains an axes object. The axes object with xlabel Compensation Capacitor, C (pF), ylabel Phase Margin (deg) contains 2 objects of type line, text.

当 C = 2 pF (2e-12) 时,可获得 58 度的最大相位裕度。

对应于 C = 2 pF 的模型是 LTI 数组 b_array 中的第六个模型。您可以通过选择 LTI 数组 A_array 中的索引 6,绘制此模型的闭环系统的阶跃响应。

A_comp = A_array(:,:,6);
stepplot(A,"b:",A_comp,"b")
legend("Uncompensated (0 pF)","Compensated (2 pF)");

MATLAB figure

稳定时间进一步缩短(额外缩短了 85%)。

您可以使用 bode 命令叠加所有三种模型(开环模型、闭环模型、补偿后的闭环模型)的频率响应:

bodeplot(a,"r",A,"b:",A_comp,"b")
legend("a(s)","A(s)","A\_comp(s)");

MATLAB figure

通过添加补偿电容器,消除了闭环增益中的峰值,并大幅扩展了相位裕度。

总结

下面是此非反相反馈放大器电路设计中组件值选择的简要总结:

  • 最终组件值:R1 = 10 kOhm,R2 = 90 kOhm,C = 2 pF。

  • 选用电阻反馈网络 (R1,R2),实现 10 (20 dB) 的宽带放大器增益。

  • 使用反馈超前补偿来调节穿越频率附近的环路增益。补偿电容器 C 的值经过优化,可提供约 58 度的最大相位裕度。