控制系统设计实例解析
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,接近开环极点。这说明从圆盘位置观察摆杆的行为只是勉强可行。
-
对于摆杆角度$\theta$的零点,输入
由于单输入单输出(SISO)控制器在这种情况下表现不佳,因此我们将设计一个多输入单输出(MISO)控制器。
2.3 控制器设计
-
内层控制环(保持摆杆直立)
:
-
开环极点位于$\pm6.8923$,我们将超前零点放置在
-5,超前极点放置在-10,得到超前控制器:
[
C_{\theta}(s) = -\frac{s + 5}{s + 10}
] - 以下是用于生成$\theta$控制环根轨迹的代码:
-
开环极点位于$\pm6.8923$,我们将超前零点放置在
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;
通过对这些控制系统设计实例的深入研究,我们可以掌握控制系统设计的基本方法和流程。从系统建模、分析到控制器设计,每一个环节都需要综合考虑系统的特性和实际应用需求。在未来的研究和应用中,我们可以不断探索更先进的控制算法和技术,以提高控制系统的性能和可靠性。无论是在工业自动化、航空航天还是其他领域,控制系统都起着至关重要的作用,我们需要不断努力,推动控制技术的发展。
超级会员免费看

被折叠的 条评论
为什么被折叠?



