打印
[学习笔记]

ADC如何采集到更准的电压?

[复制链接]
1264|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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)






使用特权

评论回复

相关帖子

沙发
kxsi| | 2020-6-1 17:18 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
板凳
nawu| | 2020-6-1 17:18 | 只看该作者
这是从软件上来解决的啊

使用特权

评论回复
地板
qcliu| | 2020-6-1 17:19 | 只看该作者
果然是好办法

使用特权

评论回复
5
tfqi| | 2020-6-1 17:19 | 只看该作者
长知识了 谢谢

使用特权

评论回复
6
wiba| | 2020-6-1 17:19 | 只看该作者
楼主辛苦了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:合肥杰发科技有限公司
简介:四维图新全资子公司 全球多地布局;专注于汽车电子芯片及相关系统的研发与设计 车规级芯片覆盖整车;客户遍及海内外 全球超过8000万辆车搭载杰发科技芯片。

59

主题

268

帖子

11

粉丝