mirror of https://github.com/rusefi/bldc.git
old encoder files deleted
This commit is contained in:
parent
806e7d12be
commit
4743194894
1
Makefile
1
Makefile
|
@ -146,7 +146,6 @@ CSRC = $(STARTUPSRC) \
|
|||
commands.c \
|
||||
timeout.c \
|
||||
comm_can.c \
|
||||
encoder.c \
|
||||
flash_helper.c \
|
||||
mc_interface.c \
|
||||
mcpwm_foc.c \
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
// Some useful includes
|
||||
#include "mc_interface.h"
|
||||
#include "utils.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
#include "terminal.h"
|
||||
#include "comm_can.h"
|
||||
#include "hw.h"
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
// Some useful includes
|
||||
#include "comm_can.h"
|
||||
#include "commands.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
#include "hw.h"
|
||||
#include "mc_interface.h"
|
||||
#include "terminal.h"
|
||||
|
@ -605,4 +605,4 @@ static void terminal_show_skypuff_conf(int argc, const char **argv)
|
|||
commands_printf(" rewinding force: %.2fkg (%.1fA)", (double)(config.rewinding_current / config.kg_to_amps), (double)config.rewinding_current);
|
||||
commands_printf(" slow speed: %.1fms (%.0f ERPM)", (double)erpm_to_ms(config.slow_erpm), (double)config.slow_erpm);
|
||||
commands_printf(" maximum slow force: %.2fkg (%.1fA)", (double)(config.slow_max_current / config.kg_to_amps), (double)config.slow_max_current);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#include "conf_general.h"
|
||||
#include "mc_interface.h"
|
||||
#include "utils.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
#include "terminal.h"
|
||||
#include "comm_can.h"
|
||||
#include "hw.h"
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
#include "mc_interface.h"
|
||||
#include "utils.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
#include "terminal.h"
|
||||
#include "comm_can.h"
|
||||
#include "hw.h"
|
||||
|
|
|
@ -33,7 +33,6 @@
|
|||
#include "packet.h"
|
||||
#include "hw.h"
|
||||
#include "canard_driver.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
#include "utils.h"
|
||||
#include "mempools.h"
|
||||
|
@ -1578,7 +1577,7 @@ static void decode_msg(uint32_t eid, uint8_t *data8, int len, bool is_replaced)
|
|||
case CAN_PACKET_POLL_TS5700N8501_STATUS: {
|
||||
comm_can_transmit_eid_replace(app_get_configuration()->controller_id |
|
||||
((uint32_t)CAN_PACKET_POLL_TS5700N8501_STATUS << 8),
|
||||
encoder_ts5700n8501_get_raw_status(), 8, true);
|
||||
encoders_get_raw_status(), 8, true);
|
||||
} break;
|
||||
|
||||
case CAN_PACKET_CONF_BATTERY_CUT:
|
||||
|
|
|
@ -36,7 +36,6 @@
|
|||
#include "flash_helper.h"
|
||||
#include "utils.h"
|
||||
#include "packet.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
#include "nrf_driver.h"
|
||||
#include "gpdrive.h"
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
#include "stm32f4xx_conf.h"
|
||||
#include "timeout.h"
|
||||
#include "commands.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
#include "comm_can.h"
|
||||
#include "app.h"
|
||||
|
|
88
encoder.h
88
encoder.h
|
@ -1,88 +0,0 @@
|
|||
/*
|
||||
Copyright 2016 Benjamin Vedder benjamin@vedder.se
|
||||
|
||||
This file is part of the VESC firmware.
|
||||
|
||||
The VESC firmware is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
The VESC firmware is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef ENCODER_H_
|
||||
#define ENCODER_H_
|
||||
|
||||
#include "conf_general.h"
|
||||
|
||||
// Functions
|
||||
void encoder_deinit(void);
|
||||
void encoder_init_abi(uint32_t counts);
|
||||
void encoder_init_as5047p_spi(void);
|
||||
void encoder_init_mt6816_spi(void);
|
||||
void encoder_init_ad2s1205_spi(void);
|
||||
void encoder_init_sincos(float sin_gain, float sin_offset,
|
||||
float cos_gain, float cos_offset, float sincos_filter_constant);
|
||||
void encoder_init_ts5700n8501(void);
|
||||
bool encoder_is_configured(void);
|
||||
float encoder_read_deg(void);
|
||||
float encoder_read_deg_multiturn(void);
|
||||
void encoder_reset(void);
|
||||
void encoder_tim_isr(void);
|
||||
void encoder_set_counts(uint32_t counts);
|
||||
bool encoder_index_found(void);
|
||||
|
||||
uint32_t encoder_spi_get_val(void);
|
||||
uint32_t encoder_spi_get_error_cnt(void);
|
||||
float encoder_spi_get_error_rate(void);
|
||||
uint32_t encoder_get_no_magnet_error_cnt(void);
|
||||
float encoder_get_no_magnet_error_rate(void);
|
||||
uint32_t encoder_resolver_loss_of_tracking_error_cnt(void);
|
||||
uint32_t encoder_resolver_degradation_of_signal_error_cnt(void);
|
||||
uint32_t encoder_resolver_loss_of_signal_error_cnt(void);
|
||||
float encoder_resolver_loss_of_tracking_error_rate(void);
|
||||
float encoder_resolver_degradation_of_signal_error_rate(void);
|
||||
float encoder_resolver_loss_of_signal_error_rate(void);
|
||||
uint32_t encoder_sincos_get_signal_below_min_error_cnt(void);
|
||||
uint32_t encoder_sincos_get_signal_above_max_error_cnt(void);
|
||||
float encoder_sincos_get_signal_below_min_error_rate(void);
|
||||
float encoder_sincos_get_signal_above_max_error_rate(void);
|
||||
uint8_t* encoder_ts5700n8501_get_raw_status(void);
|
||||
int16_t encoder_ts57n8501_get_abm(void);
|
||||
void encoder_ts57n8501_reset_errors(void);
|
||||
void encoder_ts57n8501_reset_multiturn(void);
|
||||
AS504x_diag encoder_AS504x_get_diag(void);
|
||||
|
||||
#define AS504x_SPI_READ_BIT 0x4000
|
||||
#define AS504x_SPI_WRITE_BIT 0x0000
|
||||
|
||||
#define AS504x_SPI_DIAG_OCF_BIT_POS 8
|
||||
#define AS504x_SPI_DIAG_COF_BIT_POS 9
|
||||
#define AS504x_SPI_DIAG_COMP_LOW_BIT_POS 10
|
||||
#define AS504x_SPI_DIAG_COMP_HIGH_BIT_POS 11
|
||||
|
||||
|
||||
#define AS504x_SPI_EXCLUDE_PARITY_AND_ERROR_BITMASK 0x3FFF
|
||||
|
||||
|
||||
#define AS504x_SPI_DIAG_ADR 0x3FFD
|
||||
#define AS504x_SPI_MAGN_ADR 0x3FFE
|
||||
#define AS504x_SPI_CLEAR_ERROR_ADR 0x0001
|
||||
|
||||
#define AS504x_SPI_READ_DIAG_MSG (AS504x_SPI_DIAG_ADR | AS504x_SPI_READ_BIT)
|
||||
#define AS504x_SPI_READ_MAGN_MSG (AS504x_SPI_MAGN_ADR | AS504x_SPI_READ_BIT)
|
||||
#define AS504x_SPI_READ_CLEAR_ERROR_MSG (AS504x_SPI_CLEAR_ERROR_ADR | AS504x_SPI_READ_BIT)
|
||||
|
||||
#define AS504x_CONNECTION_DETERMINATOR_ERROR_THRESHOLD 5
|
||||
|
||||
#define AS504x_DATA_INVALID_THRESHOLD 20000
|
||||
#define AS504x_REFRESH_DIAG_AFTER_NSAMPLES 100
|
||||
|
||||
#endif /* ENCODER_H_ */
|
|
@ -73,11 +73,12 @@ encoders_ret_t ABI_init(ABI_config_t *abi_config) {
|
|||
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
||||
EXTI_Init(&EXTI_InitStructure);
|
||||
|
||||
abi_config->is_init = 1;
|
||||
abi_config_now = *abi_config;
|
||||
|
||||
// Enable and set EXTI Line Interrupt to the highest priority
|
||||
nvicEnableVector(HW_ENC_EXTI_CH, 0);
|
||||
abi_config->is_init = 1;
|
||||
|
||||
abi_config_now = *abi_config;
|
||||
return ENCODERS_OK;
|
||||
}
|
||||
|
||||
|
@ -86,3 +87,10 @@ float ABI_read_deg(void) {
|
|||
return last_enc_angle;
|
||||
}
|
||||
|
||||
void ABI_set_counts(uint32_t counts) {
|
||||
if (counts != enc_counts) {
|
||||
enc_counts = counts;
|
||||
TIM_SetAutoreload(HW_ENC_TIM, enc_counts - 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,4 +10,6 @@ encoders_ret_t ABI_init(ABI_config_t *abi_config);
|
|||
|
||||
float ABI_read_deg(void);
|
||||
|
||||
void ABI_set_counts(uint32_t counts);
|
||||
|
||||
#endif /* ENCODER_ABI_H_ */
|
||||
|
|
|
@ -94,8 +94,6 @@ encoders_ret_t AD2S1205_init(AD2S1205_config_t *AD2S1205_config) {
|
|||
palSetPad(AD2S1205_RDVEL_GPIO, AD2S1205_RDVEL_PIN); // Will always read position
|
||||
#endif
|
||||
|
||||
AD2S1205_config_now = *AD2S1205_config;
|
||||
|
||||
// Enable timer clock
|
||||
HW_ENC_TIM_CLK_EN();
|
||||
|
||||
|
@ -110,18 +108,21 @@ encoders_ret_t AD2S1205_init(AD2S1205_config_t *AD2S1205_config) {
|
|||
|
||||
// Enable overflow interrupt
|
||||
TIM_ITConfig(HW_ENC_TIM, TIM_IT_Update, ENABLE);
|
||||
|
||||
// Enable timer
|
||||
TIM_Cmd(HW_ENC_TIM, ENABLE);
|
||||
|
||||
AD2S1205_config->is_init = 1;
|
||||
AD2S1205_config_now = *AD2S1205_config;
|
||||
|
||||
nvicEnableVector(HW_ENC_TIM_ISR_CH, 6);
|
||||
|
||||
AD2S1205_config_now.is_init = 1;
|
||||
AD2S1205_config->is_init = 1;
|
||||
|
||||
return ENCODERS_OK;
|
||||
}
|
||||
|
||||
float AD2S1205_read_deg(void) {
|
||||
return last_enc_angle;
|
||||
}
|
||||
|
||||
void AD2S1205_routine(void) {
|
||||
uint16_t pos;
|
||||
// SAMPLE signal should have been be asserted in sync with ADC sampling
|
||||
|
@ -233,10 +234,6 @@ uint32_t AD2S1205_spi_get_error_cnt(void) {
|
|||
return spi_error_cnt;
|
||||
}
|
||||
|
||||
float AD2S1205_read_deg(void) {
|
||||
return last_enc_angle;
|
||||
}
|
||||
|
||||
static void spi_transfer(uint16_t *in_buf, const uint16_t *out_buf, int length) {
|
||||
const encoders_gpio_t gpio_miso = AD2S1205_config_now.spi_config.gpio_miso;
|
||||
#if AS504x_USE_SW_MOSI_PIN || AS5047_USE_HW_SPI_PINS
|
||||
|
|
|
@ -11,7 +11,6 @@ encoders_ret_t AD2S1205_init(AD2S1205_config_t *AD2S1205_config);
|
|||
float AD2S1205_read_deg(void);
|
||||
void AD2S1205_routine(void);
|
||||
|
||||
bool AD2S1205_index_found(void);
|
||||
float AD2S1205_resolver_loss_of_tracking_error_rate(void);
|
||||
float AD2S1205_resolver_degradation_of_signal_error_rate(void);
|
||||
float AD2S1205_resolver_loss_of_signal_error_rate(void);
|
||||
|
|
|
@ -9,6 +9,31 @@
|
|||
#include "utils.h"
|
||||
#include <math.h>
|
||||
|
||||
#define AS504x_SPI_READ_BIT 0x4000
|
||||
#define AS504x_SPI_WRITE_BIT 0x0000
|
||||
|
||||
#define AS504x_SPI_DIAG_OCF_BIT_POS 8
|
||||
#define AS504x_SPI_DIAG_COF_BIT_POS 9
|
||||
#define AS504x_SPI_DIAG_COMP_LOW_BIT_POS 10
|
||||
#define AS504x_SPI_DIAG_COMP_HIGH_BIT_POS 11
|
||||
|
||||
#define AS5047_SAMPLE_RATE_HZ 20000
|
||||
|
||||
#define AS504x_SPI_EXCLUDE_PARITY_AND_ERROR_BITMASK 0x3FFF
|
||||
|
||||
#define AS504x_SPI_DIAG_ADR 0x3FFD
|
||||
#define AS504x_SPI_MAGN_ADR 0x3FFE
|
||||
#define AS504x_SPI_CLEAR_ERROR_ADR 0x0001
|
||||
|
||||
#define AS504x_SPI_READ_DIAG_MSG (AS504x_SPI_DIAG_ADR | AS504x_SPI_READ_BIT)
|
||||
#define AS504x_SPI_READ_MAGN_MSG (AS504x_SPI_MAGN_ADR | AS504x_SPI_READ_BIT)
|
||||
#define AS504x_SPI_READ_CLEAR_ERROR_MSG (AS504x_SPI_CLEAR_ERROR_ADR | AS504x_SPI_READ_BIT)
|
||||
|
||||
#define AS504x_CONNECTION_DETERMINATOR_ERROR_THRESHOLD 5
|
||||
|
||||
#define AS504x_DATA_INVALID_THRESHOLD 20000
|
||||
#define AS504x_REFRESH_DIAG_AFTER_NSAMPLES 100
|
||||
|
||||
//Private variables
|
||||
#if AS504x_USE_SW_MOSI_PIN || AS5047_USE_HW_SPI_PINS
|
||||
static uint16_t AS504x_diag_fetch_now_count = 0;
|
||||
|
@ -181,8 +206,6 @@ encoders_ret_t AS504x_init(AS504x_config_t *AS504x_config) {
|
|||
AS504x_spi_config.gpio_mosi.pin);
|
||||
#endif
|
||||
|
||||
AS504x_config_now = *AS504x_config;
|
||||
|
||||
HW_ENC_TIM_CLK_EN();
|
||||
|
||||
// Time Base configuration
|
||||
|
@ -198,12 +221,13 @@ encoders_ret_t AS504x_init(AS504x_config_t *AS504x_config) {
|
|||
TIM_ITConfig(HW_ENC_TIM, TIM_IT_Update, ENABLE);
|
||||
// Enable timer
|
||||
TIM_Cmd(HW_ENC_TIM, ENABLE);
|
||||
|
||||
AS504x_config->is_init = 1;
|
||||
AS504x_config_now = *AS504x_config;
|
||||
|
||||
nvicEnableVector(HW_ENC_TIM_ISR_CH, 6);
|
||||
|
||||
spi_error_rate = 0.0;
|
||||
|
||||
AS504x_config_now.is_init = 1;
|
||||
AS504x_config->is_init = 1;
|
||||
return ENCODERS_OK;
|
||||
}
|
||||
#if (AS504x_USE_SW_MOSI_PIN || AS5047_USE_HW_SPI_PINS)
|
||||
|
|
|
@ -5,39 +5,14 @@
|
|||
#include "datatypes.h"
|
||||
#include "encoder/encoder_datatype.h"
|
||||
|
||||
void AS504x_routine(void);
|
||||
float AS504x_read_deg(void);
|
||||
void AS504x_deinit(void);
|
||||
encoders_ret_t AS504x_init(AS504x_config_t *AS504x_config);
|
||||
|
||||
float AS504x_read_deg(void);
|
||||
void AS504x_routine(void);
|
||||
|
||||
AS504x_diag AS504x_get_diag(void);
|
||||
bool AS504x_index_found(void);
|
||||
float AS504x_spi_get_error_rate(void);
|
||||
uint32_t AS504x_spi_get_val(void);
|
||||
uint32_t AS504x_spi_get_error_cnt(void);
|
||||
|
||||
#define AS504x_SPI_READ_BIT 0x4000
|
||||
#define AS504x_SPI_WRITE_BIT 0x0000
|
||||
|
||||
#define AS504x_SPI_DIAG_OCF_BIT_POS 8
|
||||
#define AS504x_SPI_DIAG_COF_BIT_POS 9
|
||||
#define AS504x_SPI_DIAG_COMP_LOW_BIT_POS 10
|
||||
#define AS504x_SPI_DIAG_COMP_HIGH_BIT_POS 11
|
||||
|
||||
#define AS5047_SAMPLE_RATE_HZ 20000
|
||||
|
||||
#define AS504x_SPI_EXCLUDE_PARITY_AND_ERROR_BITMASK 0x3FFF
|
||||
|
||||
#define AS504x_SPI_DIAG_ADR 0x3FFD
|
||||
#define AS504x_SPI_MAGN_ADR 0x3FFE
|
||||
#define AS504x_SPI_CLEAR_ERROR_ADR 0x0001
|
||||
|
||||
#define AS504x_SPI_READ_DIAG_MSG (AS504x_SPI_DIAG_ADR | AS504x_SPI_READ_BIT)
|
||||
#define AS504x_SPI_READ_MAGN_MSG (AS504x_SPI_MAGN_ADR | AS504x_SPI_READ_BIT)
|
||||
#define AS504x_SPI_READ_CLEAR_ERROR_MSG (AS504x_SPI_CLEAR_ERROR_ADR | AS504x_SPI_READ_BIT)
|
||||
|
||||
#define AS504x_CONNECTION_DETERMINATOR_ERROR_THRESHOLD 5
|
||||
|
||||
#define AS504x_DATA_INVALID_THRESHOLD 20000
|
||||
#define AS504x_REFRESH_DIAG_AFTER_NSAMPLES 100
|
||||
|
||||
#endif /* ENCODER_AS504X_H_ */
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "mc_interface.h"
|
||||
#include "utils.h"
|
||||
#include <math.h>
|
||||
#include "encoder/encoder_hwconf.h"
|
||||
|
||||
ENCSINCOS_config_t enc_sincos_config_now = { 0 };
|
||||
|
||||
|
@ -47,6 +48,7 @@ encoders_ret_t ENC_SINCOS_init(ENCSINCOS_config_t *enc_sincos_config) {
|
|||
// ADC measurements needs to be in sync with motor PWM
|
||||
#ifdef HW_HAS_SIN_COS_ENCODER
|
||||
enc_sincos_config->is_init = 1;
|
||||
enc_sincos_config_now = *enc_sincos_config;
|
||||
return ENCODERS_OK;
|
||||
#else
|
||||
enc_sincos_config->is_init = 0;
|
||||
|
@ -84,3 +86,19 @@ float ENC_SINCOS_read_deg(void) {
|
|||
#endif
|
||||
return last_enc_angle;
|
||||
}
|
||||
|
||||
uint32_t ENC_SINCOS_get_signal_below_min_error_cnt(void) {
|
||||
return sincos_signal_below_min_error_cnt;
|
||||
}
|
||||
|
||||
uint32_t ENC_SINCOS_get_signal_above_max_error_cnt(void) {
|
||||
return sincos_signal_above_max_error_cnt;
|
||||
}
|
||||
|
||||
float ENC_SINCOS_get_signal_below_min_error_rate(void) {
|
||||
return sincos_signal_low_error_rate;
|
||||
}
|
||||
|
||||
float ENC_SINCOS_get_signal_above_max_error_rate(void) {
|
||||
return sincos_signal_above_max_error_rate;
|
||||
}
|
||||
|
|
|
@ -10,4 +10,9 @@ encoders_ret_t ENC_SINCOS_init(ENCSINCOS_config_t *enc_sincos_config);
|
|||
|
||||
float ENC_SINCOS_read_deg(void);
|
||||
|
||||
uint32_t ENC_SINCOS_get_signal_below_min_error_cnt(void);
|
||||
uint32_t ENC_SINCOS_get_signal_above_max_error_cnt(void);
|
||||
float ENC_SINCOS_get_signal_below_min_error_rate(void);
|
||||
float ENC_SINCOS_get_signal_above_max_error_rate(void);
|
||||
|
||||
#endif /* ENCODER_ENC_SINCOS_H_ */
|
||||
|
|
|
@ -47,9 +47,6 @@ void MT6816_deinit(void) {
|
|||
spiStop(&HW_SPI_DEV);
|
||||
#endif
|
||||
|
||||
//palSetPadMode(HW_HALL_ENC_GPIO1, HW_HALL_ENC_PIN1, PAL_MODE_INPUT_PULLUP); //TODO: is this necessary
|
||||
//palSetPadMode(HW_HALL_ENC_GPIO2, HW_HALL_ENC_PIN2, PAL_MODE_INPUT_PULLUP); //TODO: is this necessary
|
||||
|
||||
palSetPadMode(mt6816_config_now.spi_config.gpio_miso.port,
|
||||
mt6816_config_now.spi_config.gpio_miso.pin, PAL_MODE_INPUT_PULLUP);
|
||||
palSetPadMode(mt6816_config_now.spi_config.gpio_sck.port,
|
||||
|
@ -112,6 +109,11 @@ encoders_ret_t MT6816_init(MT6816_config_t *mt6816_config) {
|
|||
#endif
|
||||
return ENCODERS_OK;
|
||||
}
|
||||
|
||||
float MT6816_read_deg(void) {
|
||||
return last_enc_angle;
|
||||
}
|
||||
|
||||
void MT6816_routine(void) {
|
||||
uint16_t pos;
|
||||
uint16_t reg_data_03;
|
||||
|
@ -167,10 +169,6 @@ uint32_t MT6816_get_no_magnet_error_rate(void) {
|
|||
return encoder_no_magnet_error_rate;
|
||||
}
|
||||
|
||||
float MT6816_read_deg(void) {
|
||||
return last_enc_angle;
|
||||
}
|
||||
|
||||
static void spi_begin(void) {
|
||||
palClearPad(mt6816_config_now.spi_config.gpio_nss.port,
|
||||
mt6816_config_now.spi_config.gpio_nss.pin);
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
|
||||
void MT6816_deinit(void);
|
||||
encoders_ret_t MT6816_init(MT6816_config_t *mt6816_config);
|
||||
void MT6816_routine(void);
|
||||
|
||||
float MT6816_read_deg(void);
|
||||
void MT6816_routine(void);
|
||||
|
||||
uint32_t MT6816_spi_get_val(void);
|
||||
uint32_t MT6816_spi_get_error_cnt(void);
|
||||
|
|
|
@ -6,6 +6,15 @@
|
|||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#define AS5047_SAMPLE_RATE_HZ 20000
|
||||
#define AD2S1205_SAMPLE_RATE_HZ 20000 //25MHz max spi clk
|
||||
#define TS5700N8501_SAMPLE_RATE_HZ 20000
|
||||
#define MT6816_SAMPLE_RATE_HZ 20000
|
||||
#define MT6816_NO_MAGNET_ERROR_MASK 0x0002
|
||||
#define SINCOS_SAMPLE_RATE_HZ 20000
|
||||
#define SINCOS_MIN_AMPLITUDE 1.0 // sqrt(sin^2 + cos^2) has to be larger than this
|
||||
#define SINCOS_MAX_AMPLITUDE 1.65 // sqrt(sin^2 + cos^2) has to be smaller than this
|
||||
|
||||
typedef uint8_t encoders_pin_t;
|
||||
typedef uint32_t encoders_refresh_rate_hz_t;
|
||||
|
||||
|
@ -88,5 +97,18 @@ typedef struct {
|
|||
ENCSINCOS_config_t encsincos;
|
||||
TS5700N8501_config_t ts5700n8501;
|
||||
} encoders_config_t;
|
||||
|
||||
/*
|
||||
typedef struct {
|
||||
uint8_t is_connected;
|
||||
uint8_t AGC_value;
|
||||
uint16_t magnitude;
|
||||
uint8_t is_OCF;
|
||||
uint8_t is_COF;
|
||||
uint8_t is_Comp_low;
|
||||
uint8_t is_Comp_high;
|
||||
uint16_t serial_diag_flgs;
|
||||
uint16_t serial_magnitude;
|
||||
uint16_t serial_error_flags;
|
||||
}AS504x_diag;
|
||||
*/
|
||||
#endif /* ENCODER_ENCODER_DATATYPE_H_ */
|
||||
|
|
|
@ -4,15 +4,6 @@
|
|||
#include "encoder/encoder_datatype.h"
|
||||
#include "hw.h"
|
||||
|
||||
#define AS5047_SAMPLE_RATE_HZ 20000
|
||||
#define AD2S1205_SAMPLE_RATE_HZ 20000 //25MHz max spi clk
|
||||
#define TS5700N8501_SAMPLE_RATE_HZ 20000
|
||||
#define MT6816_SAMPLE_RATE_HZ 20000
|
||||
#define MT6816_NO_MAGNET_ERROR_MASK 0x0002
|
||||
#define SINCOS_SAMPLE_RATE_HZ 20000
|
||||
#define SINCOS_MIN_AMPLITUDE 1.0 // sqrt(sin^2 + cos^2) has to be larger than this
|
||||
#define SINCOS_MAX_AMPLITUDE 1.65 // sqrt(sin^2 + cos^2) has to be smaller than this
|
||||
|
||||
extern encoders_config_t conf_AS5047;
|
||||
extern encoders_config_t conf_MT6816;
|
||||
extern encoders_config_t conf_AD2S1205;
|
||||
|
|
|
@ -1,12 +1,42 @@
|
|||
#include "encoders.h"
|
||||
|
||||
static encoders_type_t encoder_type_now = ENCODERS_TYPE_NONE; // TODO: CHANGE TO encoder_config_now
|
||||
#include "encoder/AS504x.h"
|
||||
#include "encoder/MT6816.h"
|
||||
#include "encoder/AD2S1205.h"
|
||||
#include "encoder/encoder_hwconf.h"
|
||||
#include "encoder/ABI.h"
|
||||
#include "encoder/ENC_SINCOS.h"
|
||||
#include "encoder/TS5700N8501.h"
|
||||
|
||||
#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 encoders_type_t encoder_type_now = ENCODERS_TYPE_NONE;
|
||||
static uint32_t enc_counts = 10000;
|
||||
static bool index_found = false;
|
||||
|
||||
encoders_ret_t encoders_init(encoders_config_t *encoder_config) {
|
||||
void encoders_deinit(void) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_AS504x) {
|
||||
AS504x_deinit();
|
||||
} else if (encoder_type_now == ENCODERS_TYPE_MT6816) {
|
||||
MT6816_deinit();
|
||||
} else if (encoder_type_now == ENCODERS_TYPE_AD2S1205_SPI) {
|
||||
AD2S1205_deinit();
|
||||
} else if (encoder_type_now == ENCODERS_TYPE_ABI) {
|
||||
ABI_deinit();
|
||||
} else if (encoder_type_now == ENCODERS_TYPE_SINCOS) {
|
||||
ENC_SINCOS_deinit();
|
||||
} else if (encoder_type_now == ENCODERS_TYPE_TS5700N8501) {
|
||||
TS5700N8501_deinit();
|
||||
}
|
||||
|
||||
//TODO: ASSERTS
|
||||
encoder_type_now = ENCODERS_TYPE_NONE;
|
||||
}
|
||||
|
||||
encoders_ret_t encoders_init(encoders_config_t *encoder_config) {
|
||||
|
||||
if (encoder_type_now != ENCODERS_TYPE_NONE) {
|
||||
return ENCODERS_ERROR;
|
||||
|
@ -16,6 +46,11 @@ encoders_ret_t encoders_init(encoders_config_t *encoder_config) {
|
|||
AS504x_config_t *as504x_config;
|
||||
encoders_ret_t encoder_ret;
|
||||
|
||||
if(!encoders_is_spi_defined(encoder_config))
|
||||
{
|
||||
return ENCODERS_ERROR;
|
||||
}
|
||||
|
||||
as504x_config = &(encoder_config->encspi);
|
||||
as504x_config->is_init = 0;
|
||||
|
||||
|
@ -33,6 +68,11 @@ encoders_ret_t encoders_init(encoders_config_t *encoder_config) {
|
|||
MT6816_config_t *mt6816_config;
|
||||
encoders_ret_t encoder_ret;
|
||||
|
||||
if(!encoders_is_spi_defined(encoder_config))
|
||||
{
|
||||
return ENCODERS_ERROR;
|
||||
}
|
||||
|
||||
mt6816_config = &(encoder_config->encspi);
|
||||
mt6816_config->is_init = 0;
|
||||
|
||||
|
@ -50,6 +90,11 @@ encoders_ret_t encoders_init(encoders_config_t *encoder_config) {
|
|||
AD2S1205_config_t *ad2s1205_config;
|
||||
encoders_ret_t encoder_ret;
|
||||
|
||||
if(!encoders_is_spi_defined(encoder_config))
|
||||
{
|
||||
return ENCODERS_ERROR;
|
||||
}
|
||||
|
||||
ad2s1205_config = &(encoder_config->encspi);
|
||||
ad2s1205_config->is_init = 0;
|
||||
|
||||
|
@ -67,6 +112,11 @@ encoders_ret_t encoders_init(encoders_config_t *encoder_config) {
|
|||
ABI_config_t *abi_config;
|
||||
encoders_ret_t encoder_ret;
|
||||
|
||||
if(!encoders_is_incremental_defined(encoder_config))
|
||||
{
|
||||
return ENCODERS_ERROR;
|
||||
}
|
||||
|
||||
abi_config = &(encoder_config->abi);
|
||||
abi_config->is_init = 0;
|
||||
|
||||
|
@ -101,6 +151,11 @@ encoders_ret_t encoders_init(encoders_config_t *encoder_config) {
|
|||
TS5700N8501_config_t *ts5700N8501_config;
|
||||
encoders_ret_t encoder_ret;
|
||||
|
||||
if(!encoders_is_uart_defined(encoder_config))
|
||||
{
|
||||
return ENCODERS_ERROR;
|
||||
}
|
||||
|
||||
ts5700N8501_config = &(encoder_config->ts5700n8501);
|
||||
|
||||
encoder_ret = TS5700N8501_init(ts5700N8501_config);
|
||||
|
@ -137,6 +192,23 @@ float encoders_read_deg(void) {
|
|||
return 0.0;
|
||||
}
|
||||
|
||||
float encoders_read_deg_multiturn(void) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_TS5700N8501) {
|
||||
encoders_get_abm();
|
||||
float ts_mt = (float)encoders_get_abm();
|
||||
if (fabsf(ts_mt) > 5000.0) {
|
||||
ts_mt = 0;
|
||||
encoders_reset_multiturn();
|
||||
}
|
||||
|
||||
ts_mt += 5000;
|
||||
|
||||
return encoders_read_deg() / 10000.0 + (360 * ts_mt) / 10000.0;
|
||||
} else {
|
||||
return encoders_read_deg();
|
||||
}
|
||||
}
|
||||
|
||||
encoders_type_t encoders_is_configured(void) {
|
||||
return encoder_type_now;
|
||||
}
|
||||
|
@ -145,24 +217,6 @@ bool encoders_index_found(void) {
|
|||
return index_found;
|
||||
}
|
||||
|
||||
void encoders_deinit(void) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_AS504x) {
|
||||
AS504x_deinit();
|
||||
} else if (encoder_type_now == ENCODERS_TYPE_MT6816) {
|
||||
MT6816_deinit();
|
||||
} else if (encoder_type_now == ENCODERS_TYPE_AD2S1205_SPI) {
|
||||
AD2S1205_deinit();
|
||||
} else if (encoder_type_now == ENCODERS_TYPE_ABI) {
|
||||
ABI_deinit();
|
||||
} else if (encoder_type_now == ENCODERS_TYPE_SINCOS) {
|
||||
ENC_SINCOS_deinit();
|
||||
} else if (encoder_type_now == ENCODERS_TYPE_TS5700N8501) {
|
||||
TS5700N8501_deinit();
|
||||
}
|
||||
|
||||
encoder_type_now = ENCODERS_TYPE_NONE;
|
||||
}
|
||||
|
||||
float encoders_spi_get_error_rate(void) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_AS504x) {
|
||||
return AS504x_spi_get_error_rate();
|
||||
|
@ -216,6 +270,14 @@ uint32_t encoders_resolver_loss_of_signal_error_cnt(void) {
|
|||
return AD2S1205_resolver_loss_of_signal_error_cnt();
|
||||
}
|
||||
|
||||
void encoders_set_counts(uint32_t counts) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_ABI)
|
||||
{
|
||||
ABI_set_counts(counts);
|
||||
index_found = false;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t encoders_spi_get_val(void) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_AS504x) {
|
||||
return AS504x_spi_get_val();
|
||||
|
@ -257,6 +319,65 @@ void encoders_reset(void) {
|
|||
}
|
||||
}
|
||||
|
||||
AS504x_diag encoders_get_diag(void) {
|
||||
AS504x_diag diag = {0};
|
||||
if (encoder_type_now == ENCODERS_TYPE_AS504x) {
|
||||
diag = AS504x_get_diag();
|
||||
}
|
||||
return diag;
|
||||
}
|
||||
|
||||
uint8_t* encoders_get_raw_status(void) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_TS5700N8501) {
|
||||
return TS5700N8501_get_raw_status();
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int16_t encoders_get_abm(void) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_TS5700N8501) {
|
||||
return TS5700N8501_get_abm();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void encoders_reset_errors(void) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_TS5700N8501) {
|
||||
return TS5700N8501_reset_errors();
|
||||
}
|
||||
}
|
||||
|
||||
void encoders_reset_multiturn(void) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_TS5700N8501) {
|
||||
return TS5700N8501_reset_multiturn();
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
uint32_t encoders_get_signal_above_max_error_cnt(void) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_SINCOS) {
|
||||
return ENC_SINCOS_get_signal_above_max_error_cnt();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
float encoders_get_signal_below_min_error_rate(void) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_SINCOS) {
|
||||
return ENC_SINCOS_get_signal_below_min_error_rate();
|
||||
}
|
||||
return 0.0;
|
||||
}
|
||||
float encoders_get_signal_above_max_error_rate(void) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_SINCOS) {
|
||||
return ENC_SINCOS_get_signal_above_max_error_rate();
|
||||
}
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
void encoders_tim_isr(void) {
|
||||
if (encoder_type_now == ENCODERS_TYPE_AS504x) {
|
||||
AS504x_routine();
|
||||
|
@ -267,3 +388,34 @@ void encoders_tim_isr(void) {
|
|||
}
|
||||
}
|
||||
|
||||
static bool encoders_is_uart_defined(encoders_config_t *encoder_config)
|
||||
{
|
||||
if (!encoder_config->ts5700n8501.uart_config.gpio_RX.port
|
||||
|| !encoder_config->ts5700n8501.uart_config.gpio_TX.port)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool encoders_is_spi_defined(encoders_config_t *encoder_config)
|
||||
{
|
||||
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)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool encoders_is_incremental_defined(encoders_config_t *encoder_config)
|
||||
{
|
||||
if (!encoder_config->abi.incremental_config.gpio_A.port
|
||||
|| !encoder_config->abi.incremental_config.gpio_B.port)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,36 +2,55 @@
|
|||
#define ENCODER_ENCODERS_H_
|
||||
|
||||
#include "encoder_datatype.h"
|
||||
#include "encoder/AS504x.h"
|
||||
#include "encoder/MT6816.h"
|
||||
#include "encoder/AD2S1205.h"
|
||||
#include "encoder/encoder_hwconf.h"
|
||||
#include "encoder/ABI.h"
|
||||
#include "encoder/ENC_SINCOS.h"
|
||||
#include "encoder/TS5700N8501.h"
|
||||
#include "hal.h"
|
||||
|
||||
// GENERIC GLOBAL
|
||||
void encoders_deinit(void);
|
||||
encoders_ret_t encoders_init(encoders_config_t *encoder_config);
|
||||
|
||||
float encoders_read_deg(void);
|
||||
float encoders_read_deg_multiturn(void);
|
||||
encoders_type_t encoders_is_configured(void);
|
||||
bool encoders_index_found(void);
|
||||
void encoders_reset_multiturn(void);
|
||||
|
||||
// SPECIFIC GLOBAL
|
||||
bool encoders_index_found(void);
|
||||
float encoders_spi_get_error_rate(void);
|
||||
uint32_t encoders_spi_get_error_cnt(void);
|
||||
uint32_t encoders_get_no_magnet_error_cnt(void);
|
||||
|
||||
//AD2S1205
|
||||
float encoders_resolver_loss_of_tracking_error_rate(void);
|
||||
float encoders_resolver_degradation_of_signal_error_rate(void);
|
||||
float encoders_resolver_loss_of_signal_error_rate(void);
|
||||
uint32_t encoders_resolver_loss_of_tracking_error_cnt(void);
|
||||
uint32_t encoders_resolver_degradation_of_signal_error_cnt(void);
|
||||
uint32_t encoders_resolver_loss_of_signal_error_cnt(void);
|
||||
float encoders_get_no_magnet_error_rate(void);
|
||||
uint32_t encoders_spi_get_val(void);
|
||||
|
||||
void encoders_tim_isr(void);
|
||||
//ABI
|
||||
void encoders_set_counts(uint32_t counts);
|
||||
|
||||
//MT6816
|
||||
float encoders_get_no_magnet_error_rate(void);
|
||||
uint32_t encoders_get_no_magnet_error_cnt(void);
|
||||
|
||||
//AS504x
|
||||
AS504x_diag encoders_get_diag(void);
|
||||
|
||||
//SINCOS
|
||||
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);
|
||||
|
||||
//TS5700N8501
|
||||
uint8_t* encoders_get_raw_status(void);
|
||||
int16_t encoders_get_abm(void);
|
||||
void encoders_reset_errors(void);
|
||||
|
||||
//SPI ENCODERS
|
||||
uint32_t encoders_spi_get_val(void);
|
||||
float encoders_spi_get_error_rate(void);
|
||||
uint32_t encoders_spi_get_error_cnt(void);
|
||||
|
||||
void encoders_reset(void);
|
||||
void encoders_tim_isr(void);
|
||||
|
||||
#endif /* ENCODER_ENCODERS_H_ */
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
#include "mc_interface.h"
|
||||
#include "mcpwm_foc.h"
|
||||
#include "hw.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
|
||||
CH_IRQ_HANDLER(ADC1_2_3_IRQHandler) {
|
||||
|
|
1
main.c
1
main.c
|
@ -39,7 +39,6 @@
|
|||
#include "commands.h"
|
||||
#include "timeout.h"
|
||||
#include "comm_can.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
#include "servo_simple.h"
|
||||
#include "utils.h"
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "commands.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
#include "buffer.h"
|
||||
#include "gpdrive.h"
|
||||
|
@ -348,7 +347,8 @@ void mc_interface_set_configuration(mc_configuration *configuration) {
|
|||
switch (configuration->m_sensor_port_mode) {
|
||||
case SENSOR_PORT_MODE_ABI:
|
||||
// TODO: integrate with encoder/encoders
|
||||
encoder_init_abi(configuration->m_encoder_counts);
|
||||
conf_ABI.abi.counts = configuration->m_encoder_counts;
|
||||
encoders_init(&conf_ABI);
|
||||
break;
|
||||
|
||||
case SENSOR_PORT_MODE_AS5047_SPI:
|
||||
|
@ -364,12 +364,14 @@ void mc_interface_set_configuration(mc_configuration *configuration) {
|
|||
break;
|
||||
|
||||
case SENSOR_PORT_MODE_SINCOS:
|
||||
// TODO: integrate with encoder/encoders
|
||||
encoder_init_sincos(motor->m_conf.foc_encoder_sin_gain, motor->m_conf.foc_encoder_sin_offset,
|
||||
motor->m_conf.foc_encoder_cos_gain, motor->m_conf.foc_encoder_cos_offset,
|
||||
motor->m_conf.foc_encoder_sincos_filter_constant);
|
||||
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);
|
||||
break;
|
||||
// TODO: integrate with encoder/encoders
|
||||
case SENSOR_PORT_MODE_TS5700N8501:
|
||||
case SENSOR_PORT_MODE_TS5700N8501_MULTITURN: {
|
||||
app_configuration *appconf = mempools_alloc_appconf();
|
||||
|
@ -392,7 +394,7 @@ void mc_interface_set_configuration(mc_configuration *configuration) {
|
|||
}
|
||||
|
||||
if (configuration->m_sensor_port_mode == SENSOR_PORT_MODE_ABI) {
|
||||
encoder_set_counts(configuration->m_encoder_counts);
|
||||
encoders_set_counts(configuration->m_encoder_counts);
|
||||
}
|
||||
|
||||
#ifdef HW_HAS_DRV8301
|
||||
|
@ -2473,22 +2475,22 @@ static void run_timer_tasks(volatile motor_if_state_t *motor) {
|
|||
motor->m_conf.foc_sensor_mode == FOC_SENSOR_MODE_ENCODER &&
|
||||
motor->m_conf.m_sensor_port_mode == SENSOR_PORT_MODE_SINCOS) {
|
||||
|
||||
if (encoder_sincos_get_signal_below_min_error_rate() > 0.05)
|
||||
if (encoders_get_signal_below_min_error_rate() > 0.05)
|
||||
mc_interface_fault_stop(FAULT_CODE_ENCODER_SINCOS_BELOW_MIN_AMPLITUDE, !is_motor_1, false);
|
||||
if (encoder_sincos_get_signal_above_max_error_rate() > 0.05)
|
||||
if (encoders_get_signal_above_max_error_rate() > 0.05)
|
||||
mc_interface_fault_stop(FAULT_CODE_ENCODER_SINCOS_ABOVE_MAX_AMPLITUDE, !is_motor_1, false);
|
||||
}
|
||||
|
||||
if (motor->m_conf.motor_type == MOTOR_TYPE_FOC &&
|
||||
motor->m_conf.foc_sensor_mode == FOC_SENSOR_MODE_ENCODER &&
|
||||
motor->m_conf.m_sensor_port_mode == SENSOR_PORT_MODE_AS5047_SPI) {
|
||||
if (!AS504x_get_diag().is_connected) {
|
||||
if (!encoders_get_diag().is_connected) {
|
||||
mc_interface_fault_stop(FAULT_CODE_ENCODER_SPI, !is_motor_1, false);
|
||||
}
|
||||
|
||||
if (AS504x_get_diag().is_Comp_high) {
|
||||
if (encoders_get_diag().is_Comp_high) {
|
||||
mc_interface_fault_stop(FAULT_CODE_ENCODER_NO_MAGNET, !is_motor_1, false);
|
||||
} else if(AS504x_get_diag().is_Comp_low) {
|
||||
} else if(encoders_get_diag().is_Comp_low) {
|
||||
mc_interface_fault_stop(FAULT_CODE_ENCODER_MAGNET_TOO_STRONG, !is_motor_1, false);
|
||||
}
|
||||
}
|
||||
|
|
1
mcpwm.c
1
mcpwm.c
|
@ -31,7 +31,6 @@
|
|||
#include "ledpwm.h"
|
||||
#include "terminal.h"
|
||||
#include "timeout.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
#include "timer.h"
|
||||
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
#include "utils.h"
|
||||
#include "ledpwm.h"
|
||||
#include "terminal.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
#include "commands.h"
|
||||
#include "timeout.h"
|
||||
|
@ -3074,7 +3073,7 @@ void mcpwm_foc_adc_int_handler(void *p, uint32_t flags) {
|
|||
float angle_now = 0.0;
|
||||
if (encoders_is_configured()) {
|
||||
if (conf_now->m_sensor_port_mode == SENSOR_PORT_MODE_TS5700N8501_MULTITURN) {
|
||||
angle_now = encoder_read_deg_multiturn();
|
||||
angle_now = encoders_read_deg_multiturn();
|
||||
} else {
|
||||
angle_now = enc_ang;
|
||||
}
|
||||
|
|
31
terminal.c
31
terminal.c
|
@ -28,7 +28,6 @@
|
|||
#include "comm_can.h"
|
||||
#include "utils.h"
|
||||
#include "timeout.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
#include "app.h"
|
||||
#include "comm_usb.h"
|
||||
|
@ -880,22 +879,22 @@ void terminal_process_string(char *str) {
|
|||
(unsigned int)encoders_spi_get_val(),
|
||||
encoders_spi_get_error_cnt(),
|
||||
(double)encoders_spi_get_error_rate() * (double)100.0,
|
||||
AS504x_get_diag().is_connected);
|
||||
encoders_get_diag().is_connected);
|
||||
}
|
||||
|
||||
if (mcconf->m_sensor_port_mode == SENSOR_PORT_MODE_TS5700N8501 ||
|
||||
mcconf->m_sensor_port_mode == SENSOR_PORT_MODE_TS5700N8501_MULTITURN) {
|
||||
char sf[9];
|
||||
char almc[9];
|
||||
utils_byte_to_binary(encoder_ts5700n8501_get_raw_status()[0], sf);
|
||||
utils_byte_to_binary(encoder_ts5700n8501_get_raw_status()[7], almc);
|
||||
commands_printf("TS5700N8501 ABM: %d, SF: %s, ALMC: %s\n", encoder_ts57n8501_get_abm(), sf, almc);
|
||||
utils_byte_to_binary(encoders_get_raw_status()[0], sf);
|
||||
utils_byte_to_binary(encoders_get_raw_status()[7], almc);
|
||||
commands_printf("TS5700N8501 ABM: %d, SF: %s, ALMC: %s\n", encoders_get_abm(), sf, almc);
|
||||
}
|
||||
|
||||
if (mcconf->m_sensor_port_mode == SENSOR_PORT_MODE_MT6816_SPI) {
|
||||
commands_printf("Low flux error (no magnet): errors: %d, error rate: %.3f %%",
|
||||
encoders_get_no_magnet_error_cnt(),
|
||||
(double)encoder_get_no_magnet_error_rate() * (double)100.0);
|
||||
(double)encoders_get_no_magnet_error_rate() * (double)100.0);
|
||||
}
|
||||
|
||||
#if AS504x_USE_SW_MOSI_PIN || AS5047_USE_HW_SPI_PINS
|
||||
|
@ -907,22 +906,22 @@ void terminal_process_string(char *str) {
|
|||
"OCF : %u\n"
|
||||
"COMP_low : %u\n"
|
||||
"COMP_high : %u\n",
|
||||
AS504x_get_diag().AGC_value, AS504x_get_diag().magnitude,
|
||||
AS504x_get_diag().is_COF, AS504x_get_diag().is_OCF,
|
||||
AS504x_get_diag().is_Comp_low,
|
||||
AS504x_get_diag().is_Comp_high);
|
||||
encoders_get_diag().AGC_value, encoders_get_diag().magnitude,
|
||||
encoders_get_diag().is_COF, encoders_get_diag().is_OCF,
|
||||
encoders_get_diag().is_Comp_low,
|
||||
encoders_get_diag().is_Comp_high);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (mcconf->m_sensor_port_mode == SENSOR_PORT_MODE_SINCOS) {
|
||||
commands_printf("Sin/Cos encoder signal below minimum amplitude: errors: %d, error rate: %.3f %%",
|
||||
encoder_sincos_get_signal_below_min_error_cnt(),
|
||||
(double)encoder_sincos_get_signal_below_min_error_rate() * (double)100.0);
|
||||
encoders_get_signal_below_min_error_cnt(),
|
||||
(double)encoders_get_signal_below_min_error_rate() * (double)100.0);
|
||||
|
||||
commands_printf("Sin/Cos encoder signal above maximum amplitude: errors: %d, error rate: %.3f %%",
|
||||
encoder_sincos_get_signal_above_max_error_cnt(),
|
||||
(double)encoder_sincos_get_signal_above_max_error_rate() * (double)100.0);
|
||||
encoders_get_signal_above_max_error_cnt(),
|
||||
(double)encoders_get_signal_above_max_error_rate() * (double)100.0);
|
||||
}
|
||||
|
||||
if (mcconf->m_sensor_port_mode == SENSOR_PORT_MODE_AD2S1205) {
|
||||
|
@ -937,10 +936,10 @@ void terminal_process_string(char *str) {
|
|||
(double)encoders_resolver_loss_of_signal_error_rate() * (double)100.0);
|
||||
}
|
||||
} else if (strcmp(argv[0], "encoder_clear_errors") == 0) {
|
||||
encoder_ts57n8501_reset_errors();
|
||||
encoders_reset_errors();
|
||||
commands_printf("Done!\n");
|
||||
} else if (strcmp(argv[0], "encoder_clear_multiturn") == 0) {
|
||||
encoder_ts57n8501_reset_multiturn();
|
||||
encoders_reset_multiturn();
|
||||
commands_printf("Done!\n");
|
||||
} else if (strcmp(argv[0], "uptime") == 0) {
|
||||
commands_printf("Uptime: %.2f s\n", (double)chVTGetSystemTimeX() / (double)CH_CFG_ST_FREQUENCY);
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
#include "math.h"
|
||||
#include "stdio.h"
|
||||
#include "commands.h"
|
||||
#include "encoder.h"
|
||||
#include "encoder/encoders.h"
|
||||
|
||||
typedef struct{
|
||||
|
@ -290,9 +289,13 @@ static void disconnect_virtual_motor( void ){
|
|||
break;
|
||||
|
||||
case SENSOR_PORT_MODE_SINCOS:
|
||||
encoder_init_sincos(m_conf->foc_encoder_sin_gain, m_conf->foc_encoder_sin_offset,
|
||||
m_conf->foc_encoder_cos_gain, m_conf->foc_encoder_cos_offset,
|
||||
m_conf->foc_encoder_sincos_filter_constant);
|
||||
|
||||
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);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
Loading…
Reference in New Issue