2017-01-31 6 views
0

Ich benutze STM32F401RE Nucleo Board, um die Umgebungstemperatur zu messen. Nach dem Abtastvorgang erhalte ich einen digitalen Wert von ADC_CHANNEL_TEMPERATURE und möchte diesen digitalen Wert in C ° umrechnen. Ich suchte im Internet für dieses und ich fand zwei verschiedene Methoden:Richtige Formel zur Berechnung des Temperatursensors mit STMF401RE Nucleo?

Methode 1: Seite 226 in http://www.st.com/content/ccc/resource/technical/document

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

Methode 2: Seite 251 in 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 

Es verwirrt mich das Eine ist die richtige Formel für die Berechnung der Temperatur in C °. Obwohl Methode 1 aus dem Referenzhandbuch von STM32F401 stammt, sieht das Temperaturergebnis nicht korrekt aus. Während Methode 2 aus dem Referenzhandbuch der STM32F0-Serie, sieht es vernünftiger aus.

Noch weiß ich nicht welche Formel sollte ich anwenden, wenn Sie STM32F401RE Nucleo Board verwenden?

+0

Aus Neugier, was messen Sie mit den beiden Methoden und was verwenden Sie als Referenztemperatur? –

+0

Die zweite Gleichung ist falsch, es sollte entweder "80" oder "110 - 30" sein. –

+0

Hallo, es gab einen Tippfehler in der zweiten Gleichung (jetzt korrigiert). Ich habe einen Ofen, wo ich die Temperatur kontrollieren kann. Ich verwendete Raumtemperatur (20 ° C), -10 ° C, 60 ° C als Referenztemperaturen. Die Ergebnisse, die ich aus Gleichung 2 erhalten habe, sind für die Referenztemperaturen angemessener. – bienle

Antwort

2

Methode 1 Temp(degree) = (V_sense - V_25)/Avg_slope + 25 ist eine vereinfachte Version, bei der die Kalibrierung vermutlich durchgeführt wird, indem der Wert bei 25 ° vormessen und V_25 zugewiesen wird. In diesem Zusammenhang wird Avg_slope wahrscheinlich aus dem Datenblatt entnommen - es könnte aber auch ein Ergebnis einer Kalibrierung sein.

Methode 2 Temp(degree) = (((110 - 30)*(TS_DATA - TS_CAL1))/(TS_CAL_2 - TS_CAL_1)) + 30 verwendet ZWEI Kalibrierungspunkte bei 30 ° und 110 ° und ist korrekter. Beachten Sie, dass auch Methode 1 zwei Kalibrierungspunkte (zur Berechnung der durchschnittlichen Steigung) verwenden kann. Außerdem können Sie mit Methode 2 Ihre Kalibrierungspunkte überall hin nehmen (vermutlich in dem Bereich, für den Sie sich mehr interessieren).

Beide Methoden leiden jedoch unter Nichtlinearität (falls vorhanden) des Sensors. Ich nehme an, dass einige Nichtlinearität vorhanden ist, weil Methode 1 über "durchschnittliche Steigung" sagt. Wenn Sie eine höhere Genauigkeit wünschen, können Sie mehrere Kalibrierungspunkte nehmen und dazwischen interpolieren.

+0

Danke @linuxfan, jetzt bekomme ich ein besseres Verständnis in der Berechnung des Temperatursensors. – bienle

+1

@bienle Gern geschehen. Wie gesagt in der Hilfe dieser Seite, sollten Sie die Antwort akzeptieren, anstatt zu danken ... :-) – linuxfan

+1

@bienle, gibt es eine wichtige Anmerkung. STM32F0xx wird mit kalibrierten Temperatursensoren geliefert: Jede MCU hat die Werte TS_CAL1 und TS_CAL2, die an festen Adressen im Flash-Speicher gespeichert sind. Mit dieser MCU mussten Sie nur den Wert von ADC lesen, Werte aus dem Flash lesen und die exakte Temperatur berechnen. Ihre MCU verfügt über keine Kalibrierung, Sie müssen sie daher vor der allgemeinen Verwendung durchführen. –

0

i derzeit den Mikrocontroller STM32 F030 c8t6 bin mit: Frage: Ist TS_DATA = (ADC-Wert) * (Vdd/Vref) oder TS_DATA = (ADC-Wert) der Temperatursensor adc Wert, wenn der Temperatursensor Kanal aktiviert?

Verwandte Themen