Skip to content

Commit 5b39984

Browse files
committed
PID: Restructure PID calculation for clarity
1 parent fe27429 commit 5b39984

1 file changed

Lines changed: 7 additions & 5 deletions

File tree

src/pid.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,17 @@ void pid_update(
5656
const RefloatConfig *config,
5757
float dt
5858
) {
59-
pid->p = setpoint - imu->balance_pitch;
60-
pid->i = pid->i + pid->p * config->ki * LOOP_HERTZ_COMPAT * dt;
59+
float error = setpoint - imu->balance_pitch;
6160

61+
pid->p = error * config->kp;
62+
63+
pid->i = pid->i + error * config->ki * LOOP_HERTZ_COMPAT * dt;
6264
if (config->ki_limit > 0 && fabsf(pid->i) > config->ki_limit) {
6365
pid->i = config->ki_limit * sign(pid->i);
6466
}
6567

68+
pid->rate_p = -imu->pitch_rate * config->kp2;
69+
6670
// brake scale coefficient smoothing
6771
if (md->erpm < -500) {
6872
ema_update(&pid->p_fwd_scale, config->kp_brake);
@@ -80,8 +84,6 @@ void pid_update(
8084
ema_update(&pid->rate_p_bwd_scale, 1.0f);
8185
}
8286

83-
pid->p *= config->kp * (pid->p > 0 ? pid->p_fwd_scale.value : pid->p_bwd_scale.value);
84-
85-
pid->rate_p = -imu->pitch_rate * config->kp2;
87+
pid->p *= pid->p > 0 ? pid->p_fwd_scale.value : pid->p_bwd_scale.value;
8688
pid->rate_p *= pid->rate_p > 0 ? pid->rate_p_fwd_scale.value : pid->rate_p_bwd_scale.value;
8789
}

0 commit comments

Comments
 (0)