STM32F407 内部参考电压校准实现 HAL库

校准的是什么?

首先,这个校准机制校准的是系统中电源电压VDD,不校准的情况下我们默认它是3.3V

怎么校准?

STM32F407 提供了一个内部固定参考电压VREFINT ,这是一个精确的1.21V 固定电压源。在芯片制造时,厂家将VREFINT 在3.3V的电源电压下的ADC采样值记录在了flash地址0x1FFF7A2A

什么意思呢?厂家出厂的时候给了一个很精确的3.3V电源作为VDD,并记录了在该精准3.3V下,内部那个精确1.21V 固定电压源的ADC采样值,并记在了0x1FFF7A2A这个地方。我们实际使用的时候VDD不一定是精准的3.3V,而内部那个1.21V 电压源是精确的,0x1FFF7A2A这个地方记录的ADC采样值也是精确的,这样就可以用这两个精确的值去计算出精确的VDD值(这里好好体会一下)

怎么计算?

将flash地址0x1FFF7A2A中记录的uint16值记为VREFINT_CAL,将ADC在当前这个需要校准的VDD下采样的内部那个精确1.21V固定电压源的ADC采样值记为VREFINT_ADC,那么当前的VDD如下:

体会一下,假如VREFINT_ADC大于VREFINT_CAL,那不就是当前的参考电压VDD比出厂时的精确的3.3V小了?反之亦然(这里要结合逐次比较型ADC的采样原理理解)

代码实现

核心的也就下面这几行

复制代码
FLASH_READ_boo(0x1FFF7A2A, &VREFINT_CAL, 1);

VREFINT_ADC = ADC1_sampling.average_Vrefint;

校准后的ADC采样值 = ADC采样值 * VREFINT_CAL/VREFINT_ADC

如果对ADC采样过程不清除可以参考我之前写的STM32 f407 多通道ADC采集+DMA传输 基于HAL库和Cubemx配置_stm32f407 adc dma-CSDN博客

对flash读写不清楚的话可以参考另一篇STM32 使用HAL库实现flash读写_stm32 hal flash-CSDN博客

体会

实测下来,以上方法校准VDD用处不大,校准前和校准后基本也就差个0.1%~0.3%,VDD在大部分情况下还是比较准的,不如直接校准零点来的直接。

补充:后续测试发现零点偏移也很小,很多端口连0.1%的偏差都不到,公司的控制器做的还是可以的,给硬件的同事点个赞!

相关推荐
单片机杂货铺2 小时前
基于STM32的智能市政清洁小车系统设计
stm32·单片机·嵌入式硬件·物联网·硬件工程
单片机杂货铺2 小时前
基于STM32的智能书房系统的设计
stm32·单片机·嵌入式硬件·51单片机·硬件工程
普科PRBTEK2 小时前
电流探头的常见应用场景
单片机·嵌入式硬件
qq_401700413 小时前
3个常用的单片机实现隔离控制大电流负载例子
单片机·嵌入式硬件
weixin_456808383 小时前
【沁恒蓝牙开发】BLE常见错误码与解析
c语言·单片机·嵌入式硬件
电化学仪器白超4 小时前
禹衡光栅长度计精度评测:基于国标0级氧化锆量块的校正与数据分析
python·单片机·嵌入式硬件·物联网·自动化
LCMICRO-133108477464 小时前
国产长芯微LPS7118完全pin-pin替代ADP7118,是一款采用 CMOS 技术设计的低噪声、高 PSRR、快速瞬态响应、低压差线性稳压器
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·线性稳压器·adp7118
LCMICRO-133108477464 小时前
国产长芯微LM3042完全P2P替代LT3042,是一款高性能低压差线性稳压器
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·线性稳压器·lt3042
qq_401700414 小时前
TPS5430电源芯片18V转3V的电源电路,效率可高达90%
单片机·嵌入式硬件
hongmai6668885 小时前
ESP8684-WROOM-02C:一块被低估的RISC-V Wi-Fi模组
单片机·嵌入式硬件·物联网·5g·智能路由器·risc-v