ntc ile sıcaklık ölçümü

Başlatan ~ENES~, 27 Temmuz 2014, 12:16:48

~ENES~

Degerli ete hocam ve arkadaslar ısı konrollü bir proje üzerinde uğraşmaktaym ısı sensörü olarak 10k NTC kullanmak zorundayım...ete hocamın bir projesnde örneği vardı fakat orada varsayım olarak değerleri aldıgından gercek uygulamada hesaplamayı yapamadım...

Sizlerden ricam bu konuda elinde döküman veya ısı ölçümü konusunda bilgi sahibi olan arkadaşlar tecrübelerini paylaşırlarsa memnun olurum... Yardım edenlere şimdiden teşekkür ederim...
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

~ENES~

yardım edebilecek kimse yokmu arkadaşlar ?
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

ete

Bu konu düşündüğünden basit bir konudur. Kullanım olarak Çok fazla tercih edilmediğinden tecrübe aktaracak çok kişi bulamazsın. Ben bir çok kez kullandım. Kullandıklarım farklı dirençler oldu. 10 k kullanmadım ama nasıl olmadı gerektiğini açıklayayım.
Ntc nin bir ucundan 5v girersin diğer ucuna 1k-4k7 arası bir direnç bağlarsın ve direncin diğer ucunu Gnd ye bağlarsın.direnç ile ntc nin birleştiği noktayı pic in Adc girişine girersin.
Bu düzenekle önce bildiğin bir sıcaklıkta ölçüm alıp formülünü oluşturman gerekir.
Formül oluşturamazsan bildiğin iki farklı sıcaklıkta adc değerini okuyup buraya yazarsan formülü oluşturabilirim.
Ntc kullanmanın em büyük sıkıntısı sıcaklıla direnç değişiminin lineer olmamasıdır. Buda tek formül ile doğru sıcaklık okuyamayacağın anlamına gelir. Genelde her 3-5 detecede birformülde düzeltme yapmak gerekir.

Ete

~ENES~

peki hocam 3-5 derecede ayar yapmak gerekiyorsa sıcaklık ölçüm aralığı baya geniş bu ntc lerin nasıl bir algoritma kurmamız gerekir sizce ?
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

ete

Benim kullandığım yöntemde ADc den okunan değeri direk sıcaklığa çeviren bir formül ayarladım.
Sonra elimdeki NTC nin data sheet'ine bakım hangi sıcaklıkta hangi direnç değerine sahip oluyor onu tespit ettim.
İsis de devreyi kurup NTC yerine sabit direnç değerleri girerek ölçülen sıcaklığa baktım. Sapma olduğu anda yeni bir formül ayarladım. Aslında formül değil sabit çarpan değişiyor. Hepsi bu.
Örnek vereyim. Genelde NTC direnç değeri sıfır derecedeki direnç değeridir. 10K lık ntc demek sıfır derecede direnç değeri 10K olan NTC dir. Diyelimki 20 derecede 8,2K lık bir direnç gösteriyor. Bu dirence karşılık ADC den okunan değer 350 olsun.  Sonucu ondalıklı hesaplamak için 20 dereceyi 200 olarak kullanacağız. 200/350*256 =146 olarak bulunacaktır.
O halde formül T=(ADC*/1463)/10  şeklinde hesaplanabilir.
Bu formül ile kaç dereceye kadar formülün doğru sonu verdiğine bakıp sapma olduğu zaman 1463 sabit çarpanını yeni değere göre yeniden hesaplamayarak farklı bir sabit çarpan bulmak mümkün olur. Bu işlemi ölçülecek sıcaklık aralığı içinde yapmak gerekir. Epeyce zahmetli bir iş. Ama doğru ölçüm için başka çareside yok maalesef.
En azından benim bildiğim başka bir yol yok.

Ete

~ENES~

http://www.picproje.org/index.php/topic,24675.0.html. Hocam bu linkteki formülü pic basicte Nasil kullanabiliriz aciklama imkaniniz olur mu ? Hassas ölçüm için gerekli imiş galiba ...
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

ete

#6
Linkte bir araba formül var. Hangisi anlamadım. Sen önce bir incele hangilerini basice uygulayacağız bir tespit et istersen.

Bir kez daha baktım da LN (e tabanına göre logaritma) işlemini Basic de yapmak imkansız. Dolayısıyla bu formüllerin uygulanabilirliği pek mümkün görülmüyor.

Ete

~ENES~

Hocam adam en basta anlatmisti orada neyse sizin yaptiginiz Ntc ile sicaklik ölçümünde hata yapiyormu ne derece hassasiyeti var hocam ..
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

~ENES~

Hocam ADC den okunan değerler


20° --- 306
50° --- 600
60° --- 695
80° --- 835

Bunlara dayanarak Nasil bir formül cikarabiliriz hocam ..

ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

ete

#9
NTC ile ölçüm yapıyor isen mutlaka bir ölçüm aralığı alman gerekiyor. Örneğin 0 derece ile 60 derece arası gibi.
Bu -20 derece ile 60 derece arası gibi de olabilir.
Bu durumda min sıcaklıkta ki direnç değerini bilmen gerekiyor. Yada min sıcaklıktaki ADC okuma değerini bilmen gerekiyor. Benzer şekilde maksimum sıcaklıktaki ADC değerinide bilmen gerekiyor.
Çünki NTC devreye bir pullup direnci ile bağlı olmalı. Direnç ile NTC nin birleştiği nokta ADC pinine bağlı olmalı.
Böylece ölçeceğin min sıcaklıkta ADC değerin sıfır olmayacaktır. Bu değer hesaplamada okunan değerden çıkartılması gereken bir değerdir.
Kulandığın NTC nin direnç değeri 25 derece (santigrad) de ölçülen direnç değeri ile anılır. 1K lık NTC denildimi bu 25 derecede değeri 1K olan NTC demektir. Kulandığın NTC nin bu değerini biliyorsan internette hemen uygun bir data sheet bulabilir ve o Ntc nin hangi sıcaklıkta hangi direnç değeri verdiğini bulabilirsin.
Bunu bulduktan sonra işin nispeten kolaydır. Şimdi örnekle açıklayalım.
Diyelimki 10K lık bir NTC kullanıyoruz. İnternetten bakıp 10K lık NTC nin muhtelif sıcaklıklardaki direnç değerlerini görebilirsin.  Ölçüm aralığı olarak -20 ile +80 derece aralığını alalım.
-20 derecede termistör 67770 ohm direnç gösteriyormuş.
+80 derecede ise 1668 ohm direnç gösteriyormuş.
NTC ye pullup direnci olarak da 10K lık direnç bağlı olsun.
Bu bağlantı şekli bir gerilim bölücü olarak çalışacağı için -20 derecede  ADC girişinde 4,357V (ADC=892)
+80 derecede ise ADC girişinde  0,715V (ADC=146) luk bir gerilim görülecektir. Bu durumda ölçüm aralığımız 146 ile 892 arasında olacak ve net olarak 100 derecelik bir kademe için 892-146=746 birimlik bir ADC değeri alacağız.
100/746=0,1340 derece başına ölçülecek ADC değerimiz olacaktır. Bunu 256 ile çarparsak 34,31 gibi bir değer buluruz. Bunu 3432 olarak kullanıp formülümüzü şöyle yazabiliriz.

SICAKLIK=((ADC-146)*/3432)/10  buradan elde edeceğimiz değer sıcaklığın 10 ile çarpılmış hali olacaktır. Böylece ondalık hesabıda yapabileceğiz demektir.
Hemen örnek yaparak sonucu pekiştirelim. 80 derecede okuyacağımız ADC değerimiz 892 olacaktır. Bunu formülde yerine koyalım; T=((892-146)*/3432)/10=(10001)/10=1000 bu değerden 20 çıkartırsak 80,0 derece olarak sonucu buluruz. Ama istersek hesap mantığımızı iki kısımada ayırabiliriz. Buna göre eksi sıcaklıkları ayrı hesaplar , artı sıcaklıkları ayrı hesaplayabiliriz.
Burada hemen şunu belirtmekte yarar görüyorum. Bu bulduğumuz formül sensör lineer ölçüm yapsa idi doğru olacak idi. Ancak maalesef belirli aralık için formül doğru olacak ama aralığın dışında sonuç ya fazla yada eksik çıkacaktır. Bu nedenle biraz çalışıp sapmaları tespit etmek gerekir. Nasıl yapacağınıda söyleyeyim.
NTC nin direnç tablosunu internetten indirip önüne alacaksın.
Bulduğumuz formülü kullanarak simulasyonda NTC yerine sabit drenç bağla ve dirence de ölçülecek sıcaklıktaki direnç değerini ver.
80 dereceden aşağıya doğru gelmeye çalış. Formül 80 dereceyi doğru hesaplayacaktır muhtemelen. Yada doğru hesapladığı sıcaklığı bul oradan teker teker yukarı doğru gel. Diyelimki 79 dereceye bakacağız 79 derecede direnç değerimiz 1,6282K imiş. Direnç değeri olarak bunu ver ve sıcaklığı ölçtür bakalım ekranda 79 derece diyorsa bir sonrakine geç. Bir noktada sapma olacaktır. O noktayı bul ve hatasız çalışan aralığı mesela 80-75 gibi tespit et. 1 derece farkla çalışan aralık 74-70 ,+1 (yani +1 derece eklemek gerekiyor gibi) yada 74-70, -1 (-1 çıkartmak gerekiyor gibi)
Bu aralığı bütün sıcaklıklar için tespit edersen bir kaç if satırı ile
IF T=>70 and T=<74 then T=T-1 gibi bir satırla düzeltmeleri yapabilirsin. Bir sürü formüllerle uğraşmaktan iyidir.

Ölçüm aralığının lineer olmadığını bulduğun değerleri kullanarak da anlayabiliriz.
20° --- 306
50° --- 600
60° --- 695
80° --- 835
değerleri için formül geliştirelim.
600-306=294  ve 50-20=30  30/294=0,1020 bu sabit çarpan değerimiz
695-600=95 ve 60-50=10  ,  10/95 =0,1052
835-695=140 ve 80-60=20 , 20/140=0,1428
şayet sensör lineer çalışsa idi bulduğumuz sabit çarpan değerleri hep aynı olması gerekirdi. Dikkat edilirse sıcaklık yükseldikçe çarpan değeri büyüyor. Buda sensörün X/Y ekseninde bir doğru şeklinde değil bir eğri verecek şekilde çalıştığını gösteriyor. Bu nedenle sapmaları bularak sonuçları doğru hale getirmen gerekir. Yada C dilini kullanıp verilen eğri denklemi ile sonucu hesaplaman gerekir.

Ete



~ENES~

Hocam cevabiniz için tesekkur ederim .. Peki c dilinde formül yazip basicte include olarak ekleme gibi bir durum olabilir mi sizce ?
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

ete

Olmaz herhalde. Include dosyaları hex olarak verilebilse  olabilirdi ama mmalesef öyle bir şey yok.
Hem formül işini basit ve kolay bir işmiş gibi düşünme orada da önden yapman gereken epeyce çalışma var. Bana göre durum eşit gibi bir şey.

Ete

gergy

#12
Verdiğiniz değerlere göre oluşan eğriye ait polinom denklemini Excel ile kolayca oluşturabilirsiniz, ben sizin için 2. dereceden olanı hesaplattım ve denklem y = 5,67E-05x2 + 0,0481x + 0,0444'dir.  Bunu 18F serisi bir mikrokontrol ve proton basic (belki float işlemler açısından) ile kolayca denklemleştirebilirsiniz. x değeri sıcaklığa karşılık direnç değerini temsil eden ve adc'den okunan (örn. 306, 600, 695) değer iken y ise sıcaklık değerini verir. Kabaca denklemi de aşağıda kendimce yazmaya çalıştım, belki daha basit yazılabilirdi, ETE hocam daha iyi bilir. 3 tane değişken float olarak tanımlanıp aşağıdaki denklem rahatlıkla uygulanabilir. Örneğin, 2.dereceden denklemde x= 600 değeri için y=49.3 gibi bir değer (sizin tabloda gerçek değer 50'dir) çıkacaktır, 695 için 60.8 gibi (gerçek değer 60'dır) bir değer çıkacaktır ki bence çok da büyük bir sapma değildir. Ancak hesaptaki sapma daha az olsun istiyorsanız polinomun derecesi arttırılmalı ve bu da denklemi biraz daha karmaşıklaştırıp programın biraz daha uzamasına sebep olacaktır. Örneğin; 3.dereceden polinomun denklemi y = 2,87E-07x3 - 4,51E-04x2 + 3,28E-01x - 46,23'dir. Buna göre x=695 için Y=60,16 yani 60.2 derece olur ki sizin tabloda 60'dır ve gerçeğe daha yakındır. Tercih sizin.

x2 = x * x
x2 = 567 * x2 / 10000000
y = 481 * x
y = y + 444
y = y / 10000
y = y + x2

Maxim

başka bir fikir
sıcaklık/direnç değerleri bilindiğinden aynı değere tablo oluşturulamazmı?
işte direnç 4.5k ise ekrana 55C çıksın, 4.7k ise 56C çıksın gibi

ete

Zaten bu işte 3 metod var. Birincisi eğri denklemi kullanmak, ikincisi direnç değerlerine göre sıcaklık tablosu oluşturmak, üçüncüde benim metodum aralığa göre sabit çarpan belirlemek. Bunu sıcaklıktan sapma değeri kadar çıkarma yada ekleme yaparak da düzenlemek mümkün.
Kişi kendine hangisi kolay geliyor ise onu tercih eder.

Ete

Powered by EzPortal