电压基准缓冲器VREFBUF
本文主要使用VREFBUF开启内部参考电压(Vref+引脚未与VDDA键合时可以开启),选择内部电压输出的模式(它也可以配置作为输入模式,而后从外界提供一个稳定的电压源)输出2.048V、2.5V的参考电压供ADC使用。
注:前面叙述略繁琐,可直接跳至VREFBUF的使用部分查看,不理解的地方再向上查看,效率更高。
一、VREF+描述
1.VDDA(有时与VREF+键合)
VDDA= 1.62 V (adc /COMPs) / 1.8 V (dac / opamp) /2.4 V (VREFBUE)至3.6 V。VDDA是A/D转换器、D/A转换器、电压参考缓冲器、运算放大器和比较器的外部模拟电源。VDDA电压电平与VDD电压无关。在不使用这些外设时,最好将VDDA连接到VDD。
VDDA不同情况下电压范围:
VDDA供电电压可以不同于VDD。在启用VDDA提供的任何模拟外设(A/D转换器、D/A转换器、比较器、运算放大器、电压参考缓冲器)之前,必须检查VDDA的存在。
2.VREF- 与 VREF+
VREF+是ADC和DAC的输入参考电压。当启用时,它也是内部电压参考缓冲区的输出。
- 当VDDA < 2v时,VREF+必须等于VDDA。
- 当VDDA ≥ 2v时,VREF+必须在2v和VDDA之间。
- 当ADC和DAC不活动时,VREF+可以接地。
- VREF-必须始终等于VSSA。
VREF-和VREF+引脚并非在所有包上都可用。当包中不可用时,它们分别绑定到VSSA和VDDA。当VREF+与封装中的VDDA双键连接时,内部电压参考缓冲区不可用,必须保持禁用状态(请参阅相关设备数据表了解封装引脚描述)。
单片机高于100引脚时,VREF+和VREF-单独引出,如下:
在有些不到100引脚的芯片上,VREF+在内部直接与VDDA连接,VREF-在内部直接与VSSA连接。单片机只引出VDDA、VSSA引脚,在这种情况下ADC的参考电压直接等同于电源电压。而电源电压一般供电3.3V,这也就是为什么我们常认为ADC参考电压为3.3V。
3.VREF+作用
ADC和DAC参考电压为了确保在低压输入和输出上有更好的精度,用户可以在VREF+上连接一个低于VDDA的单独参考电压——VREF+是模拟输入(ADC)或输出(DAC)信号的最高电压,用满量程值表示。
VREF+为ADC的参考电压提供引脚。
VREF+既可以由外部参考电压提供,也可以由内部缓冲电压(VREFBUF)提供。
内部电压参考缓冲区支持两个输出电压,它们在VREFBUF_CSR寄存器中配置VRS位:
- VREF+约2.048 V。要求VDDA大于等于2.4 V。
- VREF+约2.5 V。这要求VDDA等于或高于2.8 V。
为什么不直接连接电源电压,而要重新在内部或外部给予参考电压?
在这种情况下,参考电压不容易受板子上其他负载影响,而导致的参考电压不稳定。
简单来说,就是提供一个更稳定的参考电压。
二、VREFBUF(电压参考缓存器)
1.简介
STM32L476xx器件嵌入了一个电压参考缓冲器,可以作为ADC、DAC的电压参考,也可以通过VREF+引脚作为外部元件的电压参考。
当内部参考电压缓冲器关闭时,可以通过VREF+引脚提供外部参考电压。
在某些封装上,VREF+引脚与VDDA双键合。在这些封装中,内部电压参考缓冲器不可用。
2.功能描述
内部参考电压通过VREFBUF控制和状态寄存器(VREFBUF_CSR)中设置ENVR位来启用。
内部电压参考缓冲区支持两个输出电压,它们在VREFBUF_CSR寄存器中配置VRS位:
· VRS=0:2.048 V
· VRS=1:2.5 V 。
内部基准电压也可以通过VREF+引脚向外部元件提供电压。
VREFBUF特性如下:
内部电压基准可以配置在四种不同的模式,取决于ENVR和HIZ位配置。这些模式如下表所示:
通过设置ENVR位并清除VREFBUF_CSR寄存器中的HIZ位使能VREFBUF后,用户必须等待VRR位设置,即电压参考输出达到预期值。
3.VREFBUF 修边
对于VRS = 1设置,VREFBUF输出电压由st进行出厂校准校准数据在复位时自动加载到TRIM寄存器。
对于VRS = 0设置,没有校准数据。用户可以减少输出电压通过改变TRIM寄存器位。
三、VREFBUF寄存器
VREFBUF由VREFBUF_CSR和VREFBUF_CSR控制。
注:不同低功耗模式下的VREFBUF
- ADCx (x=1,2,3),温度传感器和VREFBUF缓冲器在停止0模式期间会消耗功率,除非在进入该模式之前将其禁用。
- ADCx, OPAMPx, DAC_CHx,温度传感器和VREFBUE缓冲区可以消耗除非它们在进入该模式之前被禁用,否则在停止2模式期间将无法使用电源。
四、VREFBUF的使用
示例:配置启用内部参考电压,并且输出2.048V。
注:比较偏底层的设置,STM32CubeMX上未找到直接配置的地方,但可以在生成代码中进行修改(有了解直接STM32CubeMX上配置的可在【评论区】补充)
1.在生成的main函数中找到HAL_Init();
(Ctrl+F12跳转)。
2.在跳转的HAL_Init(void)
函数中找到HAL_MspInit();
(初始化底层硬件的函数),再Ctrl+F12跳转查找。
3…在跳转的void HAL_MspInit(void)
函数中可以找到VREFBUF的配置:
// HAL_SYSCFG_VREFBUF_VoltageScalingConfig(SYSCFG_VREFBUF_VOLTAGE_SCALE1);//配置内部参考电压为2.5V输出
HAL_SYSCFG_VREFBUF_VoltageScalingConfig(SYSCFG_VREFBUF_VOLTAGE_SCALE0);//配置内部参考电压为2.048V输出
HAL_SYSCFG_EnableVREFBUF();//使能内部电压参考缓冲
/**Configure the internal voltage reference buffer high impedance mode */
HAL_SYSCFG_VREFBUF_HighImpedanceConfig(SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE);
五、总结
本文主要使用VREFBUF开启内部参考电压(Vref+引脚未与VDDA键合时可以开启),选择内部电压输出的模式(它也可以配置作为输入模式,而后从外界提供一个稳定的电压源)输出2.048V、2.5V的参考电压供ADC使用。
使ADC转换准确的方式不止这一种,也可通过内部VREFINT进行测量校准ADC的参考电压实际是多少,而使测量更准确。放在后面的文章进行说明。