Browse Source

autohold模式下,再次捏刹车退出autohold模式

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 years ago
parent
commit
b23c0a4b64
2 changed files with 14 additions and 2 deletions
  1. 13 2
      Applications/foc/motor/motor.c
  2. 1 0
      Applications/foc/motor/motor.h

+ 13 - 2
Applications/foc/motor/motor.c

@@ -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);
 				}
 			}

+ 1 - 0
Applications/foc/motor/motor.h

@@ -25,6 +25,7 @@ typedef struct {
 	u32    n_brake_errors;
 	u8     mode;
 	u32    n_autohold_time;
+	bool   b_wait_brk_release;
 	bool   b_updated;
 }motor_t;