2019-09-23 02:39 AM
would like to read ADC value for vbat consecutively.
First read Vbat
Second read VREFINT.
implementation is like below.
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc1.Init.LowPowerAutoWait = DISABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc1.Init.OversamplingMode = DISABLE;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_8; <-- vbat channel
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_VREFINT;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
read vbat and vrefint
HAL_ADC_Start(&hadc1);
/* Get 1st channel conv.value (ADC_IN8 - VDD) */
res = HAL_ADC_PollForConversion(&hadc1, POLLING_CONVERSION_TIME);
if (res != HAL_OK) {
goto VbatMeasureError;
}
vdd = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
/* Get 2nd channel conv.value (ADC_VREFINT) */
res = HAL_ADC_PollForConversion(&hadc1, POLLING_CONVERSION_TIME);
if (res != HAL_OK) {
goto VbatMeasureError;
}
vrefint = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
but the results are not expected values.
vdd is 1502, vrefint is 1501.
Looks ADC seems to read vrefint always.
How can I read ADC both vbat and vrefint?
2019-09-23 02:49 AM
> sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5;
That's a really short sampling time.
2019-09-23 04:54 AM
VBAT should be on channel 18 not 8
Did you use an external low drop diode between VBAT and VCC?
2019-09-23 07:49 AM
HAL L4 library version 1.14.0 for L4R5ZI projects has an ADC_Sequencer example that you can easily adapt.
Cheers, Hal
2019-09-23 10:38 AM
What is your Vbat voltage? Is it withing the ADC vaild range?