|
|
@@ -353,6 +353,7 @@ static __INLINE void PMSM_FOC_Phase_Unbalance(void) {
|
|
|
static u32 _cycle_cnt = 0, _last_mod_cnt = 0;
|
|
|
static float a_max = 0, b_max = 0, c_max = 0;
|
|
|
static u32 _unbalance_cnt = 0;
|
|
|
+ static u32 _unbalance_time = 0;
|
|
|
float lowpass = gFoc_Ctrl.in.s_motVelDegreePers * FOC_CTRL_US / 2.0f;
|
|
|
if (lowpass > 1.0f) {
|
|
|
lowpass = 1.0f;
|
|
|
@@ -364,6 +365,7 @@ static __INLINE void PMSM_FOC_Phase_Unbalance(void) {
|
|
|
gFoc_Ctrl.in.s_angleLast = gFoc_Ctrl.in.s_motAngle;
|
|
|
a_max = b_max = c_max = 0;
|
|
|
_unbalance_cnt = 0;
|
|
|
+ _unbalance_time = get_tick_ms();
|
|
|
_cycle_cnt = 0;
|
|
|
_last_mod_cnt = 0;
|
|
|
phase_unbalance_r = 0;
|
|
|
@@ -406,13 +408,14 @@ static __INLINE void PMSM_FOC_Phase_Unbalance(void) {
|
|
|
}
|
|
|
float unbalance_r = (i_max - i_min - CONFIG_PHASE_UNBALANCE_THROLD)/(i_max + 1e-8f);
|
|
|
if (unbalance_r >= CONFIG_PHASE_UNBALANCE_R) {
|
|
|
- if (_unbalance_cnt++ >= 500) {
|
|
|
+ if ((_unbalance_cnt++ >= 500) || (get_delta_ms(_unbalance_time) >= 1000*10)) {
|
|
|
if (mc_set_critical_error(FOC_CRIT_PHASE_UNBalance_Err)) {
|
|
|
mc_crit_err_add(FOC_CRIT_PHASE_UNBalance_Err, (s16)i_max, (s16)i_min);
|
|
|
}
|
|
|
}
|
|
|
}else {
|
|
|
_unbalance_cnt = 0;
|
|
|
+ _unbalance_time = get_tick_ms();
|
|
|
}
|
|
|
phase_unbalance_r = unbalance_r;
|
|
|
phase_a_max = a_max;
|