Skip to content

Commit dde5cb1

Browse files
committed
g431-esc: use internal ADC channels, also fix some typos
1 parent c4e8470 commit dde5cb1

File tree

5 files changed

+98
-23
lines changed

5 files changed

+98
-23
lines changed

src/common/base_classes/FOCMotor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
#define _MON_ANGLE 0b0000001 // monitor angle value
2323

2424
/**
25-
* Motiron control type
25+
* Motion control type
2626
*/
2727
enum MotionControlType : uint8_t {
2828
torque = 0x00, //!< Torque control

src/communication/Commander.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
enum VerboseMode : uint8_t {
1616
nothing = 0x00, // display nothing - good for monitoring
1717
on_request = 0x01, // display only on user request
18-
user_friendly = 0x02, // display textual messages to the user
18+
user_friendly = 0x02, // display textual messages to the user
1919
machine_readable = 0x03 // display machine readable commands, matching commands to set each settings
2020
};
2121

@@ -86,7 +86,7 @@ class Commander
8686
void run(char* user_input);
8787

8888
/**
89-
* Function adding a callback to the coomander withe the command id
89+
* Function adding a callback to the commander with the command id
9090
* @param id - char command letter
9191
* @param onCommand - function pointer void function(char*)
9292
* @param label - string label to be displayed when scan command sent

src/current_sense/hardware_specific/stm32/b_g431/b_g431_hal.cpp

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,11 @@ void MX_ADC1_Init(ADC_HandleTypeDef* hadc1)
9595
hadc1->Init.EOCSelection = ADC_EOC_SINGLE_CONV;
9696
hadc1->Init.LowPowerAutoWait = DISABLE;
9797
hadc1->Init.ContinuousConvMode = DISABLE;
98+
#ifdef OPAMP_USE_INTERNAL_CHANNEL
99+
hadc1->Init.NbrOfConversion = 4;
100+
#else
98101
hadc1->Init.NbrOfConversion = 5;
102+
#endif
99103
hadc1->Init.DiscontinuousConvMode = DISABLE;
100104
hadc1->Init.ExternalTrigConv = ADC_EXTERNALTRIG_T1_TRGO;
101105
hadc1->Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
@@ -114,9 +118,10 @@ void MX_ADC1_Init(ADC_HandleTypeDef* hadc1)
114118
{
115119
SIMPLEFOC_DEBUG("HAL_ADCEx_MultiModeConfigChannel failed!");
116120
}
121+
#ifndef OPAMP_USE_INTERNAL_CHANNEL
117122
/** Configure Regular Channel
118123
*/
119-
sConfig.Channel = ADC_CHANNEL_12; // ADC1_IN12 = PB1 = OP3_OUT
124+
sConfig.Channel = ADC_CHANNEL_12; // ADC1_IN12 = PB1 = OP3_OUT or ADC2_IN18 for internal channel
120125
sConfig.Rank = ADC_REGULAR_RANK_1;
121126
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
122127
sConfig.SingleDiff = ADC_SINGLE_ENDED;
@@ -126,10 +131,16 @@ void MX_ADC1_Init(ADC_HandleTypeDef* hadc1)
126131
{
127132
SIMPLEFOC_DEBUG("HAL_ADC_ConfigChannel failed!");
128133
}
134+
#endif
129135
/** Configure Regular Channel
130136
*/
131-
sConfig.Channel = ADC_CHANNEL_3; // ADC1_IN3 = PA2 = OP1_OUT
137+
#ifdef OPAMP_USE_INTERNAL_CHANNEL
138+
sConfig.Channel = ADC_CHANNEL_13; // ADC1_IN3 = PA2 = OP1_OUT or ADC1_IN13 for internal channel
139+
sConfig.Rank = ADC_REGULAR_RANK_1;
140+
#else
141+
sConfig.Channel = ADC_CHANNEL_3; // ADC1_IN3 = PA2 = OP1_OUT or ADC1_IN13 for internal channel
132142
sConfig.Rank = ADC_REGULAR_RANK_2;
143+
#endif
133144
if (HAL_ADC_ConfigChannel(hadc1, &sConfig) != HAL_OK)
134145
{
135146
SIMPLEFOC_DEBUG("HAL_ADC_ConfigChannel failed!");
@@ -140,7 +151,11 @@ void MX_ADC1_Init(ADC_HandleTypeDef* hadc1)
140151
/* Configure Regular Channel (PB12, Potentiometer)
141152
*/
142153
sConfig.Channel = ADC_CHANNEL_11;
154+
#ifdef OPAMP_USE_INTERNAL_CHANNEL
155+
sConfig.Rank = ADC_REGULAR_RANK_2;
156+
#else
143157
sConfig.Rank = ADC_REGULAR_RANK_3;
158+
#endif
144159
sConfig.SamplingTime = ADC_SAMPLETIME_47CYCLES_5;
145160
sConfig.SingleDiff = ADC_SINGLE_ENDED;
146161
sConfig.OffsetNumber = ADC_OFFSET_NONE;
@@ -153,7 +168,11 @@ void MX_ADC1_Init(ADC_HandleTypeDef* hadc1)
153168
/** Configure Regular Channel (PB14, Temperature)
154169
*/
155170
sConfig.Channel = ADC_CHANNEL_5;
171+
#ifdef OPAMP_USE_INTERNAL_CHANNEL
172+
sConfig.Rank = ADC_REGULAR_RANK_3;
173+
#else
156174
sConfig.Rank = ADC_REGULAR_RANK_4;
175+
#endif
157176
sConfig.SamplingTime = ADC_SAMPLETIME_47CYCLES_5;
158177
sConfig.SingleDiff = ADC_SINGLE_ENDED;
159178
sConfig.OffsetNumber = ADC_OFFSET_NONE;
@@ -163,10 +182,14 @@ void MX_ADC1_Init(ADC_HandleTypeDef* hadc1)
163182
SIMPLEFOC_DEBUG("HAL_ADC_ConfigChannel failed!");
164183
}
165184

166-
/** Configure Regular Channel (PB14, Temperature)
185+
/** Configure Regular Channel (PA0, VBUS)
167186
*/
168187
sConfig.Channel = ADC_CHANNEL_1;
188+
#ifdef OPAMP_USE_INTERNAL_CHANNEL
189+
sConfig.Rank = ADC_REGULAR_RANK_4;
190+
#else
169191
sConfig.Rank = ADC_REGULAR_RANK_5;
192+
#endif
170193
sConfig.SamplingTime = ADC_SAMPLETIME_47CYCLES_5;
171194
sConfig.SingleDiff = ADC_SINGLE_ENDED;
172195
sConfig.OffsetNumber = ADC_OFFSET_NONE;
@@ -208,7 +231,11 @@ void MX_ADC2_Init(ADC_HandleTypeDef* hadc2)
208231
hadc2->Init.EOCSelection = ADC_EOC_SINGLE_CONV;
209232
hadc2->Init.LowPowerAutoWait = DISABLE;
210233
hadc2->Init.ContinuousConvMode = DISABLE;
234+
#ifdef OPAMP_USE_INTERNAL_CHANNEL
235+
hadc2->Init.NbrOfConversion = 2;
236+
#else
211237
hadc2->Init.NbrOfConversion = 1;
238+
#endif
212239
hadc2->Init.DiscontinuousConvMode = DISABLE;
213240
hadc2->Init.ExternalTrigConv = ADC_EXTERNALTRIG_T1_TRGO;
214241
hadc2->Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
@@ -221,7 +248,11 @@ void MX_ADC2_Init(ADC_HandleTypeDef* hadc2)
221248
}
222249
/** Configure Regular Channel
223250
*/
224-
sConfig.Channel = ADC_CHANNEL_3; // ADC2_IN3 = PA6
251+
#ifdef OPAMP_USE_INTERNAL_CHANNEL
252+
sConfig.Channel = ADC_CHANNEL_16; // ADC2_IN3 = PA6 = OP2_OUT or ADC2_IN16 for internal channel
253+
#else
254+
sConfig.Channel = ADC_CHANNEL_3; // ADC2_IN3 = PA6 = OP2_OUT or ADC2_IN16 for internal channel
255+
#endif
225256
sConfig.Rank = ADC_REGULAR_RANK_1;
226257
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
227258
sConfig.SingleDiff = ADC_SINGLE_ENDED;
@@ -231,6 +262,20 @@ void MX_ADC2_Init(ADC_HandleTypeDef* hadc2)
231262
{
232263
SIMPLEFOC_DEBUG("HAL_ADC_ConfigChannel failed!");
233264
}
265+
#ifdef OPAMP_USE_INTERNAL_CHANNEL
266+
/** Configure Regular Channel
267+
*/
268+
sConfig.Channel = ADC_CHANNEL_18; // ADC1_IN12 = PB1 = OP3_OUT or ADC2_IN18 for internal channel
269+
sConfig.Rank = ADC_REGULAR_RANK_2;
270+
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
271+
sConfig.SingleDiff = ADC_SINGLE_ENDED;
272+
sConfig.OffsetNumber = ADC_OFFSET_NONE;
273+
sConfig.Offset = 0;
274+
if (HAL_ADC_ConfigChannel(hadc2, &sConfig) != HAL_OK)
275+
{
276+
SIMPLEFOC_DEBUG("HAL_ADC_ConfigChannel failed!");
277+
}
278+
#endif
234279
/* USER CODE BEGIN ADC2_Init 2 */
235280

236281
/* USER CODE END ADC2_Init 2 */

src/current_sense/hardware_specific/stm32/b_g431/b_g431_hal.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ void MX_ADC2_Init(ADC_HandleTypeDef* hadc2);
1313
void MX_OPAMP1_Init(OPAMP_HandleTypeDef* hopamp);
1414
void MX_OPAMP2_Init(OPAMP_HandleTypeDef* hopamp);
1515
void MX_OPAMP3_Init(OPAMP_HandleTypeDef* hopamp);
16+
17+
#define OPAMP_USE_INTERNAL_CHANNEL
1618
#endif
1719

1820
#endif

src/current_sense/hardware_specific/stm32/b_g431/b_g431_mcu.cpp

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@
1111

1212
#define _ADC_VOLTAGE 3.3f
1313
#define _ADC_RESOLUTION 4096.0f
14+
#ifdef OPAMP_USE_INTERNAL_CHANNEL
15+
#define ADC_BUF_LEN_1 4
16+
#define ADC_BUF_LEN_2 2
17+
#else
1418
#define ADC_BUF_LEN_1 5
1519
#define ADC_BUF_LEN_2 1
20+
#endif
1621

1722
static ADC_HandleTypeDef hadc1;
1823
static ADC_HandleTypeDef hadc2;
@@ -39,23 +44,46 @@ Stm32AdcInterruptConfig adc_interrupt_config[5] = {
3944
// function reading an ADC value and returning the read voltage
4045
// As DMA is being used just return the DMA result
4146
float _readADCVoltageLowSide(const int pin, const void* cs_params){
42-
uint32_t raw_adc = 0;
43-
if(pin == PA2) // = ADC1_IN3 = phase U (OP1_OUT) on B-G431B-ESC1
44-
raw_adc = adcBuffer1[1];
45-
else if(pin == PA6) // = ADC2_IN3 = phase V (OP2_OUT) on B-G431B-ESC1
47+
uint32_t raw_adc;
48+
#ifdef OPAMP_USE_INTERNAL_CHANNEL
49+
#define ADC1_OFFSET 0
50+
#else
51+
#define ADC1_OFFSET 1
52+
#endif
53+
54+
switch (pin)
55+
{
56+
case A_OP1_OUT:
57+
case -1:
58+
raw_adc = adcBuffer1[0+ADC1_OFFSET];
59+
break;
60+
case A_OP2_OUT:
61+
case -2:
4662
raw_adc = adcBuffer2[0];
47-
#ifdef PB1
48-
else if(pin == PB1) // = ADC1_IN12 = phase W (OP3_OUT) on B-G431B-ESC1
63+
break;
64+
#ifdef A_OP3_OUT
65+
case A_OP3_OUT:
66+
#endif
67+
case -3:
68+
#ifdef OPAMP_USE_INTERNAL_CHANNEL
69+
raw_adc = adcBuffer2[1];
70+
#else
4971
raw_adc = adcBuffer1[0];
50-
#endif
51-
52-
else if (pin == A_POTENTIOMETER)
53-
raw_adc = adcBuffer1[2];
54-
else if (pin == A_TEMPERATURE)
55-
raw_adc = adcBuffer1[3];
56-
else if (pin == A_VBUS)
57-
raw_adc = adcBuffer1[4];
58-
72+
#endif
73+
break;
74+
case A_POTENTIOMETER:
75+
raw_adc = adcBuffer1[1+ADC1_OFFSET];
76+
break;
77+
case A_TEMPERATURE:
78+
raw_adc = adcBuffer1[2+ADC1_OFFSET];
79+
break;
80+
case A_VBUS:
81+
raw_adc = adcBuffer1[3+ADC1_OFFSET];
82+
break;
83+
default:
84+
raw_adc = 0;
85+
break;
86+
}
5987
return raw_adc * ((Stm32CurrentSenseParams*)cs_params)->adc_voltage_conv;
6088
}
6189

@@ -65,7 +93,7 @@ void _configureOPAMP(OPAMP_HandleTypeDef *hopamp, OPAMP_TypeDef *OPAMPx_Def){
6593
hopamp->Init.PowerMode = OPAMP_POWERMODE_HIGHSPEED;
6694
hopamp->Init.Mode = OPAMP_PGA_MODE;
6795
hopamp->Init.NonInvertingInput = OPAMP_NONINVERTINGINPUT_IO0;
68-
hopamp->Init.InternalOutput = DISABLE;
96+
hopamp->Init.InternalOutput = ENABLE;
6997
hopamp->Init.TimerControlledMuxmode = OPAMP_TIMERCONTROLLEDMUXMODE_DISABLE;
7098
hopamp->Init.PgaConnect = OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0_BIAS;
7199
hopamp->Init.PgaGain = OPAMP_PGA_GAIN_16_OR_MINUS_15;

0 commit comments

Comments
 (0)