Stm32F0 Internal Temp Sens Okuma hatası

Başlatan mistek, 10 Haziran 2016, 14:02:16

mistek

STM32f0 içerisindeki Sıcaklık sensörünü kullanmaya çalışıyorum.
Ayar ve okuma kısmında sorun yok ancak hesapladığım derece yaklaşık olarak gerçek değerden +10 derece fazla görünüyor.


#define Ts_Cal1                      (*((uint16_t*)0x1FFFF7B8))
#define Ts_Cal2                      (*((uint16_t*)0x1FFFF7C2))

#define Avg_Slope 5.336//(float)((Ts_Cal1 - Ts_Cal2) / 80.0)

AdcTempSens = Adc_oku(ADC_Channel_16);

Calc = ((((float)(Ts_Cal1 - AdcTempSens)) / Avg_Slope) + 30);


Şeklinde hesaplıyorum. Buradaki +30 değeri datasheette belirtilmiş. Ortam sıcaklığı 29 derece gerçekte ancak 39 derece ölçüyor işlemci.

+30 değilde +20 yazarsam elimi falan dokunduruncada doğru değerler görüyorum.

Hatam nerede olabilir?

Okunan değerler :

Derece: 29
                                                                   
AdcTempsens: 1709
                                                           
Avg_Slope: 5.336000
 
Edit: @Klein hocam'a bildirim etiketi.
Edil: @X-Fi hocam'a bildirim etiketi.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

mistek

boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

X-Fi

sıcaklık ölçümü için belirlenen Avg_Slope değeri AVDD=3V'a göre hesaplanmış olabilir. Yine ona bağlı olarak TS_Calx değerleri hesaplanıp adreslerine yazılıyor. Besleme gerilimlerini kontrol ediniz.

iyi çalışmalar.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

mistek

Stm32f072 nucleo kit üzerinde çalışıyorum. Datasheette Vdda=3.3V için kayıt yapılmış kartın beslemeside 3.298 değerinde ama aradaki sıcaklık farkını çözemedim. Avg_Slope değeri değişsede negatif değere düşürmez ama TS_Cal1 için hesaplanan değer farklı sonuç veriyor. Farklı bir yeri gözden kaçırıyorum muhtemelen.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

Klein

#4
VDDA kalibrasyonu genellikle 3.0V için yapılıyor. Datasheet eski sürüm olabilir. Kontrol edin bence. 
AVG_Slope değerini nasıl hesapladınız?
Ayrıca  Vsense değeri doğrudan  adc'den alınan değer değil , ADC değerinin voltaja çevrilmiş hali olmalıydı.
Hesaplama aşamalarınızı biraz daha açık girerseniz, yorumlamak daha kolay olabilir.

mistek

#5
@Klein hocam güncel datasheet ve ref manual üzerinden gidiyorum.
Avg_Slope değerini Datasheetteki 6.3.17 Temperature sensor characteristics tablodan baktım. 4.3mV olarak verilmiş.
VddA=3.3V için voltaj değerini ben ADC değerine çevirdim.
Avg_Slope=0.0043*4095/3.3 = 5.336

Yine aynı şekilde V30 değerinide ADC karşılığını hesapladım. Kit beslemesi USB çipin beslemesi 3.3V.

Ref manualde örnek kod verilmiş onu deneyeceğim.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R