|
|
@@ -45,6 +45,10 @@ void eCtrl_set_TgtTorque(float t) {
|
|
|
g_eCtrl.torque_shadow = t;
|
|
|
}
|
|
|
|
|
|
+void eCtrl_reset_Torque(float init_trq) {
|
|
|
+ eRamp_reset_target(&g_eCtrl.torque, init_trq);
|
|
|
+}
|
|
|
+
|
|
|
void eCtrl_set_TgtSpeed(float s) {
|
|
|
g_eCtrl.speed_shadow = s;
|
|
|
}
|
|
|
@@ -54,7 +58,7 @@ bool eCtrl_enable_eBrake(bool enable) {
|
|
|
g_eCtrl.is_ebrake_shadow = false;
|
|
|
return g_eCtrl.is_ebrake_shadow;
|
|
|
}
|
|
|
- if (enable && PMSM_FOC_GetSpeed() > CONFIG_MIN_RPM_FOR_EBRAKE) {
|
|
|
+ if (enable && ((PMSM_FOC_GetSpeed() > CONFIG_MIN_RPM_FOR_EBRAKE) && (PMSM_FOC_Get_Real_Torque() > CONFIG_MIN_CURRENT_FOR_EBRK))) {
|
|
|
g_eCtrl.is_ebrake_shadow = true;
|
|
|
}else if (!enable && !_eCtrl_isHwBrk_shutPower()){
|
|
|
g_eCtrl.is_ebrake_shadow = false;
|
|
|
@@ -62,7 +66,7 @@ bool eCtrl_enable_eBrake(bool enable) {
|
|
|
return g_eCtrl.is_ebrake_shadow;
|
|
|
}
|
|
|
|
|
|
-void _eCtrl_clear_ramp(void) {
|
|
|
+static void _eCtrl_clear_ramp(void) {
|
|
|
eRamp_init(&g_eCtrl.current, nv_get_foc_params()->n_ebrk_time, nv_get_foc_params()->n_ebrk_time);
|
|
|
eRamp_init(&g_eCtrl.speed, g_eCtrl.accl_time, g_eCtrl.dec_time);
|
|
|
eRamp_init(&g_eCtrl.torque, g_eCtrl.accl_time, g_eCtrl.dec_time);
|
|
|
@@ -75,6 +79,7 @@ void _eCtrl_process_eBrake(void) {
|
|
|
_eCtrl_clear_ramp();
|
|
|
if (g_eCtrl.is_ebrake) {
|
|
|
PMSM_FOC_SetCtrlMode(CTRL_MODE_CURRENT_BRK);
|
|
|
+ eRamp_reset_target(&g_eCtrl.current, PMSM_FOC_Get()->in.s_targetTorque);
|
|
|
eCtrl_set_TgtCurrent(-PMSM_FOC_GeteBrkPhaseCurrent());
|
|
|
}else {
|
|
|
PMSM_FOC_SetCtrlMode(CTRL_MODE_TRQ);
|
|
|
@@ -86,25 +91,27 @@ bool eCtrl_is_eBrk_enabled(void) {
|
|
|
}
|
|
|
|
|
|
void eCtrl_Running(void) {
|
|
|
- bool etime_changed = false;
|
|
|
if (g_eCtrl.accl_time_shadow != g_eCtrl.accl_time || g_eCtrl.dec_time_shadow != g_eCtrl.dec_time) {
|
|
|
g_eCtrl.dec_time = g_eCtrl.dec_time_shadow;
|
|
|
g_eCtrl.accl_time = g_eCtrl.accl_time_shadow;
|
|
|
+ /* 重新计算ramp */
|
|
|
eRamp_set_time(&g_eCtrl.speed, g_eCtrl.accl_time, g_eCtrl.dec_time);
|
|
|
eRamp_set_time(&g_eCtrl.torque, g_eCtrl.accl_time, g_eCtrl.dec_time);
|
|
|
- etime_changed = true;
|
|
|
+ _eCtrl_set_TgtSpeed(g_eCtrl.speed_shadow);
|
|
|
+ _eCtrl_set_TgtTorque(g_eCtrl.torque_shadow);
|
|
|
}
|
|
|
if (g_eCtrl.ebrk_time_shadow != g_eCtrl.ebrk_time) {
|
|
|
g_eCtrl.ebrk_time = g_eCtrl.ebrk_time_shadow;
|
|
|
eRamp_set_time(&g_eCtrl.current, g_eCtrl.ebrk_time, g_eCtrl.ebrk_time);
|
|
|
+ _eCtrl_set_TgtCurrent(g_eCtrl.current_shadow);
|
|
|
}
|
|
|
- if (g_eCtrl.current_shadow != g_eCtrl.current.target || etime_changed) {
|
|
|
+ if (g_eCtrl.current_shadow != g_eCtrl.current.target) {
|
|
|
_eCtrl_set_TgtCurrent(g_eCtrl.current_shadow);
|
|
|
}
|
|
|
- if (g_eCtrl.speed_shadow != g_eCtrl.speed.target || etime_changed) {
|
|
|
+ if (g_eCtrl.speed_shadow != g_eCtrl.speed.target) {
|
|
|
_eCtrl_set_TgtSpeed(g_eCtrl.speed_shadow);
|
|
|
}
|
|
|
- if (g_eCtrl.torque_shadow != g_eCtrl.torque.target || etime_changed) {
|
|
|
+ if (g_eCtrl.torque_shadow != g_eCtrl.torque.target) {
|
|
|
_eCtrl_set_TgtTorque(g_eCtrl.torque_shadow);
|
|
|
}
|
|
|
if (g_eCtrl.is_ebrake_shadow != g_eCtrl.is_ebrake) {
|