From 5e66bb438755378f02af7cb1cea57e80af51e9dd Mon Sep 17 00:00:00 2001 From: Euan Date: Wed, 7 Feb 2024 22:04:06 +0000 Subject: [PATCH] Scale sampled data properly Needs to be rescaled back to int for storage, 8* higher resolution so the hw can use oversampling. BLDC can use floats for these variables, since they get changed to floats later anyway. Might as well do it earlier to make the code simpler. --- motor/mc_interface.c | 22 +++++++++++----------- motor/mcpwm.c | 10 +++++----- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/motor/mc_interface.c b/motor/mc_interface.c index dbaa3cc6..635ecd60 100644 --- a/motor/mc_interface.c +++ b/motor/mc_interface.c @@ -2164,8 +2164,8 @@ void mc_interface_mc_timer_isr(bool is_second_motor) { } if (state == MC_STATE_DETECTING) { - m_curr0_samples[m_sample_now] = (int16_t)mcpwm_detect_currents[mcpwm_get_comm_step() - 1]; - m_curr1_samples[m_sample_now] = (int16_t)mcpwm_detect_currents_diff[mcpwm_get_comm_step() - 1]; + m_curr0_samples[m_sample_now] = (int16_t)(mcpwm_detect_currents[mcpwm_get_comm_step() - 1] * (8.0 / FAC_CURRENT)); + m_curr1_samples[m_sample_now] = (int16_t)(mcpwm_detect_currents_diff[mcpwm_get_comm_step() - 1] * (8.0 / FAC_CURRENT)); m_curr2_samples[m_sample_now] = 0; m_ph1_samples[m_sample_now] = (int16_t)mcpwm_detect_voltages[0]; @@ -2178,9 +2178,9 @@ void mc_interface_mc_timer_isr(bool is_second_motor) { m_curr1_samples[m_sample_now] = ADC_curr_raw[4]; m_curr2_samples[m_sample_now] = ADC_curr_raw[5]; } else { - m_curr0_samples[m_sample_now] = ADC_curr_norm_value[3]; - m_curr1_samples[m_sample_now] = ADC_curr_norm_value[4]; - m_curr2_samples[m_sample_now] = ADC_curr_norm_value[5]; + m_curr0_samples[m_sample_now] = ADC_curr_norm_value[3] * (8.0 / FAC_CURRENT); + m_curr1_samples[m_sample_now] = ADC_curr_norm_value[4] * (8.0 / FAC_CURRENT); + m_curr2_samples[m_sample_now] = ADC_curr_norm_value[5] * (8.0 / FAC_CURRENT); } m_ph1_samples[m_sample_now] = ADC_V_L4 - zero; @@ -2192,9 +2192,9 @@ void mc_interface_mc_timer_isr(bool is_second_motor) { m_curr1_samples[m_sample_now] = ADC_curr_raw[1]; m_curr2_samples[m_sample_now] = ADC_curr_raw[2]; } else { - m_curr0_samples[m_sample_now] = ADC_curr_norm_value[0]; - m_curr1_samples[m_sample_now] = ADC_curr_norm_value[1]; - m_curr2_samples[m_sample_now] = ADC_curr_norm_value[2]; + m_curr0_samples[m_sample_now] = ADC_curr_norm_value[0] * (8.0 / FAC_CURRENT); + m_curr1_samples[m_sample_now] = ADC_curr_norm_value[1] * (8.0 / FAC_CURRENT); + m_curr2_samples[m_sample_now] = ADC_curr_norm_value[2] * (8.0 / FAC_CURRENT); } m_ph1_samples[m_sample_now] = ADC_V_L1 - zero; @@ -2895,9 +2895,9 @@ static THD_FUNCTION(sample_send_thread, arg) { buffer_append_float32_auto(buffer, (float)m_vzero_samples[ind_samp], &index); buffer_append_float32_auto(buffer, (float)m_curr_fir_samples[ind_samp], &index); } else { - buffer_append_float32_auto(buffer, (float)m_curr0_samples[ind_samp], &index); - buffer_append_float32_auto(buffer, (float)m_curr1_samples[ind_samp], &index); - buffer_append_float32_auto(buffer, (float)m_curr2_samples[ind_samp], &index); + buffer_append_float32_auto(buffer, (float)m_curr0_samples[ind_samp] / (8.0 / FAC_CURRENT), &index); + buffer_append_float32_auto(buffer, (float)m_curr1_samples[ind_samp] / (8.0 / FAC_CURRENT), &index); + buffer_append_float32_auto(buffer, (float)m_curr2_samples[ind_samp] / (8.0 / FAC_CURRENT), &index); buffer_append_float32_auto(buffer, ((float)m_ph1_samples[ind_samp] / 4096.0 * V_REG) * ((VIN_R1 + VIN_R2) / VIN_R2) * ADC_VOLTS_PH_FACTOR, &index); buffer_append_float32_auto(buffer, ((float)m_ph2_samples[ind_samp] / 4096.0 * V_REG) * ((VIN_R1 + VIN_R2) / VIN_R2) * ADC_VOLTS_PH_FACTOR, &index); buffer_append_float32_auto(buffer, ((float)m_ph3_samples[ind_samp] / 4096.0 * V_REG) * ((VIN_R1 + VIN_R2) / VIN_R2) * ADC_VOLTS_PH_FACTOR, &index); diff --git a/motor/mcpwm.c b/motor/mcpwm.c index 3801e6c7..74c5462e 100644 --- a/motor/mcpwm.c +++ b/motor/mcpwm.c @@ -1457,14 +1457,14 @@ static THD_FUNCTION(timer_thread, arg) { void mcpwm_adc_inj_int_handler(void) { uint32_t t_start = timer_time_now(); - int curr0 = HW_GET_INJ_CURR1(); - int curr1 = HW_GET_INJ_CURR2(); + float curr0 = HW_GET_INJ_CURR1(); + float curr1 = HW_GET_INJ_CURR2(); - int curr0_2 = HW_GET_INJ_CURR1_S2(); - int curr1_2 = HW_GET_INJ_CURR1_S2(); + float curr0_2 = HW_GET_INJ_CURR1_S2(); + float curr1_2 = HW_GET_INJ_CURR1_S2(); #ifdef HW_HAS_3_SHUNTS - int curr2 = HW_GET_INJ_CURR3(); + float curr2 = HW_GET_INJ_CURR3(); #endif #ifdef INVERTED_SHUNT_POLARITY