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

解决epm不能动作的问题

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui пре 2 година
родитељ
комит
c8998dbc35
2 измењених фајлова са 5 додато и 7 уклоњено
  1. 3 3
      Applications/foc/core/controller.c
  2. 2 4
      Applications/foc/motor/motor.c

+ 3 - 3
Applications/foc/core/controller.c

@@ -40,9 +40,6 @@ bool mot_contrl_enable(mot_contrl_t *ctrl, bool start) {
 		return true;
 	}
 	if (start) {
-		mot_contrl_pid(ctrl);
-		mot_contrl_ulimit(ctrl);
-		mot_contrl_rtlimit(ctrl);
 		line_ramp_init(&ctrl->torque_lim, CONFIG_LIMIT_RAMP_TIME);
 		line_ramp_init(&ctrl->dc_curr_lim, CONFIG_LIMIT_RAMP_TIME);
 		line_ramp_init(&ctrl->vel_lim, CONFIG_LIMIT_RAMP_TIME);
@@ -52,6 +49,9 @@ bool mot_contrl_enable(mot_contrl_t *ctrl, bool start) {
 		line_ramp_init(&ctrl->target_vel, CONFIG_CRUISE_RAMP_TIME);
 		line_ramp_init(&ctrl->target_current, CONFIG_CURRENT_RAMP_TIME);
 		line_ramp_init(&ctrl->input_torque, CONFIG_DEFAULT_TORQUE_RAMP_TIME);
+		mot_contrl_pid(ctrl);
+		mot_contrl_ulimit(ctrl);
+		mot_contrl_rtlimit(ctrl);
 		etcs_init(&ctrl->etcs);
 	}
 	ctrl->b_ebrk_running = false;

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

@@ -674,6 +674,7 @@ bool mc_start_epm_move(epm_dir_t dir, bool is_command) {
 		
 		if (!mot_contrl_is_start(&motor.controller)) {
 			mot_contrl_start(&motor.controller, motor.mode);
+			mc_gear_vmode_changed();
 			pwm_enable_channel();
 		}else if (mot_contrl_is_auto_holdding(&motor.controller)) {
 			mc_auto_hold(false);
@@ -1349,16 +1350,14 @@ static void mc_process_epm_move(void) {
 	}
 	float target_vel = mc_conf()->c.max_epm_rpm;
 	float target_trq = mc_conf()->c.max_epm_torque;
-	float step = 0.05f;
 	if (motor.epm_dir == EPM_Dir_Back) {
 		target_vel = -mc_conf()->c.max_epm_back_rpm;
 		target_trq = mc_conf()->c.max_epm_back_torque;
 	}else if (!motor.b_epm_cmd_move) {
 		target_vel = throttle_vol_to_open_ration(throttle_get_signal()) * 2.0f * (float)target_vel;
-		step = 0.07f;
 	}
-	step_towards(&motor.f_epm_vel, target_vel, step);
 	motor.f_epm_trq = target_trq;
+	motor.f_epm_vel = target_vel;
 	mot_contrl_set_torque_limit(&motor.controller, motor.f_epm_trq);
 	mot_contrl_set_target_vel(&motor.controller, motor.f_epm_vel);
 }
@@ -1496,7 +1495,6 @@ static void mc_process_throttle_torque(float vol) {
 		if (mot_contrl_energy_recovery(&motor.controller, true)) {
 			return;
 		}
-
 	}
 
 	if (motor.controller.mode_running == CTRL_MODE_TRQ) {