|
|
@@ -48,11 +48,11 @@ static void MC_Check_MosVbusThrottle(void) {
|
|
|
get_phase_vols(abc);
|
|
|
int vbus_vol = get_vbus_int();
|
|
|
if (abc[0] > vbus_vol/2 || abc[1] > vbus_vol/2 || abc[2] > vbus_vol/2) {
|
|
|
- PMSM_FOC_SetCriticalError(FOC_CRIT_H_MOS_Err);
|
|
|
+ mc_set_critical_error(FOC_CRIT_H_MOS_Err);
|
|
|
}else if (abc[0] < 0.001f){
|
|
|
- PMSM_FOC_SetCriticalError(FOC_CRIT_L_MOS_Err);
|
|
|
+ mc_set_critical_error(FOC_CRIT_L_MOS_Err);
|
|
|
}else if ((abc[0] > 0.5f) && (abc[1] < 0.001f || abc[2] < 0.001f)) {
|
|
|
- PMSM_FOC_SetCriticalError(FOC_CRIT_Phase_Conn_Err);
|
|
|
+ mc_set_critical_error(FOC_CRIT_Phase_Conn_Err);
|
|
|
}
|
|
|
sys_debug("phase vol %f, %f, %f\n", abc[0], abc[1], abc[2]);
|
|
|
}
|
|
|
@@ -60,7 +60,7 @@ static void MC_Check_MosVbusThrottle(void) {
|
|
|
static u32 _self_check_task(void *p) {
|
|
|
if (ENC_Check_error()) {
|
|
|
err_add_record(FOC_CRIT_Encoder_Err, 0);
|
|
|
- PMSM_FOC_SetCriticalError(FOC_CRIT_Encoder_Err);
|
|
|
+ mc_set_critical_error(FOC_CRIT_Encoder_Err);
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -138,7 +138,7 @@ bool mc_start(u8 mode) {
|
|
|
}
|
|
|
MC_Check_MosVbusThrottle();
|
|
|
|
|
|
- if (PMSM_FOC_GetCriticalError() != 0) {
|
|
|
+ if (mc_get_critical_error() != 0) {
|
|
|
PMSM_FOC_SetErrCode(FOC_Have_CritiCal_Err);
|
|
|
return false;
|
|
|
}
|
|
|
@@ -169,14 +169,14 @@ bool mc_start(u8 mode) {
|
|
|
phase_current_offset_calibrate();
|
|
|
pwm_start();
|
|
|
delay_us(10); //wait for ebrake error
|
|
|
- if (PMSM_FOC_GetCriticalError() != 0) {
|
|
|
+ if (mc_get_critical_error() != 0) {
|
|
|
mc_stop();
|
|
|
return false;
|
|
|
}
|
|
|
adc_start_convert();
|
|
|
phase_current_calibrate_wait();
|
|
|
if (phase_curr_offset_check()) {
|
|
|
- PMSM_FOC_SetCriticalError(FOC_CRIT_CURR_OFF_Err);
|
|
|
+ mc_set_critical_error(FOC_CRIT_CURR_OFF_Err);
|
|
|
mc_stop();
|
|
|
return false;
|
|
|
}
|
|
|
@@ -511,6 +511,19 @@ bool mc_auto_hold(bool hold) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+void mc_set_critical_error(u8 err) {
|
|
|
+ motor.n_CritiCalErrMask |= (1u << err);
|
|
|
+}
|
|
|
+
|
|
|
+void mc_clr_critical_error(u8 err) {
|
|
|
+ motor.n_CritiCalErrMask &= ~(1u << err);
|
|
|
+}
|
|
|
+
|
|
|
+u32 mc_get_critical_error(void) {
|
|
|
+ return motor.n_CritiCalErrMask;
|
|
|
+}
|
|
|
+
|
|
|
bool mc_throttle_released(void) {
|
|
|
return get_throttle_float() <= nv_get_foc_params()->n_minThroVol;
|
|
|
}
|
|
|
@@ -572,12 +585,12 @@ void MC_Protect_IRQHandler(void){
|
|
|
if (!motor.b_start) {
|
|
|
return;
|
|
|
}
|
|
|
+ mc_set_critical_error(FOC_CRIT_Phase_Err);
|
|
|
_mc_internal_init(CTRL_MODE_OPEN, false);
|
|
|
adc_stop_convert();
|
|
|
pwm_stop();
|
|
|
PMSM_FOC_Stop();
|
|
|
pwm_up_enable(true);
|
|
|
- PMSM_FOC_SetCriticalError(FOC_CRIT_Phase_Err);
|
|
|
}
|
|
|
|
|
|
void TIMER_UP_IRQHandler(void){
|