p

NK_PID.cpp

Committer:
hamohamo
Date:
2021-08-22
Revision:
0:5f9d8f2ef93e

File content as of revision 0:5f9d8f2ef93e:

#include "NK_PID.hpp"

Nk_pid::Nk_pid(double kp,double ki,double kd,double freq){
    Kp=kp;
    Ki=ki;
    Kd=kd;
    Freq=freq;
    err[0]=0;
    }
void Nk_pid::SetParam(double Value,double Target){
  
  err[1]=(Target-Value)/(101.6/*タイヤの径*/*M_PI);
  integral+=(err[1]+err[0])/2.0*Freq;
  G_P=err[1];
  G_I=integral;
  G_D=(err[1]-err[0])/Freq;
  err[0]=err[1];
  res+=(Kp*G_P)+(Ki*G_I)+(Kd*G_D);
}
double Nk_pid::GetGain(double xvalue){
  if(res<=0){
      if(res<Max_M){
          rtn=Max_M;
          }
      /*else if(res>=Min_M){
          rtn=Min_M;
          }*/
      else{
          rtn=res;
          }
      }
  else {
      if(res>Max_P){
          rtn=Max_P;
          }
      /*else if(res<=Min_P){
          rtn=Min_P;
          }*/
      else{
          rtn=res;
          }
      }
  return (rtn/xvalue);
}
void Nk_pid::SetLimit(double max_p,double min_p,double max_m,double min_m){
  Max_P = max_p*1.0;
  Min_P = min_p*1.0;
  Max_M = max_m*1.0;
  Min_M = min_m*1.0;
}
Nk_pid::~Nk_pid(){}