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条回答
fk2011
1楼-- · 2020-02-20 23:10
timechange就是PID所谓的微积分时间,这个一般都是固定的。一般函数放在周期中断里面,也有放在主循环中。
wgjn123
2楼-- · 2020-02-20 23:28
fk2011 发表于 2014-5-15 08:41
timechange就是PID所谓的微积分时间,这个一般都是固定的。一般函数放在周期中断里面,也有放在主循环中。 ...

它是不是就相当于执行PID的一个周期
ghostfire
3楼-- · 2020-02-21 03:49
路过帮顶
haozhengzhi
4楼-- · 2020-02-21 08:37
楼主,想问一下,增量式PID,位置式PID的区别
fengyunyu
5楼-- · 2020-02-21 12:33
 精彩回答 2  元偷偷看……
Samzzt
6楼-- · 2020-02-21 15:59
好麻烦的感觉,个人觉得。

一周热门 更多>