STM32F4 ADC之內部溫度傳感器【庫函數操作】


測量芯片周圍的環境溫度用。這個溫度傳感器輸出的電壓與溫度成一定比例,獲取溫度基本就是用ADC測量這個電壓。

在芯片內部,溫度傳感器與ADC1的CH16相連。當不使用改傳感器時,可將其設置為PowerDown模式以省電。

主要特性:

測溫范圍:-45~+125攝氏度

測溫精度:±1.5攝氏度

使用步驟:

1、選擇ADC1 CH16作為ADC的輸入

2、設置采樣時間

3、設置ADC1寄存器ADC_CCR的TSVREFE位,將溫度傳感器從PowerDown模式喚醒。

4、開始ADC轉換

5、讀取轉換值Value並換算成電壓Vsense,Vsense = Value×3300/4096  (mV)

6、計算溫度。

溫度計算公式:Temp = ((Vsense - V25)/Avg_Slope)+25

V25是Vsense 在25度時候的值,Avg_Slope 是溫度轉換率。這兩個值可在datasheet里邊查到。

V25 = 0.76V   Avg_Slope = 2.5 mV/°C

Temp = (Vsense– 760)/2500 + 25;

【代碼實現】

首先,喚醒溫度傳感器:

ADC_TempSensorVrefintCmd(ENABLE);

將上一程序的4通道,改為16通道:

ADC_RegularChannelConfig(ADC1,ADC_Channel_16,4,ADC_SampleTime_144Cycles);

讀取這個轉換的值,用上邊公式計算即可:

aa = adcvalue[i]-760;
printf("當前溫度是: %f攝氏度\r\n",(aa)/2.5+25);
printf("%d\r\n",adcvalue[i]);

這里要注意數據類型,adcvalue定義的是uint16_t的,是無符號數。

 

這里能讀出溫度了,但是還有點問題:溫度不准,夜里讀出的溫度竟然有68度,我乖乖還活不了。不知道是片子工作久了內部溫度高還是我的計算有錯誤。

但是這個溫度確實是隨着溫度的變化而變化的,板子斷電一會溫度就下降了,但還是不准

 

Technorati 標記: STM32F4, ADC, 溫度傳感器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM