فهرست منبع

通过能量回收时间和能量回收负扭矩来调节回收大小和舒适性

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 2 سال پیش
والد
کامیت
8b7088320b
3فایلهای تغییر یافته به همراه13 افزوده شده و 2 حذف شده
  1. 4 2
      Applications/foc/core/e_ctrl.c
  2. 4 0
      Applications/foc/core/e_ctrl.h
  3. 5 0
      Applications/foc/core/thro_torque.c

+ 4 - 2
Applications/foc/core/e_ctrl.c

@@ -108,8 +108,10 @@ void eCtrl_Running(void) {
 	}
 	if (g_eCtrl.ebrk_time_shadow != g_eCtrl.ebrk_time) {
 		g_eCtrl.ebrk_time = g_eCtrl.ebrk_time_shadow;
-		eRamp_set_time(&g_eCtrl.torque, g_eCtrl.ebrk_time, g_eCtrl.ebrk_time);
-		_eCtrl_set_TgtTorque(g_eCtrl.torque_shadow);
+		if (PMSM_FOC_Get()->out.n_RunMode == CTRL_MODE_EBRAKE) {
+			eRamp_set_time(&g_eCtrl.torque, g_eCtrl.ebrk_time, g_eCtrl.ebrk_time);
+			_eCtrl_set_TgtTorque(g_eCtrl.torque_shadow);
+		}
 	}
 	if (g_eCtrl.current_shadow != g_eCtrl.current.target) {
 		_eCtrl_set_TgtCurrent(g_eCtrl.current_shadow);

+ 4 - 0
Applications/foc/core/e_ctrl.h

@@ -227,6 +227,10 @@ static u16 eCtrl_get_torque_acc_time(void) {
 	return (u16)g_eCtrl.torque.acct;
 }
 
+static void eCtrl_Set_eBrk_RampTime(u16 t) {
+	g_eCtrl.ebrk_time_shadow = t;
+}
+
 //y=Ax^2;
 void eCtrl_init(u16 accl_time, u16 dec_time);
 void eCtrl_brake_signal(bool hw_brake);

+ 5 - 0
Applications/foc/core/thro_torque.c

@@ -225,9 +225,14 @@ void thro_torque_process(u8 run_mode, float f_throttle) {
 	}else if (run_mode == CTRL_MODE_EBRAKE) {
 		float vel = PMSM_FOC_GetSpeed();
 		float ebrk_trq = motor_get_ebreak_toruqe(vel);
+
+		if (ebrk_trq >= -PMSM_FOC_GetEbrkTorque()/2){
+			eCtrl_Set_eBrk_RampTime(1);
+		}
 		if (ebrk_trq != 0) {
 			eCtrl_set_TgtTorque(ebrk_trq);
 		}
+
 		if (eCtrl_get_FinalTorque() < 0.0001f && vel < CONFIG_MIN_RPM_EXIT_EBRAKE) {
 			eCtrl_enable_eBrake(false);	
 		}