stm32 之十 供电系统及内部参照电压(vrefint)使用及改善adc参考电压 -ag凯发k8国际
今天在使用 stm32f407 的 adc 时遇到一个问题:adc 的参考电压都是通过 vref 引脚提供的并作为adc转换器的基准电压(部分 mcu 没有 vref 引脚)。当我们使用的 vref 是直接取自用 vdd 电压时,当 vdd 电压波动比较大时或稳压性能比较差时,转换结果自然就不准确了!
mcu 的参考手册都会有一章节单独介绍 mcu 的电源管理,针对不同的 mcu(封装不同等)其外部电源如何连接也是有要求的,我们在 mcu 上一般都会发现如下引脚(注意不同 mcu 是有区别的):
- vdd / vss: vdd is the external power supply for the i/os, the internal regulator and the system analog such as reset, power management and internal clocks. it is provided externally through vdd pins.
- vdda / vssa: vdda 是a/d转换器,d/a 转换器,参考电压缓冲器,运算放大器和比较器的外部模拟电源。 vdda 电压电平与 vdd 电压无关。 不使用这些外设时,最好将 vdda 连接到 vdd。
- vbat: 当不存在 vdd 时,vbat 是 rtc,外部时钟 32khz 振荡器和备用寄存器(通过电源开关)的电源。 对于没有专用引脚的小型封装,vbat内部连接到了 vdd
- vref / vref-: vref 是 adc 和 dac 的输入参考电压。 使能后,它也是内部参考电压缓冲器的输出。当不使用 adc 和 dac 时,vref 可以接地。vre- 必须始终等于 vssa。
vref- 和 vref 引脚并非在所有封装中都可用。 如果封装上未提供它们,则它们在 mcu 内部分别与 vssa 和 vdda 相连。
下面以 stm32f1 和 stm32f2 的 mcu 比较来具体看看。供电架构如下图所示:
不同的供电所管理的供电域
供电电压范围
- vdd 引脚外接去藕电容连到外部稳压源
- 一个最小值4.7uf、典型值 10uf 的钽电容或陶瓷电容
- 每个 vdd 引脚再接一个100nf 的陶瓷电容
- vbat 引脚外接电池。若没有电池,推荐通过100nf的陶瓷电容连到vdd引脚
- vdda 引脚外接两个去藕电容
- 一个 100nf 的陶瓷电容
- 一个 1uf 的钽电容或陶瓷电容
- vref 引脚连到 vdda
- 若有单独的参考稳压源连接一个100nf 和 1uf 的电容
- vcap1 和 vcap2 通常只各连接一个 2.2uf 的电容
- 特殊封装上,可外接 1.2v 电源来旁路内部主电压调节器
- 特殊封装上,可外接 1.2v 电源来旁路内部主电压调节器
adc 可以主要有连个电源: 供电电源 和 参考电源 。参考电源就是在转换数值时候的基准。在部分 mcu 的封装中,会有单独的一个 vref 引脚,这个引脚就是提供参考电源的
我们可以把外部基准电压芯片(例如ref3133,输出的电压是标准的3.300v)连接到 vref 引脚。一般 100 脚的 stm32 mcu(如上图stm32f4)都有 vref 引脚。对于 100 脚以下的芯片,stm32 没有把 vref 引脚引出来,而是直接在内部连接到了 vdda 引脚。这样就导致了 adc 的供电电源和参考电源实际是一个。
注意,stm32 单片机上面有好多电源引脚,其中有若干 vdd 引脚,只有一个 vdda 引脚,vdda 引脚就是模拟供电引脚。不过,需要注意,vdda 的电压不是随便定义的。例如,stm32f051 系列单片机就规定,vdda 必须要大于或者等于 vdd 才可以正常工作,所以这时候,最好是给单片机 3.0v 供电,再给 vdda 采用一个 3.3v 的基准电压芯片供电。
为啥会要求 vdda 必须要大于或者等于 vdd?这是因为在 mcu内部 vdda 和 adc 的参考电压有联系。
以上两种方法都需要外加基准电压芯片,在实际应用中,往往是 vdda 引脚和 vdd 引脚连在一起,而没有 vref 引脚的片子,内部 vref 有是和 vdda 接一起的,这就到了整片子都是由电源芯片供电。这个时候如果要提高 adc 转换准确性该怎么办呢?
针对上面这种情况,在每个 mcu 的内部,都有一个叫内部参照电压的东西。更关于该部分的介绍,位于对应 mcu 的 数据手册 中(不同mcu的 数据手册 介绍有多又少,同样是 stm32f0 的 数据手册 介绍更为详细),如下图:
但是这个值有可能也是不准确的,那怎么办呢?st 提供了一个方案:stm32 可以通过配置将 vrefint 接入到 adc 内部的通道,然后我们就可以测量 vrefint 到底是多少。mcu 不同具体链接的 adc 引脚也是不同的。下面是 stm32f4 芯片的参考手册的说明:
在 mcu 出厂测试的时候,st 为我们提供了一个校准值,校准过程是在外部供 3.3v 电源,将采样内部参考的 adc 值写入到 mcu 固定的内存中去的
这样我们就可以用 adc 实际采样,得到 vrefint 的采样值,然后使用上面的校准值进行计算即可!
关于使用内部参照电压的具体方法,只有部分芯片的参考手册中才能找到( 如下图是 stm32f0x ),其他 mcu 的参考手册都是很简单的几句说明。
更进一步,在计算其他通道的时候,我们就可以使用以上计算的 vdda 来作为基准了!
需要特殊注意的是,在不同系列的芯片中,以上是有区别的,例如以下是 stm32l476 系列的
那么,vdda = 3.0v x vrefint_cal / vrefint_data 这个公式是咋么来的的呢?下面我们以上 stm32l476 这个图为例来推导一下。
在使用上面的方法时,必须要特殊注意adc转换时间。否则采样值将出现较大偏差!先看看每个通道的总转换时间公式:每个通道总的转换时间 = tsampling tconversion
- tsampling可配置:smp@adc_smprx,需要和外部电路的输入阻抗匹配(在对应的数据手册中会有详细说明)
- tconversion取决于转换精度:res@adc_cr1,降低转换精度可提高转换速度
adc总转换时间为:ttotal = (smp res) * adcclk
- smp:采样时间,需要和外部输入阻抗搭配
- res:转换精度,降低精度可提高速度
- adcclk:adc模块工作时钟
- adcclk = apb2时钟分频(2,4,6,8)
- adcclk最大值还受限于工作电压
- vdda=1.8~2.4v fadcmax = 15mhz
- vdda=2.4~3.6v fadcmax = 30mhz
为什么要说adc采样时间?因为上一节所讲的方法,对于采样时间是有限制的!!!
- 温度传感器
- vbat
- vrefint
关于采样时间需要和外部输入阻抗搭配,参看下图和对应的 数据手册
总结
以上是ag凯发k8国际为你收集整理的stm32 之十 供电系统及内部参照电压(vrefint)使用及改善adc参考电压的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: c/c 之 c 强制类型转换(st
- 下一篇: