PID制御計算用ライブラリ
Dependents: ROBOCON2017_archan ROBOCON2017_suchan
cal_PID.cpp
- Committer:
- Akito914
- Date:
- 2017-09-18
- Revision:
- 2:e340bdcb9bca
- Parent:
- 1:f1f6c98a4b12
File content as of revision 2:e340bdcb9bca:
#include "mbed.h" #include "cal_PID.hpp" cal_pid::cal_pid(){ past_error=0; integral_error=0; p_gain=1.0; i_gain=0.0; d_gain=0.0; control_period=0.001; output_min=-128; output_max=127; } cal_pid::~cal_pid(){ } void cal_pid::param(float _p_gain,float _i_gain,float _d_gain){ p_gain=_p_gain; i_gain=_i_gain; d_gain=_d_gain; } void cal_pid::period(float _control_period){ if(_control_period<=0)return; control_period=_control_period; } void cal_pid::output(signed long _min,signed long _max){ output_min=_min; output_max=_max; } void cal_pid::reset(){ past_error=0; integral_error=0; } signed long cal_pid::get_pid(signed long position,signed long targ, int out_dir){ error = targ - position; integral_error+=error*control_period; differential_error=(error-past_error)/control_period; past_error=error; p_part=error*p_gain; i_part=integral_error*i_gain; d_part=differential_error*d_gain; operate=p_part+i_part+d_part; operate *= out_dir; if(operate<output_min)operate=output_min; else if(operate>output_max)operate=output_max; return operate; }