[学习笔记] ADC如何采集到更准的电压?

[复制链接]
1900|5
 楼主| AutochipsMCU 发表于 2020-5-14 20:12 | 显示全部楼层 |阅读模式
本帖最后由 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以下。
WeChat Screenshot_20200514195955.png
通道电压计算方式:
ADC通道电压 = (AD通道采样值 / Bandgap通道采样值)*1200mV
3.为了进一步提高精度,出厂时会对bandgap电压进行校准。校准值保存到寄存器中。
如果需要更高的精度,可通过读取寄存器的校准值对1200mV进行修正。
  1. void bandgapCali(void)
  2. {
  3.     uint32_t TsensorCali = 0;
  4.     uint8_t VbandgapRT = 0;
  5.     uint16_t bgVol = 0;
  6.     TsensorCali = *((uint32_t*)0x40003050);  //校准值
  7.     VbandgapRT = (uint8_t)(TsensorCali & 0x1F);  //低五位为bandgap的校准值
  8.     /* BG calibration */
  9.     if (VbandgapRT >> 4)//第五位为符号
  10.     {
  11.         bgVol = 1200 - (VbandgapRT & 0xF); //第五位为1,1200mv减去低4位值
  12.     }
  13.     else
  14.     {
  15.         bgVol = 1200 + (VbandgapRT & 0xF); //第五位为0,1200mv加上低4位值
  16.     }
  17. }

通道电压计算方式:
ADC通道电压 = (AD通道采样值 / Bandgap通道采样值)*bgVol(mV)






kxsi 发表于 2020-6-1 17:18 | 显示全部楼层
非常感谢楼主分享
nawu 发表于 2020-6-1 17:18 | 显示全部楼层
这是从软件上来解决的啊
qcliu 发表于 2020-6-1 17:19 | 显示全部楼层
果然是好办法
tfqi 发表于 2020-6-1 17:19 | 显示全部楼层
长知识了 谢谢
wiba 发表于 2020-6-1 17:19 | 显示全部楼层
楼主辛苦了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

59

主题

268

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部