diff --git a/encoder/encoder.c b/encoder/encoder.c index eed03612..e6fe88aa 100644 --- a/encoder/encoder.c +++ b/encoder/encoder.c @@ -283,6 +283,22 @@ bool encoder_init(volatile mc_configuration *conf) { return res; } +void encoder_update_config(volatile mc_configuration *conf) { + switch (conf->m_sensor_port_mode) { + case SENSOR_PORT_MODE_SINCOS: { + encoder_cfg_sincos.s_gain = 1.0 / conf->m_encoder_sin_amp; + encoder_cfg_sincos.s_offset = conf->m_encoder_sin_offset; + encoder_cfg_sincos.c_gain = 1.0 /conf->m_encoder_cos_amp; + encoder_cfg_sincos.c_offset = conf->m_encoder_cos_offset; + encoder_cfg_sincos.filter_constant = conf->m_encoder_sincos_filter_constant; + sincosf(DEG2RAD_f(conf->m_encoder_sincos_phase_correction), &encoder_cfg_sincos.sph, &encoder_cfg_sincos.cph); + } break; + + default: + break; + } +} + void encoder_deinit(void) { nvicDisableVector(HW_ENC_EXTI_CH); nvicDisableVector(HW_ENC_TIM_ISR_CH); diff --git a/encoder/encoder.h b/encoder/encoder.h index 42ed9b13..87e9b1e5 100644 --- a/encoder/encoder.h +++ b/encoder/encoder.h @@ -36,6 +36,7 @@ // Functions bool encoder_init(volatile mc_configuration *conf); +void encoder_update_config(volatile mc_configuration *conf); void encoder_deinit(void); void encoder_set_custom_callbacks ( diff --git a/motor/mc_interface.c b/motor/mc_interface.c index 607235e8..bd7f3d37 100644 --- a/motor/mc_interface.c +++ b/motor/mc_interface.c @@ -309,6 +309,8 @@ void mc_interface_set_configuration(mc_configuration *configuration) { if (motor->m_conf.m_sensor_port_mode != configuration->m_sensor_port_mode) { encoder_deinit(); encoder_init(configuration); + } else { + encoder_update_config(configuration); } #ifdef HW_HAS_DRV8301