最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助。作者Brett Beauregard的原文网址:http://brettbeauregard.com/blog/2011/07/pid-when-should-i-compute-the-integral-term/

最近有一个建议张贴到初学者的PID系列。争议的焦点是,如果您解决拉普拉斯域中的问题,它指定了执行积分项的不同方式。评论人士建议,与其看某一点的误差总和,不如看最后一个点的总和。

因此,当前的代码是这样的:

/*Compute all the working error variables*/
double input = *myInput;
double error = *mySetpoint - input;
ITerm+= (ki * error);
if(ITerm > outMax) ITerm= outMax;
else if(ITerm < outMin) ITerm= outMin;
double dInput = (input - lastInput);/*Compute PID Output*/
double output = kp * error + ITerm- kd * dInput;

建议是这样的:

/*Compute all the working error variables*/
double input = *myInput;
double error = *mySetpoint - input;double dInput = (input - lastInput);/*Compute PID Output*/
double output = kp * error + ITerm- kd * dInput;ITerm+= (ki * error);
if(ITerm > outMax) ITerm= outMax;
else if(ITerm < outMin) ITerm= outMin;

我从未见过这样做,但我想我应该试一试。我设计的测试是一个简单的设定值阶跃,然后是一个斜坡下降。

当控制器设置为默认的采样时间时,差异是无法察觉的。为了突出这两种方法之间的差异,我决定将PID采样时间从默认值100mS提高到5秒。

这里我们可以看到一个明显的赢家。现有的PID代码的性能比建议的要好,这可能是因为积分项对进程更改的响应要早5秒。但是为了确保我没有遗漏任何东西,我决定再做一次测试。我没有改变设定值,而是在系统中引入了负载变化。

同样,现有的 PID 代码性能更好,处理负载变化更快。

那么判决呢?虽然这是一个有趣的锻炼,但我认为结果很清楚。我会保持原来的代码。

欢迎关注:

PID:我应该何时计算积分项?相关推荐

  1. 图像积分图 c语言,Opencv中integral计算积分图

    积分图的概念最初是由Paul Viola和Michael Jones在2001年提出的,在他们的论文"Rapid Object Detection using a Boosted Casca ...

  2. DirectX12(D3D12)基础教程(二十一)—— PBR:IBL 的数学原理(3/5)漫反射积分项

    目录 3.4.漫反射项的重要性采样计算 3.4.1.漫反射项的二重积分形式极其近似预积分计算 3.4.2.漫反射辐照度积分项的直接积分计算 3.4.3.漫反射辐照度积分项的蒙特卡洛积分重要性采样计算 ...

  3. 用纯C语言分别实现增量式与位置式的PID自整定算法

    对于增量式PID自整定算法,C语言代码如下: #include <stdio.h>#define SAMPLE_TIME 0.1 // 采样时间 #define KP_DEFAULT 0. ...

  4. PID温控实验平台搭建(二)——PID进阶知识介绍及源码分享

    PID温控实验平台搭建 (一)PID基础知识介绍 (二)PID进阶知识介绍及源码分享 (三)从零开始搭建STM32温控实验平台 (四)PID温控系统代码讲解 (五)最终实验现象与总结 文章目录 前言 ...

  5. 自动驾驶-PID控制器

    在自动驾驶中控制车辆是指使用方向盘,刹车,油门将车开到目的地.控制车辆的算法一般称为控制器,PID控制器是最常见,最基础的控制器之一,PID控制器是Proportion Integration Dif ...

  6. PID算法的一点改进思路

    在PID算法里面有三个系数Kp,Ki,Kd;其中Kp是比例常数,Ki是积分常数,Kd是微分常数.Kp比例常数可以控制被控制量变化速度,越大控制越快但是越容易引发系统震荡,越小控制又比较慢:Ki比例常数 ...

  7. 基于MATLAB的数字PID直流电机调速系统

    摘要 电机的主要作用是产生驱动转矩,通常是作为电器或各种机械的动力源.直流电动机具有良好的启.制动性能,在轧钢机及流水线.电梯.汽车等领域得到了广泛应用.本文首先根据直流电机工作原理建立直流电机的数学 ...

  8. 从零开始之PID控制

    从零开始系列之PID控制,宗旨就是以说人话的方式讲述它,真正的做到从零开始,小白一看就会,一学就废. 一.什么是PID控制? PID控制(比例-积分-微分控制)由比例单元(Proportional). ...

  9. 智能车竞赛技术报告 | 智能车视觉 - 青岛工学院 - 青工战斗

    简 介: 本文设计的智能车系统以LPC54606J512微控制器为核心控制单元,基于MT9V034摄像头的图像采样获取赛道图像信息,提取赛道中心线,计算出小车与黑线间的位置偏差,采用PD方式对舵机转向 ...

最新文章

  1. Winform中使用FastReport实现自定义PDF打印预览
  2. 计算机学生工学交替报告书,工学交替学生守则
  3. 性能测试工具SilkPerformer介绍
  4. [Linux] - xxx 不在 sudoers 文件中。此事将被报告。
  5. 《C Primer Plus》读书笔记
  6. 如何使用ps去改变图片的背景颜色(白底、蓝底和红底)
  7. 如何解决 cannot be cast to java.lang.Comparable问题?
  8. 在手机上访问和调试本地的 H5 页面
  9. Windows技术文章汇集
  10. 小数化分数(C++)
  11. hdu5238 calculator (线段树+crt)
  12. 全球与中国矿物加工工程市场深度研究分析报告
  13. Android数据库高手秘籍(六)——LitePal的修改和删除操作
  14. 界面仅允许扫码枪录入禁止手工键盘输入
  15. ONLYOFFICE历史版本开发技术之四
  16. (转)如何治疗颈椎突 - 对程序员来说很有用
  17. seo优化 nextjs
  18. 机器学习(1): 线性回归——最小二乘法 小结
  19. “双减”后的高途分析
  20. 武汉的堵,是你不懂的殇

热门文章

  1. H5常用拖放事件解析
  2. 20145324 《Java程序设计》第6周学习总结
  3. C语言中printf(built: %s %s,__TIME__,__DATE__);方便调试
  4. Element-UI-快速入门(极简教程)
  5. 解决问题 com.alibaba.fastjson.JSONObject cannot be cast to xxx
  6. 【剑指offer】面试题35:复杂链表的复制(Java)
  7. druid seata 配置_架构设计 | 基于Seata中间件,微服务模式下事务管理
  8. 搭建opencv环境
  9. ajax官方api,yangguozhong
  10. html5的新标记,HTML5 新标记