反馈放大器设计
R2026b此示例说明如何使用 Control System Toolbox™ 设计非反相反馈放大器电路。该设计基于运算放大器展开,运算放大器是电气反馈电路中的标准构建模块。
此示例说明如何使用 Control System Toolbox 提供的工具来对真实的电气系统进行设计、建模和分析。
运算放大器描述
电气反馈电路的标准构建模块是运算放大器 (op amp),这是一种差分电压放大器,设计为具有极高的 DC 增益(通常在 1e5 到 1e7 范围内)。
运算放大器的电气符号如下所示。

此示例假设使用一个具有两个极点(频率分别为 w1 和 w2)和高 DC 增益 (a0) 的未补偿运算放大器。假设此运算放大器在线性模式(未饱和)下工作,因此其开环传递函数可表示为一个线性时不变 (LTI) 系统,如上所示。
尽管物理运算放大器存在更高阶的极点,但此示例假设这些极点位于幅值远低于 1 的频率范围内。
此运算放大器的开环传递函数如下。
对于此示例,假设有以下传递函数参数。
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]};

使用 stepplot 和 dcgain 命令查看 a 的归一化阶跃响应。
a_norm = a / dcgain(a); stepplot(a_norm,"r") title("Normalized Open-Loop Step Response") ylabel("Normalized Amplitude")

右键点击绘图并选择特征 > 稳定时间以显示稳定时间。将鼠标悬停在稳定时间标记上,以显示稳定时间的精确值。
反馈放大器
现在,添加一个电阻反馈网络,并将系统连接为非反相放大器。

此反馈网络 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)","","","","");

使用负反馈降低低频 (LF) 增益,会使系统带宽(定义为增益较其最大值下降 3 dB 处的频率)相应增大。
这种增益与带宽之间的权衡是设计反馈放大器电路的一个强大工具。
由于增益现在主要由反馈网络决定,因此需要关注的一个有用关系是该增益对运算放大器固有(开环)增益变化的灵敏度。
但是,在推导系统灵敏度之前,最好先定义环路增益 L,即信号在环路中传递时经历的总增益。
L = a * b;
您将使用此量来评估系统的灵敏度和稳定裕度。
系统灵敏度 S 表示 A 对 a 变化的灵敏度。
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");

极低的低频灵敏度(约 -80 dB)表明设计的闭环增益受开环增益变化的影响极小。由于制造差异、温度变化等原因,这种 a 的变化很常见。
您可以使用 stepplot 命令检查 A 的阶跃响应:
stepplot(A)
% Add plot annotations.
opampdemo_annotate(2)
采用反馈大幅缩短了稳定时间(约 98%)。但是,阶跃响应现在显示大量振铃,这表明稳定裕度差。
您可以使用 margin 命令绘制环路增益 L 来分析稳定裕度:
margin(L)

得到的绘图表明相位裕度小于 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)

使用 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)

当 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)");

稳定时间进一步缩短(额外缩短了 85%)。
您可以使用 bode 命令叠加所有三种模型(开环模型、闭环模型、补偿后的闭环模型)的频率响应:
bodeplot(a,"r",A,"b:",A_comp,"b") legend("a(s)","A(s)","A\_comp(s)");

通过添加补偿电容器,消除了闭环增益中的峰值,并大幅扩展了相位裕度。
总结
下面是此非反相反馈放大器电路设计中组件值选择的简要总结:
最终组件值:R1 = 10 kOhm,R2 = 90 kOhm,C = 2 pF。
选用电阻反馈网络 (R1,R2),实现 10 (20 dB) 的宽带放大器增益。
使用反馈超前补偿来调节穿越频率附近的环路增益。补偿电容器 C 的值经过优化,可提供约 58 度的最大相位裕度。