mirror of https://github.com/rusefi/bldc.git
init by encoders_type_t parameter, memory use convenient structures
This commit is contained in:
parent
e4e16cad88
commit
1f8a2cebfb
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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_ */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue