Added foc_fw_q_current_factor

This commit is contained in:
Benjamin Vedder 2021-04-15 10:04:28 +02:00
parent ac360ae7f6
commit 14b25e9aa4
6 changed files with 12 additions and 3 deletions

View File

@ -24,7 +24,7 @@
#define FW_VERSION_MAJOR 5
#define FW_VERSION_MINOR 03
// Set to 0 for building a release and iterate during beta test builds
#define FW_TEST_VERSION_NUMBER 23
#define FW_TEST_VERSION_NUMBER 24
#include "datatypes.h"

View File

@ -127,6 +127,7 @@ int32_t confgenerator_serialize_mcconf(uint8_t *buffer, const mc_configuration *
buffer_append_float32_auto(buffer, conf->foc_fw_current_max, &ind);
buffer_append_float16(buffer, conf->foc_fw_duty_start, 10000, &ind);
buffer_append_float16(buffer, conf->foc_fw_ramp_time, 1000, &ind);
buffer_append_float16(buffer, conf->foc_fw_q_current_factor, 10000, &ind);
buffer_append_int16(buffer, conf->gpd_buffer_notify_left, &ind);
buffer_append_int16(buffer, conf->gpd_buffer_interpol, &ind);
buffer_append_float16(buffer, conf->gpd_current_filter_const, 10000, &ind);
@ -475,6 +476,7 @@ bool confgenerator_deserialize_mcconf(const uint8_t *buffer, mc_configuration *c
conf->foc_fw_current_max = buffer_get_float32_auto(buffer, &ind);
conf->foc_fw_duty_start = buffer_get_float16(buffer, 10000, &ind);
conf->foc_fw_ramp_time = buffer_get_float16(buffer, 1000, &ind);
conf->foc_fw_q_current_factor = buffer_get_float16(buffer, 10000, &ind);
conf->gpd_buffer_notify_left = buffer_get_int16(buffer, &ind);
conf->gpd_buffer_interpol = buffer_get_int16(buffer, &ind);
conf->gpd_current_filter_const = buffer_get_float16(buffer, 10000, &ind);
@ -819,6 +821,7 @@ void confgenerator_set_defaults_mcconf(mc_configuration *conf) {
conf->foc_fw_current_max = MCCONF_FOC_FW_CURRENT_MAX;
conf->foc_fw_duty_start = MCCONF_FOC_FW_DUTY_START;
conf->foc_fw_ramp_time = MCCONF_FOC_FW_RAMP_TIME;
conf->foc_fw_q_current_factor = MCCONF_FOC_FW_Q_CURRENT_FACTOR;
conf->gpd_buffer_notify_left = MCCONF_GPD_BUFFER_NOTIFY_LEFT;
conf->gpd_buffer_interpol = MCCONF_GPD_BUFFER_INTERPOL;
conf->gpd_current_filter_const = MCCONF_GPD_CURRENT_FILTER_CONST;

View File

@ -8,7 +8,7 @@
#include <stdbool.h>
// Constants
#define MCCONF_SIGNATURE 1125477401
#define MCCONF_SIGNATURE 857427939
#define APPCONF_SIGNATURE 3423413835
// Functions

View File

@ -399,6 +399,7 @@ typedef struct {
float foc_fw_current_max;
float foc_fw_duty_start;
float foc_fw_ramp_time;
float foc_fw_q_current_factor;
// GPDrive
int gpd_buffer_notify_left;

View File

@ -422,6 +422,9 @@
#ifndef MCCONF_FOC_FW_RAMP_TIME
#define MCCONF_FOC_FW_RAMP_TIME 0.2 // Ramp time for field weakening current
#endif
#ifndef MCCONF_FOC_FW_Q_CURRENT_FACTOR
#define MCCONF_FOC_FW_Q_CURRENT_FACTOR 0.02 // Factor of the FW-current to feed to the Q-axis to slow motor down when setting 0 current
#endif
// GPD
#ifndef MCCONF_GPD_BUFFER_NOTIFY_LEFT

View File

@ -2781,13 +2781,15 @@ void mcpwm_foc_adc_int_handler(void *p, uint32_t flags) {
iq_set_tmp = SIGN(iq_set_tmp) * sqrtf(SQ(iq_set_tmp) - SQ(id_set_tmp));
}
const float mod_q = motor_now->m_motor_state.mod_q;
// Running FW from the 1 khz timer seems fast enough.
// run_fw(motor_now, dt);
id_set_tmp -= motor_now->m_i_fw_set;
iq_set_tmp -= SIGN(mod_q) * motor_now->m_i_fw_set * conf_now->foc_fw_q_current_factor;
// Apply current limits
// TODO: Consider D axis current for the input current as well.
const float mod_q = motor_now->m_motor_state.mod_q;
if (mod_q > 0.001) {
utils_truncate_number(&iq_set_tmp, conf_now->lo_in_current_min / mod_q, conf_now->lo_in_current_max / mod_q);
} else if (mod_q < -0.001) {