add new hall sensor configs

This commit is contained in:
Peter Poetzi
2022-02-03 21:08:08 +01:00
parent 3b4e67d740
commit 6436fecd85
3 changed files with 74 additions and 35 deletions

View File

@ -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

View File

@ -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

View File

@ -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<std::size_t formatLength, typename ... Targs>
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.
*/