NTC ile Sıcaklık Ölçümü

Başlatan picker, 20 Nisan 2009, 01:55:00

picker

Arkadaşlar,
Şu sıralar aldığım bir termometre siparişini henüz bitirdim. Bu arada, NTC ile -40 ile +100 derece arasındaki sıcaklıkları nasıl ölçebileceğimi epey bir araştırdım. Aslında burada nasıl ölçebileceğim derken, hassas ölçümden bahsediyorum. Yoksa NTC'yi lineer kabul edip 5-6 derece fark ölçmek kolay. Yine 5-10 veya 20 derece aralıklı bir tablo oluşturup 2 dereceye kadar farklı ölçmek de son derece kolay. Bahsettiğim, herhangi bir andaki derece değerini tam ölçmek ile ilgili. Ve sonunda bulup uyguladım.

Yaptığım devrenin şemasını ve kodunu elbette vermeyeceğim. (Şemanın dosyası yok çünkü şu anda).

Aşağıda anlatacağım yöntem ile sıcaklık hesabı yapıldığında devremin testlerinde şunu gördüm :

1. Kalibrasyondan sonra, civalı termometre ile aynı değerleri çok yakın aldım.
2. Piyasada satılan ticari termostatlara göre çok daha hızlı yanıt veren bir sonuç elde ettim.

Şimdi gelelim hesaplarımıza.

Bir kere, NTC direnç değerine karşılık gelen derece (kelvin cinsinden) şu aşağıdaki formüle eşit :

T=1/(A+B.ln(R) + C.ln^3(R))

Bu formül nedir? Bilindiği gibi NTC'nin sıcaklık eğrisi aşağı doğru azalan logaritmik bir eğridir. Bu formül, o eğrinin fonksiyonunu verir.
Aslında tam fonksiyon T=1/(A+B.ln(R)+C.ln^2(R)+D.ln^3(R)) dir fakat yazdığımız kadarı dahi 0.1'den daha hassas sonuç vermektedir. NTC'lerin tablolarındaki sonuçları da bire bir vermektedir.

Buradan da
1/T=A+B.ln(R) + C.ln^3(R)

olur. Bu formüldei R, o andaki ölçülen direnç değeridir.

Burada A, B ve C katsayılarını bulmamız gerekecektir.
Bunun için NTC'nin tablosuna bakacağız (hani 5 veya 10 derece aralık ile direnç değerlerini veren tablo). Buradaki derece değerlerine 273,15 ekleyerek her bir derecenin kelvin cinsinden karşılığını bulacağız.

Şimdi, 3 adet derece ve 3 adet karşılık gelen direnç değeri elimizde oldu.

Ne yapıyoruz?
3 bilinmeyenli 3 denklemimizden A, B ve C katsayılarımızı hesaplıyoruz.

Sonrasında yukarıdaki formülü aynen yazılımımızda kullanıyoruz.
Analog-Dijital çevirici portumuzdan okuduğumuz gerilimden direnç değerini hesaplayıp, formülümüz yardımıyla anında sonucu buluyoruz.

Herkese sevgiler...

stlg

Neden lm35 değil ntc eksi degerlerlemi ilgili
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

Maxim

birtane canlı hesaplama örneği görebilirmiyiz yukarıdaki formül için ?

askb

Arkadasım, örnek kod koysan ne olur?Paylasım formundasın.Bilgiyi paylasmaktan korkma.

bigbey

Alıntı yapılan: "stlg"Neden lm35 değil ntc eksi degerlerlemi ilgili
Evet LM35 ile bu tip uygulamalar çok kolay yapılabiliyor.
Eksi değer olarak -55 ile +150 derece LM 35 ile ilgili uygulama örneği datasheet dosyasında var.
TA6R

transistor

Herşey Vatan İçin.

picker

Değerli arkadaşlar,
Öncelikle 2 soruya yanıt vereyim.

1. Neden LM35 değilde NTC?
Arkadaşlar, sıcaklığı n faklı yöntemle ölçebilirsiniz. Bunların bazıları son derece kolay, bazıları ise biraz daha meşakkatlidir. Bununla birlikte uygulamayı çalıştıracağınız ortam, koşullar sizi belli bir takım sensör tiplerini seçmeye itebilir. Bu sebeple her uygulama DS1820, LM35, DS1620, NTC veya PTC ile yapılamaz. Dolayısıyla bunun sorgulanması çok da doğru değil.

2. Neden kod vermiyorum?
Burada mevzu nasıl analog dijital dönüştürülür değil. Yukarıda yazdıklarım kod yazmak için yeterlidir. O bilgiye ulaşmak benim 2 günümü aldı yaklaşık. Ondan önce de ısı tablosu ile yapma gayretine girdim. Fakat floating point kullandığımdan dolayı bir süre sonra PIC hafızası değişken sayısını kaldırmamaya başladı. Bu sebeple ben de önce yukarıda yazdığım formülasyona ulaştım. Sonra da yaklaşık 8-10 satırlık bir kod ile her değer için hassas direnç değerini dizi değişken kullanmadan, if-then'lerle uğraşmadan, tek değişken ile çözdüm. Şimdi deniyor ki sen o kadar uğraştın, balığı tuttun, balığı bana ver... Hayır... Balığı vermeyeceğim. Ama bir arkadaşımın isteği üzerine nasıl balık tutulacağını anlatacağım... (Hesaplama örneği)

1K NTC için hesaplama örneği
NTC datasheet'inde 1K NTC için sıcaklık tablosuna bakıyoruz (Murata marka).

Şimdi üç farlı değer için (Örneğin -10, 0 ve 25 derece olsun) direnç değerlerini seçelim...
-10 Derece için 4829 Ohm
0 Derece için 2977 Ohm
25 Derece için 1000 Ohm (NTC'lerin değerleri 25 derecedeki dirençleri için verilir).

Şimdi bu derece değerlerini Kelvine çeviriyoruz.

-10 Derece : 263,15 kelvin
0 Derece : 273,15 Kelvin
25 Derece : 298,15 Kelvin

Bunlar bizim T1, T2 ve T3 değerlerimiz...
Şimdi 1/T1, 1/T2 ve 1/T3 değerlerini hesaplayalım.

Sırasıyla : 0,0038, 0,003661, 0,003354 değerlerini bulduk.

Şimdi, Ln(4829), Ln(2977) ve Ln(1000) (Bu direnç değerlerinin 10 tabanına göre logaritmalarını alıyoruz) değerlerini hesaplayalım.

Bunlar da sırasıyla
8,48
8
6,91 çıktı.

Şimdi bunların 3. kuvvetlerini (küplerini) alalım.
Sırasıyla :
610,32
511,74
329,62

değerlerini bulduk.

Dolayısıyla şu üç denklemi elde ediyoruz :
0,0038=A+8,48.B+610,32.C
0,003661=A+8.B+511,74.C
0,003354=A+6,91.B+329,62.C

Şimdi buraya kadar verdim hesabı.

Bu 3 denklemden A, B ve C'yi hesaplayıp katsayıları buluyoruz.

Devam ediyoruz.
Önce 1. denklemin tüm katsayılarını 2. denklemdeki C'nin katsayıları ile çarpıyoruz.
Sonra 2. denklemin tüm katsayılarını 1. denklemdeki C'nin katsayıları ile çarpıyoruz.
Şu çıkıyor :
1,944689127=511,7449437A+4340,822591B+312326,6113C
2,234365537=610,3169464A+4881,72468B+312326,6113C
Bu iki denklemi birbirinden çıkarıyoruz. Şunu elde ediyoruz :
-0,28967641=-98,57200268A-540,9020892B+0C

Aynı işlemi 2 ve 3. denklemler için yapıyoruz ve :
-0,794427349=-280,6990144A-1419,970714B+0C

Şimdi 2 bilinmeyenli 2 denklemimiz oldu.
Bu 2 denklemi çözdüğümüzde :
A=0,001549185
B=0,000253225

Buluyoruz.
Birinci denklemde bu değerleri yerine koyup C'yi çekiyoruz ve
C=1,68718E-07
değerini buluyoruz.

Yani bizim kelvin cinsinden sıcaklığımız
T=1/(0,001549185+0,000253225ln(R)+1,68718E-07(lnR)^3)
oluyor.

Santigrad cinsinden sıcaklığımız ise
C=[1/(0,001549185+0,000253225ln(R)+1,68718E-07(lnR)^3]-273,15 oluyor.

Şimdi bu denklemimizin doğruluğunu test edelim.

Datasheetden 40 derece için direnç nedir ona bakalım.

558 Ohm görünüyor.
Dolayısıyla
[1/(0,001549185+0,000253225ln(558)+1,68718E-07(ln(558))^3]-273,15
hesapladığımızda 40 bulmalıyız.
ln(558)=6,324358962
ln^3(R)=252,9586506

Dolayısıyla formülümüz :
[1/(0,001549185+0,001601488+4,26787E-05)]-273,15
Buradan da
1/0,003193352-273,15
=313,1505791-273,15
C=40,00057908 santigrad bulunur.
Görüldüğü gibi 10'da bir değil, yüzde bir değil, binde bir değil, 10binde 5 hata ile sonucu bulduk. (Yukarıda bazı yuvarlamaları yapmış olmasam tam sonuç bulacaktık).

Herkese sevgiler.

Not : Şu formülleri bulmak için ille de yabancı kitapları karıştırmak zorunda kalmamalı insanlar.

Ama bizde bilgi paylaşımı (Bilgi paylaşımı ile hazırcılığı burada ayırmak gerekiyor) korkulan birşey...

Umarım sizler katıldığınız diğer forumlarda bu bilgileri paylaşırsınız...

gallavi

Dediğiniz gibi kod yazmak işin kolay tarafı siz zor olanı bizimle paylaşmışsınız. İhtiyacı olan istediği dilde bunu kod'a çevirebilir. Teşekkürler
DemirHan=gallavi;

ErsinErce

Böyle bir paylaşımda bulunduğunuz için çok teşekkürler. Balığı pişirmeyi bile göstermişsiniz =)

tayyar

Alıntı yapılan: "picker"Değerli arkadaşlar,


Şimdi, Ln(4829), Ln(2977) ve Ln(1000) (Bu direnç değerlerinin 10 tabanına göre logaritmalarını alıyoruz) değerlerini hesaplayalım.

Bunlar da sırasıyla
8,48
8
6,91 çıktı.


Ln 10 tabanına göre değildir "e" tabanına göre logaritmadır.
--EGEMENLİK KAYITSIZ ŞARTSIZ MİLLETİNDİR--

picker

Alıntı yapılan: "tayyar"
Alıntı yapılan: "picker"Değerli arkadaşlar,


Şimdi, Ln(4829), Ln(2977) ve Ln(1000) (Bu direnç değerlerinin 10 tabanına göre logaritmalarını alıyoruz) değerlerini hesaplayalım.

Bunlar da sırasıyla
8,48
8
6,91 çıktı.


Ln 10 tabanına göre değildir "e" tabanına göre logaritmadır.

Tayyar arkadaşımız doğru söylüyor. Doğal logaritma olan ln(x) e tabanına göredir. e=2,71...
Uyarı için teşekkürler...

Maxim

picker

açıklamalar için teşekkürler.

askb

Tesekkurler.NTC lerle ılgılı gercekten detaylı bılgıler.Bircok kısıye faydası olacagı kacınılmaz.Bu tur bılgılerın paylasılması dılegıyle herkese kolay gelsın.

ozcanozay

Sevgili konuyu açan arkadaş, NTC'nin direnç değeri bildiğin gibi sıcaklık ile değişiyor, senin hesabın  doğru ama çok uzun, NTC direncini hesaplayan 4 satır ve sıcaklığı hesaplayan tek satır kod yazdım, herşey mükemmel çalışıyor (toplam 5 satırda) ama kodu vermeyeceğim sen vermiyorsun ya hahaha

xenix

Kullandığın NTC nin K veya B (beta) olarak anılan bir katsayısı var, bunu bildikten sonra hesaplaması kolay.

NTC yi R direnci ile pull-up yaptığımızı varsayalım. NTC nin bir bacağı GND ye diğer bacağı da 8bit  analog-dijital çeviriciye gitsin. ADC sonucunu sıcaklığa şu formul ile çevirebiliriz:

T=(1/( LN( (R*ADC / (255-ADC))/R25 )/K + 1/298 ) ) - 273

Burada R25 25° deki direnç değeri, T nin birimi santigrat, ADC ise 8 bit ADC sonucu. Örneğin ben LMEM marka 5cr22 model NTC kullanıyorum. Bu NTC için K=4038, R25=10k, 3010 ohm ile pullup yapıyorum. Sıcaklık formulü:

T=(1/( LN( (3010*ADC / (255-ADC))/10000 )/4038 + 1/298 ) ) - 273