PID控制及代码

PID控制公式:

u(t)=K_{_{p}}e(t)+K_{_I}\int_{0}^{t}e(\tau )d\tau +K_{_{D}}\frac{de(t)}{dt}

所谓的PID,指的就是三个项的参数,分别是线性项参数Kp,积分项Ki,以及微分项参数Kd.

当采样时间短,可以采用一阶差分代替一阶微分,用累加代替积分:

u(k)=K_{_p}\cdot e(k)+K_{_I}\cdot\sum_{0}^{k}e(k)dt+K_{_D}(\frac{e(k)-e(k-1)}{dt})

//实现PID控制
double PIDController::Control(const double error, const double dt)
{
  if (dt <= 0)
  {
    return previous_output_;
  }
  double diff = 0;
  double output = 0;

  if (first_hit_)    //first_hit_: 用来选择是否计算diff
  {
    first_hit_ = false;
  }
  else
  {
    diff = (error - previous_error_) / dt;
  }
    
  integral_ += ki_ * error * dt;        //积分环节  

  previous_error_ = error;
  output = -kp_ * error - integral_ + diff * kd_;  
  previous_output_ = output;
  return output;
}
void PIDController::Reset(){
    previous_error_ = 0.0;
    previous_output_ = 0.0;
    integral_ = 0.0;
    first_hit_ = true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值