当前位置: 首页 > news >正文

MCU ADC参考电压变化怎么办?

在嵌入式系统设计中,ADC(模数转换器)精度直接决定了系统对模拟信号的感知能力。

然而,很多工程师对ADC参考电压(VREF)的认识仍然存在模糊,尤其是在电池供电电压不稳场景下。

ADC参考电压定义了ADC输入电压与数字输出之间的比例关系:

其中 N 是ADC分辨率(如STM32F103为12位)。 

VREF(即VDDA)稳定时,ADC转换是准确的。

但如果VDDA电压波动,比如电池电量下降,而系统仍使用初始VREF假定值去换算ADC结果,则会导致测量误差。 

以前我做低功耗设备遇到过的一个现象:初始VDDA=3.3V,测得电压2.0V,对应ADC=2482。后来VDDA降到3.0V,但仍用3.3V计算 → 误差超出9%以上!

所以,在供电电压变化的应用中(如电池供电设备),必须动态感知参考电压变化

STM32F103内部集成了一个稳定的基准电压源VREFINT,典型值约1.20V。它连接到ADC通道17,可以通过采样通道17的数据推算实际VREF。

采样VREFINT得到数据 DATAREFINT_DATA ,则有:

进一步,采样实际通道ADCHX的数据 ADCHX_DATA,可计算实际输入电压: 

简化公式:

示例代码如下:

uint16_t Read_ADC_Channel(uint8_t channel);
#define FULL_SCALE    4095.0f
#define VREFINT_TYP   1.20f  // 典型值float Read_Actual_Voltage(uint8_t channel)
{uint16_t refint_data = Read_ADC_Channel(17);   // 读取VREFINTuint16_t chx_data    = Read_ADC_Channel(channel); // 读取实际通道float voltage = VREFINT_TYP * ((float)chx_data / (float)refint_data);return voltage;
}

由于每颗芯片的VREFINT存在个体差异(工艺浮动),需要出厂或用户自校准,校准方法如下:

  • 供电稳定(如VDDA=3.3V);
  • 读取VREFINT通道,记录为REFINT_CAL
  • 保存至Flash存储。

计算公式更新:

新一代STM32(如STM32L5、STM32G4等)内部集成了VREFBUF模块,支持输出稳定参考电压如2.048V或2.5V,直接作为ADC参考电压源。 

相关文章:

  • 宝马中国再度深化AI布局,宣布正式接入DeepSeek技术
  • 【创新实训个人博客】数据库搭建
  • AOSP Android14 Launcher3——Launcher的状态介绍LauncherState类
  • 重合闸的作用与技术解析
  • Server-Side Request Forgery服务器端请求伪造(ssrf)
  • PDFMathTranslate:让数学公式在PDF翻译中不再痛苦
  • PDF嵌入图片
  • 新闻数据接口开发指南:从多源聚合到NLP摘要生成
  • Linux的例行性工作(crontab)
  • 自动驾驶(ADAS)领域常用数据集介绍
  • Windows 安装 Yarn 的教程
  • 4.2.2 MySQL索引原理以及SQL优化
  • LangChain构建大模型应用之RAG
  • java-mybatis01
  • 大模型时代的具身智能:从虚拟到现实的智能体进化革命
  • 用Python做有趣的AI项目 2:用 Python 和 NLTK 构建一个聊天机器人
  • 深度解析如何将图像帧和音频片段特征高效存储到向量数据库 Milvus
  • 深入浅出JVM - Java架构师面试实战
  • 有源晶振输出匹配电阻选择与作用详解
  • Spring security详细上手教学(三)密码管理
  • 稳就业稳经济五方面若干举措将成熟一项出台一项
  • 视觉周刊|2025上海车展的科技范
  • 上海市委常委会传达学习总书记重要讲话精神,研究张江科学城建设等事项
  • 玉渊谭天丨“稀土管制让美国慌了”,美军工稀土储备仅够数月
  • 《深化养老服务改革发展的大湾区探索》新书将于今年6月出版
  • 王旭任甘肃省副省长