Просмотр исходного кода

模拟油门清楚转把故障,开环强制运行和零位置校准忽略转把故障

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 лет назад
Родитель
Сommit
1e65d1fb12
4 измененных файлов с 15 добавлено и 11 удалено
  1. 1 1
      Applications/app/app.c
  2. 5 2
      Applications/foc/commands.c
  3. 8 7
      Applications/foc/motor/motor.c
  4. 1 1
      Applications/foc/motor/motor.h

+ 1 - 1
Applications/app/app.c

@@ -113,7 +113,7 @@ static u32 _app_report_task(void *p) {
 		//sys_debug("target current %f\n", PMSM_FOC_Get()->in.s_targetCurrent);
 		//sys_debug("target current %f\n", PMSM_FOC_Get()->in.s_targetCurrent);
 		//thro_torque_log();
 		//thro_torque_log();
 		//sys_debug("fan rpm %d, %d\n", mc_params()->fan[0].rpm, mc_params()->fan[1].rpm);
 		//sys_debug("fan rpm %d, %d\n", mc_params()->fan[0].rpm, mc_params()->fan[1].rpm);
-		//encoder_log();
+		encoder_log();
 		///PMSM_FOC_LogDebug();
 		///PMSM_FOC_LogDebug();
 		eCtrl_debug_log();
 		eCtrl_debug_log();
 		//err_code_log();
 		//err_code_log();

+ 5 - 2
Applications/foc/commands.c

@@ -352,8 +352,11 @@ static void process_foc_command(foc_cmd_body_t *command) {
 		}
 		}
 		case Foc_Set_Thro_Ration:
 		case Foc_Set_Thro_Ration:
 		{
 		{
-			u8 r = decode_u8(command->data);
-			mc_set_throttle_r(r);
+			if (command->len >= 2) {
+				bool use = decode_u8(command->data)==0?false:true;
+				u8 r = decode_u8((u8 *)command->data + 1);
+				mc_set_throttle_r(use, r);
+			}
 			break;
 			break;
 		}
 		}
 		case Foc_Lock_Motor:
 		case Foc_Lock_Motor:

+ 8 - 7
Applications/foc/motor/motor.c

@@ -214,7 +214,7 @@ bool mc_unsafe_critical_error(void) {
 	err = err & (~(FOC_Cri_Err_Mask(FOC_CRIT_Encoder_Err)));
 	err = err & (~(FOC_Cri_Err_Mask(FOC_CRIT_Encoder_Err)));
 	sys_debug("err=0x%x\n", err);
 	sys_debug("err=0x%x\n", err);
 #endif
 #endif
-	if (motor.b_calibrate || motor.b_force_run) {
+	if (motor.b_ignor_throttle) {
 		err = err & (~(FOC_Cri_Err_Mask(FOC_CRIT_THRO_Err)));
 		err = err & (~(FOC_Cri_Err_Mask(FOC_CRIT_THRO_Err)));
 	}
 	}
 	return (err != 0);
 	return (err != 0);
@@ -490,14 +490,11 @@ bool mc_throttle_epm_move(EPM_Dir_t dir) {
 	return mc_start_epm_move(dir, false);
 	return mc_start_epm_move(dir, false);
 }
 }
 
 
-void mc_set_throttle_r(u8 r) {
+void mc_set_throttle_r(bool use, u8 r) {
 	motor.u_throttle_ration = r;
 	motor.u_throttle_ration = r;
-
-	if (r > 0) {
-		motor.b_ignor_throttle = true;
+	motor.b_ignor_throttle = use;
+	if (motor.b_ignor_throttle) {
 		mc_clr_critical_error(FOC_CRIT_THRO_Err);
 		mc_clr_critical_error(FOC_CRIT_THRO_Err);
-	}else {
-		motor.b_ignor_throttle = false;
 	}
 	}
 }
 }
 
 
@@ -549,12 +546,14 @@ void mc_force_run_open(s16 vd, s16 vq) {
 			PMSM_FOC_Stop();
 			PMSM_FOC_Stop();
 			pwm_up_enable(true);
 			pwm_up_enable(true);
 			motor.b_force_run = false;
 			motor.b_force_run = false;
+			motor.b_ignor_throttle = false;
 		}
 		}
 		return;
 		return;
 	}
 	}
 	if (vd == 0 && vq == 0) {
 	if (vd == 0 && vq == 0) {
 		return;
 		return;
 	}
 	}
+	motor.b_ignor_throttle = true;
 	MC_Check_MosVbusThrottle();
 	MC_Check_MosVbusThrottle();
 	if (mc_unsafe_critical_error()) {
 	if (mc_unsafe_critical_error()) {
 		PMSM_FOC_SetErrCode(FOC_Have_CritiCal_Err);
 		PMSM_FOC_SetErrCode(FOC_Have_CritiCal_Err);
@@ -663,10 +662,12 @@ bool mc_encoder_zero_calibrate(s16 vd) {
 			PMSM_FOC_Stop();
 			PMSM_FOC_Stop();
 			_mc_internal_init(CTRL_MODE_OPEN, false);
 			_mc_internal_init(CTRL_MODE_OPEN, false);
 			motor.b_calibrate = false;
 			motor.b_calibrate = false;
+			motor.b_ignor_throttle = false;
 		}
 		}
 		return true;
 		return true;
 	}
 	}
 	encoder_clear_cnt_offset();
 	encoder_clear_cnt_offset();
+	motor.b_ignor_throttle = true;
 	MC_Check_MosVbusThrottle();
 	MC_Check_MosVbusThrottle();
 	if (mc_unsafe_critical_error()) {
 	if (mc_unsafe_critical_error()) {
 		PMSM_FOC_SetErrCode(FOC_Have_CritiCal_Err);
 		PMSM_FOC_SetErrCode(FOC_Have_CritiCal_Err);

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

@@ -54,7 +54,7 @@ void mc_encoder_off_calibrate(s16 vd);
 bool mc_throttle_released(void);
 bool mc_throttle_released(void);
 bool mc_lock_motor(bool lock);
 bool mc_lock_motor(bool lock);
 bool mc_auto_hold(bool hold);
 bool mc_auto_hold(bool hold);
-void mc_set_throttle_r(u8 r);
+void mc_set_throttle_r(bool use, u8 r);
 void mc_use_throttle(void);
 void mc_use_throttle(void);
 bool mc_current_sensor_calibrate(float current);
 bool mc_current_sensor_calibrate(float current);
 bool mc_encoder_zero_calibrate(s16 vd);
 bool mc_encoder_zero_calibrate(s16 vd);