增量式PID算法的简化版之后的公式:

△u(t)=Ae(t)-Be(t-1)+Ce(t-2)

△u:PID控制器输出的下一时刻的调整量

e(t):PID控制器在当前时刻的状态变化量-给定值

e(t-1):PID控制器在上一时刻的状态变化量-给定值

e(t-2):PID控制器在上上时刻的状态变化量-给定值

A、B、C 是控制控制系数,A比例,B积分,C微分

需要明确两个重要的概念,被确定量与给定值

被确定量是指传感器检测到的当前系统的状态,给你值是我们希望系统达到的某种状态。(这两个关键变量也因该在公式中有所体现)

假设已知下面这个关系,假设初始速度v0 = 100,且PID控制的公式如下:

△u = 0.8v(t) + 0.2v(t-1) + 0.1v(t-2)

模拟情形:0-50:当前速度是100,期望速度是100,当50-150,期望速度变为50,150-200,期望速度变为200

PID控制器的输出的变化如图:(蓝色曲线为PID控制器输出的下一刻产生的速度变化量,黄色曲线为0,标准值,作为速度调整变化的参照曲线)

下图给出PID控制器的电机输出(蓝色)与目标速度(黄色)的关系

初始速度是100.当50s的时候,期望速度变为50 ,此时PID控制器给电机的反馈要低于达到目标速度的输出,以达到加快减速的目的,而当期望速度由50变为150,点击的输出量要大于150需要的量,以达到加快加速的目的,这个就是i这个分量的作用。d这个分量的作用是消除震荡,消除由于刚刚的提高加速的高输出带来的加速或加速过度带来的影响。具体的这三个参数还是需要在实际的闭环系统中进行调节,达到最佳值。

总结:

p:主要的调节作用,通过加速或减速,已达到期望速度,值一般最大

I:加速调节的作用,通过过量的调节方式,实现快速达到期望值

D:消除震荡,消除由于I的过度调节引起的震荡

模拟的python源码:

# -*- coding: UTF-8 -*-

#约定俗成的写法plt
import matplotlib.pyplot as plt curV = 100
curV_p1 = 100
curV_p2 = 100
stanV = 100
p = 0.7
i = 0.2
d = 0.1
index = 0
x = []
v = []
s = []
while index < 200:
x.append(index)
index = index + 1
v_d = (curV - stanV) * p + (curV_p1 - stanV) * i + (curV_p2 - stanV) * d
curV_p1 = curV
curV_p2 = curV_p1
curV = curV - v_d
print (index,v_d,curV)
v.append(curV)
s.append(stanV)
if index == 50:
stanV = 50
elif index == 150:
stanV = 200 plt.plot(x,v)
plt.plot(x,s)
plt.show()
 
 

最新文章

  1. C++使用VARIANT实现二维数组的操作
  2. WinExec
  3. python 中chr(),unichr(),ord()的用法
  4. JS判断是不是本页面并且,给标签添加属性和属性值
  5. MySQL事务隔离级别初探
  6. 利用toString做类型的判断
  7. Node.js全局对象
  8. 一步一步写算法(之prim算法 下)
  9. java中“==”号的运用
  10. [Swift]LeetCode277. 寻找名人 $ Find the Celebrity
  11. @EnableWebMvc,WebMvcConfigurationSupport,WebMvcConfigurer和WebMvcConfigurationAdapter区别
  12. Numpy基本操作
  13. [dev] 中文版内核代码编码规范
  14. 博客系统(cnblog)
  15. 实时监听input输入内容的N种方法
  16. samba故障:protocol negotiation failed: NT_STATUS_IO_TIMEOUT
  17. 5)协程二(yeild from)
  18. Docker-compose networks 的例子
  19. Java中各类Cache机制实现解决方案[来自CSDN]
  20. 利用RMAN转移裸设备到文件系统

热门文章

  1. Oil Deposits UVA - 572
  2. 3.python之文件操作
  3. zabbix -- 学习之一
  4. ReentrantLock分析
  5. linux常用命令一
  6. 获得本机IP和访问服务的端口号(Java)
  7. 5.Sentinel源码分析—Sentinel如何实现自适应限流?
  8. .Net基础篇_学习笔记_第七天_计算质数(找出0-100以内说有质数)
  9. .Net基础篇_学习笔记_第六天_异常捕获复习及断点调试
  10. Https与Http的区别以及Https的解说