连续系统的数字PID控制仿真-3

news2024/11/13 20:48:32

连续系统的数字PID控制仿真-2的基础上,利用S函数实现PID离散控制器的Simulink仿真。

在S函数中,采用初始化函数、更新函数和输出函数,即 mdlInitializeSizes函数、mdIUpdates函数和mdlOutputs函数。在初始化中采用sizes 结构,选择1个输出、2个输入。其中一个输入为误差信号,另一个输入为误差信号上一时刻的值。S函数嵌入在Simulink程序中,采样时间为1ms。仿真结果如图所示。

仿真图:

PID控制器程序:chap1_8s.m

function [sys,x0,str,ts]=exp_pidf(t,x,u,flag)

switch flag,

case 0 % initializations

[sys,x0,str,ts] =mdllnitializeSizes;

case 2 % discrete states updates

sys = mdIUpdates(x,u);

case 3 %computation of control signal

% sys = mdlOutputs(t,x,u,kp,ki,kd,MTab);

sys=mdlOutputs(t,x,u);

case{1,4,9} %unused flag values

sys= [ ];

otherwise %error handling

error(['Unhandled flag=',num2str(flag)]);

end;

% when flag=0, perform system initialization.%

function [sys,x0,str,ts] =mdllnitializeSizes

sizes = simsizes; % read default control variables

sizes.NumContStates= 0: % no continuous states

sizes.NumDiscStates = 3; % 3 states and assume they are the P/I/Dcomponents

sizes.NumOutputs=1; % 2 output variables: control u(t) and state x(3)

sizes.NumInputs = 2; % 4 input signals

sizes.DirFeedthrough=1: % input reflected directly in output

sizes.NumSampleTimes=1; % single sampling period

sys = simsizes(sizes);

x0=[0; 0;0]; % zero initial states

str =[];

ts=[-1 0]; % sampling period

% when flag=2,updates the discrete states%

function sys = mdlUpdates(x,u)

T=0.001;

sys=[ u(1);

x(2)+u(1)*T;

(u(1)-u(2)/T];

% when flag-3, computates the output signals

function sys = mdlOutputs(t,x,u,kp,ki,kd,MTab)

kp=1.5;ki=2.0;kd=0.05;

%sys=[kp,ki,kd]*x;

sys=kp*x(1)+ki*x(2)+kd*x(3);

作图程序:chap1_8plot.m

close all;

plot(t,y(:,1),r',ty(:,2),k:',linewidth’,2);

xlabel('time(s)');ylabel('yd,y';

legend('Ideal position signal',Position tracking');

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

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

相关文章

什么是GRACE CPU --- Grace CPU架构详解

深入详解GRACE CPU架构 NVIDIA Grace CPU 是 NVIDIA 开发的第一款数据中心 CPU。 通过将 NVIDIA 专业知识与 Arm 处理器、片上结构、片上系统 (SoC) 设计和弹性高带宽低功耗内存技术相结合,NVIDIA Grace CPU 从头开始构建,以创建世界上第一个超级芯片 用…

Spring控制反转(IoC)和依赖注入(DI)

Spring官网:spring.io1.spring 2.SprinMVC 3.Maven高级 4.SpringBoot 5.MyBatisPlus为什么要学Spring?简化开发,降低企业级开发的复杂度框架整合,高效整合其他技术,提高企业级应用开发与运行效率Spring 系统架构IOC(I…

分享132个ASP源码,总有一款适合您

ASP源码 分享132个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 132个ASP源码下载链接:https://pan.baidu.com/s/1bk2hftqR5NTdUIT2zvmbiw?pwdke5x 提取码&#x…

离散数学与组合数学-04图论

文章目录离散数学与组合数学-04图论4.1 图的引入4.1.1 图的示例4.1.2 无序对和无序积4.1.3 图的定义4.2 图的表示4.2.1 集合表示和图形表示4.2.2 矩阵表示法4.2.3 邻接点与邻接边4.3 图的分类4.3.1 按边的方向分类4.3.2 按平行边分类4.3.3 按权值分类4.3.4 综合分类方法4.4 图论…

干货 | 移动互联网应用程序(APP)个人信息安全自我评测工具

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分:研究背景概述截止今年6月,我国已经有APP 232万款,手机网民达到10.47亿,在APP中大规模的个人信息收集和使用成为常态,个人信息…

【算法题】1828. 统计一个圆中点的数目

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 题目: 给你一个数组 points ,…

Kubernetes:基于命令行终端UI的管理工具 K9s

写在前面 K9s 是一个基于终端UI的 K8S 管理工具博文内容为 k9s 在 windows、Linux 以及docker 安装Demo简单的 热键使用。理解不足小伙伴帮忙指正 我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 ------赫尔曼黑塞《德米安》 K9s 是一…

客快物流大数据项目(一百零八):Spring Cloud 技术栈

文章目录 Spring Cloud 技术栈 ​​​​前言 一、微服务技术栈

如果物理学真的不存在?

最近过年,看「三体」电视剧。开始看剧情,觉得代入感挺不好的,特别林子健演的那个作战中心的长官,镜头从远处拉过去,看着他昂首挺胸慢慢走过去的样子。之后,讲到了火鸡和农场主的故事,这个时候再…

C++STL剖析(二)—— vector的概念和使用

文章目录1. vector的介绍2. vector的常见构造3. vector的遍历方式🍑 [ ] 下标🍑 迭代器🍑 范围for4. vector 迭代器使用🍑 begin 和 end🍑 rbegin 和 rend5. vector 空间增长问题🍑 size🍑 cap…

37.Isaac教程--自由空间分割(道路分割)

自由空间分割 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录自由空间分割快速开始推理训练数据模拟数据设置与模拟器的通信来自公共数据集的真实数据具有自主数据收集的自由空间分割的真实数据自主数据收集通过地图规划路径监测机器人位…

JavaEE 突击 5 - Spring 更简单的读取和存储对象(2)

Spring 更简单的读取和存储对象 - 2三 . 获取 Bean 对象3.1 属性注入3.1.1 原理3.1.2 相关问题能在启动类里面调用 [Autowired ](/Autowired ) 注解吗[Autowired ](/Autowired ) 能使用多次吗Autowired 修饰的私有方法名字可以是其他的吗3.1.3 属性注入的优点和缺点3.2 Setter …

关于Kubernetes 桌面客户端 Aptakube 的一些笔记整理

写在前面 分享一个 k8s 桌面客户端 AptakubeAptakube 不是一个开源的产品,现在需要付费,最初是开源的这里简单了解下理解不足小伙伴帮忙指正 我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 ------赫尔曼黑塞《…

redis学习看这一篇文章就够了

第一章 redis简介 第1节 NoSQL 1.1 NoSQL简介 NoSQL,泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充。随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非…

使用Stable-Diffusion生成视频的完整教程

本文是关于如何使用cuda和Stable-Diffusion生成视频的完整指南,将使用cuda来加速视频生成,并且可以使用Kaggle的TESLA GPU来免费执行我们的模型。 #install the diffuser package#pip install --upgrade pip!pipinstall--upgradediffuserstransformerssc…

JUC并发编程(1.Java线程)

博客指南💡 JUC并发编程博客将持续更新,内容将参考黑马程序员深入学习Java并发编程以及相关阅读的书籍,内容包括进程,线程,并发和并行。 学习的路上永远不是一个人,相信努力会有所收获! 希望我的…

【自步课程学习】 Paced-Curriculum Learning

引入: Confidence-Aware Paced-Curriculum Learning by Label Smoothing for Surgical Scene Understanding 【Code:https://github.com/XuMengyaAmy/P-CBLS】 先说

JavaEE初阶第二课:文件操作与IO

欢迎来到javaee初阶的第二课,这节课我会带大家了解文件的概念和java中如何操作文件。 这里写目录标题1.了解文件1.1文件概念1.2文件存储1.3文件路径2.Java中的文件操作(文件系统操作)2.1File类2.1.1方法实践3.Java的文件操作(文件…

字节青训前端笔记 | Webpack入门

本节课将重点围绕「 Webpack 」这一核心话题展开。简述前端工程化的常用工具webpack 的原理和使用 webpack的作用 webpack的作用是把很多文件打包整合到一起, 缩小项目体积, 提高加载速度,常用的场景是: 代码压缩 将JS、CSS代码混淆压缩,…

25. 迭代器和生成器的详解

1. 迭代器 (1) 迭代是Python最强大的功能之一,是访问集合元素的一种方式。 (2) 迭代器是一个可以记住遍历的位置的对象。 (3) 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 (4) 迭代器有两个基本的方法…