Преглед изворни кода

支持Turbo挡位类似氮气加速的功能,需要自动退出

Signed-off-by: kevin <huhui@sharkgulf.com>
kevin пре 2 година
родитељ
комит
8adad7daba
2 измењених фајлова са 43 додато и 0 уклоњено
  1. 36 0
      Applications/foc/motor/motor.c
  2. 7 0
      Applications/foc/motor/motor.h

+ 36 - 0
Applications/foc/motor/motor.c

@@ -452,6 +452,20 @@ bool mc_set_gear(u8 gear) {
 		return false;
 	}
 	if (motor.n_gear != gear) {
+#if TURBO_GEAR_AUTO_EXIT_TIME>0
+		if (gear == TURBO_GEAR) {
+			if (motor.mos_lim != 0 || motor.motor_lim != 0) {
+				mot_contrl_set_error(&motor.controller, FOC_NotAllowed);
+				return false;
+			}
+			if (get_motor_temp_raw() >= TURBO_MIN_MOTOR_TEMP || get_mos_temp_raw() >= TURBO_MIN_MOS_TEMP) {
+				mot_contrl_set_error(&motor.controller, FOC_NotAllowed);
+				return false;
+			}
+			motor.gear_last = motor.n_gear;
+			motor.turbo_time = get_tick_ms();
+		}
+#endif
 		u32 mask = cpu_enter_critical();
 		motor.n_gear = gear;
 		mc_gear_mode_set();
@@ -460,6 +474,27 @@ bool mc_set_gear(u8 gear) {
 	return true;
 }
 
+
+static void mc_turbo_auto_exit(void) {
+#if TURBO_GEAR_AUTO_EXIT_TIME>0
+	if (motor.n_gear != TURBO_GEAR) {
+		return;
+	}
+	if (motor.mos_lim != 0 || motor.motor_lim != 0) {
+		mc_set_gear(motor.gear_last);
+		return;
+	}
+	u32 delta_time = get_delta_ms(motor.turbo_time);
+	if (delta_time >= TURBO_GEAR_AUTO_EXIT_TIME) {
+		motor.turbo_remain_sec = 0;
+		mc_set_gear(motor.gear_last);
+		return;
+	}else {
+		motor.turbo_remain_sec = (TURBO_GEAR_AUTO_EXIT_TIME - delta_time) / 1000;
+	}
+#endif
+}
+
 u8 mc_get_gear(void) {
 	if (motor.n_gear == 3){
 		return 0;
@@ -1608,6 +1643,7 @@ void Sched_MC_mTask(void) {
 	if ((runMode != CTRL_MODE_OPEN) || (motor.mode != CTRL_MODE_OPEN)) {
 #ifndef CONFIG_DQ_STEP_RESPONSE
 		mc_autohold_process();
+		mc_turbo_auto_exit();
 		if (motor.mode != CTRL_MODE_OPEN) {
 			mc_motor_runstop();
 		}

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

@@ -10,6 +10,10 @@
 #define IDC_USER_LIMIT_NONE ((s16)0x3fff)
 #define RPM_USER_LIMIT_NONE ((s16)0x3fff)
 
+#define TURBO_GEAR 3
+#define TURBO_GEAR_AUTO_EXIT_TIME 0//30*1000 //30S
+#define TURBO_MIN_MOTOR_TEMP 90
+#define TURBO_MIN_MOS_TEMP 80
 typedef struct {
 	bool running;
 	u32  start_ts;
@@ -63,6 +67,9 @@ typedef struct {
 	s16    s_vbus_hw_min;
 	s16    s_target_speed;
 	s16    s_force_torque;
+	u8     gear_last;
+	u32    turbo_time;
+	u8 	   turbo_remain_sec;
 	mot_contrl_t controller;
 	user_rt_set u_set; //用户运行时设置
 	fan_t  fan[2];