mirror of https://github.com/rusefi/bldc.git
Added foc_fw_q_current_factor
This commit is contained in:
parent
ac360ae7f6
commit
14b25e9aa4
|
@ -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"
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include <stdbool.h>
|
||||
|
||||
// Constants
|
||||
#define MCCONF_SIGNATURE 1125477401
|
||||
#define MCCONF_SIGNATURE 857427939
|
||||
#define APPCONF_SIGNATURE 3423413835
|
||||
|
||||
// Functions
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue