ETrobocon2017 - 片山研究所モデルベース開発推進事業部
Pid.cpp
[詳解]
1 #include "Pid.h"
2 
3 //Constructor
4 Pid::Pid(double _p_gain,double _i_gain,double _d_gain,double _target){
5  wrapper_of_constructor(_p_gain,_i_gain,_d_gain,0,0,_target,0);
6 }
7 
8 //wrapper
9 void Pid::wrapper_of_constructor(double _p_gain, double _i_gain, double _d_gain,
10  double _diff, double _integral, double _target, double _output) {
11  p_gain = _p_gain;
12  i_gain = _i_gain;
13  d_gain = _d_gain;
14  old_diff = _diff;
15  integral = _integral;
16  target = _target;
17  output = _output;
18  del = 0.004;
19 
20 }
21 void Pid::calculate(double current_value) {
22  double p,i,d;
23  double diff = current_value - target;
24 
25  integral += (old_diff + diff)/2 * del;
26  p = p_gain * diff;
27  i = i_gain * integral;
28  d = d_gain * (diff - old_diff)/del;
29  old_diff = diff;
30  output = p + i + d;
31 }
32 
33 double Pid::get_output() {
34  return output;
35 }
36 
37 /*
38  * PID値を入力する
39  */
40 void Pid::setPid(double _p_gain, double _i_gain, double _d_gain, double _target) {
41  p_gain = _p_gain;
42  i_gain = _i_gain;
43  d_gain = _d_gain;
44  target = _target;
45 }
46 
47 double Pid::limitOutput(double pid_value){
48  if(pid_value > 100.0) return 100.0;
49  if(pid_value < -100.0) return -100.0;
50  return pid_value;
51 }
double get_output()
Definition: Pid.cpp:33
void calculate(double light_value)
Definition: Pid.cpp:21
void wrapper_of_constructor(double _p_gain, double _i_gain, double _d_gain, double _diff, double _integral, double _target, double _output)
Definition: Pid.cpp:9
void setPid(double _p_gain, double _i_gain, double _d_gain, double _target)
Definition: Pid.cpp:40
PID制御の計算を行うクラス
double limitOutput(double pid_value)
Definition: Pid.cpp:47
Pid(double p_gain, double i_gain, double d_gain, double target)
Definition: Pid.cpp:4