Skip to content
Snippets Groups Projects
Commit e711eb3f authored by dawehr's avatar dawehr
Browse files

Correctly integrating error in PID block to work with dynamic sampling time.

parent 2eabf1fb
No related branches found
No related tags found
No related merge requests found
...@@ -48,7 +48,7 @@ static void pid_computation(void *state, const double* params, const double *inp ...@@ -48,7 +48,7 @@ static void pid_computation(void *state, const double* params, const double *inp
if (fabs(params[PID_KI]) <= FLT_EPSILON) { if (fabs(params[PID_KI]) <= FLT_EPSILON) {
pid_state->acc_error = 0; pid_state->acc_error = 0;
} else { } else {
pid_state->acc_error += error; pid_state->acc_error += (error * inputs[PID_DT]);
} }
if (pid_state->just_reset) { if (pid_state->just_reset) {
...@@ -60,7 +60,7 @@ static void pid_computation(void *state, const double* params, const double *inp ...@@ -60,7 +60,7 @@ static void pid_computation(void *state, const double* params, const double *inp
// Compute each term's contribution // Compute each term's contribution
P = params[PID_KP] * error; P = params[PID_KP] * error;
I = params[PID_KI] * pid_state->acc_error * inputs[PID_DT]; I = params[PID_KI] * pid_state->acc_error;
// Low-pass filter on derivative // Low-pass filter on derivative
double change_in_value = inputs[PID_CUR_POINT] - pid_state->prev_val; double change_in_value = inputs[PID_CUR_POINT] - pid_state->prev_val;
double term1 = params[PID_ALPHA] * pid_state->last_filtered; double term1 = params[PID_ALPHA] * pid_state->last_filtered;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment