Procházet zdrojové kódy

开机500ms内检测刹车故障

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui před 2 roky
rodič
revize
bf86979d4b

+ 2 - 1
Applications/foc/core/PMSM_FOC_Core.h

@@ -71,7 +71,8 @@ typedef enum {
 	FOC_CRIT_PHASE_UNBalance_Err, /* 三相不平衡错误,比如相线螺丝松了 */
 	FOC_CRIT_THRO2_Err,
 	FOC_CRIT_MOT_TEMP_Sensor,
-	FOC_CRIT_MOS_TEMP_Sensor,
+	FOC_CRIT_MOS_TEMP_Sensor,  //21
+	FOC_CRIT_BRK_Err,
 	FOC_CRIT_Err_Max = 32,
 }FOC_CritiCal_Ebit_t;
 

+ 16 - 0
Applications/foc/motor/motor.c

@@ -126,7 +126,23 @@ static void MC_Check_MosVbusThrottle(void) {
 	sys_debug("phase vol %f, %f, %f\n", abc[0], abc[1], abc[2]);
 }
 
+static int hw_brk_err_cnt = 0;
+static int hw_brk_no_err_cnt = 0;
 static u32 _self_check_task(void *p) {
+	if (get_tick_ms() < 500) { //启动500ms内检测刹车状态是否正常,应该是没有刹车
+		if (mc_detect_hwbrake() && hw_brk_err_cnt++ >= 60) {
+			mc_set_critical_error(FOC_CRIT_BRK_Err);
+		}
+	}else {
+		if (mc_critical_err_is_set(FOC_CRIT_BRK_Err) && !mc_detect_hwbrake()) {
+			if (hw_brk_no_err_cnt++ >= 100) {
+				mc_clr_critical_error(FOC_CRIT_BRK_Err);
+			}
+		}else {
+			hw_brk_no_err_cnt = 0;
+		}
+	}
+
 	if (ENC_Check_error()) {
 		mc_crit_err_add_s16(FOC_CRIT_Encoder_Err, -1);
 		mc_set_critical_error(FOC_CRIT_Encoder_Err);