From 6436fecd858312565b57e412ffb448d964cd1df2 Mon Sep 17 00:00:00 2001 From: Peter Poetzi Date: Thu, 3 Feb 2022 21:08:08 +0100 Subject: [PATCH] add new hall sensor configs --- config.h | 2 +- defines.h | 20 +++++++++---- main.cpp | 87 +++++++++++++++++++++++++++++++++++++------------------ 3 files changed, 74 insertions(+), 35 deletions(-) diff --git a/config.h b/config.h index d495c51..8fd65f8 100644 --- a/config.h +++ b/config.h @@ -1,6 +1,6 @@ #pragma once -#ifdef GSCHISSENE_PWM_FREQ +#ifdef PWM_FREQ_12KHZ #define PWM_FREQ 12000 // PWM frequency in Hz #else #define PWM_FREQ 16000 // PWM frequency in Hz diff --git a/defines.h b/defines.h index 604d407..9b839c0 100644 --- a/defines.h +++ b/defines.h @@ -23,11 +23,15 @@ #include "stm32f1xx_hal.h" #ifdef PETERS_PLATINE -#ifdef GSCHISSENES_HALL +#ifdef HALL_BCA #define LEFT_HALL_U_PIN GPIO_PIN_10 #define LEFT_HALL_V_PIN GPIO_PIN_11 #define LEFT_HALL_W_PIN GPIO_PIN_12 -#else +#elif HALL_ABC + #define LEFT_HALL_U_PIN GPIO_PIN_12 + #define LEFT_HALL_V_PIN GPIO_PIN_10 + #define LEFT_HALL_W_PIN GPIO_PIN_11 +#else //HALL_ACB #define LEFT_HALL_U_PIN GPIO_PIN_12 #define LEFT_HALL_V_PIN GPIO_PIN_11 #define LEFT_HALL_W_PIN GPIO_PIN_10 @@ -37,11 +41,15 @@ #define LEFT_HALL_V_PORT GPIOC #define LEFT_HALL_W_PORT GPIOC -#ifdef GSCHISSENES_HALL +#ifdef HALL_BCA #define RIGHT_HALL_U_PIN GPIO_PIN_7 #define RIGHT_HALL_V_PIN GPIO_PIN_6 #define RIGHT_HALL_W_PIN GPIO_PIN_5 -#else +#elif HALL_ABC + #define RIGHT_HALL_U_PIN GPIO_PIN_5 + #define RIGHT_HALL_V_PIN GPIO_PIN_7 + #define RIGHT_HALL_W_PIN GPIO_PIN_6 +#else //HALL_ACB #define RIGHT_HALL_U_PIN GPIO_PIN_5 #define RIGHT_HALL_V_PIN GPIO_PIN_6 #define RIGHT_HALL_W_PIN GPIO_PIN_7 @@ -51,7 +59,7 @@ #define RIGHT_HALL_V_PORT GPIOB #define RIGHT_HALL_W_PORT GPIOB #else -#ifdef GSCHISSENES_HALL +#ifdef HALL_BCA #define LEFT_HALL_U_PIN GPIO_PIN_7 #define LEFT_HALL_V_PIN GPIO_PIN_6 #define LEFT_HALL_W_PIN GPIO_PIN_5 @@ -65,7 +73,7 @@ #define LEFT_HALL_V_PORT GPIOB #define LEFT_HALL_W_PORT GPIOB -#ifdef GSCHISSENES_HALL +#ifdef HALL_BCA #define RIGHT_HALL_U_PIN GPIO_PIN_12 #define RIGHT_HALL_V_PIN GPIO_PIN_11 #define RIGHT_HALL_W_PIN GPIO_PIN_10 diff --git a/main.cpp b/main.cpp index e124438..c6b2cf5 100644 --- a/main.cpp +++ b/main.cpp @@ -53,19 +53,19 @@ TIM_HandleTypeDef htim_right; TIM_HandleTypeDef htim_left; ADC_HandleTypeDef hadc1; ADC_HandleTypeDef hadc2; -#ifdef HUARN2 +#ifdef HUART2 UART_HandleTypeDef huart2; #endif -#ifdef HUARN3 +#ifdef HUART3 UART_HandleTypeDef huart3; #endif -#ifdef HUARN2 +#ifdef HUART2 DMA_HandleTypeDef hdma_usart2_rx; DMA_HandleTypeDef hdma_usart2_tx; #endif -#ifdef HUARN3 +#ifdef HUART3 DMA_HandleTypeDef hdma_usart3_rx; DMA_HandleTypeDef hdma_usart3_tx; #endif @@ -129,10 +129,10 @@ template void myPrintf(const char (&format)[formatLength], Targs ... args) { #ifdef LOG_TO_SERIAL -#ifdef HUARN2 +#ifdef HUART2 #define UART_DMA_CHANNEL DMA1_Channel7 #endif -#ifdef HUARN3 +#ifdef HUART3 #define UART_DMA_CHANNEL DMA1_Channel2 #endif @@ -206,11 +206,11 @@ struct { void SystemClock_Config(); -#ifdef HUARN2 +#ifdef HUART2 void UART2_Init(); #endif -#ifdef HUARN3 +#ifdef HUART3 void UART3_Init(); #endif @@ -339,10 +339,10 @@ int main() } buzzer.freq = 0; -#ifdef HUARN2 +#ifdef HUART2 UART2_Init(); #endif -#ifdef HUARN3 +#ifdef HUART3 UART3_Init(); #endif @@ -351,10 +351,10 @@ int main() #endif #ifdef FEATURE_SERIAL_CONTROL -#ifdef HUARN2 +#ifdef HUART2 HAL_UART_Receive_DMA(&huart2, (uint8_t *)&command, sizeof(command)); #endif -#ifdef HUARN3 +#ifdef HUART3 HAL_UART_Receive_DMA(&huart3, (uint8_t *)&command, sizeof(command)); #endif #endif @@ -517,9 +517,9 @@ void updateMotors() constexpr bool ignoreOtherMotor = #ifdef FEATURE_IGNORE_OTHER_MOTOR - false -#else true +#else + false #endif ; @@ -528,9 +528,15 @@ void updateMotors() // ========================= LEFT MOTOR ============================ // Get hall sensors values +#ifdef FEATURE_INVERT_HALL + bool hall_ul = (LEFT_HALL_U_PORT->IDR & LEFT_HALL_U_PIN); + bool hall_vl = (LEFT_HALL_V_PORT->IDR & LEFT_HALL_V_PIN); + bool hall_wl = (LEFT_HALL_W_PORT->IDR & LEFT_HALL_W_PIN); +#else bool hall_ul = !(LEFT_HALL_U_PORT->IDR & LEFT_HALL_U_PIN); bool hall_vl = !(LEFT_HALL_V_PORT->IDR & LEFT_HALL_V_PIN); bool hall_wl = !(LEFT_HALL_W_PORT->IDR & LEFT_HALL_W_PIN); +#endif /* Set motor inputs here */ left.rtU.b_motEna = enableLFin; @@ -558,9 +564,16 @@ void updateMotors() // ========================= RIGHT MOTOR =========================== // Get hall sensors values +#ifdef FEATURE_INVERT_HALL + bool hall_ur = (RIGHT_HALL_U_PORT->IDR & RIGHT_HALL_U_PIN); + bool hall_vr = (RIGHT_HALL_V_PORT->IDR & RIGHT_HALL_V_PIN); + bool hall_wr = (RIGHT_HALL_W_PORT->IDR & RIGHT_HALL_W_PIN); +#else bool hall_ur = !(RIGHT_HALL_U_PORT->IDR & RIGHT_HALL_U_PIN); bool hall_vr = !(RIGHT_HALL_V_PORT->IDR & RIGHT_HALL_V_PIN); bool hall_wr = !(RIGHT_HALL_W_PORT->IDR & RIGHT_HALL_W_PIN); +#endif + /* Set motor inputs here */ right.rtU.b_motEna = enableRFin; @@ -636,7 +649,7 @@ void SystemClock_Config() HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } -#ifdef HUARN2 +#ifdef HUART2 void UART2_Init() { /* The code below is commented out - otwerwise Serial Receive does not work */ @@ -710,7 +723,7 @@ void UART2_Init() } #endif -#ifdef HUARN3 +#ifdef HUART3 void UART3_Init() { /* The code below is commented out - otwerwise Serial Receive does not work */ @@ -1386,24 +1399,24 @@ void doMotorTest() { using namespace protocol; - timeout = 0; // proove, that the controlling code is still running + timeout = 0; // prove, that the controlling code is still running left.enable = true; left.rtU.r_inpTgt = pwm; left.rtP.z_ctrlTypSel = uint8_t(ControlType::FieldOrientedControl); - left.rtU.z_ctrlModReq = uint8_t(ControlMode::Speed); + left.rtU.z_ctrlModReq = uint8_t(ControlMode::Torque); left.rtP.i_max = (2 * A2BIT_CONV) << 4; - left.iDcMax = 4; + left.iDcMax = 8; left.rtP.n_max = 1000 << 4; left.rtP.id_fieldWeakMax = (0 * A2BIT_CONV) << 4; left.rtP.a_phaAdvMax = 40 << 4; right.enable = true; - right.rtU.r_inpTgt = pwm; + right.rtU.r_inpTgt = -pwm; right.rtP.z_ctrlTypSel = uint8_t(ControlType::FieldOrientedControl); - right.rtU.z_ctrlModReq = uint8_t(ControlMode::Speed); + right.rtU.z_ctrlModReq = uint8_t(ControlMode::Torque); right.rtP.i_max = (2 * A2BIT_CONV) << 4; - right.iDcMax = 4; + right.iDcMax = 8; right.rtP.n_max = 1000 << 4; right.rtP.id_fieldWeakMax = (0 * A2BIT_CONV) << 4; right.rtP.a_phaAdvMax = 40 << 4; @@ -1418,6 +1431,24 @@ void doMotorTest() pwm = -pwmMax; dir = 1; } + + if(left.rtY.z_errCode != 0 || right.rtY.z_errCode != 0) { + if(left.rtY.z_errCode == 0 && right.rtY.z_errCode != 0) { //rechts + buzzer.freq = 1; + buzzer.pattern = 1; + } + if(right.rtY.z_errCode == 0 && left.rtY.z_errCode != 0) { //links + buzzer.freq = 3; + buzzer.pattern = 3; + } + if(right.rtY.z_errCode != 0 && left.rtY.z_errCode != 0) { //beide + buzzer.freq = 5; + buzzer.pattern = 5; + } + } else { + buzzer.freq = 0; + buzzer.pattern = 0; + } } #endif @@ -1482,11 +1513,11 @@ void parseCommand() // Check periodically the received Start Frame. Try to re-sync by reseting the DMA if (main_loop_counter % 25 == 0) { -#ifdef HUARN2 +#ifdef HUART2 HAL_UART_DMAStop(&huart2); HAL_UART_Receive_DMA(&huart2, (uint8_t *)&command, sizeof(command)); #endif -#ifdef HUARN3 +#ifdef HUART3 HAL_UART_DMAStop(&huart3); HAL_UART_Receive_DMA(&huart3, (uint8_t *)&command, sizeof(command)); #endif @@ -1500,10 +1531,10 @@ void sendFeedback() { using namespace protocol::serial; -#ifdef HUARN2 +#ifdef HUART2 #define UART_DMA_CHANNEL DMA1_Channel7 #endif -#ifdef HUARN3 +#ifdef HUART3 #define UART_DMA_CHANNEL DMA1_Channel2 #endif @@ -1935,7 +1966,7 @@ extern "C" void DMA1_Channel1_IRQHandler() /* USER CODE END DMA1_Channel1_IRQn 1 */ } -#ifdef HUARN2 +#ifdef HUART2 extern "C" void DMA1_Channel6_IRQHandler() { /* USER CODE BEGIN DMA1_Channel4_IRQn 0 */ @@ -1964,7 +1995,7 @@ extern "C" void DMA1_Channel7_IRQHandler() } #endif -#ifdef HUARN3 +#ifdef HUART3 /** * @brief This function handles DMA1 channel2 global interrupt. */