PID学习

2020-02-20 20:40发布



  1. 这是arduino的基本PID程序

  2. unsigned long lastTime;
  3. double Input, Output, Setpoint;
  4. double errSum, lastErr;
  5. double kp, ki, kd;
  6. void Compute()
  7. {
  8.    /*How long since we last calculated*/
  9.    unsigned long now = millis();
  10.    double timeChange = (double)(now - lastTime);
  11.   
  12.    /*Compute all the working error variables*/
  13.    double error = Setpoint - Input;
  14.    errSum += (error * timeChange);
  15.    double dErr = (error - lastErr) / timeChange;
  16.   
  17.    /*Compute PID Output*/
  18.    Output = kp * error + ki * errSum + kd * dErr;
  19.   
  20.    /*Remember some variables for next time*/
  21.    lastErr = error;
  22.    lastTime = now;
  23. }
  24.   
  25. void SetTunings(double Kp, double Ki, double Kd)
  26. {
  27.    kp = Kp;
  28.    ki = Ki;
  29.    kd = Kd;
  30. }
复制代码



这是arduino的基本PID程序

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;
}
复制代码


这是一个PID的基本程序,我看了一下,一知半解,如果用到我的这种小车里,
input:编码器检测小车速度值,
output:输出小车速度:
setpoint:设置小车直线标准速度
unsigned long now = millis();//这是arduino中计时的一个函数,即now为从程序执行到此的时间
我不太了解timechange计算是从哪开始到哪结束???????

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
freefei
1楼-- · 2020-02-21 16:37
增量式PID和位置式PID都是相同的公式推导出来的,应用场合不一样,但原理是一样的
qs6361036
2楼-- · 2020-02-21 21:48
学习啦 ! 代码量不是很大
dxzky
3楼-- · 2020-02-21 22:57
关于二楼的问题,百度了一下感觉说的算比较好的:

(1)位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值;而增量式PID的输出只与当前拍和前两拍的误差有关,因此位置式PID控制的累积误差相对更大;

(2)增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。

(3)由于增量式PID输出的是控制量增量,如果计算机出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作,而位置式的输出直接对应对象的输出,因此对系统影响较大。

一周热门 更多>