问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/m0_73645118/article/details/143955968

本文详细介绍了基于MATLAB的一阶倒立摆系统的PID数字仿真设计。通过建立数学模型、分析系统特性,并设计PID控制器,最终实现对倒立摆系统的稳定控制。

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

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

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

对小车在水平方向上进行受力分析可得:

对摆在水平方向上进行受力分析可得:

即:

对摆在垂直方向上进行受力分析可得:

即:

关节力矩:

由于

,则:

化简以上式子可得:

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

对上两式进行拉普拉斯变换得:

可得摆的角度的传递函数:

小车的位置的传递函数:

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

2.1 稳定性判断

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

为了方便我们进行研究,将以上数据代入摆的角度的传递函数可得:

用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)

比例控制是最基本的控制方式,它根据当前误差的大小来决定控制量。比例控制的输出与误差成正比,即:

其中:

  • 是比例控制器的输出。
  • 是比例增益。
  • 是当前时刻的误差,即目标值与实际输出值之差。

作用:

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

2. 积分控制(I)

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

其中:

  • 是积分控制器的输出。
  • 是积分增益。
  • 是误差的累积积分。

作用:

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

3. 微分控制(D)

微分控制是基于误差变化的速率来预测未来误差,并对系统的响应进行调节。它通过计算误差的导数来预防系统超调。微分控制的输出可以表示为:

其中:

  • 是微分控制器的输出。
  • 是微分增益。
  • 是误差对时间的导数。

作用:

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

4. PID控制器的综合输出

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

其中:

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

5. PID控制器的调参

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

  • 手动调节法:通过经验和实验逐步调整三个参数,观察系统的响应。
  • 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控制器调整后的系统性能更加优越,能更好的追踪单位阶跃响应函数与单位脉冲响应函数。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号