这是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编程实例的更多相关文章

  1. 手把手教你实现热更新功能,带你了解 Arthas 热更新背后的原理

    文章来源:https://studyidea.cn/java-hotswap 一.前言 一天下午正在摸鱼的时候,测试小姐姐走了过来求助,说是需要改动测试环境 mock 应用.但是这个应用一时半会又找不 ...

  2. 百度地图 api 功能封装类 (ZMap.js) 本地搜索,范围查找实例

    百度地图 api 功能封装类 (ZMap.js) 本地搜索,范围查找实例 相关说明 1. 界面查看: 吐槽贴:百度地图 api 封装 的实用功能 [源码下载] 2. 功能说明: 百度地图整合功能分享修 ...

  3. PID控制器开发笔记之十三:单神经元PID控制器的实现

    神经网络是模拟人脑思维方式的数学模型.神经网络是智能控制的一个重要分支,人们针对控制过程提供了各种实现方式,在本节我们主要讨论一下采用单神经元实现PID控制器的方式. 1.单神经元的基本原理 单神经元 ...

  4. 单片机的外围功能电路 LET′S TRY“嵌入式编程”: 2 of 6

    单片机的外围功能电路 LET′S TRY“嵌入式编程”: 2 of 6 本连载讲解作为嵌入式系统开发技术人员所必需具备的基础知识.这些基础知识是硬件和软件技术人员都应该掌握的共通技术知识. 上期在&l ...

  5. PID控制器开发笔记之十:步进式PID控制器的实现

    对于一般的PID控制系统来说,当设定值发生较大的突变时,很容易产生超调而使系统不稳定.为了解决这种阶跃变化造成的不利影响,人们发明了步进式PID控制算法. 1.步进式PID的基本思想 所谓步进式PID ...

  6. nginx: [error] invalid PID number “” in “/usr/local/var/run/nginx/nginx.pid”

    在Mac上用brew安装Nginx,然后修改Nginx配置文件,再重启时报出如下错误: nginx: [error] invalid PID number "" in " ...

  7. 详细介绍redis的集群功能,带你了解真正意义上的分布式

    Redis 集群是一个分布式(distributed).容错(fault-tolerant)的 Redis 实现, 集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset). ...

  8. PID控制器开发笔记之十二:模糊PID控制器的实现

    在现实控制中,被控系统并非是线性时不变的,往往需要动态调整PID的参数,而模糊控制正好能够满足这一需求,所以在接下来的这一节我们将讨论模糊PID控制器的相关问题.模糊PID控制器是将模糊算法与PID控 ...

  9. PID控制算法的c语言实现十二 模糊PID的参数整定

    这几天一直在考虑如何能够把这一节的内容说清楚,对于PID而言应用并没有多大难度,按照基本的算法设计思路和成熟的参数整定方法,就算是没有经过特殊训练和培训的人,也能够在较短的时间内容学会使用PID算法. ...

随机推荐

  1. 关于js 原生原生链

    可以这么理解 (1).所有的引用类型都有一个 _proto_ (隐式原型)属性,属性值是一个普通的对象 (2).所有的函数都有一个prototype(显示原型)属性,属性值是一个普通的对象 (3).所 ...

  2. jchdl - RTL实例 - AndReg

    https://mp.weixin.qq.com/s/p4-379tBRYKCYBk8AZoT8A   输入两组线相与,结果输出到寄存器.   参考链接 https://github.com/wjcd ...

  3. Java实现 LeetCode 556 下一个更大元素 III(数组的翻转)

    556. 下一个更大元素 III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 1 ...

  4. Java实现 LeetCode 215. 数组中的第K个最大元素

    215. 数组中的第K个最大元素 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6 ...

  5. JQuery实现对html结点的操作(创建,添加,删除)

    效果图: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  6. PAT 跟奥巴马一起编程

    美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个 ...

  7. DirectX11 With Windows SDK--31 阴影映射

    前言 阴影既暗示着光源相对于观察者的位置关系,也从侧面传达了场景中各物体之间的相对位置.本章将起底最基础的阴影映射算法,而像复杂如级联阴影映射这样的技术,也是在阴影映射的基础上发展而来的. 学习目标: ...

  8. install-package : 由于无法加载项目 mydemo 的详细信息,操作失败

    安装nuget package包提示错误 install-package : 由于无法加载项目 mydemo 的详细信息,操作失败 解决方法 项目用dotnet cli 命令dotnet new mv ...

  9. SQL Msg 18054, Level 16, State 1

    今天接到一个看起来很简单的任务--修改数据库中的一项数据.听起来很简单吧. 在网上搜索了一下,很快就拼凑出了相应的 SQL 语句: UPDATE [suivi].[dbo].[numSerie]SET ...

  10. map处理:map(str,[1,2,3,4,5,6])

    #map(s1,s2)传入两个参数,s1是对该Iterable每个参数做处理的参数,s2是该Iterable print(list(map(str,[1,2,3,4,5,6]))) #map()传入的 ...