|
|
@@ -598,10 +598,20 @@ static void _autohold_beep_timer_handler(shark_timer_t *t) {
|
|
|
|
|
|
static void mc_autohold_process(void) {
|
|
|
if (nv_get_foc_params()->n_autoHold == 0) {
|
|
|
+ if (PMSM_FOC_AutoHoldding()) {
|
|
|
+ mc_auto_hold(false);
|
|
|
+ }
|
|
|
return;
|
|
|
}
|
|
|
- if (PMSM_FOC_AutoHoldding() && !mc_throttle_released()) {
|
|
|
- mc_auto_hold(false);
|
|
|
+ if (PMSM_FOC_AutoHoldding()) {
|
|
|
+ if (!mc_throttle_released()) {
|
|
|
+ mc_auto_hold(false);
|
|
|
+ motor.b_wait_brk_release = false;
|
|
|
+ }else if (!motor.b_break && motor.b_wait_brk_release) {
|
|
|
+ motor.b_wait_brk_release = false;
|
|
|
+ }else if (motor.b_break && !motor.b_wait_brk_release) {
|
|
|
+ mc_auto_hold(false);
|
|
|
+ }
|
|
|
}
|
|
|
if (!PMSM_FOC_AutoHoldding() && motor.b_break && (encoder_get_speed() == 0.0f)) {
|
|
|
if (motor.n_autohold_time == 0) {
|
|
|
@@ -609,6 +619,7 @@ static void mc_autohold_process(void) {
|
|
|
}else {
|
|
|
if (get_delta_ms(motor.n_autohold_time) >= CONFIG_AUTOHOLD_DETECT_TIME) {
|
|
|
if (mc_auto_hold(true)) {
|
|
|
+ motor.b_wait_brk_release = true;
|
|
|
shark_timer_post(&_autohold_beep_timer, 0);
|
|
|
}
|
|
|
}
|