init by encoders_type_t parameter, memory use convenient structures

This commit is contained in:
Jakub Tomczak 2022-01-02 16:35:55 +01:00
parent e4e16cad88
commit 1f8a2cebfb
7 changed files with 244 additions and 198 deletions

View File

@ -89,14 +89,6 @@ typedef struct {
encoders_UART_config_t uart_config;
SerialConfig uart_param;
} TS5700N8501_config_t;
typedef struct {
encoders_type_t encoder_type;
ENCSPI_config_t encspi;
ABI_config_t abi;
ENCSINCOS_config_t encsincos;
TS5700N8501_config_t ts5700n8501;
} encoders_config_t;
/*
typedef struct {
uint8_t is_connected;

View File

@ -25,24 +25,59 @@
#define SPI_BaudRatePrescaler_256 ((uint16_t)0x0038) // 328.125 KHz 164.06 KHz
#define SPI_DATASIZE_16BIT SPI_CR1_DFF
encoders_config_t conf_AS5047 = { ENCODERS_TYPE_AS504x,
{
ENCODERS_VAR_UNINITIALIZED,
AS5047_SAMPLE_RATE_HZ,
{/*SPI PINOUT*/
{/*NSS*/HW_HALL_ENC_GPIO3, HW_HALL_ENC_PIN3 },
{/*MISO*/HW_HALL_ENC_GPIO2, HW_HALL_ENC_PIN2 },
{/*MOSI*/HW_SPI_PORT_MOSI, HW_SPI_PIN_MOSI },
{/*SCK*/HW_HALL_ENC_GPIO1, HW_HALL_ENC_PIN1 }
},
ENCODERS_CONFIG_UNUSED
},
ENCODERS_CONFIG_UNUSED,
ENCODERS_CONFIG_UNUSED,
ENCODERS_CONFIG_UNUSED
};
//encoders_config_t conf_encoders = {
// //SPI ENCODER
// {
// ENCODERS_VAR_UNINITIALIZED,
// MT6816_SAMPLE_RATE_HZ,
// {/*SPI PINOUT*/
// {/*NSS*/HW_HALL_ENC_GPIO3, HW_HALL_ENC_PIN3 },
// {/*MISO*/HW_HALL_ENC_GPIO2, HW_HALL_ENC_PIN2 },
// {/*MOSI*/HW_SPI_PORT_MOSI, HW_SPI_PIN_MOSI },
// {/*SCK*/HW_HALL_ENC_GPIO1, HW_HALL_ENC_PIN1 }
// }
//#ifdef HW_SPI_DEV
// ,{//HARDWARE SPI CONFIG
// NULL, HW_HALL_ENC_GPIO3, HW_HALL_ENC_PIN3, SPI_BaudRatePrescaler_4 | SPI_CR1_CPOL | SPI_CR1_CPHA
// | SPI_DATASIZE_16BIT
// }
//#else
// ,ENCODERS_CONFIG_UNUSED
//#endif
// },
// //ABI ENCODER
// {
// ENCODERS_VAR_UNINITIALIZED,
// ENCODERS_ABI_COUNTER_DEFAULT_VALUE,
// {/*INCREMENTAL PROTOCOL PINOUT*/
// {/*A*/HW_HALL_ENC_GPIO1, HW_HALL_ENC_PIN1 },
// {/*B*/HW_HALL_ENC_GPIO2, HW_HALL_ENC_PIN2 }
// }
// },
// //SINCOS
// ENCODERS_STRUCT_UNDEFINED,
// //TS5700N8501
// {
// ENCODERS_VAR_UNINITIALIZED,
// {/*UART PINOUT*/
// {HW_UART_TX_PORT, HW_UART_TX_PIN},
// {HW_UART_RX_PORT, HW_UART_RX_PIN},
//#ifdef HW_ADC_EXT_GPIO
// {HW_ADC_EXT_GPIO, HW_ADC_EXT_PIN}
//#else
// {ENCODERS_VAR_UNINITIALIZED, ENCODERS_VAR_UNINITIALIZED}
//#endif
// },
// {/*UART CONFIG*/
// 2500000,
// 0,
// USART_CR2_LINEN,
// 0
// }
// }
//};
encoders_config_t conf_MT6816 = { ENCODERS_TYPE_MT6816,
ENCSPI_config_t encoders_conf_ENCSPI =
{
ENCODERS_VAR_UNINITIALIZED,
MT6816_SAMPLE_RATE_HZ,
@ -51,40 +86,59 @@ encoders_config_t conf_MT6816 = { ENCODERS_TYPE_MT6816,
{/*MISO*/HW_HALL_ENC_GPIO2, HW_HALL_ENC_PIN2 },
{/*MOSI*/HW_SPI_PORT_MOSI, HW_SPI_PIN_MOSI },
{/*SCK*/HW_HALL_ENC_GPIO1, HW_HALL_ENC_PIN1 }
}
},
#ifdef HW_SPI_DEV
,{//HARDWARE SPI CONFIG
{//HARDWARE SPI CONFIG
NULL, HW_HALL_ENC_GPIO3, HW_HALL_ENC_PIN3, SPI_BaudRatePrescaler_4 | SPI_CR1_CPOL | SPI_CR1_CPHA
| SPI_DATASIZE_16BIT
}
#else
,ENCODERS_CONFIG_UNUSED
ENCODERS_CONFIG_UNUSED
#endif
},
ENCODERS_CONFIG_UNUSED,
ENCODERS_CONFIG_UNUSED,
ENCODERS_CONFIG_UNUSED
};
encoders_config_t conf_AD2S1205 = { ENCODERS_TYPE_AD2S1205_SPI,
{
ENCODERS_VAR_UNINITIALIZED,
MT6816_SAMPLE_RATE_HZ,
{/*SPI PINOUT*/
{/*NSS*/HW_HALL_ENC_GPIO3, HW_HALL_ENC_PIN3 },
{/*MISO*/HW_HALL_ENC_GPIO2, HW_HALL_ENC_PIN2 },
{/*MOSI*/HW_SPI_PORT_MOSI, HW_SPI_PIN_MOSI },
{/*SCK*/HW_HALL_ENC_GPIO1, HW_HALL_ENC_PIN1 }
},
ENCODERS_CONFIG_UNUSED
},
ENCODERS_CONFIG_UNUSED,
ENCODERS_CONFIG_UNUSED,
ENCODERS_CONFIG_UNUSED
};
//encoders_config_t conf_MT6816 = { ENCODERS_TYPE_MT6816,
// {
// ENCODERS_VAR_UNINITIALIZED,
// MT6816_SAMPLE_RATE_HZ,
// {/*SPI PINOUT*/
// {/*NSS*/HW_HALL_ENC_GPIO3, HW_HALL_ENC_PIN3 },
// {/*MISO*/HW_HALL_ENC_GPIO2, HW_HALL_ENC_PIN2 },
// {/*MOSI*/HW_SPI_PORT_MOSI, HW_SPI_PIN_MOSI },
// {/*SCK*/HW_HALL_ENC_GPIO1, HW_HALL_ENC_PIN1 }
// }
//#ifdef HW_SPI_DEV
// ,{//HARDWARE SPI CONFIG
// NULL, HW_HALL_ENC_GPIO3, HW_HALL_ENC_PIN3, SPI_BaudRatePrescaler_4 | SPI_CR1_CPOL | SPI_CR1_CPHA
// | SPI_DATASIZE_16BIT
// }
//#else
// ,ENCODERS_CONFIG_UNUSED
//#endif
// },
// ENCODERS_CONFIG_UNUSED,
// ENCODERS_CONFIG_UNUSED,
// ENCODERS_CONFIG_UNUSED
//};
//
//encoders_config_t conf_AD2S1205 = {
// {
// ENCODERS_VAR_UNINITIALIZED,
// MT6816_SAMPLE_RATE_HZ,
// {/*SPI PINOUT*/
// {/*NSS*/HW_HALL_ENC_GPIO3, HW_HALL_ENC_PIN3 },
// {/*MISO*/HW_HALL_ENC_GPIO2, HW_HALL_ENC_PIN2 },
// {/*MOSI*/HW_SPI_PORT_MOSI, HW_SPI_PIN_MOSI },
// {/*SCK*/HW_HALL_ENC_GPIO1, HW_HALL_ENC_PIN1 }
// },
// ENCODERS_CONFIG_UNUSED
// },
// ENCODERS_CONFIG_UNUSED,
// ENCODERS_CONFIG_UNUSED,
// ENCODERS_CONFIG_UNUSED
//};
encoders_config_t conf_ABI = { ENCODERS_TYPE_ABI,
ENCODERS_CONFIG_UNUSED,
ABI_config_t encoders_conf_ABI =
{
ENCODERS_VAR_UNINITIALIZED,
ENCODERS_ABI_COUNTER_DEFAULT_VALUE,
@ -92,22 +146,11 @@ encoders_config_t conf_ABI = { ENCODERS_TYPE_ABI,
{/*A*/HW_HALL_ENC_GPIO1, HW_HALL_ENC_PIN1 },
{/*B*/HW_HALL_ENC_GPIO2, HW_HALL_ENC_PIN2 }
}
},
ENCODERS_CONFIG_UNUSED,
ENCODERS_CONFIG_UNUSED
};
encoders_config_t conf_SINCOS = { ENCODERS_TYPE_SINCOS,
ENCODERS_CONFIG_UNUSED,
ENCODERS_CONFIG_UNUSED,
ENCODERS_STRUCT_UNDEFINED,
ENCODERS_CONFIG_UNUSED,
};
ENCSINCOS_config_t encoders_conf_ENCSINCOS = ENCODERS_STRUCT_UNDEFINED;
encoders_config_t conf_TS5700N8501 = { ENCODERS_TYPE_TS5700N8501,
ENCODERS_CONFIG_UNUSED,
ENCODERS_CONFIG_UNUSED,
ENCODERS_CONFIG_UNUSED,
TS5700N8501_config_t encoders_conf_TS5700N8501 =
{
ENCODERS_VAR_UNINITIALIZED,
{/*UART PINOUT*/
@ -125,6 +168,6 @@ encoders_config_t conf_TS5700N8501 = { ENCODERS_TYPE_TS5700N8501,
USART_CR2_LINEN,
0
}
}
};

View File

@ -4,11 +4,9 @@
#include "encoder/encoder_datatype.h"
#include "hw.h"
extern encoders_config_t conf_AS5047;
extern encoders_config_t conf_MT6816;
extern encoders_config_t conf_AD2S1205;
extern encoders_config_t conf_ABI;
extern encoders_config_t conf_SINCOS;
extern encoders_config_t conf_TS5700N8501;
extern ENCSPI_config_t encoders_conf_ENCSPI;
extern ABI_config_t encoders_conf_ABI;
extern ENCSINCOS_config_t encoders_conf_ENCSINCOS;
extern TS5700N8501_config_t encoders_conf_TS5700N8501;
#endif /* ENCODER_ENCODER_HWCONF_H_ */

View File

@ -10,9 +10,9 @@
#include "math.h"
static bool encoders_is_uart_defined(encoders_config_t *encoder_config);
static bool encoders_is_spi_defined(encoders_config_t *encoder_config);
static bool encoders_is_incremental_defined(encoders_config_t *encoder_config);
static bool encoders_is_uart_defined(void);
static bool encoders_is_spi_defined(void);
static bool encoders_is_incremental_defined(void);
static encoders_type_t encoder_type_now = ENCODERS_TYPE_NONE;
static uint32_t enc_counts = 10000;
@ -36,27 +36,25 @@ void encoders_deinit(void) {
encoder_type_now = ENCODERS_TYPE_NONE;
}
encoders_ret_t encoders_init(encoders_config_t *encoder_config) {
encoders_ret_t encoders_init(encoders_type_t encoder_type) {
if (encoder_type_now != ENCODERS_TYPE_NONE) {
return ENCODERS_ERROR;
}
if (encoder_config->encoder_type == ENCODERS_TYPE_AS504x) {
AS504x_config_t *as504x_config;
if (encoder_type == ENCODERS_TYPE_AS504x) {
encoders_ret_t encoder_ret;
if(!encoders_is_spi_defined(encoder_config))
if(!encoders_is_spi_defined())
{
return ENCODERS_ERROR;
}
as504x_config = &(encoder_config->encspi);
as504x_config->is_init = 0;
encoders_conf_ENCSPI.is_init = 0;
encoder_ret = AS504x_init(as504x_config);
encoder_ret = AS504x_init(&encoders_conf_ENCSPI);
if (ENCODERS_OK != encoder_ret || !as504x_config->is_init) {
if (ENCODERS_OK != encoder_ret || !encoders_conf_ENCSPI.is_init) {
encoder_type_now = ENCODERS_TYPE_NONE; // TODO: maybe should be deleted
index_found = false;
return ENCODERS_ERROR;
@ -64,21 +62,19 @@ encoders_ret_t encoders_init(encoders_config_t *encoder_config) {
encoder_type_now = ENCODERS_TYPE_AS504x;
index_found = true;
return ENCODERS_OK;
} else if (encoder_config->encoder_type == ENCODERS_TYPE_MT6816) {
MT6816_config_t *mt6816_config;
} else if (encoder_type == ENCODERS_TYPE_MT6816) {
encoders_ret_t encoder_ret;
if(!encoders_is_spi_defined(encoder_config))
if(!encoders_is_spi_defined())
{
return ENCODERS_ERROR;
}
mt6816_config = &(encoder_config->encspi);
mt6816_config->is_init = 0;
encoders_conf_ENCSPI.is_init = 0;
encoder_ret = MT6816_init(mt6816_config);
encoder_ret = MT6816_init(&encoders_conf_ENCSPI);
if (ENCODERS_OK != encoder_ret || !mt6816_config->is_init) {
if (ENCODERS_OK != encoder_ret || !encoders_conf_ENCSPI.is_init) {
encoder_type_now = ENCODERS_TYPE_NONE;
index_found = false;
return ENCODERS_ERROR;
@ -86,21 +82,19 @@ encoders_ret_t encoders_init(encoders_config_t *encoder_config) {
encoder_type_now = ENCODERS_TYPE_MT6816;
index_found = true;
return ENCODERS_OK;
} else if (encoder_config->encoder_type == ENCODERS_TYPE_AD2S1205_SPI) {
AD2S1205_config_t *ad2s1205_config;
} else if (encoder_type == ENCODERS_TYPE_AD2S1205_SPI) {
encoders_ret_t encoder_ret;
if(!encoders_is_spi_defined(encoder_config))
if(!encoders_is_spi_defined())
{
return ENCODERS_ERROR;
}
ad2s1205_config = &(encoder_config->encspi);
ad2s1205_config->is_init = 0;
encoders_conf_ENCSPI.is_init = 0;
encoder_ret = AD2S1205_init(ad2s1205_config);
encoder_ret = AD2S1205_init(&encoders_conf_ENCSPI);
if (ENCODERS_OK != encoder_ret || !ad2s1205_config->is_init) {
if (ENCODERS_OK != encoder_ret || !encoders_conf_ENCSPI.is_init) {
encoder_type_now = ENCODERS_TYPE_NONE;
index_found = false;
return ENCODERS_ERROR;
@ -108,21 +102,19 @@ encoders_ret_t encoders_init(encoders_config_t *encoder_config) {
encoder_type_now = ENCODERS_TYPE_AD2S1205_SPI;
index_found = true;
return ENCODERS_OK;
} else if (encoder_config->encoder_type == ENCODERS_TYPE_ABI) {
ABI_config_t *abi_config;
} else if (encoder_type == ENCODERS_TYPE_ABI) {
encoders_ret_t encoder_ret;
if(!encoders_is_incremental_defined(encoder_config))
if(!encoders_is_incremental_defined())
{
return ENCODERS_ERROR;
}
abi_config = &(encoder_config->abi);
abi_config->is_init = 0;
encoders_conf_ABI.is_init = 0;
encoder_ret = ABI_init(abi_config);
encoder_ret = ABI_init(&encoders_conf_ABI);
if (ENCODERS_OK != encoder_ret || !abi_config->is_init) {
if (ENCODERS_OK != encoder_ret || !encoders_conf_ABI.is_init) {
encoder_type_now = ENCODERS_TYPE_NONE;
index_found = false;
return ENCODERS_ERROR;
@ -130,16 +122,14 @@ encoders_ret_t encoders_init(encoders_config_t *encoder_config) {
encoder_type_now = ENCODERS_TYPE_ABI;
index_found = true;
return ENCODERS_OK;
} else if (encoder_type_now == ENCODERS_TYPE_SINCOS) {
ENCSINCOS_config_t *enc_sincos_config;
} else if (encoder_type == ENCODERS_TYPE_SINCOS) {
encoders_ret_t encoder_ret;
enc_sincos_config = &(encoder_config->encsincos);
enc_sincos_config->is_init = 0;
encoders_conf_ENCSINCOS.is_init = 0;
encoder_ret = ENC_SINCOS_init(enc_sincos_config);
encoder_ret = ENC_SINCOS_init(&encoders_conf_ENCSINCOS);
if (ENCODERS_OK != encoder_ret || !enc_sincos_config->is_init) {
if (ENCODERS_OK != encoder_ret || !encoders_conf_ENCSINCOS.is_init) {
encoder_type_now = ENCODERS_TYPE_NONE;
index_found = false;
return ENCODERS_ERROR;
@ -147,20 +137,19 @@ encoders_ret_t encoders_init(encoders_config_t *encoder_config) {
encoder_type_now = ENCODERS_TYPE_SINCOS;
index_found = true;
return ENCODERS_OK;
} else if (encoder_type_now == ENCODERS_TYPE_TS5700N8501) {
TS5700N8501_config_t *ts5700N8501_config;
} else if (encoder_type == ENCODERS_TYPE_TS5700N8501) {
encoders_ret_t encoder_ret;
if(!encoders_is_uart_defined(encoder_config))
if(!encoders_is_uart_defined())
{
return ENCODERS_ERROR;
}
ts5700N8501_config = &(encoder_config->ts5700n8501);
encoders_conf_TS5700N8501.is_init = 0;
encoder_ret = TS5700N8501_init(ts5700N8501_config);
encoder_ret = TS5700N8501_init(&encoders_conf_TS5700N8501);
if (ENCODERS_OK != encoder_ret || !ts5700N8501_config->is_init) {
if (ENCODERS_OK != encoder_ret || !encoders_conf_TS5700N8501.is_init) {
encoder_type_now = ENCODERS_TYPE_NONE;
index_found = false;
return ENCODERS_ERROR;
@ -270,6 +259,7 @@ uint32_t encoders_resolver_loss_of_signal_error_cnt(void) {
return AD2S1205_resolver_loss_of_signal_error_cnt();
}
// ABI
void encoders_set_counts(uint32_t counts) {
if (encoder_type_now == ENCODERS_TYPE_ABI)
{
@ -353,6 +343,7 @@ void encoders_reset_multiturn(void) {
}
}
// SINCOS TODO labels
uint32_t encoders_get_signal_below_min_error_cnt(void) {
if (encoder_type_now == ENCODERS_TYPE_SINCOS) {
return ENC_SINCOS_get_signal_below_min_error_cnt();
@ -378,6 +369,15 @@ float encoders_get_signal_above_max_error_rate(void) {
return 0.0;
}
void encoders_sincos_conf_set(ENCSINCOS_config_t *sincos_config)
{
encoders_conf_ENCSINCOS.s_gain = sincos_config->s_gain;
encoders_conf_ENCSINCOS.s_offset = sincos_config->s_offset;
encoders_conf_ENCSINCOS.c_gain = sincos_config->c_gain;
encoders_conf_ENCSINCOS.c_offset = sincos_config->c_offset;
encoders_conf_ENCSINCOS.filter_constant = sincos_config->filter_constant;
}
void encoders_tim_isr(void) {
if (encoder_type_now == ENCODERS_TYPE_AS504x) {
AS504x_routine();
@ -388,31 +388,31 @@ void encoders_tim_isr(void) {
}
}
static bool encoders_is_uart_defined(encoders_config_t *encoder_config)
static bool encoders_is_uart_defined(void)
{
if (!encoder_config->ts5700n8501.uart_config.gpio_RX.port
|| !encoder_config->ts5700n8501.uart_config.gpio_TX.port)
if (!encoders_conf_TS5700N8501.uart_config.gpio_RX.port
|| !encoders_conf_TS5700N8501.uart_config.gpio_TX.port)
{
return false;
}
return true;
}
static bool encoders_is_spi_defined(encoders_config_t *encoder_config)
static bool encoders_is_spi_defined(void)
{
if (!encoder_config->encspi.spi_config.gpio_miso.port
|| !encoder_config->encspi.spi_config.gpio_nss.port
|| !encoder_config->encspi.spi_config.gpio_sck.port)
if (!encoders_conf_ENCSPI.spi_config.gpio_miso.port
|| !encoders_conf_ENCSPI.spi_config.gpio_nss.port
|| !encoders_conf_ENCSPI.spi_config.gpio_sck.port)
{
return false;
}
return true;
}
static bool encoders_is_incremental_defined(encoders_config_t *encoder_config)
static bool encoders_is_incremental_defined(void)
{
if (!encoder_config->abi.incremental_config.gpio_A.port
|| !encoder_config->abi.incremental_config.gpio_B.port)
if (!encoders_conf_ABI.incremental_config.gpio_A.port
|| !encoders_conf_ABI.incremental_config.gpio_B.port)
{
return false;
}

View File

@ -7,7 +7,7 @@
// GENERIC GLOBAL
void encoders_deinit(void);
encoders_ret_t encoders_init(encoders_config_t *encoder_config);
encoders_ret_t encoders_init(encoders_type_t encoder_config);
float encoders_read_deg(void);
float encoders_read_deg_multiturn(void);
@ -39,6 +39,7 @@ uint32_t encoders_get_signal_below_min_error_cnt(void);
uint32_t encoders_get_signal_above_max_error_cnt(void);
float encoders_get_signal_below_min_error_rate(void);
float encoders_get_signal_above_max_error_rate(void);
void encoders_sincos_conf_set(ENCSINCOS_config_t *sincos_config);
//TS5700N8501
uint8_t* encoders_get_raw_status(void);

View File

@ -208,32 +208,36 @@ void mc_interface_init(void) {
mc_interface_select_motor_thread(motor_old);
// Initialize encoder
ENCSINCOS_config_t sincos_config;
switch (motor_now()->m_conf.m_sensor_port_mode) {
case SENSOR_PORT_MODE_ABI:
//TODO: integrate with encoder/encoders
conf_ABI.abi.counts = motor_now()->m_conf.m_encoder_counts;
encoders_init(&conf_ABI);
encoders_set_counts(motor_now()->m_conf.m_encoder_counts);
encoders_init(ENCODERS_TYPE_ABI);
break;
case SENSOR_PORT_MODE_AS5047_SPI:
encoders_init(&conf_AS5047);
encoders_init(ENCODERS_TYPE_AS504x);
break;
case SENSOR_PORT_MODE_MT6816_SPI:
encoders_init(&conf_MT6816);
encoders_init(ENCODERS_TYPE_MT6816);
break;
case SENSOR_PORT_MODE_AD2S1205:
encoders_init(&conf_AD2S1205);
encoders_init(ENCODERS_TYPE_AD2S1205_SPI);
break;
case SENSOR_PORT_MODE_SINCOS:
conf_SINCOS.encsincos.s_gain = motor_now()->m_conf.foc_encoder_sin_gain;
conf_SINCOS.encsincos.s_offset = motor_now()->m_conf.foc_encoder_sin_offset;
conf_SINCOS.encsincos.c_gain = motor_now()->m_conf.foc_encoder_cos_gain;
conf_SINCOS.encsincos.c_offset = motor_now()->m_conf.foc_encoder_cos_offset;
conf_SINCOS.encsincos.filter_constant = motor_now()->m_conf.foc_encoder_sincos_filter_constant;
encoders_init(&conf_SINCOS);
sincos_config.s_gain = motor_now()->m_conf.foc_encoder_sin_gain;
sincos_config.s_offset = motor_now()->m_conf.foc_encoder_sin_offset;
sincos_config.c_gain = motor_now()->m_conf.foc_encoder_cos_gain;
sincos_config.c_offset = motor_now()->m_conf.foc_encoder_cos_offset;
sincos_config.filter_constant = motor_now()->m_conf.foc_encoder_sincos_filter_constant;
encoders_sincos_conf_set(&sincos_config);
encoders_init(ENCODERS_TYPE_SINCOS);
break;
case SENSOR_PORT_MODE_TS5700N8501:
@ -249,7 +253,7 @@ void mc_interface_init(void) {
conf_general_store_app_configuration(appconf);
}
mempools_free_appconf(appconf);
encoders_init(&conf_TS5700N8501);
encoders_init(ENCODERS_TYPE_TS5700N8501);
} break;
default:
@ -343,34 +347,38 @@ void mc_interface_set_configuration(mc_configuration *configuration) {
#endif
if (motor->m_conf.m_sensor_port_mode != configuration->m_sensor_port_mode) {
ENCSINCOS_config_t sincos_config;
encoders_deinit();
switch (configuration->m_sensor_port_mode) {
case SENSOR_PORT_MODE_ABI:
// TODO: integrate with encoder/encoders
conf_ABI.abi.counts = configuration->m_encoder_counts;
encoders_init(&conf_ABI);
encoders_set_counts(configuration->m_encoder_counts);
encoders_init(ENCODERS_TYPE_ABI);
break;
case SENSOR_PORT_MODE_AS5047_SPI:
encoders_init(&conf_AS5047);
encoders_init(ENCODERS_TYPE_AS504x);
break;
case SENSOR_PORT_MODE_MT6816_SPI:
encoders_init(&conf_MT6816);
encoders_init(ENCODERS_TYPE_MT6816);
break;
case SENSOR_PORT_MODE_AD2S1205:
encoders_init(&conf_AD2S1205);
encoders_init(ENCODERS_TYPE_AD2S1205_SPI);
break;
case SENSOR_PORT_MODE_SINCOS:
conf_SINCOS.encsincos.s_gain = motor->m_conf.foc_encoder_sin_gain;
conf_SINCOS.encsincos.s_offset = motor->m_conf.foc_encoder_sin_offset;
conf_SINCOS.encsincos.c_gain = motor->m_conf.foc_encoder_cos_gain;
conf_SINCOS.encsincos.c_offset = motor->m_conf.foc_encoder_cos_offset;
conf_SINCOS.encsincos.filter_constant = motor->m_conf.foc_encoder_sincos_filter_constant;
encoders_init(&conf_SINCOS);
sincos_config.s_gain = motor->m_conf.foc_encoder_sin_gain;
sincos_config.s_offset = motor->m_conf.foc_encoder_sin_offset;
sincos_config.c_gain = motor->m_conf.foc_encoder_cos_gain;
sincos_config.c_offset = motor->m_conf.foc_encoder_cos_offset;
sincos_config.filter_constant = motor->m_conf.foc_encoder_sincos_filter_constant;
encoders_sincos_conf_set(&sincos_config);
encoders_init(ENCODERS_TYPE_SINCOS);
break;
case SENSOR_PORT_MODE_TS5700N8501:
case SENSOR_PORT_MODE_TS5700N8501_MULTITURN: {
@ -385,7 +393,7 @@ void mc_interface_set_configuration(mc_configuration *configuration) {
app_set_configuration(appconf);
}
mempools_free_appconf(appconf);
encoders_init(&conf_TS5700N8501);
encoders_init(ENCODERS_TYPE_TS5700N8501);
} break;
default:

View File

@ -274,28 +274,32 @@ static void disconnect_virtual_motor( void ){
ADC_Init(ADC1, &ADC_InitStructure);
if(m_conf->foc_sensor_mode == FOC_SENSOR_MODE_ENCODER){
ENCSINCOS_config_t sincos_config;
switch (m_conf->m_sensor_port_mode) {
case SENSOR_PORT_MODE_ABI:
conf_ABI.abi.counts = m_conf->m_encoder_counts;
encoders_init(&conf_ABI);
encoders_set_counts(m_conf->m_encoder_counts);
encoders_init(ENCODERS_TYPE_ABI);
break;
case SENSOR_PORT_MODE_AS5047_SPI:
encoders_init(&conf_AS5047);
encoders_init(ENCODERS_TYPE_AS504x);
break;
case SENSOR_PORT_MODE_AD2S1205:
encoders_init(&conf_AD2S1205);
encoders_init(ENCODERS_TYPE_AD2S1205_SPI);
break;
case SENSOR_PORT_MODE_SINCOS:
conf_SINCOS.encsincos.s_gain = m_conf->foc_encoder_sin_gain;
conf_SINCOS.encsincos.s_offset = m_conf->foc_encoder_sin_offset;
conf_SINCOS.encsincos.c_gain = m_conf->foc_encoder_cos_gain;
conf_SINCOS.encsincos.c_offset = m_conf->foc_encoder_cos_offset;
conf_SINCOS.encsincos.filter_constant = m_conf->foc_encoder_sincos_filter_constant;
encoders_init(&conf_SINCOS);
sincos_config.s_gain = m_conf->foc_encoder_sin_gain;
sincos_config.s_offset = m_conf->foc_encoder_sin_offset;
sincos_config.c_gain = m_conf->foc_encoder_cos_gain;
sincos_config.c_offset = m_conf->foc_encoder_cos_offset;
sincos_config.filter_constant = m_conf->foc_encoder_sincos_filter_constant;
encoders_sincos_conf_set(&sincos_config);
encoders_init(ENCODERS_TYPE_SINCOS);
break;
default: