数学建模
两个滑块放置在光滑地面上,质量分别为
m
1
m_1
m1和
m
2
m_2
m2,滑块之间通过刚度为
k
k
k的弹簧连接。假设
m
1
m_1
m1上的力可控,滑块各自的位移
x
1
,
x
2
x_1,x_2
x1,x2可测量,如何实现滑块
m
2
m_2
m2的位置跟随控制?
建立时域动态方程,并求解传递函数:
{
{
m
1
x
¨
1
=
F
−
k
(
x
1
−
x
2
)
m
2
x
¨
2
=
k
(
x
1
−
x
2
)
→
{
(
s
2
m
1
+
k
)
x
1
=
F
+
k
x
2
(
s
2
m
2
+
k
)
x
2
=
k
x
1
→
x
2
F
=
1
s
2
k
/
m
1
m
2
s
2
+
k
(
m
1
+
m
2
m
1
m
2
)
\left\{ \begin{array}{l} \left\{ \begin{array}{l} {m_1}{{\ddot x}_1} = F - k\left( {{x_1} - {x_2}} \right)\\ {m_2}{{\ddot x}_2} = k\left( {{x_1} - {x_2}} \right) \end{array} \right. \to \left\{ \begin{array}{l} \left( {{s^2}{m_1} + k} \right){x_1} = F + k{x_2}\\ \left( {{s^2}{m_2} + k} \right){x_2} = k{x_1} \end{array} \right.\\ \to {\textstyle{{{x_2}} \over F}} = {\textstyle{1 \over {{s^2}}}} \frac{k/m_1m_2}{s^2 + k(\frac{m_1+m_2}{m_1m_2})} \end{array} \right.
⎩
⎨
⎧{m1x¨1=F−k(x1−x2)m2x¨2=k(x1−x2)→{(s2m1+k)x1=F+kx2(s2m2+k)x2=kx1→Fx2=s21s2+k(m1m2m1+m2)k/m1m2
特性分析
考虑一个具体的案例:
x
2
F
=
1
s
2
100
s
2
+
100
{\textstyle{{{x_2}} \over F}} = {\textstyle{1 \over {{s^2}}}}{\textstyle{{100} \over {{s^2} + 100}}}
Fx2=s21s2+100100
结合物理意义,画出模型整体框图,并画一下波特图:
numerator = [100];
denominator = [1 0 100 0 0];
sys = tf(numerator, denominator)
figure
bode(sys);
% 绘制阶跃响应曲线
figure;
step(sys);
grid on;
分析一下谐振环节,画一下波特图:
numerator = [100];
denominator = [1 0 100];
sys = tf(numerator, denominator);
figure;
bode(sys);
% 绘制阶跃响应曲线
figure;
step(sys);
grid on;
级联控制器
控制结构
建立经典的三环控制结构:
加速度环控制器设计
建立加速度开环模型,对比不同控制器的闭环效果(见附录)。对于谐振系统,仅通过P或PI控制器无法完成闭环控制。选择表现相对比较好的PDF控制器,完成加速度控制器的设计:
numerator = 100;
denominator = [1, 0, 100];
sys_a_open = tf(numerator, denominator)
% 对比选择PID类型,并设计PID控制器
N1_pid_compare(sys_a_open, 2);
% 根据对比结果,选择PDF控制器
C_a = pidtune(sys_a_open, 'PDF');
% 将PID控制器与原始系统组合,加速度环闭环传函
sys_a_close = feedback(C_a * sys_a_open, 1);
速度环控制器设计
sys_v_open = sys_a_close * tf(1,[1 0])
% 对比选择PID类型,并设计PID控制器
N1_pid_compare(sys_v_open, 0.2);
% 根据对比结果,选择PDF控制器
C_v = pidtune(sys_v_open, 'PDF');
% 将PID控制器与原始系统组合,速度环闭环传函
sys_v_close = feedback(C_v * sys_v_open, 1);
位置环控制器设计
sys_x_open = sys_v_close * tf(1,[1 0])
% 对比选择PID类型,并设计PID控制器
N1_pid_compare(sys_x_open, 0.2);
% 自动设计PID控制器
C_x = pidtune(sys_x_open, 'PDF');
% 将PID控制器与原始系统组合
sys_x_close = feedback(C_x * sys_x_open, 1);
阶跃响应对比
% 阶跃响应对比
figure
step(sys_a_close, sys_v_close, sys_x_close);
grid on;
legend('sys\_a\_close', 'sys\_v\_close', 'sys\_x\_close');
title('Step Response with PID Controller');
xlabel('Time');
ylabel('Amplitude');
附录
function N1_pid_compare(sys, tEnd)
[ctrl_p,info_p] = pidtune(sys,'P');
sys_p = feedback(ctrl_p*sys, 1);
[ctrl_pi,info_pi] = pidtune(sys,'PI');
sys_pi = feedback(ctrl_pi*sys, 1);
[ctrl_pd,info_pd] = pidtune(sys,'PD');
sys_pd = feedback(ctrl_pd*sys, 1);
[ctrl_pdf,info_pdf] = pidtune(sys,'PDF');
sys_pdf = feedback(ctrl_pdf*sys, 1);
[ctrl_pid,info_pid] = pidtune(sys,'PID');
sys_pid = feedback(ctrl_pid*sys, 1);
[ctrl_pidf,info_pidf] = pidtune(sys,'PIDF');
sys_pidf = feedback(ctrl_pidf*sys,1);
figure()
step(sys_p, sys_pi, sys_pd, sys_pdf, sys_pid, sys_pidf);
xlim([0 tEnd]);
legend('P', 'PI','PD','PDF','PID','PIDF');
end