Преглед изворни кода

工厂测试模式不清除错误标志,记录温感和编码器错误前先判断本次启动是否已经记录

Signed-off-by: kevin <huhui@sharkgulf.com>
kevin пре 2 година
родитељ
комит
f607d21e40
1 измењених фајлова са 10 додато и 13 уклоњено
  1. 10 13
      Applications/foc/motor/motor.c

+ 10 - 13
Applications/foc/motor/motor.c

@@ -148,8 +148,9 @@ static u32 _self_check_task(void *p) {
 	}
 
 	if (ENC_Check_error()) {
-		mc_crit_err_add_s16(FOC_CRIT_Encoder_Err, -1);
-		mc_set_critical_error(FOC_CRIT_Encoder_Err);
+		if (mc_set_critical_error(FOC_CRIT_Encoder_Err)) {
+			mc_crit_err_add_s16(FOC_CRIT_Encoder_Err, -1);
+		}
 	}
 	if (get_tick_ms() < 5000) { //启动后5s内检测锁电机线
 		if (mc_is_gpio_mlock()) {
@@ -1226,9 +1227,7 @@ static void motor_vbus_crit_check(s16 curr_vbus) {
 				mot_contrl_stop(&motor.controller);
 			}
 			if (mc_set_critical_error(FOC_CRIT_OV_Vol_Err)) {
-				if (mot_contrl_get_speed(&motor.controller) > CONFIG_ZERO_SPEED_RPM) {
-					mc_crit_err_add_s16(FOC_CRIT_OV_Vol_Err, curr_vbus);
-				}
+				mc_crit_err_add_s16(FOC_CRIT_OV_Vol_Err, curr_vbus);
 			}
 		}
 	}else {
@@ -1616,10 +1615,6 @@ void Sched_MC_mTask(void) {
 	/* 母线电流,实际采集的相电流矢量大小的计算 */
 	mot_contrl_calc_current(&motor.controller);
 
-	if (factory_is_running()) {
-		motor.n_CritiCalErrMask = 0;
-		return;
-	}
 	if ((mot_contrl_get_dc_current(&motor.controller) > (CONFIG_HW_MAX_DC_CURRENT * 1.1f)) || (mot_contrl_get_dc_current(&motor.controller) < CONFIG_HW_MAX_CHRG_CURRENT)) {
 		vbus_err_cnt ++;
 		if (vbus_err_cnt >= 5) {
@@ -1641,11 +1636,13 @@ void Sched_MC_mTask(void) {
 		mc_gear_mode_set();
 		if (sensor_less && foc_observer_sensorless_stable()) {//unstable 记录在ADC中断处理中
 			if (motor_encoder_may_error() == ENCODER_PWM_ERR) {
-				mc_set_critical_error(FOC_CRIT_Encoder_Err);
-				mc_crit_err_add(FOC_CRIT_Encoder_Err, (s16)enc_pwm_err_ms, enc_delta_err2);
+				if (mc_set_critical_error(FOC_CRIT_Encoder_Err)) {
+					mc_crit_err_add(FOC_CRIT_Encoder_Err, (s16)enc_pwm_err_ms, enc_delta_err2);
+				}
 			}else if (motor_encoder_may_error() == ENCODER_AB_ERR) {
-				mc_set_critical_error(FOC_CRIT_ENC_AB_Err);
-				mc_crit_err_add(FOC_CRIT_ENC_AB_Err, enc_delta_err1, enc_delta_err2);
+				if (mc_set_critical_error(FOC_CRIT_ENC_AB_Err)) {
+					mc_crit_err_add(FOC_CRIT_ENC_AB_Err, enc_delta_err1, enc_delta_err2);
+				}
 			}
 		}
 		motor.b_limit_pending = false;