STM32內部參照電壓VREFIN的使用

2021-08-09 07:22:45 字數 2485 閱讀 7993

一、stm32的內部參照電壓vrefint和adcx_in17相連線,它的作用是相當於乙個標準電壓測量點(和msp430不一樣。。),內部參照電壓vrefint只能出現在主adc1中使用。

內部參照電壓vrefint與參考電壓不是一回事。adc的參考電壓都是通過vref+提供的並作為adc轉換器的基準電壓。

當我們使用的vref+是直接取自用vcc電壓時,當vcc電壓波動比較大時或穩壓效能比較差時,可以借用stm32的內部參照電壓vrefint校正測量精度。

以測量1通道的電壓值為例,先讀出參照電壓的adc測量結果,記為adre;再讀出要測量通道1的adc轉換結果,記為adch1;則要測量的電壓為:

vch1 = vrefint* (((adch1*(vref/4096))/(adre*(vref/4096)))  

注:vrefint=1.2v,vref為參考電壓值=3.3v

公式簡化:

vch1 = vrefint*(adch1/adre)  

這種方法等於變相將內部參照電壓vrefint當成是adc參考電壓,也就是說,此時vref參考電壓的準確度已在此已對結果影響不大了,adc的轉換結果基本由vrefint的精度決定。

注:一般情況下,這種辦法只適合於當vref+參考電壓(其實也就是vcc電壓)離散性實在太差的情況下使用。

我們知道,stm32中64腳和小於64腳的型號,vref+在晶元內部與vcc訊號線相連,沒有引到片外,這樣ad的參考電壓就是vcc上的電壓,那麼我們可以使用乙個高精度的外部參照電壓,然後用上面的方法,也許可以解決因vcc電源電壓精度不高帶來的adc測量不準確的問題。

本帖最後由 abbott 於 2014-5-5 08:56 編輯

建議採用以下方法結合使用:

1,採用內部參考

內部參考在晶元出廠時已經校準過精度了!(不清楚是否所有型號都校準過)

其廠內校準過程是在外部供3v電源,將取樣內部參考的adc值寫入校準暫存器vrefint_cal!

因此,我們可以使用以下公式算出實際電壓:

v=(3*vrefint_cal*adc_data)/(vrefint_data*full_scale)

根據這個公式,程式需要獲取vrefint_data和adc_data!

不過我們實際測試這個電壓參考在低溫下偏差比較大,可能是晶元本身的問題,目前還不清楚是全系列,還是個別型號有這個問題!

2,使用過取樣!

二、請教原子大哥,怎麼獲取vrefint_cal的值(就是1.2v)?

stm32f030的,adc模組的內部參考電壓vrefint,datasheet說出廠時把校準值寫入了vrefint_cal,位址是0x1fff f7ba - 0x1fff f7bb,見f030的datasheet 17頁。

可是在程式中用

data2 = *(__io uint32_t *)(0x1ffff7bb);或者

data1 = *(__io uint32_t *)(0x1ffff7ba);

都是跳到了硬體錯誤中斷hardfault_handler中,這是問什麼?

還有類似的,adc有個內部溫度通道,也有個校準值,

說是出廠時存到了0x1fff f7b8 - 0x1fff f7b9    0x1fff f7c2 - 0x1fff f7c3,我試了一下只有0x1fff f7b8這個位址能讀取,其他的一讀就跳到了硬體錯誤中斷,這是為啥?

treesss

檢視完整內容[請看2#樓]

知道怎麼回事了,指標用錯了。存在那個位址裡的資料是8位的,我用的是32位的指標,一讀就讀出界了,所以就發生硬體錯誤了

三、stm32晶元adc內部的ch17參考電壓的用途

每個stm32晶元都有乙個內部的參照電壓,相當於乙個標準電壓測量點,在晶元內部連線到adc1的通道17。

根據資料手冊中的資料,這個參照電壓的典型值是1.20v,最小值是1.16v,最大值是1.24v。這個電壓基本不隨外部供電電壓的變化而變化。

不少人把這個參照電壓與adc的參考電壓混淆。adc的參考電壓都是通過vref+提供的。100腳以上的型號,vref+引到了片外,引腳名稱為vref+;64腳和小於64腳的型號,vref+在晶元內部與vcc訊號線相連,沒有引到片外,這樣ad的參考電壓就是vcc上的電壓。

在adc的外部參考電壓波動,或因為vref+在晶元內部與vcc相連而vcc變化的情況下,如果對於adc測量的準確性要求不高時,可以使用這個內部參照電壓得到adc測量的電壓值。

具體方法是在測量某個通道的電壓值之前,先讀出參照電壓的adc測量數值,記為adrefint;再讀出要測量通道的adc轉換數值,記為adchx;則要測量的電壓為:

vchx = vrefint * (adchx/adrefint)

其中vrefint為參照電壓=1.20v。

from: 

STM32內建參照電壓的使用

每個stm32晶元都有乙個內部的參照電壓,相當於乙個標準電壓測量點,在晶元內部連線到adc1的通道17。根據資料手冊中的資料,這個參照電壓的典型值是1.20v,最小值是1.16v,最大值是1.24v。這個電壓基本不隨外部供電電壓的變化而變化。不少人把這個參照電壓與adc的參考電壓混淆。adc的參考電...

STM32之ADC 內部基準電壓,參考電壓)

轉 stm32內部參照電壓vrefin的使用 每個stm32晶元都有乙個內部的參照電壓,相當於乙個標準電壓測量點,在晶元內部連線到adc1的通道17。根據資料手冊中的資料,這個參照電壓的典型值是1.20v,最小值是1.16v,最大值是1.24v。這個電壓基本不隨外部供電電壓的變化而變化。不少人把這個...

stm32 精確電壓測量法(內部參考電壓)

晶元型號 stm32l051c8 其它型號請參考datasheet,僅供參考 使用adc採集電壓時若使用外部參考電壓,如果外部電壓變化,且低於正常ldo工作電壓時,輸出的電壓將發生改變,導致基準電壓改變而導致adc電壓出現偏差,因此在該晶元上檢視datasheet後得知,廠家已經為我們考慮到這種情況...