`

初学者PID进阶

PID 
阅读更多

 

存在的问题

本次调整的目的是消除称为“Derivative Kick”的现象。



 

上图反应了这个问题。既然 error=Setpoint-Input, 任何 Setpoint 的变化将导致error瞬时发生变化。 这种变化的导数是无穷大(实际上,既然dt不是0,只是计算为一个非常大的数字)。这个数字被送入pid方程,输出一个非期望的峰值。幸运的是有一个简单的方法来摆脱这个。

解决方案



 
导数误差等于负导数的输入,除非当Setpoint 改变。这不是一个完美的解决方案,相对于添加(Kd *误差导数),我们减去(Kd *输入的导数)。这被称为使用“导数测量”。
 

The Code

/*working variables*/
unsigned long lastTime;
double Input, Output, Setpoint;
double errSum, lastInput;
double kp, ki, kd;
int SampleTime = 1000; //1 sec
void Compute()
{
   unsigned long now = millis();
   int timeChange = (now - lastTime);
   if(timeChange>=SampleTime)
   {
      /*计算所有误差变量,Compute all the working error variables*/
      double error = Setpoint - Input;
      errSum += error;
      double dInput = (Input - lastInput);
 
      /*技术PID输出,Compute PID Output*/
      Output = kp * error + ki * errSum - kd * dInput;
 
      /*Remember some variables for next time*/
      lastInput = Input;
      lastTime = now;
   }
}
 
void SetTunings(double Kp, double Ki, double Kd)
{
  double SampleTimeInSec = ((double)SampleTime)/1000;
   kp = Kp;
   ki = Ki * SampleTimeInSec;
   kd = Kd / SampleTimeInSec;
}
 
void SetSampleTime(int NewSampleTime)
{
   if (NewSampleTime > 0)
   {
      double ratio  = (double)NewSampleTime
                      / (double)SampleTime;
      ki *= ratio;
      kd /= ratio;
      SampleTime = (unsigned long)NewSampleTime;
   }
}
 

这里的修改非常容易。我们替换误差导数和输入导数。记住最后输入而不是最后误差。

The Result



 

这里就是修改后的结果,注意,输入看起来仍然相同。所以我们得到同样的性能,但每次Setpoint 的变化不会输出巨大的峰值。

这或许是也或许不是一个大问题。这取决于你的程序对于输出峰值的敏感度。

 

  • 大小: 14.2 KB
  • 大小: 4.2 KB
  • 大小: 12.2 KB
分享到:
评论

相关推荐

    labview入门资料及进阶技巧合集

    本合集旨在为初学者提供全面的LabVIEW学习资源,同时也包含了帮助进阶用户提升技能的高级技巧。 一、LabVIEW基础入门 LabVIEW的基础在于其独特的图标化编程方式,称为G(Graphical Programming)。用户通过拖拽函数...

    PID控制理论,参数整定,例程.zip

    本压缩包资源集合了PID控制理论的深入讲解、实践例程以及参数整定方法,适合于初学者和进阶者学习。 首先,PID算法的核心是通过比例(P)、积分(I)和微分(D)三个部分的结合来调整系统的响应。比例项直接影响...

    博途PID仿真程序.zip

    通过博途,用户可以创建虚拟的输入/输出设备,并观察PID控制器对系统行为的影响,这特别适合初学者进行学习和实践。 4. **波形分析**:在博途中,PID仿真的一个重要方面是波形显示。用户可以查看输入信号、输出信号...

    PID教程入门到精通到吃透

    本教程将从入门到精通,深入讲解PID的工作原理、设计方法以及参数整定,帮助初学者全面掌握这一核心控制技术。 1. PID基本原理: PID控制器通过结合比例(P)、积分(I)和微分(D)三个部分来调整系统的输出,以...

    使用MATLAB搭建PID模型并直接部署到STM32F4

    【适用人群】:适用于希望学习不同技术领域的初学者或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础...

    plc编程入门视频教程-PLC进阶三十六式.pdf

    《PLC编程入门视频教程-PLC进阶三十六式》是一套全面介绍可编程逻辑控制器(PLC)编程技术的教程,旨在帮助初学者快速掌握PLC的基础知识和高级应用技巧。PLC是工业自动化领域中不可或缺的设备,用于控制自动化系统的...

    智能车PID算法资料包

    7. 教程文档:详细解释每个概念和技术,适合初学者入门和进阶学习。 通过学习这个资料包,你可以了解PID算法的基本原理,掌握其在智能小车控制系统中的应用,以及如何通过调试参数来改善系统的稳定性、响应速度和...

    PID算法汇总

    通过这个汇总,无论是初学者还是有一定经验的工程师,都可以系统地学习和掌握PID算法在实际项目中的应用,提升飞思卡尔智能车的控制性能。同时,这些知识也可以广泛应用于机器人、无人机、自动化生产线等众多领域,...

    51单片机初学者入门例程

    本压缩包“51单片机初学者入门例程”为初学者提供了一个丰富的学习平台,通过一系列逐步进阶的例程,帮助学习者掌握51单片机的基本操作和应用。 在学习51单片机的过程中,首先要了解其基本结构。51单片机主要由CPU...

    压缩包包括PID参数的意义与整定方法、PID控制算法的C语言实现、PID算法原理、调试经验和代码、由入门到精通吃透PID等

    PID控制器是一种广泛应用在自动化控制领域的算法,其全称为比例-积分-微分控制器。这个控制器通过结合比例(P)、积分(I)和微分(D)三个部分的输出来调整...无论是初学者还是经验丰富的工程师,都能从中受益匪浅。

    stm32平衡小车.zip

    STM32平衡小车项目是一个基于STM32微控制器的嵌入式系统开发实例,它主要...无论你是初学者还是进阶者,这个项目都将为你提供宝贵的学习经验。在实践中,不断尝试、调试和优化,将有助于你成为更加熟练的嵌入式开发者。

    20个易上手的STM32项目,有详细的文档和说明,非常适合初学者学历和提高

    通过这20个STM32项目,初学者可以从基础到进阶,全面掌握STM32微控制器的使用,为后续更复杂的嵌入式系统开发打下坚实基础。在实践中学习,不断积累经验,将理论知识转化为实际操作能力,是成为一名优秀的STM32...

    PID学习资料

    ### PID学习资料知识点详解 #### 一、自动调节系统的发展历程 ...以上是关于PID学习资料的一些关键知识点总结,希望通过这些内容能够帮助初学者更好地理解和掌握PID控制的基本原理及其在实际应用中的运用。

    基于Simulink的一阶系统及其控制器的MATLAB仿真教程

    接着详细介绍了三个版本的模型:初学者版本(创建基本传递函数模型)、可修改版本(增益调整的传递函数模型)以及进阶版本(PID 控制器与反馈系统模型)。每个版本都附有具体的步骤指导、组件说明和代码示例,帮助...

    基于AT89C51单片机的水温控制系统(论文)

    【基于AT89C51单片机的水温控制系统】是一种常见的电子工程设计,尤其适合初学者和进阶学习者进行毕业设计、课程设计、大作业或工程实训。AT89C51是一款广泛应用的8位微控制器,由美国Atmel公司生产,其在嵌入式系统...

    matlab入门与进阶讲义(内附源码)

    初学者应熟悉这些窗口的功能,学会如何输入命令、查看变量和运行脚本。 2. **基本数据类型**:Matlab支持数值型、字符型、逻辑型等多种数据类型。理解这些数据类型的特点,如向量、矩阵的创建和操作,是学习Matlab...

    AI小汽车全套设计资料以及图纸、控制源码

    对于初学者和进阶者,这个压缩包提供了一整套的学习资料和实际操作素材。初学者可以从基础的机械设计和电子基础知识开始,逐步掌握硬件接口和控制原理。进阶者则可以通过源码分析,深入理解AI算法在实际项目中的应用...

    单片机C语言程序设计实训100例——基于8051+Proteus仿真.zip

    《单片机C语言程序设计实训100例——基于8051+Proteus仿真》是一个针对初学者和进阶者全面了解单片机编程的实践教程。本资源包含一系列基于8051系列单片机的C语言编程实例,通过与Proteus仿真软件的结合,为学习者...

    51黑论坛_STM32平衡车.rar

    6. **51黑论坛**:51黑论坛是一个聚集了众多电子爱好者和技术人员的在线社区,他们分享项目、教程和资源,对于初学者和进阶者都是很好的学习平台。 7. **学习资源**:对于想要深入了解STM32平衡车项目的人来说,...

    单片机C语言程序设计实训100例基于8051+Proteus仿真

    单片机C语言程序设计实训100例基于8051+Proteus仿真是一个专注于8051单片机编程学习的资源集合,它涵盖了从基础到进阶的多个实践项目,旨在帮助初学者和进阶者提升单片机应用能力。8051单片机是微控制器领域广泛应用...

Global site tag (gtag.js) - Google Analytics