Skip to content

Commit 7d336f5

Browse files
committed
Move PID control to the IMU callback
1 parent da2d5f9 commit 7d336f5

1 file changed

Lines changed: 16 additions & 15 deletions

File tree

src/main.c

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -160,17 +160,13 @@ static void main_freq_update_reconfigure(float frequency) {
160160
Data *d = (Data *) ARG;
161161

162162
motor_data_configure(&d->motor, d->float_conf.atr_filter, frequency);
163-
pid_configure(&d->pid, frequency);
164163
motor_control_configure(&d->motor_control, &d->float_conf, frequency);
165164

166165
torque_tilt_configure(&d->torque_tilt, &d->float_conf, frequency);
167166
atr_configure(&d->atr, &d->float_conf, frequency);
168167
brake_tilt_configure(&d->brake_tilt, &d->float_conf, frequency);
169168
turn_tilt_configure(&d->turn_tilt, &d->float_conf, frequency);
170169
remote_configure(&d->remote, &d->float_conf, frequency);
171-
booster_configure(&d->booster, frequency);
172-
173-
ema_configure(&d->balance_current, 25.0f, frequency);
174170

175171
log_msg(
176172
"Main freq reconfgure old: %dHz new: %dHz",
@@ -183,6 +179,10 @@ static void main_freq_update_reconfigure(float frequency) {
183179
static void imu_freq_update_reconfigure(float frequency) {
184180
Data *d = (Data *) ARG;
185181

182+
pid_configure(&d->pid, frequency);
183+
booster_configure(&d->booster, frequency);
184+
ema_configure(&d->balance_current, 25.0f, frequency);
185+
186186
log_msg(
187187
"IMU freq reconfgure old: %dHz new: %dHz",
188188
(int32_t) d->imu_t.filter_current_frequency,
@@ -822,11 +822,22 @@ static void imu_ref_callback(float *acc, float *gyro, float *mag, float dt) {
822822
Data *d = (Data *) ARG;
823823

824824
time_t time = VESC_IF->system_time_ticks();
825-
unused(time);
826825

827826
balance_filter_update(&d->balance_filter, gyro, acc, dt);
828827

829828
frequency_tracker_update(&d->imu_t, dt);
829+
830+
imu_update(&d->imu, &d->balance_filter, &d->state);
831+
832+
if (d->state.state == STATE_RUNNING) {
833+
pid_control(d, dt);
834+
}
835+
836+
motor_control_apply(
837+
&d->motor_control, d->motor.abs_erpm_smooth.value, d->state.state, &d->time
838+
);
839+
840+
data_recorder_sample(&d->data_record, d, time);
830841
}
831842

832843
static void refloat_thd(void *arg) {
@@ -850,8 +861,6 @@ static void refloat_thd(void *arg) {
850861

851862
time_update(&d->time, d->state.state);
852863

853-
imu_update(&d->imu, &d->balance_filter, &d->state);
854-
855864
beeper_update(d);
856865

857866
charging_timeout(&d->charging, &d->state);
@@ -992,8 +1001,6 @@ static void refloat_thd(void *arg) {
9921001
}
9931002
}
9941003

995-
pid_control(d, dt);
996-
9971004
break;
9981005
case (STATE_READY):
9991006
if (d->state.mode == MODE_FLYWHEEL) {
@@ -1113,12 +1120,6 @@ static void refloat_thd(void *arg) {
11131120
break;
11141121
}
11151122

1116-
motor_control_apply(
1117-
&d->motor_control, d->motor.abs_erpm_smooth.value, d->state.state, &d->time
1118-
);
1119-
1120-
data_recorder_sample(&d->data_record, d, d->time.now);
1121-
11221123
systime_t remaining = start_time - VESC_IF->system_time_ticks() + d->main_loop_ticks;
11231124
if (remaining > 0 && remaining <= d->main_loop_ticks) {
11241125
sleep_ticks = remaining;

0 commit comments

Comments
 (0)