@@ -151,6 +151,7 @@ typedef struct {
151
151
152
152
float m_phase_before ;
153
153
float m_duty_abs_filtered ;
154
+ float m_duty_filtered ;
154
155
bool m_was_full_brake ;
155
156
bool m_was_control_duty ;
156
157
float m_duty_i_term ;
@@ -2637,9 +2638,12 @@ void mcpwm_foc_adc_int_handler(void *p, uint32_t flags) {
2637
2638
float iq_set_tmp = motor_now -> m_iq_set ;
2638
2639
motor_now -> m_motor_state .max_duty = conf_now -> l_max_duty ;
2639
2640
2640
- UTILS_LP_FAST (motor_now -> m_duty_abs_filtered , fabsf (motor_now -> m_motor_state .duty_now ), 0.1 );
2641
+ UTILS_LP_FAST (motor_now -> m_duty_abs_filtered , fabsf (motor_now -> m_motor_state .duty_now ), 0.01 );
2641
2642
utils_truncate_number_abs ((float * )& motor_now -> m_duty_abs_filtered , 1.0 );
2642
2643
2644
+ UTILS_LP_FAST (motor_now -> m_duty_filtered , motor_now -> m_motor_state .duty_now , 0.01 );
2645
+ utils_truncate_number_abs ((float * )& motor_now -> m_duty_filtered , 1.0 );
2646
+
2643
2647
float duty_set = motor_now -> m_duty_cycle_set ;
2644
2648
bool control_duty = motor_now -> m_control_mode == CONTROL_MODE_DUTY ||
2645
2649
motor_now -> m_control_mode == CONTROL_MODE_OPENLOOP_DUTY ||
@@ -2650,7 +2654,7 @@ void mcpwm_foc_adc_int_handler(void *p, uint32_t flags) {
2650
2654
// applying active braking. Use a bit of hysteresis when leaving
2651
2655
// the shorted mode.
2652
2656
if (motor_now -> m_control_mode == CONTROL_MODE_CURRENT_BRAKE &&
2653
- motor_now -> m_duty_abs_filtered < conf_now -> l_min_duty * 1.5 &&
2657
+ fabsf ( motor_now -> m_duty_filtered ) < conf_now -> l_min_duty * 1.5 &&
2654
2658
(motor_now -> m_motor_state .i_abs * (motor_now -> m_was_full_brake ? 1.0 : 1.5 )) <
2655
2659
fminf (fabsf (iq_set_tmp ), fabsf (conf_now -> l_current_min ))) {
2656
2660
control_duty = true;
0 commit comments