控制系统建模仿真(七):控制系统的经典设计方法

前言

欢迎进入第七章:控制系统的经典设计方法

在经历了前六章的建模、分析和非线性仿真后,你已经从一名"观测者"进化为了"诊断师"。而从本章开始,你将正式成为一名**"设计师"**。

如果说前几章是在研究"这个病人的身体状况如何",那么第七章就是**"对症下药"。当系统的稳定性储备不足、反应太慢或者超调太大时,我们需要设计补偿器(Compensator)或反馈阵(Feedback Gain)来改造它。本章涵盖了从经典的 超前滞后校正到现代控制理论入门的 极点配置最优控制(LQR)**。

我们将通过 MATLAB 的自动化设计工具和 Simulink 的结构化建模,手把手教你如何"医治"一个性能不合格的系统。


一、 核心原理与知识点汇总

  1. 串联校正(Lead/Lag):通过在主回路串联补偿环节,利用相位超前提高稳定性,利用相位滞后改善稳态精度。
  2. 极点配置(Pole Placement):针对状态空间模型,通过状态反馈将系统的闭环极点强制移动到你预设的"理想位置"。
  3. 最优控制(LQR):不再手动指定极点,而是定义一个"代价函数"(权衡误差和能量消耗),让 MATLAB 自动算出最完美的反馈增益。
  4. 多变量系统解耦:处理多个输入互相干扰的复杂系统,使其变成互不干涉的单回路。

二、 必会 MATLAB 函数清单

1. sisotool(sys) ------ 交互式设计万能工具箱

  • 功能:打开一个集根轨迹、波特图、阶跃响应于一体的图形化界面,支持鼠标拖拽极点直接设计控制器。

  • 输入 :受控对象模型 G

  • 代码示例

    matlab 复制代码
    G = tf(1, [1 1 0]); % 建立一个不稳定的积分环节
    sisotool(G); 
    % 讲解:执行后会弹出窗口。你可以直接在波特图上增加"Lead"环节,实时观察阶跃响应变快的过程。

2. place(A, B, P) ------ 极点配置设计

  • 功能 :计算状态反馈增益矩阵 KKK,使闭环系统 (A−BK)(A-BK)(A−BK) 的极点正好等于理想极点向量 PPP。

  • 输入 :系统阵 AAA、输入阵 BBB、期望极点位置 PPP。

  • 返回值 :反馈增益矩阵 KKK。

  • 代码示例

    matlab 复制代码
    A = [0 1; -2 -3]; B = [0; 1];
    P = [-2+2i, -2-2i]; % 我们希望系统具有阻尼比0.707的特性
    K = place(A, B, P);
    disp('计算出的反馈增益 K:'); disp(K);
    % 讲解:这是现代控制理论的"上帝之手",只要系统可控,你可以让它具有任何你想要的动态特性。
3. lqr(A, B, Q, R) ------ 线性二次型最优调节器
  • 功能 :寻找最优反馈增益 KKK,使代价函数 J=∫(xTQx+uTRu)dtJ = \int (x^TQx + u^TRu) dtJ=∫(xTQx+uTRu)dt 最小。

  • 输入 :系统参数 A,BA, BA,B,误差权重阵 QQQ,能量消耗权重阵 RRR。

  • 返回值 :最优增益 KKK。

  • 代码示例

    matlab 复制代码
    A = [0 1; -2 -3]; B = [0; 1];
    Q = [100 0; 0 1]; % 高度重视位置误差
    R = 1;           % 对控制能量消耗要求一般
    K_opt = lqr(A, B, Q, R);
    disp('最优增益 K_opt:'); disp(K_opt);
    % 讲解:Q越大,系统反应越快但越费电;R越大,系统越省电但反应越肉。LQR 帮你做平衡。

在第七章的设计验证中,以下模块是你的"实验台核心":

模块名称 所在库 功能讲解与用处
Transfer Fcn (传递函数) Continuous 用处 :代表受控对象 G(s)G(s)G(s)。
Zero-Pole (零极点) Continuous 用处 :输入形如 [0], [-1 -2], [10],适合直接放入你设计的校正环节。
State-Space (状态空间) Continuous 用处 :验证状态反馈。双击填入 A-B*K 或使用外部输入反馈 u=−Kxu=-Kxu=−Kx。
Matrix Gain (矩阵增益) Math Operations 用处 :将 Gain 模块的 Multiplication 属性设为 Matrix(K*u),用于实现 KxKxKx 反馈。
Sum (求和) Math Operations 用处 :可以将符号改为 +- 以建立负反馈回路。

四、 阶段性综合实战 (Milestone 3)

项目:倒立摆平衡控制(简化版)
背景 :倒立摆是一个不稳定的系统。其线性化模型为:x˙=Ax+Bu\dot{x} = Ax + Bux˙=Ax+Bu,其中 A=[0,1;10,0],B=[0;1]A = [0, 1; 10, 0], B = [0; 1]A=[0,1;10,0],B=[0;1]。
任务

  1. 计算该不稳定的开环极点。
  2. 使用 place 函数设计状态反馈,使闭环极点位于 [−2,−2][-2, -2][−2,−2]。
  3. 在 Simulink 中搭建该反馈系统,验证初值响应(从倾斜恢复到垂直)。

MATLAB 设计脚本:

matlab 复制代码
%% 1. 系统定义
%% 1. 系统定义
A = [0 1; 10 0]; % 10代表倒立摆的不稳定性
B = [0; 1];
C = [1 0]; D = 0;
poles_open = eig(A); % 结果包含 +3.16,说明系统会自动倒下

%% 2. 控制器设计 (极点配置)
P_des = [-2, -2]; % 期望闭环极点
K = acker(A, B, P_des);
fprintf('为了稳定倒立摆,需要的反馈增益 K = [%.2f, %.2f]\n', K(1), K(2));

%% 3. 闭环系统验证
sys_cl = ss(A - B*K, B, C, D);
t = 0:0.01:5;
initial(sys_cl, [0.1; 0]); % 给摆一个0.1弧度的初始偏差
title('倒立摆从0.1rad偏差恢复的过程');
grid on;

Simulink 搭建教程(详细):

  1. 新建模型 ,拖入 State-Space 模块。

  2. 设置受控对象 :双击模块,A 填 [0 1; 10 0],B 填 [0; 1],C 填 eye(2)(为了输出所有状态),D 填 [0; 0]

  3. 设置初值 :在 Initial conditions 填入 [0.1; 0]

  4. 加入反馈 :从输出连线,接一个 Gain 模块。

    • 双击 Gain,值填入我们在 MATLAB 算的变量 K
    • 关键点MultiplicationMatrix (K*u)
  5. 负反馈 :将 Gain 的输出接回一个 Sum 模块的 - 端。

  6. 观察 :接上 Scope,点击 Run。你会看到状态曲线从 0.1 逐渐平滑回到了 0。


五、 第七章 语法与编程注意点

  1. 可控性检查 :在调用 place 之前,必须先用 rank(ctrb(A,B)) 检查。如果系统不可控,place 会报错。
  2. LQR 的 Q 阵选择 :QQQ 必须是对称半正定矩阵。初学者常用 Q = C' * Ceye(n)
  3. 分号的重要性:在处理大型矩阵设计时,结尾不加分号会导致屏幕被无用数据刷屏。

学习复习建议

  • 重点攻克sisotool。这是很多控制工程师在实际工作中使用率最高的工具。
  • 思考题 :在倒立摆例子中,如果你把期望极点 P_des[-2, -2] 改为 [-10, -10],控制电压(输入 uuu)会发生什么变化?
    • 提示:反应会极快,但所需的电机功率会巨大,甚至超过第六章讲的"饱和"限制。

经典设计方法就像是给系统做"微创手术"。如果你已经掌握了如何配置极点和最优控制,第八章我们将专门攻克工业界的"常青树"------PID 控制器。准备好开始第八章了吗?

相关推荐
简简单单做算法9 小时前
基于GA遗传优化的Transformer-LSTM网络模型的时间序列预测算法matlab性能仿真
深度学习·matlab·lstm·transformer·时间序列预测·ga遗传优化·电池剩余寿命预测
t1987512811 小时前
光伏发电MPPT(最大功率点跟踪)MATLAB仿真程序
开发语言·matlab
551只玄猫13 小时前
【数学建模 matlab 实验报告10】插值
开发语言·数学建模·matlab·课程设计·插值·实验报告
foundbug99913 小时前
Matlab基于分布式模型预测控制的多固定翼无人机共识控制
分布式·matlab·无人机
可编程芯片开发14 小时前
基于QLearning强化学习的输电线路拟声驱鸟策略算法matlab仿真
matlab·强化学习·qlearning·输电线路·驱鸟策略
3GPP仿真实验室15 小时前
【MATLAB源码】水声:时变信道估计仿真平台
开发语言·matlab
Evand J16 小时前
【MATLAB例程分享】三维非线性目标跟踪,观测为:距离+方位角+俯仰角,使用无迹卡尔曼滤波(UKF)与RTS平滑,高精度定位
开发语言·matlab·目标跟踪
机器学习之心16 小时前
信号分解和小波阈值联合降噪 | NRBO-FMD基于牛顿拉夫逊算法优化特征模态分解+皮尔逊系数+小波阈值降噪+信号重构,MATLAB代码
算法·matlab·重构·nrbo-fmd·特征模态分解
551只玄猫17 小时前
【数学建模 matlab 实验报告11】拟合
开发语言·数学建模·matlab·数据分析·课程设计·实验报告·拟合
slandarer1 天前
MATLAB | 如何使用MATLAB绘制弧形图/弧长链接图(arc diagram)
matlab