|
@@ -198,27 +198,31 @@ static void encoder_detect_error(s16 cnt) {
|
|
|
g_encoder.last_delta_cnt = delta_cnt;
|
|
g_encoder.last_delta_cnt = delta_cnt;
|
|
|
skip = true;
|
|
skip = true;
|
|
|
}
|
|
}
|
|
|
- if ((g_encoder.last_delta_cnt <= CONFIG_ENC_DIANOSTIC_MIN_CNT*1.2f) && get_delta_ms(g_encoder.pwm_time_ms) >= 8) {
|
|
|
|
|
- g_encoder.enc_maybe_err = ENCODER_PWM_ERR;
|
|
|
|
|
- enc_pwm_err_ms = get_delta_ms(g_encoder.pwm_time_ms);
|
|
|
|
|
- enc_delta_err2 = (s16)((g_encoder.est_vel_counts/g_encoder.cpr) * 60.0f);
|
|
|
|
|
- }
|
|
|
|
|
- if (g_encoder.start_dianostic_cnt < 0xFFFF) {
|
|
|
|
|
|
|
+ float ab_thr = CONFIG_ENC_DIANOSTIC_MIN_CNT*1.2f;
|
|
|
|
|
+ if (g_encoder.last_delta_cnt <= ab_thr) {
|
|
|
|
|
+ if (get_delta_ms(g_encoder.pwm_time_ms) >= 8) {
|
|
|
|
|
+ g_encoder.enc_maybe_err = ENCODER_PWM_ERR;
|
|
|
|
|
+ enc_pwm_err_ms = get_delta_ms(g_encoder.pwm_time_ms);
|
|
|
|
|
+ enc_delta_err2 = (s16)((g_encoder.est_vel_counts/g_encoder.cpr) * 60.0f);
|
|
|
|
|
+ }
|
|
|
|
|
+ skip = true;
|
|
|
|
|
+ g_encoder.start_dianostic_cnt = 0;
|
|
|
|
|
+ }else if (g_encoder.start_dianostic_cnt < 0xFFFFFF) {
|
|
|
g_encoder.start_dianostic_cnt ++;
|
|
g_encoder.start_dianostic_cnt ++;
|
|
|
}
|
|
}
|
|
|
- if (!skip && ((g_encoder.last_delta_cnt > CONFIG_ENC_DIANOSTIC_MIN_CNT) || (_mayerr_cnt != 0)) && (g_encoder.start_dianostic_cnt >= 1000)) {
|
|
|
|
|
|
|
+ if (!skip && ((g_encoder.last_delta_cnt > ab_thr) || (_mayerr_cnt != 0)) && (g_encoder.start_dianostic_cnt >= FOC_PWM_FS)) {
|
|
|
float last_delta = (float)g_encoder.last_delta_cnt;
|
|
float last_delta = (float)g_encoder.last_delta_cnt;
|
|
|
float r = (float)delta_cnt / (last_delta + 0.0000001f);
|
|
float r = (float)delta_cnt / (last_delta + 0.0000001f);
|
|
|
float r_abs = ABS(r);
|
|
float r_abs = ABS(r);
|
|
|
float r_thr;
|
|
float r_thr;
|
|
|
u32 cnt_thr;
|
|
u32 cnt_thr;
|
|
|
- if (g_encoder.last_delta_cnt <= CONFIG_ENC_DIANOSTIC_MIN_CNT * 2) { //0.4个机械角度
|
|
|
|
|
|
|
+ if (g_encoder.last_delta_cnt <= ab_thr * 2) {
|
|
|
r_thr = 0.3f;
|
|
r_thr = 0.3f;
|
|
|
cnt_thr = 4;
|
|
cnt_thr = 4;
|
|
|
- }else if (g_encoder.last_delta_cnt <= CONFIG_ENC_DIANOSTIC_MIN_CNT * 4) { //0.8个机械角度
|
|
|
|
|
|
|
+ }else if (g_encoder.last_delta_cnt <= ab_thr * 4) {
|
|
|
r_thr = 0.5f;
|
|
r_thr = 0.5f;
|
|
|
cnt_thr = 3;
|
|
cnt_thr = 3;
|
|
|
- }else if (g_encoder.last_delta_cnt <= CONFIG_ENC_DIANOSTIC_MIN_CNT * 6) { //1.3个机械角度
|
|
|
|
|
|
|
+ }else if (g_encoder.last_delta_cnt <= ab_thr * 6) {
|
|
|
r_thr = 0.6f;
|
|
r_thr = 0.6f;
|
|
|
cnt_thr = 2;
|
|
cnt_thr = 2;
|
|
|
}else {
|
|
}else {
|
|
@@ -228,6 +232,7 @@ static void encoder_detect_error(s16 cnt) {
|
|
|
if (r_thr >= 0.5f) {
|
|
if (r_thr >= 0.5f) {
|
|
|
if (r < 0) {
|
|
if (r < 0) {
|
|
|
r_thr = 2.0f;
|
|
r_thr = 2.0f;
|
|
|
|
|
+ cnt_thr = 1;
|
|
|
}else if (r_abs <= 0.01f) {
|
|
}else if (r_abs <= 0.01f) {
|
|
|
cnt_thr = 1;
|
|
cnt_thr = 1;
|
|
|
}
|
|
}
|