我是靠谱客的博主 执着钢笔,最近开发中收集的这篇文章主要介绍Simulink基础【2】- PID控制器1. Simulink作用回顾2. PID算法仿真,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Simulink基础【2】- PID控制器

  • 1. Simulink作用回顾
    • 1.1 模块化
    • 1.2 常用模块
      • 1.2.1 输入信号源模块库(Sources)
      • 1.2.2 接收模块库(Sinks)
      • 1.2.3 系统模块
      • 1.2.4 数学运算模块
    • 1.3 界面布局与使用
    • 1.4 自定义模块
  • 2. PID算法仿真
    • 2.1 PID算法简介
    • 2.2 PID算法的matlab实现
      • 2.2.1 代码仿真PID track
      • 2.2.2 Simulink仿真
    • 2.3 单液压缸仿真

1. Simulink作用回顾

上一节我们讲到,Simulink是Mathworks公司推出的MATLAB中的一种可视化仿真工具,是一个模块化、图形化的编程环境,用于多域仿真以及基于模型的设计。Simulink提供图形编辑器、可自定义的模块库以及求解器,能够用精准数学模型描述用户需求并且执行动态仿真。

1.1 模块化

Simulink可理解为一种可视化的语言体系,其通过模块化的手段把数学公式、算法进行拆分,用搭积木的方式进行组合呈现。Simulink建模本质上与代码并无区别,不过表述方式相比于文本和代码更为直观、高效:其可观测算法中公式之间的上下游关系,输入输出参数之间的交互关系,并可实时观察不同参数变化对每个局部行为的影响。

1.2 常用模块

1.2.1 输入信号源模块库(Sources)

在这里插入图片描述

1.2.2 接收模块库(Sinks)

在这里插入图片描述

1.2.3 系统模块

在这里插入图片描述

1.2.4 数学运算模块

在这里插入图片描述

1.3 界面布局与使用

在这里插入图片描述

1.4 自定义模块

比如下图表现了飞行控制的整体流程,并对预设控制指令、控制模型、飞机模型、状态反馈等部分进行了模块化建模。
在这里插入图片描述

2. PID算法仿真

2.1 PID算法简介

PID控制是一种应用非常广泛的控制算法,PID算法距今已经有108年历史。PID并不是很神秘的东西,在很多实际应用中都可以看到它的身影:温度控制系统、四旋翼飞行器、倒立摆系统、寻迹小车等等。

应用PID控制的前提是系统一定要是一个闭环系统,什么是闭环系统?就是一定要有反馈回路,要能及时反馈我们最终控制的那个量的状态,给到控制器。也就是说,PID控制是根据被控系统的状态来进行控制的,我们需要知道这个状态才能决定控制器下一步应该怎么做。

总的来说,PID控制的用途分为两种,即系统对某一稳定状态的维持或者动态跟踪

  • 一种是使某个物理量“保持稳定",即便出现外界干扰也能很快回到原始的稳定状态;
  • 另一种是使物理量稳定地“跟踪”给定的信号,稳定地随着给定信号变化。

2.2 PID算法的matlab实现

2.2.1 代码仿真PID track

在使用’tf’函数的时候,显示报错,原来是必须先安装system control 包,但matlab直接显示的函数不识别…不报告咋解决。

函数或变量 'tf' 无法识别。
出错 PID_tracker (第 5 行)
sys=tf(5.235e005,[1,87.35,1.047e004,0]);
%建立被控对象传递函数

在这里插入图片描述
安装完之后,就好了。这是PID跟踪的代码

%PID Controller
clear, clc, close all;
ts=0.001;
%采样时间=0.001s
sys=tf(5.235e005,[1,87.35,1.047e004,0]);
%建立被控对象传递函数
dsys=c2d(sys,ts,'z');
%把传递函数离散化
[num,den]=tfdata(dsys,'v');
%
离散化后提取分子、分母
u_1=0.0;u_2=0.0;u_3=0.0;
%输入向量 的初始状态
y_1=0.0;y_2=0.0;y_3=0.0;
%输出的初始状态
x=[0,0,0]';
%PID的3个参数Kp Ki Kd组成的数组
error_1=0;
%初始误差
S=input('请选择输入信号的形式:1 阶跃信号 2 方波信号 3 正弦信号');
for k=1:1:500
time(k)=k*ts;
% 仿真时间500ms
if S==1
kp=1.50;ki=0.01;kd=0.01;
yd(k)=1;
% 指令为阶跃信号
elseif S==2
kp=0.50;ki=0.001;kd=0.001;
yd(k)=sign(sin(2*2*pi*k*ts));
% 指令为方波信号
elseif S==3
kp=1.5;ki=1.0;kd=0.01;
% 指令为正弦信号
yd(k)=0.5*sin(2*2*pi*k*ts);
end
u(k)=kp*x(1)+kd*x(2)+ki*x(3);
% PID控制器
% 限制控制器的输出
if u(k)>=10
u(k)=10;
end
if u(k)<=-10
u(k)=-10;
end
% 近似线性模型
y(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(2)*u_1+num(3)*u_2+num(4)*u_3;
error(k)=yd(k)-y(k);
% 返回pid参数
u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;y_2=y_1;y_1=y(k);
x(1)=error(k);
% 计算 P
x(2)=(error(k)-error_1)/ts;
% 计算 D
x(3)=x(3)+error(k)*ts;
% 计算 I
error_1=error(k);
end
figure(1);
set(0,'defaultfigurecolor','w') % 设置图像背景为白色
plot(time,yd,'r',time,y,'b','linewidth',2);
xlabel('time(s)');ylabel('信号输出');
legend('理想信号','追踪信号');

结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.2 Simulink仿真

PID的控制简图可被描述为如下形式:
在这里插入图片描述
Simulink模块中,实际上已经包含了自带的PID控制器模块,或者也可以自己设计。

打开库浏览器
在这里插入图片描述
找到PID controller
在这里插入图片描述
最终需要的模块包括以下这些:
在这里插入图片描述

结果如下:
在这里插入图片描述

2.3 单液压缸仿真

打开simulink的液压缸仿真实例,运行仿真。此处用到的主要工具包括以下两个类别:

  • Simscape Fluids 提供用于流体系统建模和仿真的组件库。它包括泵、阀门、作动器、管道和热交换器的模型。您可以使用这些组件开发液压驱动系统,如前装载机、动力转向和起落架作动系统。引擎冷却和燃油供应系统也可以用 Simscape Fluids 开发。您可以使用 Simscape 产品系列中提供的组件来集成机械、电气、热力和其他系统。

  • Simscape Driveline 提供用于一维机械系统建模和仿真的组件库。它包括旋转和平移部件的模型,如蜗轮、行星齿轮、丝杠和离合器。您可以使用这些组件对直升机传动系统、工业机械、车辆动力总成系统和其他应用中的机械动力传输进行建模。还包括汽车部件,如发动机、轮胎、传动系统和变矩器。

该模型将泵流量 Q 引导至供应压力 p1,层流 q1ex 从供应压力泄漏至排气。活塞/缸组件的控制阀建模为通过可变面积孔口的紊流。其流量 q12 导致中间压力 p2,该压力随后在连接到作动器缸的管路中下降。缸压力 p3 克服弹簧负载移动活塞,从而产生位置 x。模型具体结构示意图如下所示:
在这里插入图片描述

在这里插入图片描述
可以得到如下图所示的单液压缸仿真结果。p1、p2和p3分别为缸体在原理图上不同位置处的压力值。画布的线条粗细可以直接在matlab画图中的菜单中进行参数设置。
在这里插入图片描述

最后

以上就是执着钢笔为你收集整理的Simulink基础【2】- PID控制器1. Simulink作用回顾2. PID算法仿真的全部内容,希望文章能够帮你解决Simulink基础【2】- PID控制器1. Simulink作用回顾2. PID算法仿真所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部