|
|
@@ -54,13 +54,17 @@ void eCtrl_enable_eBrake(bool enable) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void _eCtrl_process_eBrake(void) {
|
|
|
+void _eCtrl_clear_ramp(void) {
|
|
|
eRamp_init(&g_eCtrl.current);
|
|
|
eRamp_init(&g_eCtrl.speed);
|
|
|
eRamp_init(&g_eCtrl.torque);
|
|
|
g_eCtrl.current_shadow = 0.0f;
|
|
|
g_eCtrl.torque_shadow = 0.0f;
|
|
|
g_eCtrl.speed_shadow = 0.0f;
|
|
|
+}
|
|
|
+
|
|
|
+void _eCtrl_process_eBrake(void) {
|
|
|
+ _eCtrl_clear_ramp();
|
|
|
if (g_eCtrl.is_ebrake) {
|
|
|
PMSM_FOC_SetCtrlMode(CTRL_MODE_CURRENT_BRK);
|
|
|
eCtrl_set_TgtCurrent(-PMSM_FOC_GeteBrkPhaseCurrent());
|
|
|
@@ -129,6 +133,9 @@ static void _eCtrl_set_TgtSpeed(float s) {
|
|
|
}
|
|
|
|
|
|
static void _eCtrl_set_TgtTorque(float t) {
|
|
|
+ if (g_eCtrl.hw_brake && nv_get_foc_params()->n_brkShutPower){
|
|
|
+ return;
|
|
|
+ }
|
|
|
_eCtrl_set_target(&g_eCtrl.torque, t);
|
|
|
}
|
|
|
|
|
|
@@ -157,24 +164,20 @@ float eCtrl_get_FinalTorque(void) {
|
|
|
}
|
|
|
|
|
|
void eCtrl_brake_signal(bool hw_brake) {
|
|
|
+ u32 mask = cpu_enter_critical();
|
|
|
if (hw_brake != g_eCtrl.hw_brake) {
|
|
|
g_eCtrl.hw_brake = hw_brake;
|
|
|
if (hw_brake) {
|
|
|
g_eCtrl.brake_ts = shark_get_mseconds();
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if (g_eCtrl.hw_brake) {
|
|
|
- float ebrk_torque = 0.0f;
|
|
|
- float ebrk_speed = 0.0f;
|
|
|
- if (shark_get_mseconds() - g_eCtrl.brake_ts >= eCTRL_Brake_TIME) {
|
|
|
- if (g_eCtrl.accl_time != DEFAULT_D_TIME) {
|
|
|
- ebrk_torque = eCTRL_NEG_TORQUE;
|
|
|
- }
|
|
|
- }
|
|
|
- eCtrl_set_TgtTorque(ebrk_torque);
|
|
|
- eCtrl_set_TgtSpeed(ebrk_speed);
|
|
|
+ if (g_eCtrl.hw_brake && nv_get_foc_params()->n_brkShutPower) {
|
|
|
+ eRamp_init(&g_eCtrl.speed);
|
|
|
+ eRamp_init(&g_eCtrl.torque);
|
|
|
+ g_eCtrl.torque_shadow = 0.0f;
|
|
|
+ g_eCtrl.speed_shadow = 0.0f;
|
|
|
}
|
|
|
+ cpu_exit_critical(mask);
|
|
|
}
|
|
|
|
|
|
|