本帖最后由 AutochipsMCU 于 2020-5-14 20:35 编辑
ADC参考电压是由MCU AVDD提供,如果我们在程序中用AVDD供电电压作为参考值来计算ADC采到的电压值。采样的误差则会受到AVDD的误差影响。
ADC通道电压 = ADC采样值 * AVDD / 4095。
注:4095表示是12bit ADC最大值。
对于ADC采样误差没有特别要求的场景,可以用这种方式计算。
如果对误差有要求,且AVDD误差较大不能满足。可通过采bandgap通道电压进行线性校准。
关于bandgap:
1.MCU内部自带两路ADC,bandgap和Tsensor。采集这两个内部通道和外部ADC通道配置一样,只是通道号的区别。
2.bandgap是一个1.2V的基准间隙电压。这个1.2V不随AVDD变化而变化。但如果AVDD变化,采到的ADC值是变化的。
从datasheet可知bandgap的电压误差在10mV以下。
通道电压计算方式:
ADC通道电压 = (AD通道采样值 / Bandgap通道采样值)*1200mV
3.为了进一步提高精度,出厂时会对bandgap电压进行校准。校准值保存到寄存器中。
如果需要更高的精度,可通过读取寄存器的校准值对1200mV进行修正。
void bandgapCali(void)
{
uint32_t TsensorCali = 0;
uint8_t VbandgapRT = 0;
uint16_t bgVol = 0;
TsensorCali = *((uint32_t*)0x40003050); //校准值
VbandgapRT = (uint8_t)(TsensorCali & 0x1F); //低五位为bandgap的校准值
/* BG calibration */
if (VbandgapRT >> 4)//第五位为符号
{
bgVol = 1200 - (VbandgapRT & 0xF); //第五位为1,1200mv减去低4位值
}
else
{
bgVol = 1200 + (VbandgapRT & 0xF); //第五位为0,1200mv加上低4位值
}
}
通道电压计算方式:
ADC通道电压 = (AD通道采样值 / Bandgap通道采样值)*bgVol(mV)
|