mirror of https://github.com/rusefi/bldc.git
Added fault code for invalid phase filter readings
This commit is contained in:
parent
c5ff492f4b
commit
756ccbc5ba
|
@ -24,7 +24,7 @@
|
|||
#define FW_VERSION_MAJOR 6
|
||||
#define FW_VERSION_MINOR 00
|
||||
// Set to 0 for building a release and iterate during beta test builds
|
||||
#define FW_TEST_VERSION_NUMBER 35
|
||||
#define FW_TEST_VERSION_NUMBER 36
|
||||
|
||||
#include "datatypes.h"
|
||||
|
||||
|
|
|
@ -149,7 +149,8 @@ typedef enum {
|
|||
FAULT_CODE_FLASH_CORRUPTION_APP_CFG,
|
||||
FAULT_CODE_FLASH_CORRUPTION_MC_CFG,
|
||||
FAULT_CODE_ENCODER_NO_MAGNET,
|
||||
FAULT_CODE_ENCODER_MAGNET_TOO_STRONG
|
||||
FAULT_CODE_ENCODER_MAGNET_TOO_STRONG,
|
||||
FAULT_CODE_PHASE_FILTER,
|
||||
} mc_fault_code;
|
||||
|
||||
typedef enum {
|
||||
|
|
|
@ -477,6 +477,7 @@ const char* mc_interface_fault_to_string(mc_fault_code fault) {
|
|||
case FAULT_CODE_RESOLVER_LOS: return "FAULT_CODE_RESOLVER_LOS";
|
||||
case FAULT_CODE_ENCODER_NO_MAGNET: return "FAULT_CODE_ENCODER_NO_MAGNET";
|
||||
case FAULT_CODE_ENCODER_MAGNET_TOO_STRONG: return "FAULT_CODE_ENCODER_MAGNET_TOO_STRONG";
|
||||
case FAULT_CODE_PHASE_FILTER: return "FAULT_CODE_PHASE_FILTER";
|
||||
}
|
||||
|
||||
return "Unknown fault";
|
||||
|
|
|
@ -4154,9 +4154,15 @@ static void update_valpha_vbeta(motor_all_state_t *motor, float mod_alpha, float
|
|||
if (motor->m_state == MC_STATE_RUNNING) {
|
||||
#ifdef HW_HAS_PHASE_FILTERS
|
||||
if (conf_now->foc_phase_filter_enable && abs_rpm < conf_now->foc_phase_filter_max_erpm) {
|
||||
float mod_mag = NORM2_f(mod_alpha, mod_beta);
|
||||
float v_mag_mod = mod_mag * (2.0 / 3.0) * state_m->v_bus;
|
||||
|
||||
if (fabsf(v_mag_mod - state_m->v_mag_filter) > (conf_now->l_max_vin * 0.08)) {
|
||||
mc_interface_fault_stop(FAULT_CODE_PHASE_FILTER, &m_motor_1 != motor, true);
|
||||
}
|
||||
|
||||
// Compensate for the phase delay by using the direction of the modulation
|
||||
// together with the magnitude from the phase filters
|
||||
float mod_mag = NORM2_f(mod_alpha, mod_beta);
|
||||
if (mod_mag > 0.04) {
|
||||
state_m->v_alpha = mod_alpha / mod_mag * state_m->v_mag_filter;
|
||||
state_m->v_beta = mod_beta / mod_mag * state_m->v_mag_filter;
|
||||
|
|
Loading…
Reference in New Issue