|
@@ -552,6 +552,7 @@ static bool mc_can_stop_foc(void) {
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|
|
|
|
|
+#if 0
|
|
|
static bool mc_run_stall_process(u8 run_mode) {
|
|
static bool mc_run_stall_process(u8 run_mode) {
|
|
|
if ((run_mode == CTRL_MODE_TRQ || run_mode == CTRL_MODE_SPD) && !PMSM_FOC_AutoHoldding()) {
|
|
if ((run_mode == CTRL_MODE_TRQ || run_mode == CTRL_MODE_SPD) && !PMSM_FOC_AutoHoldding()) {
|
|
|
//堵转判断
|
|
//堵转判断
|
|
@@ -578,7 +579,40 @@ static bool mc_run_stall_process(u8 run_mode) {
|
|
|
}
|
|
}
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
+#else
|
|
|
|
|
+static bool mc_run_stall_process(u8 run_mode) {
|
|
|
|
|
+ if ((run_mode == CTRL_MODE_TRQ || run_mode == CTRL_MODE_SPD) && !PMSM_FOC_AutoHoldding()) {
|
|
|
|
|
+ //堵转判断
|
|
|
|
|
+ if (motor.b_runStall) {
|
|
|
|
|
+ if (!mc_throttle_released()) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ motor.runStall_time = 0;
|
|
|
|
|
+ motor.b_runStall = false; //转把释放,清除堵转标志
|
|
|
|
|
+ }else if (PMSM_FOC_Get()->out.s_RealIdq.q >= CONFIG_STALL_MAX_CURRENT){
|
|
|
|
|
+ if (ABS(PMSM_FOC_GetSpeed()) < 1.0f && (motor.runStall_time == 0)) {
|
|
|
|
|
+ motor.runStall_time = get_tick_ms();
|
|
|
|
|
+ motor.runStall_pos = motor_encoder_get_position();
|
|
|
|
|
+ }
|
|
|
|
|
+ if (motor.runStall_time > 0) {
|
|
|
|
|
+ if (get_delta_ms(motor.runStall_time) >= CONFIG_STALL_MAX_TIME) {
|
|
|
|
|
+ motor.b_runStall = true;
|
|
|
|
|
+ motor.runStall_time = 0;
|
|
|
|
|
+ torque_speed_target(run_mode, 0.0f);
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (ABS(motor.runStall_pos - motor_encoder_get_position()) >= 0.2f) {
|
|
|
|
|
+ motor.runStall_time = 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }else {
|
|
|
|
|
+ motor.runStall_time = 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
|
|
+#endif
|
|
|
static void mc_autohold_process(void) {
|
|
static void mc_autohold_process(void) {
|
|
|
if (PMSM_FOC_AutoHoldding() && !mc_throttle_released()) {
|
|
if (PMSM_FOC_AutoHoldding() && !mc_throttle_released()) {
|
|
|
mc_auto_hold(false);
|
|
mc_auto_hold(false);
|