38、控制系统设计实例解析

控制系统设计实例解析

1. 非线性磁悬浮系统的PID控制响应

在非线性磁悬浮系统的仿真中,每次运行仿真时, Vapp Height Time 这些量会被保存到工作区,之后可以使用 plot 函数进行显示。以下是用于绘制这些量随时间变化的代码:

plot(Time, 50*Height, 'k-',Time,Vapp, 'k--.')
legend('50h(t)', 'v(t)')
text(1, 1.5, 'Initial conditions')
text(1.2, 1.45, 'h(0) = 0.022 m')
text(1.2, 1.4, 'v(0) = 0.991 V')
xlabel('Time (s)')
ylabel('V_{app} and h(t)')
axis([0 4 .7 1.6])

通过这段代码,我们可以直观地看到系统在初始条件和建模误差下的响应情况。

2. 倒立摆的超前控制设计
2.1 系统建模

考虑一个安装在圆盘上的倒立摆,控制系统的目标是控制圆盘的位置,同时保持摆杆直立。系统的运动方程如下:
[
\begin{cases}
mrl \cos(\theta) \frac{d^2\theta}{dt^2} + (J + mr^2) \frac{d^2\psi}{dt^2} = mrl \sin(\theta) (\frac{d\theta}{dt})^2 + b_2 \frac{d\psi}{dt} + \tau_m \
ml^2 \frac{d^2\theta}{dt^2} + mrl \cos(\theta) \frac{d^2\psi}{dt^2} = mgl \sin(\theta) + b_1 \frac{d\theta}{dt}
\end{cases}
]
其中,$m$是摆锤的质量,$l$是摆杆的长度,$r$是圆盘的半径,$J$是圆盘的转动惯量,$b_1$和$b_2$分别是摆杆和圆盘转动关节的摩擦系数,$\tau_m$是电机施加的扭矩。

当$\theta$和$\psi$很小时,对运动方程进行线性化处理。定义状态向量元素:
[
\begin{cases}
x_1(t) = \theta(t) \
x_2(t) = \psi(t) \
x_3(t) = \frac{d\theta}{dt} \
x_4(t) = \frac{d\psi}{dt}
\end{cases}
]
线性化后的方程可以写成矩阵形式:
[
M\dot{\mathbf{x}} = Q\mathbf{x} + W\tau_m
]
其中,
[
M =
\begin{bmatrix}
1 & 0 & 0 & 0 \
0 & 1 & 0 & 0 \
0 & 0 & ml^2 & mlr \
0 & 0 & mlr & J + mr^2
\end{bmatrix},
Q =
\begin{bmatrix}
0 & 0 & 1 & 0 \
0 & 0 & 0 & 1 \
mgl & 0 & b_1 & 0 \
0 & 0 & 0 & b_2
\end{bmatrix},
W =
\begin{bmatrix}
0 \
0 \
0 \
1
\end{bmatrix}
]

以下是实现该系统的MATLAB函数 Pendulum

function Plant = Pendulum
l = 0.3;
g = 9.81;
m = 0.2;
r = 0.15;
d = 0.01;
rho = 2500;
b1 = 0;
b2 = 0;
J = 0.25*pi*rho*d*r^4;
M = [1, 0, 0, 0; 0, 1, 0, 0; 0, 0, m*l^2 m*r*l; 0, 0, m*r*l, J+m*r^2];
Q = [0, 0, 1, 0; 0, 0, 0, 1; m*g*l, 0, b1, 0; 0, 0, 0, b2];
W = [0; 0; 0; 1];
A = inv(M)*Q;
B = inv(M)*W;
C = [1, 0, 0, 0; 0, 1, 0, 0];
D = [0];
Plant = ss(A, B, C, D);
end
2.2 系统分析
  • 极点分析 :通过在命令窗口输入 pole(Pendulum) ,可以得到系统的极点为 0 0 6.8923 -6.8923 。这表明系统是开环不稳定的。
  • 零点分析
    • 对于摆杆角度$\theta$的零点,输入 Plant = Pendulum; tzero(Plant(1, 1)) ,结果显示有两个零点,且这两个零点与极点重合。这意味着仅使用摆杆角度输出进行控制会忽略系统的一些动态特性。
    • 对于圆盘角度$\psi$的零点,输入 Plant = Pendulum; tzero(Plant(2, 1)) ,零点位于 -5.72 ,接近开环极点。这说明从圆盘位置观察摆杆的行为只是勉强可行。

由于单输入单输出(SISO)控制器在这种情况下表现不佳,因此我们将设计一个多输入单输出(MISO)控制器。

2.3 控制器设计
  • 内层控制环(保持摆杆直立)
    • 开环极点位于$\pm6.8923$,我们将超前零点放置在 -5 ,超前极点放置在 -10 ,得到超前控制器:
      [
      C_{\theta}(s) = -\frac{s + 5}{s + 10}
      ]
    • 以下是用于生成$\theta$控制环根轨迹的代码:
Plant = Pendulum;
PlantTheta = minreal(Plant(1,1));
ControlTheta = tf(-1*[1, 5], [1, 10]);
r = rlocus(ControlTheta*PlantTheta, logspace(-1, 1, 60));
plot(real(r), imag(r), 'kx')
sgrid
xlabel('Real axis')
ylabel('Imaginary axis')
- 通过`rlocfind`函数找到合适的增益为`4`,此时闭环极点约为`-4`、`-3 ± 11i`,虽然系统稳定,但阻尼效果不佳。
  • 外层控制环(控制圆盘位置)
    • 首先形成包含内层控制环的闭环系统:
ControlTheta = tf(-[1, 5], [1, 10]);
PlantPsi = feedback(Pendulum, 4*ControlTheta, [1], [1]);
- 此时`PlantPsi`有两个额外的原点极点,并且存在一个不稳定零点`5.72`。为了解决这个问题,我们再次使用超前控制器,零点位于`-1`,极点位于`-8`:

[
C_{\psi}(s) = -\frac{s + 1}{s + 8}
]
- 以下是绘制$\psi$控制环根轨迹的代码:

ControlTheta = tf(-[1, 5], [1, 10]);
PlantPsi = feedback(Pendulum, 4*ControlTheta, [1], [1]);
ControlPsi = tf(-[1, 1], [1, 8]);
r = rlocus(ControlPsi*PlantPsi(2,1), 0.35*logspace(-1, 1, 60));
plot(real(r), imag(r), 'kx')
sgrid;
xlabel('Real axis')
ylabel('Imaginary axis')
- 通过`rlocfind`函数找到合适的增益为`0.3`,将所有极点置于左半复平面。
  • 系统阶跃响应
ControlTheta = tf(-[1, 5], [1, 10]);
PlantPsi = feedback(Pendulum, 4*ControlTheta, [1], [1]);
ControlPsi = tf(-[1, 1], [1, 8]);
[y, t] = step(feedback(0.3*ControlPsi*PlantPsi, 1, [1], [2]));
plot(t, y(:,1), 'k-', t, y(:,2), 'k--')
xlabel('Time')
ylabel('Step response')
legend('\theta(t)', '\psi(t)')

通过这段代码,我们可以看到系统的阶跃响应,揭示了控制器和系统的非最小相位特性。

3. 磁悬浮飞轮的控制
3.1 系统建模

考虑一个磁悬浮飞轮系统,其目标是保持飞轮悬浮。系统自然不稳定,有四个输出量,分别对应惯性系中上下轴的$x$和$y$位置。四个线圈电流可用于控制轴周围的磁场。线性化后的运动方程如下:
[
\begin{cases}
\frac{d^2x_{cm}}{dt^2} = \frac{f_1 + f_3}{m} \
\frac{d^2y_{cm}}{dt^2} = \frac{f_2 + f_4}{m} \
\frac{d^2\varphi}{dt^2} = \beta\omega \frac{d\omega}{dt} + \frac{h}{J_{xx}} (f_1 - f_3) \
\frac{d^2\omega}{dt^2} = -\beta\omega \frac{d\varphi}{dt} + \frac{h}{J_{xx}} (f_4 - f_2)
\end{cases}
]
其中,$x_{cm}$和$y_{cm}$是飞轮质心的位置,$\varphi$和$\omega$是飞轮的姿态角,$m$是飞轮的质量,$J_{xx}$是飞轮绕非旋转轴的转动惯量,$h$是质心到执行器的距离,$f_i$是磁轴承施加的力,满足$f_i = k_1y_i + k_2u_i$,$k_1$是负弹簧常数,$k_2$是增益,$u_i$是线圈电流,$\omega$是飞轮的运行速度。

以下是实现该系统的MATLAB函数 Flywheel

function Plant = Flywheel(rpm)
if nargin < 1
    rpm = 0;
end;
Jxx = 1.563e-4;
Jzz = 1.141e-4;
beta = Jzz/Jxx;
m = 0.34;
h = 0.03;
k1 = 4.8e4;
k2 = 3.75;
omega = rpm/60*2*pi;
Pa = [zeros(1,4); zeros(1,4); 0, 0, 0, -beta; 0, 0, beta, 0];
Ba = [1/m, 0, 1/m, 0; 0, 1/m, 0, 1/m; 0, -h/Jxx, 0, h/Jxx; h/Jxx, 0, -h/Jxx, 0];
Ca = [1, 0, 0, h; 0, 1, -h, 0; 1, 0, 0, -h; 0, 1, h, 0];
A = [zeros(4), eye(4); k1*Ba*Ca, omega*Pa];
B = [zeros(4); k2*Ba];
C = [Ca, zeros(4)];
D = [zeros(4)];
Plant = ss(A, B, C, D);
end
3.2 系统分析

通过以下代码可以绘制飞轮在不同运行速度下的开环极点:

rpm = [linspace(0, 16000, 15), linspace(16100, 20000, 15)];
result = zeros(8, length(rpm));
for j = 1:length(rpm)
    result(:,j) = pole(Flywheel(rpm(j)));
end
plot(real(result'), imag(result'), 'kx')
grid
xlabel('Real axis')
ylabel('Imaginary axis')

结果显示,有两组极点关于虚轴对称。一组位于$\pm740$ rad/s(85 Hz),由平移模式引起,不随运行速度变化;另一组位于$\pm530$ rad/s(120 Hz),由两个旋转模式引起,受陀螺耦合影响。

当转速为 0 rpm时,系统可以进行静态解耦,得到两个旋转和两个平移的SISO系统。我们使用矩阵$T$进行解耦:
[
T =
\begin{bmatrix}
1 & 0 & 0 & 1 \
0 & 1 & -1 & 0 \
1 & 0 & 0 & -1 \
0 & 1 & 1 & 0
\end{bmatrix}
]
以下是生成解耦后的SISO系统并计算根轨迹的代码:

T = [1, 0, 0, 1;0, 1, -1, 0;1, 0, 0, -1;0, 1, 1, 0];
decoupFly = inv(T)*Flywheel(0)*T;
transFly = minreal(decoupFly(1,1));
rotFly = minreal(decoupFly(3,3));
Lead = tf([1, 400], [1, 1000]);
rlocus(Lead*transFly)
sgrid
xlabel('Real axis')
ylabel('Imaginary axis')
axis([-1000, 800, -2500, 2500])
figure(2)
rlocus(Lead*rotFly)
sgrid
axis([-1000, 800, -2500, 2500])
xlabel('Real axis')
ylabel('Imaginary axis')

通过在命令窗口输入以下命令,可以找到平移和旋转系统的稳定增益:

% 平移系统
T = [1, 0, 0, 1; 0, 1, -1, 0; 1, 0, 0, -1; 0, 1, 1, 0];
decoupFly = inv(T)*Flywheel(0)*T;
transFly = minreal(decoupFly(1,1));
Lead = tf([1, 400], [1, 1000]);
rlocus(Lead*transFly)
rlocfind(Lead*transFly)

% 旋转系统
T = [1, 0, 0, 1; 0, 1, -1, 0; 1, 0, 0, -1; 0, 1, 1, 0];
decoupFly = inv(T)*Flywheel(0)*T;
rotFly = minreal(decoupFly(3,3));
Lead = tf([1, 400], [1, 1000]);
rlocus(Lead*rotFly)
rlocfind(Lead*rotFly)

设计发现,相同的增益 5 可以同时稳定平移和旋转分量,这使得控制器的实现更加简单。

3.3 LQG控制器设计

设计LQG控制器需要选择合适的代价函数惩罚因子$R$。以下是计算最优闭环极点的代码:

[A, B, C, D] = ssdata(Flywheel);
L = 60;
clPoles = zeros(L,8);
R = logspace(-10, -6, L);
for i = 1:L
    [K, S, E] = lqr(A, B, C'*C, R(i)*eye(4));
    clPoles(i,:) = E;
end
plot(real(clPoles), imag(clPoles), 'kx')
sgrid
ylabel('Imaginary axis')
xlabel('Real axis')
text(-700,0,'R = 10^{-10}')
text(-1000,1000,'R = 10^{-6}')

为了比较超前控制和LQG控制的效果,我们使用以下代码计算两个控制器在相同初始条件下的响应:

Control = 4e4*eye(4)*tf([1, 400], [1, 1000]);
x0 = zeros(12, 1); x0(3) = 1e-3; t = linspace(0, 0.25, 1000);
yl = initial(feedback(Flywheel(10000), Control), x0, t);
[A, B, C , D] = ssdata(Flywheel);
K = lqr(A, B, C'*C, 1e-6*eye(4));
L = (lqr(A', C', B*B', 1e-6*eye(4)))';
ControlSS = reg(Flywheel, K, L);
x0 = zeros(16, 1); x0(3) = 1e-3;
ys= initial(feedback(Flywheel(10000), ControlSS, +1), x0, t);
plot(1000*yl(:,1), 1000*yl(:,2), 'k-', 1000*ys(:,1), 1000*ys(:,2), 'k--')
grid on
xlabel('x upper bearing')
ylabel('y upper bearing')
legend('Lead Control', 'LQG Control', 'Location', 'SouthWest')

结果表明,两种控制器都能使飞轮保持悬浮,性能相当。

以下是倒立摆控制系统的流程图:

graph TD;
    A[开始] --> B[建立倒立摆模型];
    B --> C[分析系统极点和零点];
    C --> D{是否适合SISO控制};
    D -- 否 --> E[设计MISO控制器];
    E --> F[设计内层控制环];
    F --> G[设计外层控制环];
    G --> H[计算系统阶跃响应];
    H --> I[结束];
    D -- 是 --> J[设计SISO控制器];
    J --> H;

通过以上的设计和分析,我们可以看到在不同的控制系统中,如何通过合理的建模、分析和控制器设计来实现系统的稳定运行。无论是倒立摆系统还是磁悬浮飞轮系统,都需要综合考虑系统的特性和控制目标,选择合适的控制策略。

控制系统设计实例解析

4. 总结与对比
4.1 不同系统的特点总结
系统名称 系统特性 控制难点 适用控制策略
非线性磁悬浮系统 自然不稳定,有多个可测量量 初始条件和建模误差影响大 PID控制
倒立摆系统 开环不稳定,存在零动态 单输出控制信息不足 多输入单输出(MISO)超前控制
磁悬浮飞轮系统 自然不稳定,运行速度影响极点分布 存在不稳定零点,需解耦处理 超前控制、LQG控制
4.2 控制策略效果对比
  • 倒立摆系统 :采用MISO超前控制,通过内层控制环保持摆杆直立,外层控制环控制圆盘位置。虽然内层控制环闭环极点稳定但阻尼不佳,经过外层控制环调整后,能将所有极点置于左半复平面,实现系统稳定。
  • 磁悬浮飞轮系统 :超前控制通过静态解耦将系统分解为多个SISO系统,相同增益可稳定平移和旋转分量,实现简单。LQG控制器通过选择合适的惩罚因子$R$,也能使系统稳定。对比两种控制策略,在相同初始条件下,它们都能使飞轮保持悬浮,性能相当。
5. 实际应用中的考虑因素
5.1 硬件实现
  • 传感器选择 :在倒立摆系统中,需要准确测量摆杆和圆盘的角度;磁悬浮飞轮系统中,要测量飞轮上下轴的$x$和$y$位置。选择精度高、响应快的传感器至关重要。
  • 执行器设计 :如倒立摆系统中的电机,磁悬浮飞轮系统中的线圈电流控制,执行器的性能直接影响控制效果。
5.2 环境干扰
  • 噪声影响 :传感器测量值可能受到噪声干扰,需要采用滤波算法进行处理,如卡尔曼滤波。
  • 外部扰动 :例如倒立摆系统可能受到空气流动的影响,磁悬浮飞轮系统可能受到磁场干扰,控制系统需要具备一定的抗干扰能力。
6. 拓展与展望
6.1 先进控制算法的应用
  • 模糊控制 :对于非线性系统,模糊控制可以不依赖精确的数学模型,根据经验规则进行控制,提高系统的鲁棒性。
  • 神经网络控制 :神经网络具有强大的非线性映射能力,可以自适应地调整控制参数,适用于复杂系统的控制。
6.2 多系统协同控制

在实际应用中,可能会遇到多个控制系统协同工作的情况。例如,多个磁悬浮飞轮系统同时运行,需要研究如何实现它们之间的协调控制,以提高整体性能。

以下是磁悬浮飞轮控制系统的流程图:

graph TD;
    A[开始] --> B[建立磁悬浮飞轮模型];
    B --> C[分析不同转速下的极点分布];
    C --> D{是否需要解耦};
    D -- 是 --> E[静态解耦得到SISO系统];
    E --> F[设计超前控制器];
    F --> G[计算稳定增益];
    G --> H[选择LQG控制器惩罚因子R];
    H --> I[对比超前控制和LQG控制效果];
    I --> J[结束];
    D -- 否 --> K[直接设计控制器];
    K --> I;

通过对这些控制系统设计实例的深入研究,我们可以掌握控制系统设计的基本方法和流程。从系统建模、分析到控制器设计,每一个环节都需要综合考虑系统的特性和实际应用需求。在未来的研究和应用中,我们可以不断探索更先进的控制算法和技术,以提高控制系统的性能和可靠性。无论是在工业自动化、航空航天还是其他领域,控制系统都起着至关重要的作用,我们需要不断努力,推动控制技术的发展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值