From 0642a69e1a669e986269fd82b1fb15489e27c007 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 24 Oct 2019 16:22:44 +1000 Subject: [PATCH] AEAT-8800 Adds AEAT-8800 SSI as an encoder using 16bit --- Firmware/MotorControl/encoder.cpp | 12 +++++++++--- Firmware/MotorControl/encoder.hpp | 1 + tools/odrive/enums.py | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Firmware/MotorControl/encoder.cpp b/Firmware/MotorControl/encoder.cpp index 1ede2f47..4c061cc5 100644 --- a/Firmware/MotorControl/encoder.cpp +++ b/Firmware/MotorControl/encoder.cpp @@ -339,7 +339,9 @@ bool Encoder::abs_spi_init() { spi->Init.TIMode = SPI_TIMODE_DISABLE; spi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; spi->Init.CRCPolynomial = 10; - + if (config_.mode == MODE_SPI_ABS_AEAT) { + spi->Init.CLKPolarity = SPI_POLARITY_HIGH; + } HAL_SPI_DeInit(spi); HAL_SPI_Init(spi); //stash our configuration @@ -390,7 +392,10 @@ void Encoder::abs_spi_cb() { abs_spi_pos_updated_ = true; } } break; - + case MODE_SPI_ABS_AEAT: { + pos_abs_ = abs_spi_dma_rx_[0]; + abs_spi_pos_updated_ = true; + } break; default: { set_error(ERROR_UNSUPPORTED_ENCODER_MODE); } break; @@ -455,7 +460,8 @@ bool Encoder::update() { } break; case MODE_SPI_ABS_AMS: - case MODE_SPI_ABS_CUI: { + case MODE_SPI_ABS_CUI: + case MODE_SPI_ABS_AEAT: { if (abs_spi_pos_updated_ == false && abs_spi_pos_init_once_) { // Low pass filter the error spi_error_rate_ += current_meas_period * (1.0f - spi_error_rate_); diff --git a/Firmware/MotorControl/encoder.hpp b/Firmware/MotorControl/encoder.hpp index 3e140ca0..76d4fcde 100644 --- a/Firmware/MotorControl/encoder.hpp +++ b/Firmware/MotorControl/encoder.hpp @@ -26,6 +26,7 @@ class Encoder { MODE_SINCOS, MODE_SPI_ABS_CUI = 0x100, MODE_SPI_ABS_AMS = 0x101, + MODE_SPI_ABS_AEAT = 0x102, }; const uint32_t MODE_FLAG_ABS = 0x100; diff --git a/tools/odrive/enums.py b/tools/odrive/enums.py index 08ea6ec0..b9bf4f85 100644 --- a/tools/odrive/enums.py +++ b/tools/odrive/enums.py @@ -84,3 +84,4 @@ ENCODER_MODE_HALL = 0x01 ENCODER_MODE_SINCOS = 0x02 ENCODER_MODE_SPI_ABS_CUI = 0x100 ENCODER_MODE_SPI_ABS_AMS = 0x101 +ENCODER_MODE_SPI_ABS_AEAT = 0x102