|
|
@@ -124,16 +124,9 @@ static u32 _self_check_task(void *p) {
|
|
|
if (fan_pwm_is_running()) {
|
|
|
#ifdef GPIO_FAN1_IN_GROUP
|
|
|
if ((get_delta_ms(motor.fan[0].start_ts) >= 5000) && (motor.fan[0].rpm == 0)) {
|
|
|
- mc_set_critical_error(FOC_CRIT_Fan1_Err);
|
|
|
+ mc_set_critical_error(FOC_CRIT_Fan_Err);
|
|
|
}else if (motor.fan[0].rpm > 0) {
|
|
|
- mc_clr_critical_error(FOC_CRIT_Fan1_Err);
|
|
|
- }
|
|
|
- #endif
|
|
|
- #ifdef GPIO_FAN2_IN_GROUP
|
|
|
- if ((get_delta_ms(motor.fan[1].start_ts) >= 5000) && (motor.fan[1].rpm == 0)) {
|
|
|
- mc_set_critical_error(FOC_CRIT_Fan2_Err);
|
|
|
- }else if (motor.fan[1].rpm > 0) {
|
|
|
- mc_clr_critical_error(FOC_CRIT_Fan2_Err);
|
|
|
+ mc_clr_critical_error(FOC_CRIT_Fan_Err);
|
|
|
}
|
|
|
#endif
|
|
|
}
|
|
|
@@ -234,11 +227,13 @@ mc_gear_t *mc_get_gear_config(void) {
|
|
|
return mc_get_gear_config_by_gear(motor.n_gear);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+bool mc_critical_not_running(void) {
|
|
|
+ u32 err = motor.n_CritiCalErrMask & FOC_CRIT_IDC_OV;
|
|
|
+ return (err != 0);
|
|
|
+}
|
|
|
|
|
|
bool mc_unsafe_critical_error(void) {
|
|
|
- u32 err = motor.n_CritiCalErrMask & (~(FOC_Cri_Err_Mask(FOC_CRIT_Fan1_Err)));
|
|
|
- err = err & (~(FOC_Cri_Err_Mask(FOC_CRIT_Fan2_Err)));
|
|
|
+ u32 err = motor.n_CritiCalErrMask & (~(FOC_Cri_Err_Mask(FOC_CRIT_Fan_Err)));
|
|
|
#ifdef CONFIG_DQ_STEP_RESPONSE
|
|
|
sys_debug("err=0x%x\n", err);
|
|
|
err = err & (~(FOC_Cri_Err_Mask(FOC_CRIT_Encoder_Err)));
|
|
|
@@ -1018,6 +1013,9 @@ void ADC_IRQHandler(void) {
|
|
|
|
|
|
#ifndef CONFIG_DQ_STEP_RESPONSE
|
|
|
static bool mc_can_stop_foc(void) {
|
|
|
+ if (mc_critical_not_running()) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
if (mc_throttle_released() && PMSM_FOC_GetSpeed() == 0.0f) {
|
|
|
if (!PMSM_FOC_AutoHoldding() && motor.epm_dir == EPM_Dir_None) {
|
|
|
return true;
|
|
|
@@ -1173,6 +1171,7 @@ measure_time_t g_meas_MCTask;
|
|
|
#define mc_TaskStart time_measure_start(&g_meas_MCTask)
|
|
|
#define mc_TaskEnd time_measure_end(&g_meas_MCTask)
|
|
|
void Sched_MC_mTask(void) {
|
|
|
+ static int vbus_err_cnt = 0;
|
|
|
mc_TaskStart;
|
|
|
|
|
|
adc_vref_filter();
|
|
|
@@ -1189,6 +1188,16 @@ void Sched_MC_mTask(void) {
|
|
|
/* 母线电流,实际采集的相电流矢量大小的计算 */
|
|
|
PMSM_FOC_Calc_Current();
|
|
|
|
|
|
+ if ((PMSM_FOC_GetVbusCurrent() > CONFIG_MAX_VBUS_CURRENT) || (PMSM_FOC_GetVbusCurrent() < CONFIG_MAX_CHRG_CURRENT)) {
|
|
|
+ vbus_err_cnt ++;
|
|
|
+ if (vbus_err_cnt > 10) {
|
|
|
+ mc_error.ibus_x10 = (s16)(PMSM_FOC_GetVbusCurrent() * 10.0f);
|
|
|
+ mc_set_critical_error(FOC_CRIT_IDC_OV);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ vbus_err_cnt = 0;
|
|
|
+ }
|
|
|
+
|
|
|
if (mc_process_force_running()) {
|
|
|
mc_TaskEnd;
|
|
|
return;
|