第九章控制系统仿真实战9.1 控制系统基础回顾9.1.1 开环与闭环系统开环系统参考输入 r(t) ──→ [控制器 C(s)] ──→ [被控对象 G(s)] ──→ 输出 y(t) 特点 无反馈不知道实际输出 简单但抗干扰能力差 适合精度要求不高、干扰小的场合 例洗衣机定时程序、微波炉加热时间闭环系统反馈控制参考输入 r(t) ──→ [Sum] ──→ [控制器 C(s)] ──→ [被控对象 G(s)] ──→ 输出 y(t) ↑ │ └──────────────── 反馈 ───────────────────────────────┘ 误差e(t) r(t) - y(t) 特点 有反馈实时修正误差 抗干扰能力强 适合大多数工业控制场合 例温控系统、电机速度控制、飞行控制闭环传递函数T(s) C(s)·G(s) / (1 C(s)·G(s)) 稳态增益s→0 T(0) C(0)·G(0) / (1 C(0)·G(0)) 稳态误差 e_ss 1 - T(0)单位阶跃输入9.1.2 传递函数建模一阶系统G(s) K / (τs 1) 参数含义 K静态增益稳态输出/稳态输入 τ时间常数到达63.2%稳态值的时间 阶跃响应 y(t) K(1 - e^(-t/τ)) Simulink 配置 Transfer Fcn Numerator [K] Denominator [tau, 1]二阶系统G(s) ωn² / (s² 2ζωns ωn²) 参数含义 ωn自然频率rad/s ζ阻尼比 阻尼比分类 ζ 1过阻尼无振荡响应慢 ζ 1临界阻尼最快无振荡 0 ζ 1欠阻尼有振荡有超调 ζ 0无阻尼持续振荡 Simulink 配置 Transfer Fcn Numerator [wn^2] Denominator [1, 2*zeta*wn, wn^2]9.1.3 状态空间建模状态空间方程 ẋ Ax Bu 状态方程 y Cx Du 输出方程 其中 x状态向量n×1 u输入向量m×1 y输出向量p×1 A系统矩阵n×n B输入矩阵n×m C输出矩阵p×n D直接传递矩阵p×m Simulink 配置State-Space 模块 A [0 1; -wn^2 -2*zeta*wn] B [0; wn^2] C [1 0] D [0] Initial conditions [0; 0]9.2 PID 控制器设计9.2.1 PID 控制原理PID 控制律 u(t) Kp·e(t) Ki·∫e(t)dt Kd·de(t)/dt 三个分量的作用 比例PKp·e(t) → 与当前误差成正比 → 误差大则控制量大 → 增大Kp响应加快但可能振荡 → 纯P控制存在稳态误差 积分IKi·∫e(t)dt → 与误差积分成正比 → 消除稳态误差 → 增大Ki消差快但可能超调和振荡 → 积分饱和问题 微分DKd·de(t)/dt → 与误差变化率成正比 → 预测误差趋势提前响应 → 增大Kd减小超调但对噪声敏感 传递函数形式 C(s) Kp Ki/s Kd·s (Kd·s² Kp·s Ki) / s9.2.2 Simulink 中搭建 PID 控制器方法一使用内置 PID Controller 模块位置Continuous → PID Controller 参数配置 ControllerP / PI / PD / PID选择控制器类型 FormParallel并联或 Ideal理想 Proportional (P)Kp Integral (I)Ki Derivative (D)Kd Filter coefficient (N)微分滤波系数防止高频噪声放大 Anti-windup积分抗饱和 Clamping限幅法 Back-calculation反算法 Output saturation输出限幅 Upper limit输出上限 Lower limit输出下限方法二手动搭建 PID理解原理内部结构 误差e ──┬──→ [Gain Kp] ──────────────────────────→ [Sum ] ──→ u │ ↑ ├──→ [Gain Ki] ──→ [Integrator] ─────────────────┤ │ ↑ └──→ [Gain Kd] ──→ [Derivative/Transfer Fcn] ─────┘ 注意实际中微分项通常用带滤波的近似 Kd·s → Kd·N·s / (s N) N 为滤波系数通常 N100 避免纯微分对噪声的放大9.2.3 PID Tuner 自动整定Simulink 提供 PID Tuner 工具可以自动计算 PID 参数。使用步骤Step 1在模型中添加 PID Controller 模块 Step 2双击 PID Controller 模块 Step 3点击 Tune... 按钮 Step 4PID Tuner 自动分析被控对象 Step 5调整响应速度和鲁棒性滑块 Step 6点击 Update Block 应用参数PID Tuner 界面说明左侧 Response Time响应时间 向左拖动 → 响应更快但可能不稳定 向右拖动 → 响应更慢但更稳定 Transient Behavior瞬态行为 向左拖动 → 更激进超调大 向右拖动 → 更保守超调小 右侧 Step Response阶跃响应预览 显示上升时间、超调量、调节时间 底部 Kp, Ki, Kd 参数值自动计算 可以手动微调9.2.4 PID 参数调整与仿真验证手动调参经验法则Ziegler-Nichols 法Step 1只用比例控制Ki0, Kd0 逐渐增大 Kp直到系统出现持续振荡 记录此时的 Kp Ku临界增益 记录振荡周期 Tu Step 2根据 Z-N 表计算参数 控制器类型 Kp Ki Kd P 0.5Ku - - PI 0.45Ku 0.54Ku/Tu - PID 0.6Ku 1.2Ku/Tu 0.075Ku·Tu参数调整效果对比%% 对比不同 PID 参数的响应% 被控对象G(s) 1/(s1)²% 参考输入单位阶跃params[1.0,0.0,0.0;% 纯P控制1.0,0.5,0.0;% PI控制1.0,0.5,0.1;% PID控制2.0,1.0,0.2;% 更激进的PID];labels{P,PI,PID,PID(激进)};colors{b,r,g,m};figure;hold on;fori1:size(params,1)assignin(base,Kp,params(i,1));assignin(base,Ki,params(i,2));assignin(base,Kd,params(i,3));simOutsim(pid_demo,StopTime,20);tsimOut.tout;ysimOut.yout{1}.Values.Data;plot(t,y,colors{i},LineWidth,2,DisplayName,labels{i});endplot([020],[11],k--,DisplayName,参考值);xlabel(时间 (s));ylabel(输出);title(不同 PID 参数的阶跃响应);legend;grid on;9.3 实战直流电机速度控制9.3.1 电机数学模型直流电机电气-机械方程电气方程 L·di/dt R·i V - Ke·ω 机械方程 J·dω/dt B·ω Kt·i - TL 参数说明 V电枢电压输入 i电枢电流 ω转速输出 TL负载转矩 R电枢电阻Ω L电枢电感H Ke反电动势系数V·s/rad Kt转矩系数N·m/A J转动惯量kg·m² B粘性摩擦系数N·m·s/rad传递函数忽略电感Lω(s)/V(s) Kt / ((R·J)s (R·B Ke·Kt)) 化简为标准一阶形式 G(s) K_motor / (τ_motor·s 1) 其中 K_motor Kt / (R·B Ke·Kt) τ_motor R·J / (R·B Ke·Kt)典型参数小型直流电机R1.0;% 电枢电阻 1ΩL0.01;% 电枢电感 10mH通常可忽略Ke0.01;% 反电动势系数Kt0.01;% 转矩系数J0.01;% 转动惯量B0.1;% 粘性摩擦% 计算传递函数参数K_motorKt/(R*BKe*Kt);tau_motorR*J/(R*BKe*Kt);fprintf(电机增益%.4f rad/s/V\n,K_motor);fprintf(电机时间常数%.4f s\n,tau_motor);9.3.2 搭建电机仿真模型Simulink 模型结构[电压V] ──→ [Transfer Fcn G(s)] ──→ [转速ω] ──→ [Scope] Transfer Fcn 参数 Numerator [K_motor] Denominator [tau_motor, 1]完整电机模型含电感使用 State-Space 模块 状态变量x [i; ω]电流和转速 A [-R/L, -Ke/L; Kt/J, -B/J ] B [1/L; 0] C [0, 1] 输出转速 D [0] Initial conditions [0; 0]9.3.3 加入 PID 控制器闭环速度控制系统参考转速 ──→ [Sum -] ──→ [PID] ──→ [电压限幅] ──→ [电机G(s)] ──→ 实际转速 ↑ │ └──────────────────────────────────────────────────────┘ 电压限幅Saturation Upper limit 12 最大电压 12V Lower limit -12 最小电压 -12V允许反转完整 Simulink 模型搭建Step 1定义参数MATLAB R1; L0.01; Ke0.01; Kt0.01; J0.01; B0.1; K_motor Kt/(R*BKe*Kt); tau_motor R*J/(R*BKe*Kt); Kp10; Ki5; Kd0.1; speed_ref 100; % 参考转速 100 rad/s Step 2添加模块 ① StepFinal value speed_ref参考转速 ② Sum符号 -误差计算 ③ PID ControllerKp, Ki, Kd ④ Saturation±12V 限幅 ⑤ Transfer Fcn电机模型 ⑥ Mux Scope显示参考和实际转速 Step 3连接并运行 Stop Time 5s 观察转速跟踪效果9.3.4 仿真结果分析%% 电机速度控制仿真分析% 参数定义R1;Ke0.01;Kt0.01;J0.01;B0.1;K_motorKt/(R*BKe*Kt);tau_motorR*J/(R*BKe*Kt);Kp10;Ki5;Kd0.1;speed_ref100;% 运行仿真simOutsim(motor_speed_control,StopTime,5);tsimOut.tout;ysimOut.yout{1}.Values.Data;% 实际转速% 性能指标计算refspeed_ref;% 上升时间10%~90%idx_10find(y0.1*ref,1);idx_90find(y0.9*ref,1);rise_timet(idx_90)-t(idx_10);% 超调量overshoot(max(y)-ref)/ref*100;% 调节时间进入±2%误差带band0.02*ref;settledfind(abs(y-ref)band,1,last);if~isempty(settled)settling_timet(settled);elsesettling_time0;end% 稳态误差ss_errorabs(ref-y(end));fprintf( 电机速度控制性能指标 \n);fprintf(上升时间%.3f s\n,rise_time);fprintf(超调量%.1f%%\n,overshoot);fprintf(调节时间%.3f s\n,settling_time);fprintf(稳态误差%.2f rad/s\n,ss_error);% 绘图figure;subplot(2,1,1);plot(t,y,b-,LineWidth,2);hold on;plot(t,ref*ones(size(t)),r--,LineWidth,1.5);plot(t,(refband)*ones(size(t)),g:,LineWidth,1);plot(t,(ref-band)*ones(size(t)),g:,LineWidth,1);xlabel(时间 (s));ylabel(转速 (rad/s));title(电机转速响应);legend(实际转速,参考转速,±2%误差带);grid on;subplot(2,1,2);errorref-y;plot(t,error,r-,LineWidth,1.5);xlabel(时间 (s));ylabel(误差 (rad/s));title(跟踪误差);grid on;9.4 实战倒立摆控制9.4.1 倒立摆数学模型倒立摆是控制理论中的经典问题用于验证控制算法。系统描述 小车在水平轨道上运动 摆杆铰接在小车上可以自由旋转 目标通过控制小车位置使摆杆保持竖直 物理参数 M小车质量kg m摆杆质量kg l摆杆半长m g重力加速度9.81 m/s² b小车摩擦系数 线性化方程在竖直平衡点附近 (Mm)ẍ bẋ - mlθ̈ F (Iml²)θ̈ - mglθ mlẍ 其中 x小车位置 θ摆杆角度θ0为竖直 F施加在小车上的力控制输入 I摆杆转动惯量 ml²/39.4.2 状态空间建模%% 倒立摆状态空间模型% 物理参数M0.5;% 小车质量 kgm0.2;% 摆杆质量 kgb0.1;% 摩擦系数l0.3;% 摆杆半长 mg9.81;% 重力加速度Im*l^2/3;% 转动惯量% 中间变量pI*(Mm)M*m*l^2;% 状态变量x [x; ẋ; θ; θ̇]% 输入u F力% 输出y [x; θ]A[0,1,0,0;0,-(Im*l^2)*b/p,(m^2*g*l^2)/p,0;0,0,0,1;0,-(m*l*b)/p,m*g*l*(Mm)/p,0];B[0;(Im*l^2)/p;0;m*l/p];C[1,0,0,0;% 输出小车位置0,0,1,0];% 输出摆杆角度D[0;0];% 验证系统sysss(A,B,C,D);fprintf(系统极点\n);disp(eig(A))% 注意有正实部极点系统不稳定需要控制器9.4.3 LQR 控制器设计LQR线性二次型调节器是最优控制方法自动计算最优反馈增益。%% LQR 控制器设计% 权重矩阵设计% Q状态权重越大表示越重视该状态的调节% R控制输入权重越大表示越重视节能Qdiag([1,1,10,10]);% 角度和角速度权重更大R0.001;% 控制力权重% 计算 LQR 增益Klqr(A,B,Q,R);fprintf(LQR 增益矩阵 K\n);disp(K)% 验证闭环稳定性A_clA-B*K;fprintf(闭环极点\n);disp(eig(A_cl))% 所有极点应在左半平面负实部在 Simulink 中实现 LQR 控制模型结构 [State-Space] ──→ [Mux] ──→ [Gain(-K)] ──→ [Sum] ──→ [State-Space] ↑ ↑ └────────────────────────────────────────┘状态反馈 State-Space 参数 A A上面计算的矩阵 B B C eye(4)输出所有状态 D zeros(4,1) Initial conditions [0; 0; 0.1; 0]初始角度0.1rad Gain 参数 Gain KLQR增益矩阵 Multiplication Matrix(K*u)9.4.4 仿真验证%% 倒立摆 LQR 控制仿真% 参数已在上面定义% 运行仿真simOutsim(inverted_pendulum,StopTime,10);tsimOut.tout;statessimOut.yout{1}.Values.Data;% [x; x_dot; theta; theta_dot]xstates(:,1);% 小车位置thetastates(:,3);% 摆杆角度% 绘图figure;subplot(2,1,1);plot(t,x,b-,LineWidth,2);xlabel(时间 (s));ylabel(小车位置 (m));title(倒立摆控制 - 小车位置);grid on;subplot(2,1,2);plot(t,theta*180/pi,r-,LineWidth,2);hold on;plot([010],[00],k--);xlabel(时间 (s));ylabel(摆杆角度 (°));title(倒立摆控制 - 摆杆角度);grid on;fprintf(最终小车位置%.4f m\n,x(end));fprintf(最终摆杆角度%.4f°\n,theta(end)*180/pi);综合实战完整的温度控制系统系统描述工业烤箱温度控制 被控对象烤箱热力学模型一阶纯延迟 控制器PID 目标将温度从室温25°C控制到设定温度200°C 烤箱传递函数含纯延迟 G(s) K·e^(-Ls) / (τs 1) K 2.0增益°C/kW τ 60s热时间常数 L 5s纯延迟传感器延迟%% 温度控制系统参数K_oven2.0;% 烤箱增益tau_oven60;% 时间常数 60sL_delay5;% 纯延迟 5sT_ambient25;% 室温T_setpoint200;% 目标温度% PID 参数使用 IMC 整定法lambda30;% 期望闭环时间常数Kp(tau_ovenL_delay/2)/(K_oven*(lambdaL_delay/2));KiKp/(tau_ovenL_delay/2);KdKp*tau_oven*L_delay/2/(tau_ovenL_delay/2);fprintf(PID 参数Kp%.3f, Ki%.4f, Kd%.3f\n,Kp,Ki,Kd);% 功率限制P_max10;% 最大加热功率 10kWP_min0;% 最小功率不能制冷Simulink 模型搭建[Step(T_setpoint)] ──→ [Sum -] ──→ [PID] ──→ [Saturation(0~10kW)] ↑ │ │ ↓ │ [Transport Delay(L)] │ │ │ ↓ │ [Transfer Fcn G(s)] │ │ └──────────────────────────────┘ Transport Delay 参数 Time delay L_delay纯延迟 Transfer Fcn 参数 Numerator [K_oven] Denominator [tau_oven, 1] 仿真时间Stop Time 600s10分钟本章小结本章核心要点 ✅ 闭环系统误差 参考 - 输出控制器根据误差调节 ✅ 一阶系统G(s)K/(τs1)时间常数τ决定响应速度 ✅ 二阶系统阻尼比ζ决定超调量自然频率ωn决定响应速度 ✅ PID三个分量P消误差、I消稳态误差、D预测趋势 ✅ PID Tuner自动整定工具调整响应速度和鲁棒性滑块 ✅ 电机控制传递函数 G(s)K_motor/(τ_motor·s1) ✅ 状态空间ẋAxBu, yCxDu适合多变量系统 ✅ LQR控制最优状态反馈通过权重矩阵Q和R调整性能 ✅ 纯延迟Transport Delay 模块影响控制系统稳定性课后练习搭建二阶系统仿真G(s) 25/(s²4s25)ωn5, ζ0.4观察欠阻尼响应超调量、振荡频率修改ζ1.0观察临界阻尼响应PID 控制器设计被控对象G(s) 1/(s1)²使用 PID Tuner 自动整定手动微调使超调量 10%调节时间 5s直流电机速度控制搭建完整的电机速度控制系统分别测试 P、PI、PID 控制器的性能加入负载扰动在仿真中途改变负载观察抗扰性能倒立摆控制挑战搭建倒立摆状态空间模型设计 LQR 控制器修改初始角度0.1rad → 0.3rad观察控制效果思考初始角度多大时控制器会失效