Matlab 实现连续PID环节

连续PID环节传递函数:

\[\frac{O(s)}{I(s)} = K_P \cdot \left( 1 + \frac{K_{I}}{s} + K_D\cdot s \right)
\]

使用Matlab脚本实现连续PID环节传递函数:先用一个\(K_P\)环节,然后与积分环节 \(K_I / s\) 并联,然后再与微分环节 \(K_D * s\) 并联,即得到了连续PID环节的传递函数。之后再与系统开环传递函数串联,之后再增加负反馈,即可得到闭环控制系统传递函数。具体是实现代码:

clc;
clear;
close all; Target = 1000; %目标值
sys1= tf([0,300,200,350],[1,0.5,0.05,0]); %建立被控对象传递函数 零点为-1 极点为-50
%sys2=tf([0.02 1],1); %建立被控对象传递函数 无零点 极点为-20 %PID传递函数
Kp = 1;
Ki = 0.1;
Kd = 0; sysP = Kp;
sysI = tf(Ki,[1,0]);
sysD = tf([Kd,0],1);
sysPI = parallel(sysP,sysI); %将比例积分微分环节并联得到PID传递函数
sysPID = parallel(sysPI,sysD); sysG = series(sysPID,sys1); %将两传递函数串联 得到最终的传递函数G sysH = 1; %反馈函数为空
sysResult = feedback(sysG,sysH); %负反馈
step(Target * sysResult,0.5); %串联并加入反馈后的传递函数阶跃

得到曲线如下:

标记-3dB点

% 频段带宽
f_begin = 1e-3;
f_final = 1e3;
f = linspace(f_begin,f_final,1e6)'; % 传递函数
sysHclose = feedback(sysG,sysH); % 负反馈 闭环传递函数
% 计算幅频和相频响应
h = freqs(cell2mat(sysHclose.num),cell2mat(sysHclose.den),w);
amplitude = abs(h); % 幅频响应
mag = 20*log10(amplitude);
phase = angle(h); % 相频响应
phesedeg = phese*180/pi;
% 绘图
figure;
subplot(2,1,1)
semilogx(f,mag);
grid on; xlim([f_begin f_final]);
subplot(2.1.2)
semilogx(f,phesedeg);
grid on; xlim([f_begin f_final]); % -----添加谐振点-----
magnitude = mag;
[magmax,fmax] = max(magnitude); %谐振点为幅频曲线的极值点
fmax = f(fmax); plot(fmax,magmax,'o','LineWidth',2,'MarkerSize',5,'MarkerEdgeColor','k')
text(fmax,magmax-2,sprintf('Resonance point:\n(%.3f Hz, %.3f dB)',fmax,magmax),...
'VerticalAlignment','top','HorizontalAlignment','right')
%'VerticalAlignment','bottom'
hold on; % -----添加-3dB带宽点-----
B=abs(magnitude+3.0);
[x,index]=sort(B); %为了得到最接近-3dB的值,先对绝对值进行排序,index为排序前的坐标值
mag_3db=magnitude(index(1));
f_3db=f(index(1)); plot(f_3db,mag_3db,'o','LineWidth',2,'MarkerSize',5,'MarkerEdgeColor','r')
text(f_3db,mag_3db,sprintf('Cut-off point:\n(%.3f Hz, %.3f dB)',f_3db,mag_3db),...
'VerticalAlignment','bottom','HorizontalAlignment','left') %在目标坐标点处添加文字

示例图片如下

Matlab 实现连续PID环节与标记系统-3dB点的更多相关文章

  1. HDU 1231.最大连续子序列-dp+位置标记

    最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  2. 在论坛中出现的比较难的sql问题:29(row_number函数 组内某列的值连续出现3次标记出来)

    原文:在论坛中出现的比较难的sql问题:29(row_number函数 组内某列的值连续出现3次标记出来) 在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘 ...

  3. Codeforces Round #383 (Div. 2) A,B,C,D 循环节,标记,暴力,并查集+分组背包

    A. Arpa’s hard exam and Mehrdad’s naive cheat time limit per test 1 second memory limit per test 256 ...

  4. MATLAB实现连续周期信号的频谱分析(正余弦波信号举例)

    关于MATLAB实现连续信号的频谱分析,以正余弦波信号频谱分析为例分析如下: 1.含有频率f ,2f和3f的正弦波叠加信号,即: 其中,f =500Hz.试采用Matlab仿真软件对该信号进行频谱分析 ...

  5. MATLAB仿真中连续和离散的控制器有何区别?

    matlab系统同时提供连续和离散的控制器和对象的目的是:在降低用户使用复杂程度的同时提高仿真精度.仿真速度和应用的广泛性. 仿真步长和求解精度的概念对于理解这个问题至关重要. 首先是步长,步长和求解 ...

  6. 【我是老中医】Win10系统下MATLAB无法正常打开的解决方案

    转眼大四了,要开始做毕设了,导师给的题目要用到他之前做的东西,都是MATLAB做的,所以不太熟悉MATLAB的我也得用这玩意儿了,想想自己目前也就大二的DSS实验和大三的AI实验用过MATLAB,当时 ...

  7. PID控制算法的C语言实现

    参考: PID控制器开发笔 浅谈位置式PID 专家PID控制在快速系统中的仿真及应用(这篇了论文介绍的积分分离PID.专家PID(脚本实现和simulink实现)很详细) PID控制算法的C语言实现一 ...

  8. PID控制器(比例-积分-微分控制器)- I

    形象解释PID算法 小明接到这样一个任务: 有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水. 小明接到任务后就一直守在水 ...

  9. SIMATIC PID温度控制

    SIMATIC PID温度控制 // VAR_INPUT ------------------------------------------------------------------- #if ...

  10. PID控制算法的C语言实现一 PID算法原理

    本系列是转载............. 全部的程序有一个共同点:就是我没认真去调pid的参数 在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握PID算法的设 ...

随机推荐

  1. IOS开发-UIImageView基本用法

    UIImageView是iOS中用于显示图像(图片.gif.svg等)的视图. 它的主要功能有: 1. 显示图片UIImageView可以通过image属性显示一张UIImage类型的图片.可以是本地 ...

  2. Github的一个彩蛋

    点击新建仓库 项目名称为自己的昵称 下方提示意思说: 你发现了一个秘密 这是一个特别的仓库 你可以为你的首页增加README.md 就像给项目介绍一样,这是你的自我介绍 点击编辑,里面会与建议模板 以 ...

  3. mysql高级进阶(存储过程、游标、触发器)

    废话不多说,直接进入正题... 一.存储过程 a.概述 存储过程可以看成是对一系列 SQL 操作的批处理: 使用存储过程的好处 代码封装,保证了一定的安全性: 代码复用: 由于是预先编译,因此具有很高 ...

  4. pod setup 慢 的问题

    由于更换了硬盘,重装了系统,需要重新配置环境,发现现在安装cocapods比之前坑更深了, 装环境时遇到pod setup才几kb的下载速度(即使用梯子也是巨慢),实在是没法用在网上尝试了各种方法,但 ...

  5. OOP第三次大作业

    前言 前言的前言 快期末,也一直在等这次作业发布,我现在只能说终于等到了!!!跟上一个Blog的时间相隔比较大,内容也比较多,涉及范围也比较广7-11次小练习,废话不多说,直接开始吧.如果对我blog ...

  6. Vue详解----一篇带你从头领悟到尾,享受飞升的感觉

    脚手架文件结构 """ ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ...

  7. 提示工程101|与 AI 交谈的技巧和艺术

    随着 ChatGPT 的问世,人工智能(AI)新时代也正式开启.ChatGPT 是一种语言模型.它与用户进行对话交互,以便用户输入问题或提示,模型响应,然后对话可以继续来回进行,类似于在消息传递应用程 ...

  8. 【go语言】2.2.1 数组和切片

    数组和切片是 Go 语言中常用的数据结构,它们都可以存储多个同类型的元素. 数组 数组是具有固定长度的数据类型,它的长度在定义时就已经确定,不能随意改变. 你可以使用以下方式定义一个数组: var a ...

  9. AB实验遇到用户不均匀怎么办?—— vivo游戏中心业务实践经验分享

    作者:vivo 互联网数据分析团队 - Li Bingchao AB实验是业务不断迭代.更新时最高效的验证方法之一:但在进行AB实验效果评估时需要特别关注"用户不均匀"的问题,稍不 ...

  10. jmeter:json提取一个字段的多个值,用逗号分隔

    目的:将接口响应结果中的一个字段的所有值同时提取,作为参数传给下个接口 1. 格式化接口响应结果 获取下图中所有object里面的EMP_UID 2. json提取 JSON Path express ...