基于MATLAB的一阶倒立摆系统的PID数字仿真设计

摘要

    本实验旨在设计并仿真控制一阶倒立摆系统,首先通过分析建立该系统的数学模型,并进行理论计算,并使用Matlab进行仿真研究;其次,通过理论方法设计PID控制器,确定控制器结构和参数;最后,通过Matlab仿真控制效果,验算性能指标并分析控制效果。实验过程中使用的数学模型来源于经典的倒立摆控制问题,采用PID控制方法优化系统性能。

一.一阶倒立摆系统的数学模型建立

1.1 一阶倒立摆系统的运动方程式建立

    如上图所示,一个可以活动的小车上立着一根不稳定随时会倒下的杆。小车的轮子由电机控制,可以控制小车受到的力的大小和方向。我们可以获取小车的位置和速度,杆相对于垂直位置的倾角和杆的速度。目标就是保持杆不倒下来,同时小车静止在中间的位置。

5eff18188c80429fb8939b96f9013c37.png

对小车在水平方向上进行受力分析可得:M\frac{\mathrm{d^{2}}x }{\mathrm{d} t^{2}}+b\frac{\mathrm{d} x}{\mathrm{d} t}+N_{1}=F

663b26ab7a734493bc7696cde98452d4.png

对摆在水平方向上进行受力分析可得:N_{2}=m\frac{\mathrm{d^{2}} }{\mathrm{d} t}(x+lsin\theta )

    即:N_{2}=m\frac{\mathrm{d^{2}x} }{\mathrm{d} t^{2}}+ml\frac{\mathrm{d^{2}}\theta }{\mathrm{d} t^{2}}cos(\frac{\mathrm{d^{2}}\theta }{\mathrm{d} t^{2}})-ml(\frac{\mathrm{d}\theta }{\mathrm{d} t})^{2}sin\theta

对摆在垂直方向上进行受力分析可得:P_{2}=mg+m\frac{\mathrm{d^{2}} }{\mathrm{d} t^{2}}(lcos\theta )

    即:P_{2}=mg-ml\frac{\mathrm{d^{2}}\theta }{\mathrm{d} t^{2}}sin(\frac{\mathrm{d^{2}}\theta }{\mathrm{d} t^{2}})-ml(\frac{\mathrm{d}\theta }{\mathrm{d} t})^{2}cos\theta

关节力矩:-Plsin\theta -Nlcos\theta =I\frac{\mathrm{d^{2}} \theta }{\mathrm{d} t^{2}}

eq?%5Cphi%20%3D%5Cpi%20+%5Ctheta

由于eq?%5Ctheta%20%5Capprox%200,则:eq?sin%5Ctheta%20%3D0%2Ccos%5Ctheta%20%3D1%2C%28%5Cfrac%7B%5Cmathrm%7Bd%7D%5Ctheta%20%7D%7B%5Cmathrm%7Bd%7D%20t%7D%29%5E%7B2%7D%3D0

化简以上式子可得:eq?%28I+ml%5E%7B2%7D%29%5Cfrac%7B%5Cmathrm%7Bd%5E%7B2%7D%7D%20%5Cphi%20%7D%7B%5Cmathrm%7Bd%7D%20t%5E%7B2%7D%7D-mgl%5Cphi%20%3Dml%5Cfrac%7B%5Cmathrm%7Bd%5E%7B2%7D%7Dx%7D%7B%5Cmathrm%7Bd%7D%20t%5E%7B2%7D%7D

                                eq?%28M+m%29%5Cfrac%7B%5Cmathrm%7Bd%5E%7B2%7D%7Dx%20%7D%7B%5Cmathrm%7Bd%7D%20t%5E%7B2%7D%7D+b%5Cfrac%7B%5Cmathrm%7Bd%7D%20x%7D%7B%5Cmathrm%7Bd%7D%20t%7D-ml%5Cfrac%7B%5Cmathrm%7Bd%5E%7B2%7D%7D%5Cphi%20%7D%7B%5Cmathrm%7Bd%7D%20t%5E%7B2%7D%7D%3DF%3Du

1.2 一阶倒立摆系统的传递函数

对上两式进行拉普拉斯变换得:eq?%28I+ml%5E%7B2%7D%29%5CPhi%20%28s%29s%5E%7B2%7D-mgl%5CPhi%20%28s%29%3DmlX%28s%29s%5E%7B2%7D

                                        eq?%28M+m%29X%28s%29s%5E%7B2%7D+bX%28s%29s-ml%5CPhi%20%28s%29s%5E%7B2%7D%3DU%28s%29

eq?q%3D%28M+m%29%28I+ml%5E%7B2%7D%29-%28ml%29%5E%7B2%7D

可得摆的角度的传递函数:eq?P_%7Bbai%7D%28s%29%3D%5Cfrac%7B%5CPhi%20%28s%29%7D%7BU%28s%29%7D%3D%5Cfrac%7Bmls%7D%7Bqs%5E%7B3%7D+b%28I+ml%5E%7B2%7D%29s%5E%7B2%7D-%28M+m%29mgls-bmgl%7D

    小车的位置的传递函数:eq?P_%7Bcar%7D%28s%29%3D%5Cfrac%7BX%20%28s%29%7D%7BU%28s%29%7D%3D%5Cfrac%7B%28I+ml%5E%7B2%7D%29s%5E%7B2%7D-mgl%7D%7Bqs%5E%7B4%7D+b%28I+ml%5E%7B2%7D%29s%5E%7B3%7D-%28M+m%29mgls%5E%7B2%7D-bmgls%7D

二.未加入PID控制器的系统的特性分析

2.1 稳定性判断

    判断系统稳定性问题最简单的方法就是求出该系统的所有极点,并判别是否含有实部大于零的极点(不稳定极点)。如果有这样的极点,则系统称为不稳定系统,否则称为稳定系统。

e6f4cf0984314aefb0a1fbdc1dcf8c0f.jpg

        为了方便我们进行研究,将以上数据代入摆的角度的传递函数可得:P_{bai}(s)=\frac{\Phi (s)}{U(s)}=\frac{-5.4663s^{2}}{s^{4}-0.5477s^{3}+37.4991s^{2}+5.3570s}

用MATLAB求解摆的角度的传递函数的所有极点的代码和结果如下:

>> den=[1 -0.5477 37.4991 5.3570];
>> roots(den)

ans =

   0.3451 + 6.1220i
   0.3451 - 6.1220i
  -0.1425 + 0.0000i

从求得的解可知,该系统不稳定。

2.2 Bode图、响应曲线研究

在Matlab中,我们可以使用以下命令对摆的角度的传递函数的进行仿真研究:

% 定义传递函数
num = [-5.4663 0 0 0];  % 分子系数
den = [1 -0.5477 37.4991 5.3570 0];  % 分母系数

% 创建传递函数模型
P_bai = tf(num, den);

% 绘制系统的 Bode 图
figure;
bode(P_bai);
title('Bode Diagram');
grid on;

% 单位阶跃响应
figure;
step(P_bai);
title('单位阶跃响应');
grid on;

% 单位脉冲响应
figure;
impulse(P_bai);
title('单位脉冲响应');
grid on;

获取未加入PID控制器的系统的Bode图、响应曲线如下:

由上图可知,此时传递函数的各方面性能指标不好,难以追踪单位阶跃响应函数与单位脉冲响应函数。

三.PID控制与仿真

3.1 PID控制器的基本原理

    PID控制器(Proportional-Integral-Derivative Controller,比例-积分-微分控制器)是工业自动化中常用的一种反馈控制器,广泛应用于温度、压力、速度等系统的控制中。PID控制器通过对系统误差(即目标值与实际输出值之间的差异)的综合处理,来实现对控制对象的精确调节。PID控制器由三部分组成:比例(P)、积分(I)、微分(D),它们分别对误差的不同特征进行响应,具体作用如下:

1. 比例控制(P)

比例控制是最基本的控制方式,它根据当前误差的大小来决定控制量。比例控制的输出与误差成正比,即:P_{out}=K_{p}*e(t)

其中:

  • P_{out}是比例控制器的输出。
  • K_{p}是比例增益。
  • e(t)是当前时刻的误差,即目标值与实际输出值之差。

作用:

  • 比例控制对系统误差的响应较快,但通常无法完全消除稳态误差。如果增益过大,系统可能会产生过冲(超调)和振荡;如果增益过小,则系统响应较慢。

2. 积分控制(I)

积分控制通过对过去误差的累积来消除稳态误差。积分部分的作用是对误差进行积分,长期的偏差会导致控制输出的增大,从而消除持久的误差。积分控制的输出可以表示为:

I_{out}=K_{i}*\int_{}^{}e(t)dt

其中:

  • I_{out}是积分控制器的输出。
  • K_{i}是积分增益。
  • \int_{}^{}e(t)dt 是误差的累积积分。

作用:

  • 积分控制可以消除长期的稳态误差,但过度的积分作用可能导致系统过冲或振荡。

3. 微分控制(D)

微分控制是基于误差变化的速率来预测未来误差,并对系统的响应进行调节。它通过计算误差的导数来预防系统超调。微分控制的输出可以表示为:D_{out}=K_{d}*\frac{\mathrm{d} }{\mathrm{d} t}e(t)

其中:

  • D_{out}是微分控制器的输出。
  • K_{d}是微分增益。
  • \frac{\mathrm{d} }{\mathrm{d} t}e(t)是误差对时间的导数。

作用:

  • 微分控制有助于减小系统的过冲和振荡,能够提高系统的稳定性,尤其是在控制过程中误差变化较快时。

4. PID控制器的综合输出

PID控制器的总输出是这三部分的加权和:

u(t)=K_{p}*e(t)+K_{i}*\int_{}^{}e(t)dt+K_{d}*\frac{\mathrm{d} }{\mathrm{d} t}e(t)

其中:

  • u(t)是控制器的输出信号,通常用于调整控制对象的输入。
  • e(t)是当前时刻的误差。

5. PID控制器的调参

PID控制器的性能高度依赖于三个增益参数K_{p}K_{i}K_{d}的选择。正确的参数调节可以使得控制系统具有良好的稳定性、快速的响应和较小的误差。常见的调节方法包括:

  • 手动调节法:通过经验和实验逐步调整三个参数,观察系统的响应。
  • Ziegler-Nichols方法:通过实验获得临界增益和临界周期,来自动设定 PID 参数。
  • 自动调节法:基于系统响应自动调整 PID 参数。

6. PID控制器的优缺点

  • 优点

    • 简单直观,易于理解和实现。
    • 适用范围广,能够控制许多类型的动态系统。
    • 可以平衡系统的快速响应和稳定性。
  • 缺点

    • 参数调节较为复杂,尤其是在非线性或大规模系统中。
    • 对噪声敏感,特别是微分项可能会放大噪声,导致系统不稳定。
    • 在处理大范围变化或突变时,可能需要进行额外的调整或改进。

3.2 MATLAB 自动调整合适参数的 PID 控制器

使用 MATLAB 自动调整合适参数的 PID 控制器并对经过PID控制器调整后的系统进行仿真研究,代码如下:

% 定义传递函数 P_bai(s) = Phi(s) / U(s)
s = tf('s');  % 创建拉普拉斯变量 s
Phi_s = -5.4663 * s^2;  % Phi(s) = -5.4663 * s^2
U_s = s^4 - 0.5477 * s^3 + 37.4991 * s^2 + 5.3570 * s;  % U(s) = s^4 - 0.5477 * s^3 + 37.4991 * s^2 + 5.3570 * s

P_bai = Phi_s / U_s;  % 定义传递函数 P_bai(s)

% 使用 pidtune 函数自动调整 PID 参数
[Kpid, ~, ~] = pidtune(P_bai, 'PID');  % 设计 PID 控制器

% 显示 PID 控制器的参数
disp('PID 控制器参数:');
disp(Kpid);

% 构建闭环控制系统
closed_loop_system = feedback(Kpid * P_bai, 1);

% 仿真闭环系统的bode图
figure;
bode(closed_loop_system);
title('闭环系统的bode图');
grid on;


% 仿真闭环系统的单位阶跃响应
figure;
step(closed_loop_system);
title('闭环系统的单位阶跃响应');
grid on;

% 仿真闭环系统的单位脉冲响应
figure;
impulse(closed_loop_system);
title('闭环系统的单位脉冲响应');
grid on;

代码运行结果如下: 

经曲线对比可明显看出,经过PID控制器调整后的系统性能更加优越,能更好的追踪单位阶跃响应函数与单位脉冲响应函数。

### 关于Simulink中一阶倒立摆数学模型建模方法 #### 创建Simulink环境并加载模型 为了创建和仿真一阶倒立摆在Simulink中的行为,可以先通过命令行打开指定的Simulink文件: ```matlab mdl = 'mpc_pendcartNMPC'; open_system(mdl) [%1] ``` 这会启动MATLAB自带的一个用于展示如何实现非线性MPC控制策略的例子。 #### 设置物理参数 对于具体的一阶倒立摆系统而言,其动力学特性由几个关键变量决定。这些参数包括但不限于质量、摩擦系数以及几何尺寸等,在此案例中有特定数值设定: - 大车的质量 \( M \)= 0.5 kg; - 小球的质量 \( m \)= 0.2 kg; - 摩擦力常数 \( b \)= 0.1 Ns/m; - 转动惯量 \( I \)= 0.006 kg·m²; - 加速度重力加速度 \( g \)= 9.8 m/s²; - 杆长度 \( l \)= 0.3 m; 上述参数的选择直接影响到系统的动态性能,并且应当依据实际应用场景调整优化[^2]。 #### 构建数学模型 构建一阶倒立摆的数学模型通常涉及牛顿第二定律的应用来描述物体受力情况下的位移变化规律。考虑到存在两个自由度——即手推车沿轨道移动的位置\( x(t)\),还有杆相对于垂直方向的角度偏转θ(t)—因此需要建立一组微分方程组表示这两个状态随时间的变化关系。 假设忽略空气阻力和其他次要因素的影响,则可以根据经典力学原理得出如下简化形式的状态空间表达式: \[ \begin{align*} &\ddot{x}(t)+b/M*\dot{x}-g/l*m/(M+m)*sin(\theta)-l/(I+(M+m)*l^2)*(F+b*\dot{\theta})=0\\ &\ddot{\theta}+(-mg*l)/(I+(M+m)*l^2)*cos(\theta)+(u+F)/((I+(M+m)*l^2))=0 \end{align*} \] 其中 F 表示作用在小车上水平方向上的外力 u 是施加给整个系统的控制输入信号。 #### 实现Simulink模型 基于以上理论分析结果,在Simulink环境中可以通过组合基本模块(如积分器、乘法器、增益块等等)搭建起相应的框图结构以直观呈现该非线性系统的内部运作机制。完成后的界面布局应能清晰反映出各个组成部分之间的相互联系及其逻辑顺序。 当一切准备就绪之后,即可执行仿真实验观察预期效果。记得事先确认已勾选“Simulation->Model Configuration Parameters”菜单里的相应选项以便实时查看动画演示过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值