初学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控制器,还需要明确和解决下面这些事情:

  1. Sample Time 样本时间-  PID算法最好是能评定规律的间隔。如果算法在意这个间隔,我们可以简化内部的计算。
  2. Derivative Kick -  不是什么大问题,很容易解决,因此我们准备解决它。
  3. On-The-Fly Tuning Changes 在运调试-  一个好的PID算法是在参数调优时不打乱内部工作。
  4. Reset Windup Mitigation - 我们将跟进什么是重置终结,然后实现一个可以带来好处的方案。
  5. On/Off (Auto/Manual) 开/关(自动/手动) -  有很多程序,有时希望关闭PID控制,然后通过手动输出,没有控制器的干扰。
  6. Initialization 初始化 -  当控制器第一次启动时,我们需要优雅的转换。也就是说不希望一下突然输出一些修正值。
  7. Controller Direction 控制方向-  最后一种,不是鲁棒性名称上的修改。它设计来确保用户使用正确的信号进行参数调优。

当我们解决了这些问题,我们将拥有一个坚实的PID算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值