STM32 之十 供电系统及内部参照电压(VREFINT)使用及改善ADC参考电压
問題
??今天在使用 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的參考電壓
??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轉換時間
在使用上面的方法時,必須要特殊注意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
關于采樣時間需要和外部輸入阻抗搭配,參看下圖和對應的 數據手冊
參考
總結
以上是生活随笔為你收集整理的STM32 之十 供电系统及内部参照电压(VREFINT)使用及改善ADC参考电压的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C/C++ 之 C++强制类型转换(st
- 下一篇: USB 之四 USB 发展(更名)史 /