got current sense readings!
This commit is contained in:
@@ -5,8 +5,6 @@ ADC_HandleTypeDef hadc2;
|
|||||||
DMA_HandleTypeDef hdma_adc1;
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
DMA_HandleTypeDef hdma_adc2;
|
DMA_HandleTypeDef hdma_adc2;
|
||||||
|
|
||||||
uint32_t HAL_RCC_ADC12_CLK_ENABLED = 0;
|
|
||||||
|
|
||||||
void MX_ADC1_Init(void)
|
void MX_ADC1_Init(void)
|
||||||
{
|
{
|
||||||
ADC_MultiModeTypeDef multimode = {0};
|
ADC_MultiModeTypeDef multimode = {0};
|
||||||
@@ -21,7 +19,7 @@ void MX_ADC1_Init(void)
|
|||||||
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
||||||
hadc1.Init.LowPowerAutoWait = DISABLE;
|
hadc1.Init.LowPowerAutoWait = DISABLE;
|
||||||
hadc1.Init.ContinuousConvMode = DISABLE;
|
hadc1.Init.ContinuousConvMode = DISABLE;
|
||||||
hadc1.Init.NbrOfConversion = 2;
|
hadc1.Init.NbrOfConversion = 3;
|
||||||
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T2_TRGO;
|
hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T2_TRGO;
|
||||||
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
|
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
|
||||||
@@ -35,18 +33,23 @@ void MX_ADC1_Init(void)
|
|||||||
if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
|
if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
|
||||||
SIMPLEFOC_DEBUG("HAL ADC1 multimode configuration fail.");
|
SIMPLEFOC_DEBUG("HAL ADC1 multimode configuration fail.");
|
||||||
|
|
||||||
|
// sConfig.Channel = ADC_CHANNEL_VOPAMP1;
|
||||||
sConfig.Channel = ADC_CHANNEL_VOPAMP1;
|
sConfig.Channel = ADC_CHANNEL_VOPAMP1;
|
||||||
sConfig.Rank = ADC_REGULAR_RANK_1;
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
|
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
|
||||||
sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
||||||
sConfig.OffsetNumber = ADC_OFFSET_1;
|
sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
||||||
sConfig.Offset = 0x7FF;
|
sConfig.Offset = 0;
|
||||||
sConfig.OffsetSaturation = ENABLE;
|
|
||||||
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
SIMPLEFOC_DEBUG("HAL ADC OPAMP1 init failed!");
|
SIMPLEFOC_DEBUG("HAL ADC OPAMP1 init failed!");
|
||||||
|
|
||||||
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR_ADC1;
|
sConfig.Channel = ADC_CHANNEL_3;
|
||||||
sConfig.Rank = ADC_REGULAR_RANK_2;
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
SIMPLEFOC_DEBUG("HAL ADC Vmotor init failed!");
|
||||||
|
|
||||||
|
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR_ADC1;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
SIMPLEFOC_DEBUG("HAL ADC temp init failed!");
|
SIMPLEFOC_DEBUG("HAL ADC temp init failed!");
|
||||||
}
|
}
|
||||||
@@ -78,9 +81,8 @@ void MX_ADC2_Init(void)
|
|||||||
sConfig.Rank = ADC_REGULAR_RANK_1;
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
|
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
|
||||||
sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
||||||
sConfig.OffsetNumber = ADC_OFFSET_1;
|
sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
||||||
sConfig.Offset = 0x7FF;
|
sConfig.Offset = 0;
|
||||||
sConfig.OffsetSaturation = ENABLE;
|
|
||||||
if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
|
if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
|
||||||
SIMPLEFOC_DEBUG("HAL ADC OPAMP2 init failed!");
|
SIMPLEFOC_DEBUG("HAL ADC OPAMP2 init failed!");
|
||||||
|
|
||||||
@@ -90,17 +92,24 @@ void MX_ADC2_Init(void)
|
|||||||
SIMPLEFOC_DEBUG("HAL ADC OPAMP3 init failed!");
|
SIMPLEFOC_DEBUG("HAL ADC OPAMP3 init failed!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ADC_DMA_Init(ADC_HandleTypeDef* adcHandle)
|
uint32_t HAL_RCC_ADC12_CLK_ENABLED = 0;
|
||||||
|
|
||||||
|
void ADC_DMA_Init(void)
|
||||||
{
|
{
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12;
|
||||||
|
PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_SYSCLK;
|
||||||
|
if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
SIMPLEFOC_DEBUG("Error initializing peripheral clock in adc.cpp");
|
||||||
|
|
||||||
HAL_RCC_ADC12_CLK_ENABLED++;
|
HAL_RCC_ADC12_CLK_ENABLED++;
|
||||||
if(HAL_RCC_ADC12_CLK_ENABLED==1){
|
if (HAL_RCC_ADC12_CLK_ENABLED == 1)
|
||||||
|
{
|
||||||
__HAL_RCC_ADC12_CLK_ENABLE();
|
__HAL_RCC_ADC12_CLK_ENABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(adcHandle->Instance==ADC1)
|
|
||||||
{
|
|
||||||
/* ADC1 DMA Init */
|
/* ADC1 DMA Init */
|
||||||
/* ADC1 Init */
|
|
||||||
hdma_adc1.Instance = DMA1_Channel1;
|
hdma_adc1.Instance = DMA1_Channel1;
|
||||||
hdma_adc1.Init.Request = DMA_REQUEST_ADC1;
|
hdma_adc1.Init.Request = DMA_REQUEST_ADC1;
|
||||||
hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
||||||
@@ -110,16 +119,12 @@ void ADC_DMA_Init(ADC_HandleTypeDef* adcHandle)
|
|||||||
hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
||||||
hdma_adc1.Init.Mode = DMA_CIRCULAR;
|
hdma_adc1.Init.Mode = DMA_CIRCULAR;
|
||||||
hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
|
hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
|
||||||
HAL_DMA_DeInit(&hdma_adc1);
|
|
||||||
if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
|
if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
|
||||||
SIMPLEFOC_DEBUG("HAL error enabling DMA1 channel 1.");
|
SIMPLEFOC_DEBUG("HAL error enabling DMA1 channel 1.");
|
||||||
|
|
||||||
__HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);
|
__HAL_LINKDMA(&hadc1, DMA_Handle, hdma_adc1);
|
||||||
}
|
|
||||||
else if(adcHandle->Instance==ADC2)
|
|
||||||
{
|
|
||||||
/* ADC2 DMA Init */
|
/* ADC2 DMA Init */
|
||||||
/* ADC2 Init */
|
|
||||||
hdma_adc2.Instance = DMA1_Channel2;
|
hdma_adc2.Instance = DMA1_Channel2;
|
||||||
hdma_adc2.Init.Request = DMA_REQUEST_ADC2;
|
hdma_adc2.Init.Request = DMA_REQUEST_ADC2;
|
||||||
hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
||||||
@@ -129,33 +134,31 @@ void ADC_DMA_Init(ADC_HandleTypeDef* adcHandle)
|
|||||||
hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
||||||
hdma_adc2.Init.Mode = DMA_CIRCULAR;
|
hdma_adc2.Init.Mode = DMA_CIRCULAR;
|
||||||
hdma_adc2.Init.Priority = DMA_PRIORITY_LOW;
|
hdma_adc2.Init.Priority = DMA_PRIORITY_LOW;
|
||||||
HAL_DMA_DeInit(&hdma_adc2);
|
|
||||||
if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
|
if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
|
||||||
SIMPLEFOC_DEBUG("HAL error enabling DMA1 channel 2.");
|
SIMPLEFOC_DEBUG("HAL error enabling DMA1 channel 2.");
|
||||||
|
|
||||||
__HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc2);
|
__HAL_LINKDMA(&hadc2, DMA_Handle, hdma_adc2);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
|
void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
|
||||||
// {
|
{
|
||||||
|
|
||||||
// if(adcHandle->Instance==ADC1)
|
if(adcHandle->Instance==ADC1)
|
||||||
// {
|
{
|
||||||
// HAL_RCC_ADC12_CLK_ENABLED--;
|
HAL_RCC_ADC12_CLK_ENABLED--;
|
||||||
// if(HAL_RCC_ADC12_CLK_ENABLED==0){
|
if(HAL_RCC_ADC12_CLK_ENABLED==0){
|
||||||
// __HAL_RCC_ADC12_CLK_DISABLE();
|
__HAL_RCC_ADC12_CLK_DISABLE();
|
||||||
// }
|
}
|
||||||
|
|
||||||
// HAL_DMA_DeInit(adcHandle->DMA_Handle);
|
HAL_DMA_DeInit(adcHandle->DMA_Handle);
|
||||||
// }
|
}
|
||||||
// else if(adcHandle->Instance==ADC2)
|
else if(adcHandle->Instance==ADC2)
|
||||||
// {
|
{
|
||||||
// HAL_RCC_ADC12_CLK_ENABLED--;
|
HAL_RCC_ADC12_CLK_ENABLED--;
|
||||||
// if(HAL_RCC_ADC12_CLK_ENABLED==0){
|
if(HAL_RCC_ADC12_CLK_ENABLED==0){
|
||||||
// __HAL_RCC_ADC12_CLK_DISABLE();
|
__HAL_RCC_ADC12_CLK_DISABLE();
|
||||||
// }
|
}
|
||||||
|
|
||||||
// HAL_DMA_DeInit(adcHandle->DMA_Handle);
|
HAL_DMA_DeInit(adcHandle->DMA_Handle);
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "stm32g4xx_hal.h"
|
#include "stm32g4xx_hal.h"
|
||||||
#include "stm32g4xx_hal_adc.h"
|
#include "stm32g4xx_hal_adc.h"
|
||||||
|
#include "stm32g4xx_hal_adc_ex.h"
|
||||||
#include "communication/SimpleFOCDebug.h"
|
#include "communication/SimpleFOCDebug.h"
|
||||||
|
|
||||||
extern ADC_HandleTypeDef hadc1;
|
extern ADC_HandleTypeDef hadc1;
|
||||||
@@ -12,7 +13,7 @@ extern DMA_HandleTypeDef hdma_adc2;
|
|||||||
|
|
||||||
void MX_ADC1_Init(void);
|
void MX_ADC1_Init(void);
|
||||||
void MX_ADC2_Init(void);
|
void MX_ADC2_Init(void);
|
||||||
void ADC_DMA_Init(ADC_HandleTypeDef* adcHandle);
|
void ADC_DMA_Init(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ void MX_DMA_Init(void)
|
|||||||
{
|
{
|
||||||
__HAL_RCC_DMAMUX1_CLK_ENABLE();
|
__HAL_RCC_DMAMUX1_CLK_ENABLE();
|
||||||
__HAL_RCC_DMA1_CLK_ENABLE();
|
__HAL_RCC_DMA1_CLK_ENABLE();
|
||||||
__HAL_RCC_DMA2_CLK_ENABLE();
|
// __HAL_RCC_DMA2_CLK_ENABLE();
|
||||||
|
|
||||||
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
|
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
|
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
|
||||||
|
|||||||
@@ -4,83 +4,70 @@ OPAMP_HandleTypeDef hopamp1;
|
|||||||
OPAMP_HandleTypeDef hopamp2;
|
OPAMP_HandleTypeDef hopamp2;
|
||||||
OPAMP_HandleTypeDef hopamp3;
|
OPAMP_HandleTypeDef hopamp3;
|
||||||
|
|
||||||
void initOPAMP(OPAMP_HandleTypeDef *hopamp, OPAMP_TypeDef *opamp)
|
|
||||||
{
|
|
||||||
#ifdef USE_OPAMP_PGA
|
|
||||||
hopamp->Instance = opamp;
|
|
||||||
hopamp->Init.PowerMode = OPAMP_POWERMODE_NORMALSPEED;
|
|
||||||
hopamp->Init.Mode = OPAMP_PGA_MODE;
|
|
||||||
hopamp->Init.NonInvertingInput = OPAMP_NONINVERTINGINPUT_IO1;
|
|
||||||
hopamp->Init.InternalOutput = ENABLE;
|
|
||||||
hopamp->Init.TimerControlledMuxmode = OPAMP_TIMERCONTROLLEDMUXMODE_DISABLE;
|
|
||||||
hopamp->Init.PgaConnect = OPAMP_PGA_CONNECT_INVERTINGINPUT_NO;
|
|
||||||
hopamp->Init.PgaGain = OPAMP_PGA_GAIN_16_OR_MINUS_15; // Adjust this to change the gains of the opamp.
|
|
||||||
hopamp->Init.UserTrimming = OPAMP_TRIMMING_FACTORY;
|
|
||||||
#else
|
|
||||||
hopamp->Instance = opamp;
|
|
||||||
hopamp->Init.PowerMode = OPAMP_POWERMODE_NORMALSPEED;
|
|
||||||
hopamp->Init.Mode = OPAMP_FOLLOWER_MODE;
|
|
||||||
hopamp->Init.NonInvertingInput = OPAMP_NONINVERTINGINPUT_IO1;
|
|
||||||
hopamp->Init.InternalOutput = ENABLE;
|
|
||||||
hopamp->Init.TimerControlledMuxmode = OPAMP_TIMERCONTROLLEDMUXMODE_DISABLE;
|
|
||||||
hopamp->Init.UserTrimming = OPAMP_TRIMMING_FACTORY;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (HAL_OPAMP_Init(hopamp) != HAL_OK)
|
|
||||||
SIMPLEFOC_DEBUG("HAL OPAMP Init failed!");
|
|
||||||
}
|
|
||||||
|
|
||||||
void configureOPAMPs(void)
|
void configureOPAMPs(void)
|
||||||
{
|
{
|
||||||
initOPAMP(&hopamp1, OPAMP1); // PA3
|
hopamp1.Instance = OPAMP1;
|
||||||
initOPAMP(&hopamp2, OPAMP2); // PB0
|
hopamp1.Init.PowerMode = OPAMP_POWERMODE_NORMALSPEED;
|
||||||
initOPAMP(&hopamp3, OPAMP3); // PA1
|
hopamp1.Init.Mode = OPAMP_FOLLOWER_MODE;
|
||||||
|
hopamp1.Init.NonInvertingInput = OPAMP_NONINVERTINGINPUT_IO1;
|
||||||
|
hopamp1.Init.InternalOutput = ENABLE;
|
||||||
|
hopamp1.Init.TimerControlledMuxmode = OPAMP_TIMERCONTROLLEDMUXMODE_DISABLE;
|
||||||
|
hopamp1.Init.UserTrimming = OPAMP_TRIMMING_FACTORY;
|
||||||
|
if(HAL_OPAMP_Init(&hopamp1) != HAL_OK)
|
||||||
|
SIMPLEFOC_DEBUG("OPAMP1 init failed.");
|
||||||
|
|
||||||
|
hopamp2.Instance = OPAMP2;
|
||||||
|
hopamp2.Init.PowerMode = OPAMP_POWERMODE_NORMALSPEED;
|
||||||
|
hopamp2.Init.Mode = OPAMP_FOLLOWER_MODE;
|
||||||
|
hopamp2.Init.NonInvertingInput = OPAMP_NONINVERTINGINPUT_IO2;
|
||||||
|
hopamp2.Init.InternalOutput = ENABLE;
|
||||||
|
hopamp2.Init.TimerControlledMuxmode = OPAMP_TIMERCONTROLLEDMUXMODE_DISABLE;
|
||||||
|
hopamp2.Init.UserTrimming = OPAMP_TRIMMING_FACTORY;
|
||||||
|
if(HAL_OPAMP_Init(&hopamp2) != HAL_OK)
|
||||||
|
SIMPLEFOC_DEBUG("OPAMP2 init failed.");
|
||||||
|
|
||||||
|
hopamp3.Instance = OPAMP2;
|
||||||
|
hopamp3.Init.PowerMode = OPAMP_POWERMODE_NORMALSPEED;
|
||||||
|
hopamp3.Init.Mode = OPAMP_FOLLOWER_MODE;
|
||||||
|
hopamp3.Init.NonInvertingInput = OPAMP_NONINVERTINGINPUT_IO1;
|
||||||
|
hopamp3.Init.InternalOutput = ENABLE;
|
||||||
|
hopamp3.Init.TimerControlledMuxmode = OPAMP_TIMERCONTROLLEDMUXMODE_DISABLE;
|
||||||
|
hopamp3.Init.UserTrimming = OPAMP_TRIMMING_FACTORY;
|
||||||
|
if(HAL_OPAMP_Init(&hopamp3) != HAL_OK)
|
||||||
|
SIMPLEFOC_DEBUG("OPAMP3 init failed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_OPAMP_MspInit(OPAMP_HandleTypeDef* opampHandle)
|
void OPAMP_GPIO_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
if(opampHandle->Instance==OPAMP1)
|
|
||||||
{
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_3;
|
GPIO_InitStruct.Pin = GPIO_PIN_3;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
}
|
|
||||||
else if(opampHandle->Instance==OPAMP2)
|
|
||||||
{
|
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_0;
|
GPIO_InitStruct.Pin = GPIO_PIN_0;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
}
|
|
||||||
else if(opampHandle->Instance==OPAMP3)
|
|
||||||
{
|
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_13;
|
GPIO_InitStruct.Pin = GPIO_PIN_13;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_OPAMP_MspDeInit(OPAMP_HandleTypeDef* opampHandle)
|
void HAL_OPAMP_MspDeInit(OPAMP_HandleTypeDef *opampHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(opampHandle->Instance==OPAMP1)
|
if (opampHandle->Instance == OPAMP1)
|
||||||
{
|
{
|
||||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3);
|
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3);
|
||||||
}
|
}
|
||||||
else if(opampHandle->Instance==OPAMP2)
|
else if (opampHandle->Instance == OPAMP2)
|
||||||
{
|
{
|
||||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0);
|
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0);
|
||||||
}
|
}
|
||||||
else if(opampHandle->Instance==OPAMP3)
|
else if (opampHandle->Instance == OPAMP3)
|
||||||
{
|
{
|
||||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_13);
|
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_13);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ extern OPAMP_HandleTypeDef hopamp2;
|
|||||||
extern OPAMP_HandleTypeDef hopamp3;
|
extern OPAMP_HandleTypeDef hopamp3;
|
||||||
|
|
||||||
void configureOPAMPs(void);
|
void configureOPAMPs(void);
|
||||||
|
void OPAMP_GPIO_Init(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ float adcResolution = 4096.0f; // 12 bit ADC
|
|||||||
float voltageScale = 3.3f; // full scale voltage range of ADC
|
float voltageScale = 3.3f; // full scale voltage range of ADC
|
||||||
float adcSens = adcResolution * voltageScale;
|
float adcSens = adcResolution * voltageScale;
|
||||||
|
|
||||||
volatile uint16_t adc1Result[2] = {0};
|
volatile uint16_t adc1Result[3] = {0};
|
||||||
volatile uint16_t adc2Result[2] = {0};
|
volatile uint16_t adc2Result[2] = {0};
|
||||||
|
|
||||||
void MX_GPIO_Init(void)
|
void MX_GPIO_Init(void)
|
||||||
@@ -20,8 +20,9 @@ void MX_GPIO_Init(void)
|
|||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
|
||||||
__HAL_RCC_ADC12_CLK_ENABLE();
|
__HAL_RCC_ADC12_CLK_ENABLE();
|
||||||
|
|
||||||
|
OPAMP_GPIO_Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
float _readADCVoltageInline(const int pin, const void *cs_params)
|
float _readADCVoltageInline(const int pin, const void *cs_params)
|
||||||
@@ -30,6 +31,10 @@ float _readADCVoltageInline(const int pin, const void *cs_params)
|
|||||||
uint32_t rawResult;
|
uint32_t rawResult;
|
||||||
switch (pin)
|
switch (pin)
|
||||||
{
|
{
|
||||||
|
case PA2:
|
||||||
|
rawResult = adc1Result[1];
|
||||||
|
break;
|
||||||
|
|
||||||
case PA3:
|
case PA3:
|
||||||
rawResult = adc1Result[0]; // ADC1 CH13 -> Vopamp1 internal output
|
rawResult = adc1Result[0]; // ADC1 CH13 -> Vopamp1 internal output
|
||||||
break;
|
break;
|
||||||
@@ -38,13 +43,13 @@ float _readADCVoltageInline(const int pin, const void *cs_params)
|
|||||||
rawResult = adc2Result[0]; // ADC2 CH16 -> Vopamp2 internal output
|
rawResult = adc2Result[0]; // ADC2 CH16 -> Vopamp2 internal output
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PA1:
|
case PA13:
|
||||||
rawResult = adc2Result[1]; // ADC2 CH18 -> Vopamp3 internal output
|
rawResult = adc2Result[2]; // ADC2 CH18 -> Vopamp3 internal output
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PA2:
|
// case PA2:
|
||||||
rawResult = adc1Result[1]; // ADC1 CH16 -> not sure what pin should represent this?
|
// rawResult = adc1Result[1]; // ADC1 CH16 -> not sure what pin should represent this?
|
||||||
break;
|
// break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0.0f;
|
return 0.0f;
|
||||||
@@ -65,16 +70,21 @@ void *_configureADCInline(const void *driver_params, const int pinA, const int p
|
|||||||
_UNUSED(driver_params);
|
_UNUSED(driver_params);
|
||||||
|
|
||||||
HAL_Init();
|
HAL_Init();
|
||||||
|
HAL_SYSCFG_VREFBUF_VoltageScalingConfig(SYSCFG_VREFBUF_VOLTAGE_SCALE2);
|
||||||
|
HAL_SYSCFG_EnableVREFBUF();
|
||||||
|
HAL_SYSCFG_VREFBUF_HighImpedanceConfig(SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE);
|
||||||
MX_GPIO_Init();
|
MX_GPIO_Init();
|
||||||
MX_DMA_Init();
|
MX_DMA_Init();
|
||||||
MX_ADC1_Init();
|
MX_ADC1_Init();
|
||||||
MX_ADC2_Init();
|
MX_ADC2_Init();
|
||||||
configureOPAMPs();
|
configureOPAMPs();
|
||||||
|
|
||||||
ADC_DMA_Init(&hadc1);
|
ADC_DMA_Init();
|
||||||
ADC_DMA_Init(&hadc2);
|
|
||||||
|
|
||||||
if (HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc1Result, 2) != HAL_OK)
|
HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);
|
||||||
|
HAL_ADCEx_Calibration_Start(&hadc2, ADC_SINGLE_ENDED);
|
||||||
|
|
||||||
|
if (HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc1Result, 3) != HAL_OK)
|
||||||
{
|
{
|
||||||
SIMPLEFOC_DEBUG("DMA1 read init failed");
|
SIMPLEFOC_DEBUG("DMA1 read init failed");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ uint8_t updateData = 0;
|
|||||||
const uint16_t magicWord = 0xAF0C;
|
const uint16_t magicWord = 0xAF0C;
|
||||||
|
|
||||||
// canbus things
|
// canbus things
|
||||||
extern uint8_t TxData[8];
|
extern volatile uint8_t TxData[8];
|
||||||
extern uint8_t RxData[8];
|
extern volatile uint8_t RxData[8];
|
||||||
|
|
||||||
// simpleFOC things
|
// simpleFOC things
|
||||||
#define POLEPAIRS 50
|
#define POLEPAIRS 50
|
||||||
@@ -68,6 +68,8 @@ StepperMotor motor = StepperMotor(POLEPAIRS);
|
|||||||
Commander commander = Commander(SERIALPORT);
|
Commander commander = Commander(SERIALPORT);
|
||||||
|
|
||||||
uint16_t counter = 0;
|
uint16_t counter = 0;
|
||||||
|
extern volatile uint16_t adc1Result[3];
|
||||||
|
extern volatile uint16_t adc2Result[2];
|
||||||
|
|
||||||
// Prototypes
|
// Prototypes
|
||||||
uint8_t configureFOC(void);
|
uint8_t configureFOC(void);
|
||||||
@@ -149,29 +151,11 @@ void loop()
|
|||||||
motor.move();
|
motor.move();
|
||||||
commander.run();
|
commander.run();
|
||||||
|
|
||||||
|
if(counter == 0){
|
||||||
|
|
||||||
if (counter == 0xFF)
|
|
||||||
{
|
|
||||||
PhaseCurrent_s current = currentsense.getPhaseCurrents();
|
|
||||||
digitalToggle(LED_GOOD);
|
digitalToggle(LED_GOOD);
|
||||||
SERIALPORT.print(current.a);
|
Serial.println(adc1Result[0]);
|
||||||
SERIALPORT.print("\t");
|
|
||||||
SERIALPORT.print(current.b);
|
|
||||||
SERIALPORT.print("\t");
|
|
||||||
SERIALPORT.println(current.c);
|
|
||||||
// SERIALPORT.print(sensor.getAngle());
|
|
||||||
// SERIALPORT.print("\t");
|
|
||||||
// SERIALPORT.print(enc.getAngle());
|
|
||||||
// SERIALPORT.print("\t");
|
|
||||||
// SERIALPORT.println(sensor.getABZResolution());
|
|
||||||
|
|
||||||
// SERIALPORT.printf("%d\t%d\t%d\n", sensor.getAngle(), sensor.getABZResolution(), enc.getAngle());
|
|
||||||
counter = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
counter++;
|
|
||||||
|
|
||||||
#ifdef HAS_MONITOR
|
#ifdef HAS_MONITOR
|
||||||
motor.monitor();
|
motor.monitor();
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user