PID各环节的意义和功能,自带PID的matlab编程实例
这是PID的标准形式包括比例/积分/微分三部分,e为偏差

下面我们分析三个环节的作用,设:当前系统状态A,目标状态B, e=B-A,初始状态e>0
(以下是个人的理解,欢迎读者评论)
1 比例环节P
e越大u越大,当A近似B时,e非常小,u也非常小,现实系统的u除了要满足自身系统的需求,还要分担给克服磨擦,空气阻力等等,因此最终A总是和B差一点,这个很小的u用在克服阻碍上了(它会存在一个小误差)
2 微分环节d
此环节就是e的斜率,A在趋近B的过程中e的值始终为正,但e的斜率为负,它不希望e变化,当A稳定在恒定值时,e的斜率为零,它也就失去作用(但它无法消除误差)
3 积分环节i
我们一直都知道,积分的数学意义就是求函数与坐标轴围成的面积(这里是指A与目标B围成的面积),它希望面积为零,当比例环节造成的误差存在时(此时A<B),它就会发挥作用,直到围成的面积和为零(它可以消除误差)
这是编程中u的计算方法
u(i) = Kp * (x_last - x(i)) +
Ki * (x_last - 2 * x(i - 1) + x(i - 2)) +
Kd * x_last
u为控制量,x_last为目标值。x(i)为当前值
下面是matlab编程实例:
已知:A= [-2 -1;1 0] , B = [1 ; 0],现用P控制器来控制这个系统(搞清楚P控制,积分微分内容也是如法炮制)
matlab脚本如下:
A = [-2 -1;
1 0];
B = [1;0];
C = [0 0];
D = 0;
sys = ss(A,B,C,D);%组成空间量
sys1 = c2d(sys,0.1);%转为离散,采样时间0.1s
x = [1;0];%系统初始状态
x_last = [0;0];%我们期望的最终目标
Kp = [0.001 0.001];%系数不能太大,这里Kp是1*2的
%Ki.......
%Kd........
%下面开始进行P控制
for i = 1:100
u = Kp * (x_last - x(:,i));%u控制器算出的控制量
x(:,i+1) = sys1(1,1).A * x(:,i) + sys1(1,1).B * u;%为了保证矩阵维度一致,u必须是1*1的,所以Kp需要是1*2的
end
到此程序结束,在这要注意几点:
1 一定要注意矩阵维度问题,维度很容易出错;
2 循环时要保证每个状态都能被循环到;
3 注意系数不能太大,有时候调试半天也不知道是怎么回事,其实就是系数太大导致u大的离谱;
PID各环节的意义和功能,自带PID的matlab编程实例的更多相关文章
- 手把手教你实现热更新功能,带你了解 Arthas 热更新背后的原理
文章来源:https://studyidea.cn/java-hotswap 一.前言 一天下午正在摸鱼的时候,测试小姐姐走了过来求助,说是需要改动测试环境 mock 应用.但是这个应用一时半会又找不 ...
- 百度地图 api 功能封装类 (ZMap.js) 本地搜索,范围查找实例
百度地图 api 功能封装类 (ZMap.js) 本地搜索,范围查找实例 相关说明 1. 界面查看: 吐槽贴:百度地图 api 封装 的实用功能 [源码下载] 2. 功能说明: 百度地图整合功能分享修 ...
- PID控制器开发笔记之十三:单神经元PID控制器的实现
神经网络是模拟人脑思维方式的数学模型.神经网络是智能控制的一个重要分支,人们针对控制过程提供了各种实现方式,在本节我们主要讨论一下采用单神经元实现PID控制器的方式. 1.单神经元的基本原理 单神经元 ...
- 单片机的外围功能电路 LET′S TRY“嵌入式编程”: 2 of 6
单片机的外围功能电路 LET′S TRY“嵌入式编程”: 2 of 6 本连载讲解作为嵌入式系统开发技术人员所必需具备的基础知识.这些基础知识是硬件和软件技术人员都应该掌握的共通技术知识. 上期在&l ...
- PID控制器开发笔记之十:步进式PID控制器的实现
对于一般的PID控制系统来说,当设定值发生较大的突变时,很容易产生超调而使系统不稳定.为了解决这种阶跃变化造成的不利影响,人们发明了步进式PID控制算法. 1.步进式PID的基本思想 所谓步进式PID ...
- nginx: [error] invalid PID number “” in “/usr/local/var/run/nginx/nginx.pid”
在Mac上用brew安装Nginx,然后修改Nginx配置文件,再重启时报出如下错误: nginx: [error] invalid PID number "" in " ...
- 详细介绍redis的集群功能,带你了解真正意义上的分布式
Redis 集群是一个分布式(distributed).容错(fault-tolerant)的 Redis 实现, 集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset). ...
- PID控制器开发笔记之十二:模糊PID控制器的实现
在现实控制中,被控系统并非是线性时不变的,往往需要动态调整PID的参数,而模糊控制正好能够满足这一需求,所以在接下来的这一节我们将讨论模糊PID控制器的相关问题.模糊PID控制器是将模糊算法与PID控 ...
- PID控制算法的c语言实现十二 模糊PID的参数整定
这几天一直在考虑如何能够把这一节的内容说清楚,对于PID而言应用并没有多大难度,按照基本的算法设计思路和成熟的参数整定方法,就算是没有经过特殊训练和培训的人,也能够在较短的时间内容学会使用PID算法. ...
随机推荐
- jchdl - GSL实例 - Add
https://mp.weixin.qq.com/s/6xcYYdYZTBPTf25xFluzBQ 使用FullAdder级联实现加法器 参考链接: https://github.com/wj ...
- 超干货!为了让你彻底弄懂MySQL事务日志,我通宵肝出了这份图解!
还记得刚上研究生的时候,导师常挂在嘴边的一句话,"科研的基础不过就是数据而已."如今看来,无论是人文社科,还是自然科学,或许都可在一定程度上看作是数据的科学. 倘若剥开研究领域的外 ...
- 串口助手下载-带时间戳的串口助手-极简串口助手-V1.1 自动保存配置参数 能显示收发时间方便调试
1.串口助手下载 2.带时间戳的串口助手,每次收发指令带上了时间戳,方便调试 3.极简串口助手 4.简单易用 高速稳定 5.每次修改的参数都能自动保存,免去了重复配置的工作 下载地址:http://w ...
- Java实现 LeetCode 162 寻找峰值
162. 寻找峰值 峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引. 数组可能包含多个峰值,在这种情况下,返 ...
- Java实现 LeetCode 58 最后一个单词的长度
58. 最后一个单词的长度 给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度. 如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词. 如果不存在最后一个单词, ...
- java中装箱和拆箱的详细使用(详解)
一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Jav ...
- hibernate 用注解方式生成uuid方法
//配置uuid,本来jpa是不支持uuid的,但借用hibernate的方法可以实现. @GeneratedValue(generator = "uuid") @Generate ...
- 心有 netty 一点通!
一.标准的netty线程模型 双池合璧: 1.连接线程池: 连接线程池专门负责监听客户端连接请求,并完成连接的建立(包括诸如握手.安全认证等过程). 连接的建立本身是一个极其复杂.损耗性能的过程,此处 ...
- (四)MySQL条件查询(通配符、模糊查询)、排序查询、分组查询(单行、分组函数)
一.条件查询 1.含义:前面学的基础查询可以查询一个或多个字段,如果需要的数据仅仅是其中的某一行或多行就用到了条件查询. 2.语法:(序号表示语句执行顺序) SELECT 字段名 ③ FROM 表名 ...
- spark源码分析以及优化
第一章.spark源码分析之RDD四种依赖关系 一.RDD四种依赖关系 RDD四种依赖关系,分别是 ShuffleDependency.PrunDependency.RangeDependency和O ...