2017-01-31 111 views
0

我正在使用STM32F401RE Nucleo板來測量環境溫度。採樣過程結束後,我收到來自ADC_CHANNEL_TEMPERATURE的數字值,並且我想將此數字值轉換爲C°。我在網上搜索這個有關,我發現了兩個不同的方法:使用STMF401RE Nucleo計算溫度傳感器的正確公式?

方法1:頁226 http://www.st.com/content/ccc/resource/technical/document

Temp(degree) = (V_sense - V_25)/Avg_slope + 25 

方法2:頁251 http://www.st.com/content/ccc/resource/technical/document

Temp(degree) = (((110 - 30)*(TS_DATA - TS_CAL1))/(TS_CAL_2 - TS_CAL_1)) + 30 
Where: 
    - TS_CAL2: temperature sensor calibration value at 110 C° 
    - TS_CAL1: temperature sensor calibration value at 30 C° 
    - TS_DATA: temperature sensor output from ADC 

它混淆了我這一個是用C°計算溫度的正確公式。 儘管方法1來自STM32F401的參考手冊,但溫度結果看起來不正確。雖然STM32F0系列參考手冊中的方法2看起來更合理。

我仍然不知道在使用STM32F401RE Nucleo板時應該使用哪一個公式?

+0

出於好奇,你用兩種方法測量什麼,以及你用什麼作爲參考溫度? –

+0

第二個等式不正確,它應該是「80」或「110 - 30」。 –

+0

嗨,第二個方程中有一個輸入錯誤(現在已更正)。我有一個烤箱,可以控制溫度。我使用室溫(20oC),-10oC,60oC作爲參考溫度。我從方程2得到的結果對參考溫度更合理。 – bienle

回答

2

方法1 Temp(degree) = (V_sense - V_25)/Avg_slope + 25是一種簡化版本,其中校準大概是通過預先測量25°的值並將其分配給V_25完成的。在這種情況下,Avg_slope可能來自數據表 - 但它也可能是一些校準的結果。

方法2 Temp(degree) = (((110 - 30)*(TS_DATA - TS_CAL1))/(TS_CAL_2 - TS_CAL_1)) + 30使用兩個校準點,在30°和110°,並且更加正確。請注意,方法1也可以使用兩個校準點(用於計算平均斜率)。另外,方法2可讓您在任何地方取得您的校準點(大概在您更感興趣的範圍內)。

然而,這兩種方法都受傳感器的非線性(如果有的話)的影響。我認爲存在一些非線性,因爲方法1講述了「平均斜率」。 如果您想要更高的精度,您可以使用多個校準點並在它們之間進行插值。

+0

感謝@linuxfan,現在我對溫度傳感器的計算有了更好的理解。 – bienle

+1

@bienle不客氣。正如在本網站的幫助下所說的,你應該接受答案,而不是感謝...... :-) – linuxfan

+1

@bienle,有重要的注意事項。 STM32F0xx隨附經過校準的溫度傳感器:每個MCU都有TS_CAL1和TS_CAL2值,存儲在閃存的固定地址處。有了這款MCU,您只需要讀取ADC的值,從閃存讀取數值並計算精確的溫度。你的MCU沒有校準,所以你需要在常用之前做。 –

0

我目前使用微控制器STM32 F030 c8t6 :問題:是TS_DATA =(ADC值)*(VDD/VREF)或TS_DATA =(ADC值)溫度傳感器ADC值時,溫度傳感器的信道是激活??