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

  结合新的Arduino PID库的发布,我决定发布这一系列帖子。最后一个库虽然稳定,但并没有真正提供任何代码解释。这次计划的目的是详细解释为什么代码是这样的。我希望这对两类人有用:

  • 直接对Arduino PID库中发生的事情感兴趣的人将得到详细的解释。
  • 任何编写自己的PID算法的人都可以看看我是如何做的,并借鉴他们喜欢的东西。

  这将是一个艰难的过程,但我认为我找到了解释我的代码的一个不太痛苦的方法。我将从我称之为“初学者的PID”开始。然后我将逐步改进它,直到我们留下一个高效,强大的pid算法。

初学者的PID

  这是每个人第一次学习它时接触的PID方程式:

  这导致几乎每个人都编写以下PID控制器:

 /*working variables*/
unsigned long lastTime;
double Input,Output,Setpoint;
double errSum,lastErr;
double kp,ki,kd;
void Compute()
{
/*How long since we last calculated*/
unsigned long now = millis();
double timeChange = (double)(now - lastTime); /*Compute all the working error variables*/
double error = Setpoint - Input;
errSum += (error * timeChange);
double dErr = (error - lastErr) / timeChange; /*Compute PID Output*/
Output = kp * error + ki * errSum + kd * dErr; /*Remember some variables for next time*/
lastErr = error;
lastTime = now;
} void SetTunings(double Kp,double Ki,double Kd)
{
kp = Kp;
ki = Ki;
kd = Kd;
}

  Compute()被定期或不定期地调用,并且它运行良好。不过,这样的PID并不是“非常好用”。如果我们要将此代码转换为与工业PID控制器相同的代码,我们将不得不解决以下问题:

  1、采样时间—如果以固定间隔评估PID算法,则该算法的运行效果最佳。如果算法知道这个间隔,我们也可以简化一些内部的数学计算。

  2、微分冲击—这虽然不是最重要的,但很容易处理,所以我们就先处理它。

  3、改变整定参数—一个好的PID算法是可以在不影响内部工作的情况下改变整定参数的算法。

  4、积分饱和—我们将讨论积分饱和,并实现一个很好的解决方案。

  5、开/关(自动/手动)—在大多数应用中,有时需要关闭PID控制器并手动调节输出,而不会影响控制器。

  6、初始化—当控制器第一次打开时,我们想要一个“无扰动切换”。也就是说,我们不希望输出突然变成一些新值。

  7、正反作用—最后一种方法,并且不改变系统的鲁棒性和名称。它旨在确保用户使用正确的符号输入调整参数。

  8、新:测量的比例—添加此功能可以更轻松地控制某些类型的过程。

  一旦我们解决了所有这些问题,我们就会拥有一个可靠的PID算法。我们还将获得Arduino PID库最新版本中使用的代码,这并非巧合。因此,无论您是尝试编写自己的算法,还是试图了解PID库中的内容,我希望这可以帮助您解决问题。让我们开始吧。

  更新:在所有代码示例中,我使用的是双精度。在Arduino上,double与float相同(单精度。)真双精度对于PID来说可能会成为累赘。如果您使用的语言确实是双精度,我建议将所有双精度更改为浮点数。

欢迎关注:

改进初学者的PID-介绍的更多相关文章

  1. 初学者SQL语句介绍

    初学者SQL语句介绍      1.用 Select 子句检索记录    Select 子句是每一个检索数据的查询核心.它告诉数据库引擎返回什么字段.    Select 子句的常见形式是:    S ...

  2. 改进初学者的PID-正反作用

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  3. 改进初学者的PID-修改整定参数

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  4. 改进初学者的PID-采样时间

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  5. 改进初学者的PID-测量的比例介绍

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  6. 改进初学者的PID-测量的比例编码

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  7. 改进初学者的PID-积分饱和

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  8. 改进初学者的PID-初始化

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  9. 改进初学者的PID-手自动切换

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

随机推荐

  1. vscode远程调试node服务端

    { "type": "node", "request": "attach", "name": &qu ...

  2. c字符数组之两头堵模型

    char *其实就是char[length]的首元素地址  实验环境:centos7下qt5.11 中文char类型占3个字节 char[length]="特别车队"其实等价于ch ...

  3. (转载) 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    这一篇是从0开始搭建SQL Server AlwaysOn 的第三篇,这一篇才真正开始搭建AlwaysOn,前两篇是为搭建AlwaysOn 做准备的 步骤 这一篇依然使用step by step的方式 ...

  4. 模拟赛 怨灵退治 题解(Hall定理+线段树)

    题意: 有 n 群怨灵排成一排,燐每秒钟会选择一段区间,消灭至多 k 只怨灵. 如果怨灵数量不足 k,则会消灭尽量多的怨灵. 燐作为一只有特点的猫,它选择的区间是不会相互包含的.它想要知道它每秒最多能 ...

  5. 【mysql】知识点

    mysql执行原理 只要是B/S架构,都是会有客户端与服务端,mysql也不例外. 首先客户端发出一个请求,这个请求就是一个查询请求(Select),而它请求的对象就是服务端,服务端是怎么处理这项查询 ...

  6. php技能树---大神的进阶之路

    PHP7 迎来巨大的性能提升,又一次回到关注的焦点.根据这些年在开发圈子总结的LNMP程序猿发展轨迹,结合个人经验体会,总结出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段 ...

  7. 安装pdo_dblib扩展连接SQLserver

    1.先得安装freetdswget ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.1.5.tar.gztar zxvf freetds-1.1. ...

  8. C语言实现多线程排序

    #include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <string.h& ...

  9. VMware安装VMwaretools

    默认点击“安装VMware Tools(T)”选项下载好安装包 下载的安装包放在计算机的media目录下 进入/media/ubuntu14-04/VMware Tools目录: cd /media/ ...

  10. PHP rtrim() 函数

    code <!DOCTYPE html> <html> <body> <?php $str = "Hello World!"; echo ...