2023-06-10 04:51 AM - edited 2023-11-20 03:30 AM
Hello,
i'm using STM32G070, The firmware i have programmed converts the analog voltage to didital using ADC. the code is below:
the values i get from this is :
OUTPUT:
In the datasheet it is mention that a resister bridge for VBAT is 39K ohm which has ratio 3 on VBAT measurement .
so according to this the ADC value should be around 1365 which wil give us a voltage vaue of 1.1 but the result is voltage:0.48 and adc value:600.
please give me any suggestion, whats wrong with it.
thanks in advance.
2023-06-10 06:51 AM
I would do:
1- Configure the ADC and perform calibration if possible
2- Do your Vbat mesurement, the real value you will sense is Vbat / 3., the measurement is respective to Vdda for 2047 full scale 12 bit value. (3.0, 3.3, 3.6V etc... )
3- Run a Vref measurement to deduct VddA value in mV
4- Walk back the path to deduct accurately Vbat.
2024-09-17 06:52 PM
Change the sampling time. I used the maximum value 640.5 cycles but you can play with other values. But I know the minimum (default) does not work as I get a lower voltage like ~1V.
I did a initial calibration before the main while loop.
HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);
Measure the VREFP voltage and divide that by 4096 to get the ADC resolution.
#define ADC_RESOLUTION (3.259 / 4096) // my board measure 3.259V
void ADC_Check(void)
{
char str[32] = {0};
float adcVoltage;
if(adc_data.adcRdy)
{
adc_data.adcRdy = false;
adcVoltage = adc_data.adcValue * 3 * ADC_RESOLUTION;
sprintf(str, "vbatt=%f, ADC_Value=0x%lX", adcVoltage, adc_data.adcValue);
UART_DMA_NotifyUser(&uart2_msg, str, strlen(str), true);
}
}
Here is Docklight output