Simulink基础【2】- PID控制器

news2024/11/16 20:40:40

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画图中的菜单中进行参数设置。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

配置pytorch环境

一、安装cuda cudnn 1.下载cuda ,根据上一步安装pytorch的cuda版本对应&#xff0c;我的是cuda11.6 安装无脑下一步就可以了。 2.1下载cuDNN cuDNN 其实就是 CUDA 的一个补丁而已&#xff0c;专为深度学习运算进行优化的 2.2 配置cuDNN 解压压缩包&#xff0c;将文件夹里bin、…

Echarts中常用的参数总结以及参数自定义示例

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;前端领域新星创作者、华为云享专家、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff…

Springboot之Actuator的渗透测试和漏洞修复

Actuator 的 REST 接口 Actuator监控分成两类&#xff1a;原生端点和用户自定义端点&#xff1b;自定义端点主要是指扩展性&#xff0c;用户可以根据自己的实际应用&#xff0c;定义一些比较关心的指标&#xff0c;在运行期进行监控。 原生端点是在应用程序里提供众多 Web 接口…

返回字典中的键值对dict.items()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 返回字典中的键值对 dict.items() [太阳]选择题 对下面描述错误的选项为&#xff1f; myDic {"A":1, "B":2} print("【显示】myDic",myDic) print("【显…

安全智能分析技术 模型自动化调优

安全分析模型自动化调优 MLOps&#xff08;Machine Learning Operations&#xff09;是一种人工智能 的工程实践&#xff0c;是面向机器学习项目的研发运营管理体系 。旨在实现 ML 管道的操作、ML 模型的部署和管理标准化&#xff0c;支持ML 模型的发布、激活、监控、性能跟踪…

【有料c++题目周刊 | 第三期】复兴时代

文章目录第一题&#xff1a;最佳圆柱体直径题目描述输入格式输出格式输入样例输出样例解题思路&C题解第二题&#xff1a;贪心国王题目描述输入格式输出格式数据范围输入样例输出样例解题思路&C题解第一题&#xff1a;最佳圆柱体直径 题目描述 在复兴时期&#xff0c;…

DevOps实战系列【第十二章】:详解Shared Libraries共享库

个人亲自录制全套DevOps系列实战教程 &#xff1a;手把手教你玩转DevOps全栈技术 随着jenkins pipeline项目越来越多&#xff0c;冗余代码也越来越多&#xff0c;所以share library诞生。 流水线支持在外部仓库中创建【共享库】&#xff0c;然后加载到现有流水线中使用&#xf…

XXL-Job分布式任务调度框架-- 集群HA的配置3

一 xxl-job集群概述 1.1 xxl-job集群HA的作用 为了避免单点故障&#xff0c;任务调度系统通常需要通过集群实现系统高可用 由于任务调度系统的特殊性&#xff0c;“调度”和“任务”两个模块需要均支持集群部署&#xff0c;由于职责不同&#xff0c;因此各自集群侧重点也有…

AcWing第82场周赛

目录 1.第k个数 2. 多米诺骨牌 3.构造序列 1.第k个数 题目描述 给定一个长度为n的整数序列&#xff0c;a1,a2,...,an,以及一个整数k&#xff0c;请你计算该数列从大到小排序后的第k个数。 输入格式 第一行包含两个整数n&#xff0c;k 第二行n个整数 输出格式 输出一个数&…

Sqoop安装教程

Sqoop安装教程 文章目录Sqoop安装教程一、资料二、安装&#xff08;一&#xff09;上传文件&#xff08;二&#xff09;解压文件&#xff0c;并重命名(三)修改配置文件1、进入到/opt/module/sqoop/conf中2、修改配置文件&#xff08;1&#xff09;将sqoop环境的模板文件&#x…

【M2 VMware Ubuntu】全流程安装指南

这里写自定义目录标题VMware Fusion安装M2 VMware Ubuntu 安装安装桌面环境安装 Open VM 工具禁用 Wayland更新 5.14 内核&#xff08;非必要不要更新&#xff09;VMware Fusion安装 这里就不再阐述如何安装啦&#xff01;当然这也不是本文关注重点&#xff01; M2 VMware Ub…

VB写dll以及调用的具体实例

目录 一.dll的简介 二.VB6中的dll 1.常见的调用的方法: 2.通过vb6写dll&#xff1a; 3.dll的调用 三.出现的一些问题: 一.dll的简介 1.dll被称为动态链接库,是一个可由多个程序或其他dll调用用的代码和的库&#xff0c;使用dll可以让程序可以更加模块化&#xff0c;避免重…

自适应布局和响应式布局

写在前面 我们在开发的时候&#xff0c;经常会听到关于各种布局的概念&#xff0c;而且里面有些概念经常会混淆&#xff0c;这篇文章主要就是介绍一下静态布局、流式布局、自适应布局、响应式布局和弹性布局的特点和应用场景 布局的历史发展 随着互联网和相关设备的发展&#…

C#语言实例源码系列-鼠标设置

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

DDL(保姆级教学)

目录 DDL&#xff1a; 1、数据库的创建&#xff1a; 2、由于重复创建同名数据库会报错 3、注意如果默认字符集为Latin1,其不支持中文&#xff0c;所以改为&#xff1a; 数据库的创建&#xff1a; 数据表的创建 属性的数据类型 1、数值类型&#xff1a; 2、字符串类型&a…

离散数学-用以图转化为矩阵并且求出这个矩阵的最大度最小度

题目: 从键盘输入无向图的邻接矩阵&#xff0c;判断输出该图结点最大度数、最小度数。 问题的分析&#xff1a; 对于一个图的输入&#xff0c;你一定会去使用二维数组来进行数据的存储&#xff0c;那么第一步就是建立一个二维数组&#xff0c;然后来进行输入&#xff0c;我下…

广域网技术——SRv6隧道类型及数据转发

目录 SRv6节点 节点角色 节点行为 SRv6数据转发隧道建立方式 SRv6 BE L3VPNv4 over SRv6 BE EVPN L3VPNv6 over SRv6 BE SRv6 TE Policy SRv6使用IPv6数据平面&#xff0c;基于IPv6扩展头进行扩展实现类似标签转发的处理 SR-MPLS在建立SR-MPLS隧道时&#xff0c;如果有…

Windows版本的Redis(新版本的GitHub地址)

Redis通常被称为数据结构服务器&#xff0c;因为值&#xff08;value&#xff09;可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型 Redis官网地址&#xff1a;Redis 关于Windows版本 Redis目前提供源码、Docker镜像、云版三种下载形…

利用@Retryable注解实现重试机制

Retryable 它可以作用在方法上&#xff0c;当方法抛出指定的异常时&#xff0c;整个方法将会被重新执行。在使用时需要先在pom.xml中导入相关依赖&#xff0c;再在启动类中添加EnableRetry注释以开启重试功能&#xff0c;最后在相应的方法上添加Retryable注释。 引入依赖 <…

【边缘检测】蚁群算法图像边缘检测【含Matlab源码 1189期】

⛄一、获取代码方式 获取代码方式1&#xff1a; 完整代码已上传我的资源&#xff1a;【边缘检测】基于matlab蚁群算法图像边缘检测【含Matlab源码 1189期】 获取代码方式2&#xff1a; 通过订阅紫极神光博客付费专栏&#xff0c;凭支付凭证&#xff0c;私信博主&#xff0c;可…