fix opamp instance

fix voltage scale in utils.cpp
fix switch case for pins in _readADCVoltageInline

added commented out lines for my motor config, changed PID values, added global monitor variables near loop
This commit is contained in:
copper280z
2023-11-15 08:52:30 -05:00
parent 37d5e4b64c
commit fef9087a00
4 changed files with 45 additions and 23 deletions

View File

@@ -26,6 +26,10 @@ void MX_ADC1_Init(void)
hadc1.Init.DMAContinuousRequests = ENABLE;
hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc1.Init.OversamplingMode = DISABLE;
hadc1.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_16;
hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;
hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
hadc1.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
SIMPLEFOC_DEBUG("HAL ADC1 Init fail.");
@@ -74,6 +78,10 @@ void MX_ADC2_Init(void)
hadc2.Init.DMAContinuousRequests = ENABLE;
hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc2.Init.OversamplingMode = DISABLE;
hadc2.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_16;
hadc2.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;
hadc2.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
hadc2.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
if (HAL_ADC_Init(&hadc2) != HAL_OK)
SIMPLEFOC_DEBUG("HAL ADC2 init failed!");

View File

@@ -26,7 +26,7 @@ void configureOPAMPs(void)
if(HAL_OPAMP_Init(&hopamp2) != HAL_OK)
SIMPLEFOC_DEBUG("OPAMP2 init failed.");
hopamp3.Instance = OPAMP2;
hopamp3.Instance = OPAMP3;
hopamp3.Init.PowerMode = OPAMP_POWERMODE_NORMALSPEED;
hopamp3.Init.Mode = OPAMP_FOLLOWER_MODE;
hopamp3.Init.NonInvertingInput = OPAMP_NONINVERTINGINPUT_IO1;

View File

@@ -7,8 +7,8 @@
#include "opamp.h"
float adcResolution = 4096.0f; // 12 bit ADC
float voltageScale = 3.3f; // full scale voltage range of ADC
float adcSens = adcResolution * voltageScale;
float voltageScale = 2.9f; // full scale voltage range of ADC
float adcSens = voltageScale / adcResolution;
volatile uint16_t adc1Result[3] = {0};
volatile uint16_t adc2Result[2] = {0};
@@ -28,24 +28,24 @@ void MX_GPIO_Init(void)
float _readADCVoltageInline(const int pin, const void *cs_params)
{
// SIMPLEFOC_DEBUG("READ ADC VOLTAGE");
uint32_t rawResult;
uint16_t rawResult;
switch (pin)
{
case PA2:
rawResult = adc1Result[1];
case PA3:
rawResult = adc1Result[0];
break;
case PA3:
rawResult = adc1Result[0]; // ADC1 CH13 -> Vopamp1 internal output
case PB13:
rawResult = adc2Result[0]; // ADC1 CH13 -> Vopamp1 internal output
break;
case PB0:
rawResult = adc2Result[0]; // ADC2 CH16 -> Vopamp2 internal output
rawResult = adc2Result[1]; // ADC2 CH16 -> Vopamp2 internal output
break;
case PA13:
rawResult = adc2Result[2]; // ADC2 CH18 -> Vopamp3 internal output
break;
// case PA13:
// rawResult = adc2Result[2]; // ADC2 CH18 -> Vopamp3 internal output
// break;
// case PA2:
// rawResult = adc1Result[1]; // ADC1 CH16 -> not sure what pin should represent this?