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

1. 扭矩/速度 限制ramp时间可设置
2. 设置目标速度ramp时间可设置
3. epm模式目标速度ramp时间调整为1s,扭矩限制ramp时间2ms

Signed-off-by: huhui <huhui@sharkgulf.com>

huhui пре 2 година
родитељ
комит
0439f4309f

+ 10 - 0
Applications/foc/core/controller.c

@@ -535,6 +535,12 @@ void mot_contrl_set_vel_limit(mot_contrl_t *ctrl, float vel) {
 	}
 }
 
+void mot_contrl_set_vel_limit_rttime(mot_contrl_t *ctrl, u32 time) {
+	line_ramp_set_time(&ctrl->vel_lim, (float)time);
+	line_ramp_update(&ctrl->vel_lim);
+}
+
+
 void mot_contrl_set_torque_limit(mot_contrl_t *ctrl, float torque) {
 	if (torque > ctrl->hwlim.torque) {
 		torque = ctrl->hwlim.torque;
@@ -550,6 +556,10 @@ void mot_contrl_set_torque_limit(mot_contrl_t *ctrl, float torque) {
 	}
 }
 
+void mot_contrl_set_torque_limit_rttime(mot_contrl_t *ctrl, u32 time) {
+	line_ramp_set_time(&ctrl->torque_lim, (float)time);
+	line_ramp_update(&ctrl->torque_lim);
+}
 
 float mot_contrl_get_ebrk_torque(mot_contrl_t *ctrl) {
 	if (!foc_observer_is_encoder()) {

+ 8 - 0
Applications/foc/core/controller.h

@@ -193,6 +193,8 @@ void mot_contrl_set_hw_brake(mot_contrl_t *ctrl, bool hw_brake);
 void mot_contrl_calc_current(mot_contrl_t *ctrl);
 void mot_contrl_get_pid(mot_contrl_t *ctrl, u8 id, float *kp, float *ki, float *kd);
 void mot_contrl_set_pid(mot_contrl_t *ctrl, u8 id, float kp, float ki, float kd);
+void mot_contrl_set_torque_limit_rttime(mot_contrl_t *ctrl, u32 time);
+void mot_contrl_set_vel_limit_rttime(mot_contrl_t *ctrl, u32 time);
 
 
 static __INLINE bool mot_contrl_start(mot_contrl_t *ctrl, u8 mode) {
@@ -243,6 +245,12 @@ static __INLINE bool mot_contrl_set_target_vel(mot_contrl_t *ctrl, float vel) {
 	return true;
 }
 
+static __INLINE void mot_contrl_set_vel_rttime(mot_contrl_t *ctrl, u32 time) {
+	line_ramp_set_time(&ctrl->target_vel, (float)time);
+	line_ramp_update(&ctrl->target_vel);
+}
+
+
 static __INLINE void mot_contrl_set_angle(mot_contrl_t *ctrl, float angle) {
 	ctrl->force_angle = (angle);
 }

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

@@ -640,6 +640,8 @@ bool mc_start_epm(bool epm) {
 		motor.mode = CTRL_MODE_TRQ;
 		motor.b_epm_cmd_move = false;
 		mot_contrl_request_mode(&motor.controller, CTRL_MODE_TRQ);
+		mot_contrl_set_torque_limit_rttime(&motor.controller, CONFIG_LIMIT_RAMP_TIME);
+		mot_contrl_set_vel_rttime(&motor.controller, CONFIG_CRUISE_RAMP_TIME);
 		mc_gear_vmode_changed();
 	}
 	cpu_exit_critical(mask);
@@ -684,7 +686,9 @@ bool mc_start_epm_move(epm_dir_t dir, bool is_command) {
 		}else {
 			mot_contrl_velloop_params(&motor.controller, 0.2f, 7.5f);
 		}
+		mot_contrl_set_torque_limit_rttime(&motor.controller, 2.0);
 		mot_contrl_set_torque_limit(&motor.controller, motor.f_epm_trq);
+		mot_contrl_set_vel_rttime(&motor.controller, 1000.0f);
 		mot_contrl_set_target_vel(&motor.controller, motor.f_epm_vel);
 	}else {
 		motor.b_epm_cmd_move = false;