|
|
@@ -9,6 +9,7 @@ e_Ctrl g_eCtrl;
|
|
|
static void _eCtrl_set_TgtCurrent(float c);
|
|
|
static void _eCtrl_set_TgtSpeed(float s);
|
|
|
static void _eCtrl_set_TgtTorque(float t);
|
|
|
+static bool _eCtrl_isHwBrk_shutPower(void);
|
|
|
|
|
|
void eCtrl_init(u16 accl_time, u16 dec_time){
|
|
|
g_eCtrl.dec_time = dec_time;
|
|
|
@@ -46,12 +47,17 @@ void eCtrl_set_TgtSpeed(float s) {
|
|
|
g_eCtrl.speed_shadow = s;
|
|
|
}
|
|
|
|
|
|
-void eCtrl_enable_eBrake(bool enable) {
|
|
|
+bool eCtrl_enable_eBrake(bool enable) {
|
|
|
+ if (PMSM_FOC_GeteBrkPhaseCurrent() == 0.0f) {
|
|
|
+ g_eCtrl.is_ebrake_shadow = false;
|
|
|
+ return g_eCtrl.is_ebrake_shadow;
|
|
|
+ }
|
|
|
if (enable && PMSM_FOC_GetSpeed() > MIN_RPM_FOR_EBRAKE) {
|
|
|
g_eCtrl.is_ebrake_shadow = true;
|
|
|
- }else if (!enable){
|
|
|
+ }else if (!enable && !_eCtrl_isHwBrk_shutPower()){
|
|
|
g_eCtrl.is_ebrake_shadow = false;
|
|
|
}
|
|
|
+ return g_eCtrl.is_ebrake_shadow;
|
|
|
}
|
|
|
|
|
|
void _eCtrl_clear_ramp(void) {
|
|
|
@@ -73,6 +79,9 @@ void _eCtrl_process_eBrake(void) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+bool eCtrl_is_eBrk_enabled(void) {
|
|
|
+ return (g_eCtrl.is_ebrake || g_eCtrl.is_ebrake_shadow);
|
|
|
+}
|
|
|
|
|
|
void eCtrl_Running(void) {
|
|
|
bool etime_changed = false;
|
|
|
@@ -99,6 +108,10 @@ void eCtrl_Running(void) {
|
|
|
eRamp_running(&g_eCtrl.torque);
|
|
|
}
|
|
|
|
|
|
+static bool _eCtrl_isHwBrk_shutPower(void) {
|
|
|
+ return (g_eCtrl.hw_brake && nv_get_foc_params()->n_brkShutPower);
|
|
|
+}
|
|
|
+
|
|
|
static void _eCtrl_set_target(e_Ramp *ramp, float c) {
|
|
|
float c_now = eRamp_get_intepolation(ramp);
|
|
|
float step_val = 0;
|
|
|
@@ -168,14 +181,13 @@ void eCtrl_brake_signal(bool hw_brake) {
|
|
|
if (hw_brake != g_eCtrl.hw_brake) {
|
|
|
g_eCtrl.hw_brake = hw_brake;
|
|
|
if (hw_brake) {
|
|
|
- g_eCtrl.brake_ts = shark_get_mseconds();
|
|
|
+ g_eCtrl.brake_ts = get_tick_ms();
|
|
|
}
|
|
|
}
|
|
|
- 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;
|
|
|
+ if (_eCtrl_isHwBrk_shutPower()) {
|
|
|
+ if (!eCtrl_is_eBrk_enabled() && !eCtrl_enable_eBrake(true)) {
|
|
|
+ _eCtrl_clear_ramp();
|
|
|
+ }
|
|
|
}
|
|
|
cpu_exit_critical(mask);
|
|
|
}
|