@@ -191,13 +191,13 @@ typedef struct { float p, i, d, c, f; } raw_pidcf_t;
191191 float cTerm () const { return 0 ; }
192192 float fTerm () const { return 0 ; }
193193 void set_Kp (float p) { Kp = p; }
194- void set_Ki (float i) { Ki = scalePID_i (i); max_power_over_i_gain = float (MAX_POW) / Ki - float (MIN_POW);}
194+ void set_Ki (float i) { Ki = scalePID_i (i); max_power_over_i_gain = float (MAX_POW) / Ki - float (MIN_POW); }
195195 void set_Kd (float d) { Kd = scalePID_d (d); }
196196 void set_Kc (float ) {}
197197 void set_Kf (float ) {}
198198 int low () const { return MIN_POW; }
199199 int high () const { return MAX_POW; }
200- void reset () { pid_reset = true ; pid_below = false ;}
200+ void reset () { pid_reset = true ; pid_below = false ; }
201201 void set (float p, float i, float d, float c=1 , float f=0 ) { set_Kp (p); set_Ki (i); set_Kd (d); set_Kc (c); set_Kf (f); }
202202 void set (const raw_pid_t &raw) { set (raw.p , raw.i , raw.d ); }
203203 void set (const raw_pidcf_t &raw) { set (raw.p , raw.i , raw.d , raw.c , raw.f ); }
@@ -220,22 +220,17 @@ typedef struct { float p, i, d, c, f; } raw_pidcf_t;
220220 }
221221 else {
222222 if (pid_reset) {
223- pid_reset = false ;
223+ temp_iState = pid_below ? max_power_over_i_gain : 0 ;
224224 work_d = 0 ;
225- if (pid_below) {
226- temp_iState = max_power_over_i_gain;
227- pid_below = false ;
228- }
229- else {
230- temp_iState = 0 ;
231- }
225+ pid_reset = false ;
226+ pid_below = false ;
232227 }
233228
234- temp_iState = constrain (temp_iState + pid_error, -max_power_over_i_gain/ 4 . 0f , max_power_over_i_gain);
229+ temp_iState = constrain (temp_iState + pid_error, -0 . 25f * max_power_over_i_gain , max_power_over_i_gain);
235230
236231 work_p = Kp * pid_error;
237232 work_i = Ki * temp_iState;
238- work_d = work_d + PID_K2 * (Kd * (temp_dState - current) - work_d);
233+ work_d += (Kd * (temp_dState - current) - work_d) * PID_K2 ;
239234
240235 output_pow = constrain (work_p + work_i + work_d + float (MIN_POW), 0 , MAX_POW);
241236 }
0 commit comments