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

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

~ENES~

HOCAM hepinize teşekkür ederim sayenizde çok şeyler öğrendim son bilmek istediğim bir mevzu var ntc yi + dan ntc ye direncle(4.7k) gnd ye ikisinin ortasından adc ye girdim ... tabloya bakarak direnc değerleriyle okunan adc değerinin ne tür bir hesabı var mesela direnc 5k iken adc 430 gibi bunu hesaplamak mümkünmü yoksa buda lineer olmadığı için logaritmik fonksiyonmu gerekiyor. ?
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

ete

Aslında ntc ile seri bağlı direnç adc girişi için bir gerilim bölücü oluşturur.
Gerilim bölücüde voltaj üstten girer ve direnç ile ntc nin birleştiği noktandan çıkar. Çıkış voltajını hesaplarsak otomatikman adc değerinide hesaplamak mümkündür.
Vout=Vin(R2/(R1+R2)). Yaptığın açıklamaya göre R1=4K7  ,  R2=5K (NTC)
Vout=5 (5/(5+4,7))=2,58V
Bu voltaja karşılık ölçülecek ADC değeri ise,
Birim volt başına adc değeri 1023/5=204,6 , ohalde
2,58 x 204,6= 527 olarak hesaplanmış olur.

Ete

~ENES~

ETE hocam anlatımınız gerçekten çok güzel çok iyi anladım çok teşekkür ederim .. Ufak bir sorun çıktı hesaplamada örneğin adc den okunan 310 değeri verdiğiniz formule göre 310/204.6=1.515v çıkıyor... diger formülde yerine koyuyoruz.. 1.515=5(x/(4.7+x) buradan x değeri yani ntc 2.043k çıkıyor ... ntc tablosunda bu değer yaklaşık 65 dereceye tekabul ediyor fakat reelde sıcaklık sadece 21 derece ... nerede hata yapıyorum anlamadım hocam formülde mi bir sıkıntı var acaba ?
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

ete

Elbette ADC den okuduğun değer tamamen referans voltajının seviyesine bağlı bir değerdir. Ref voltajın (yani pic besleme voltajın) tam 5V ise okunan değerlerin doğru çıkması gerekir. Zira formüllerde kullandığımız önkabul bu 5V üzerine kurulu.
Ama formülü 5V üzerine kurup da ref voltajını 4,5V olarak kullanırsak formüldeki hesaplamalarda sapmalar olabilir.
Öncelikle devreden okuduğun ADC değerlerini belkide kalibre etmen gerekecek.
Bunun için ADC girişine direk besleme voltajını verip ADC den okunan değerin 1023 olup olmadığına bakman gerekir.

Bir diğer kalibrasyon konusu ise 25 derecede ADC okumanı yapıp 10K NTC nin direnç değerini 10K olarak hesaplamaya çalışmalısın. Bunun için formülde gerekirse tadilatlar yapıp doğru formülü bulman gerekir.
Bu aşamadan sonra farklı bir sıcaklıkta yine direnç değeri hesaplaman uygun olur. Devrede kullandığın elemanların sıcaklıkla en az değişen cinsten olmasıda gerekir. 10K lık normal bir direnç 25 derecede 10K olarak ölçülürse 30 derecede direnç değeri düşer veya artabilir. Bunlarıda göz önüne almak gerekir. Verdiğin ölçüm değerlerini ben ölçmedim. Bu kadar fark çıkması normal değil. Bu nedenle kontrollerini yap yada bu NTC işini bırak istersen. Zira bir sürü digital sensör dururken neden NTC de ısrar etmemek daha akıllıca olur sanırım.

Ete


~ENES~

Hocam keşke bırakabilsem ntc yi ama tasarımı yaptığım katı yakıtlı kazan var ısıyı ölçmek için ntc koymuşlar kazana değişme imkanımız yok yanı :( söylediklerinizi deneyip sonucu aktaracağım teeşekkür ederim...
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

ete

Devre şemanı buraya bir koy bakalım belki dikkatimizi bir şey çekebilir.
Kazanlarda NTC yerine termokupl kullanmak bence daha doğru. NTC kullanıldığınıda gördüm ama kazanın çıkış borusunun dışına temas yöntemi ile sıcaklık ölçmeye çalışmışlar. Bunların hepsi yanlış şeyler. Suyun sıcaklığı ölçülecek ise direk boru içinden ölçülmeli. Bunun için flanşlı termokup lar yapılmıştır. Bende kullandım benzer amaçlı br kaç proje için.

Ete

~ENES~

Hocam devre şeması yok elimde hazır baskı yapılmış pcb ye program yazıyorum gözden kaçan bir durum yok gibi çünkü ac motorların hız kontrollerinden tutun 4x7 seg. displaylere kadar herşey tıkırında sadece sıcaklık ölçümünde sıkıntı yaşıyorum işte ... sizce termokulp mü kullanmalıyım daha mı kolay olur mantığı nedir termokulpün...
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

ete

K tipi termokupl lar yerli piyasada bir çok firma tarafından kılıflı olarak satılmaktadır.
Bunun için MAX6675 diye birde entegre mevcut. Direk hassas bir şekilde sıcaklığı okuyabilmektedir.
Ben olsam hiç durmazdım.

Önce K tipi Termokupl araştır sonra Max6675 araştır. Sonra siteyi araştır örnek program bulmaya çalış. Bulamazsan ben vereyim.

Ete

~ENES~

Hocam fiyatlarına baktimda el yakan cinsten Ntc yi 1.5 liraya alirken termokulpe 40 lira verirsek durum iç acici olmaz çünkü bir seferde bu karttan 100 adetten fazla satis oluyor dolayisiyla fiyatta baya fark ediyor en güzeli ntc ile devam etmek sanirim .. Aklima şöyle bisey geldi okunan ADC değerini voltaja dönüştürüp isi tablosuna gore kendi sicaklik tablomu olisturacagim epeyce uzun olacak ama başka carem kalmadi galiba bitirince projeyi buraya da koyarim herkes faydalanir ..
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

ete

#24
Bu işin doğrusu elbette eğri formülü kullanarak sonucu hesaplamaktır. Bu işin nasıl yapılacağını epeyce araştırdım. Örnekleride inceledim. PBP da en büyük zorluk formülde yer alan "e" tabanına göre logaritma (Ln) alma işidir.
Onunda bir çaresini buldum. Öncelikle PBP da Ln tipi logaritmayı nasıl alırız önce onu açıklayayım.
Aşağıdaki linkte bunun nasıl yapıldığı anlatılmaktadır. Aslında epeyce karmaşık bir konu. Bu nedenle detaya girmek istemiyorum. Sonuçta aşağıdaki kodlar Ln alma işini halletmektedir.

http://www.emesys.com/BS2math3.htm

'@ DEVICE PIC16F628A
'@ DEVICE PIC16F628A, WDT_ON
'@ DEVICE PIC16F628A, PWRT_ON
'@ DEVICE PIC16F628A, BOD_ON
'@ DEVICE PIC16F628A, PROTECT_OFF
'@ DEVICE PIC16F628A, LVP_OFF
'@ DEVICE PIC16F628A, CPD_OFF
'@ DEVICE PIC16F628A, INTRC_OSC_NOCLKOUT
'---------------------------------------------
@ __config _INTRC_OSC_NOCLKOUT  & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _CP_OFF

DEFINE OSC 4 
CMCON=7

DEFINE LCD_DREG PORTB      'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT     4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG PORTB      'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT     2 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_EREG PORTB      'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT     3 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS     4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES     2 'LCD Kaç sıra yazabiliyor

TRISA=%00011111
TRISB=%00000000
PORTA=0
PORTB=0

LogNo  VAR WORD     ' Number to get log of

k      VAR byte     'loop var
X      Var WORD     'temp for processing
X1     var word     'temp for squaring
LgX    var word     'lg ( base 2 ) of y the mantissa
cc     var byte     'characteristic of log

Lg     var word     'log base 2
Log    var word     'log base 10
Ln     var word     'log base e



PAUSE 200
LCDOUT $FE,1
CLEAR
BASLA:

  Logno = 1000  'buraya LN i bulunacak sayı yazılacaktır!!!!!!!!!!
gosub getlog

lcdout $fe,$80,"Ln=",dec ln

pause 500
goto basla


GetLog:
  cc = NCD LogNo - 1
  X = LogNo << ( 15 - cc )
  LgX = 0
  for k = 14 to 0 step -1
    X1 = X**X
    if X1.bit15 then
      lgx = lgx | ( dcd k )   'set the bit
      X = X1
    else
      X = ( X1 << 1 ) + 1    'shift er over
    endif 
  next k 
  lg  = cc*1000 + ( lgx**20000/10 )
  log = ( lg ** 19728 )
  ln  = ( lg ** 45426 )
return


Gelelim Sıcaklık hesaplama işine bunuda aşağıda adımlar halinde veriyorum. Yinede kolay bir iş değil. Çabalamak gerekir. Aşağıda yer alan adımlardan 1-12 arası NTC tipine (yada değerine) göre yalnızca 1 kere yapılacak hesaptır. Bu hesaplar PC de yada hesap makinası yardımı ile yapılıp A-B-C parametreleri hesaplanacaktır.
13-17 arası maddeler ise Pic tarafından yapılacak işlemleri göstermektedir. Ben kolaylık olsun diye 25 derece sıcaklıkta 10K lık NTC nin tam 10K değer aldığını kabul ederek hesaplamamı yaptım.

Hesaplama adımları;
1. NTC direnç tablosundan (datasheet den)  3 adet sıcaklık seçip bu sıcaklıklardaki direnç değerlerini alıyoruz.
   -10 derece =45,370K
   0 DERECE  =28,510k
   25 DERECE =10 k
   
2. Bu sıcaklıkları Kelvine çeviriyoruz  (273,15 ekliyoruz) Bunlar bizim T sıcaklıklarımız oluyor.
   263,15 derece Kelvin
   273,15 Derece Kelvin
   298,15 Derece Kelvin     
   
3. Şimdi de 1/T sıcaklıklarını hesaplıyoruz;
  a) 1/T1=1/263,15=0,003800
  b) 1/T2=1/273,15=0,003660
  c) 1/T3=1/298,15=0,003354
 
4.Şimdi de Ln(R) değerlerini hesaplıyoruz
  a) Ln(45370)=10,72
  b) Ln(28510)=10,25
  c) Ln(10000)= 9,21
 
5. Şimdi hesaplanan Ln değerlerinin küplerini hesaplıyoruz.
  a)1231,93
  b)1076,89
  c) 781,23     
 
6. Şimdi denklemleri oluşturuyoruz    1/T=A + B* Ln(R1) + C * (Ln(R1))^3
   a)0,003800=A + B * 10,72 + C * 1231,93
   b)0,003660=A + B * 10,25 + C * 1076,89
   c)0,003354=A + B * 9,21  + C *  781,23
   
7. Şimdi A-B-C parametrelerini hesaplıyoruz. Bunun için 1. denklemin C çarpanı ile ikinci denklemin parametrelerini çarpıyoruz
   a)4,5088638=A * 1231,93 + B * 12627,28 + C * 1326653,10
   Şimdi 2. denklemin C çarpanı ile 1. denklem parametrelerini çarpıyoruz.
   b)4,0921820=A * 1076,89 + B * 11544,26 + C * 1326653,10
   c)Şimdi birinciden ikinciyi çıkartıyoruz.
     0,4166818=A * 155,04 + B * 1083,02 + 0   Bu bizim ilk 2 bilinmeyenli denklemimiz oldu
8. Şimdi benzer işlemi b ve c denklemleri için yapıyoruz
   a)3,61188906=A * 1076,89 + B * 9918,16 + C * 841298,77
   b)2,85930180=A * 781,23  + B * 8007,61 + C * 841298,77
   c)Şimdi birinciden ikinciyi çıkartıyoruz.
     0,75258726=A * 295,66  + B * 1910,55     Buda ikinci denklemimiz.
     
9. Şimdi birinci denklemden A yı çekelim
   A * 155,04 = 0,4166818 - B * 1083,02
   A = (0,4166818 - B * 1083,02) / 155,04

10. Şimdi Bu A yı ikinci denklemde yerine koyalım
    0,75258726=((0,4166818 - B * 1083,02) / 155,04) * 295,66  + B * 1910,55     
    0,75258726= 0,79461 - B * 2065,31 + B * 1910,55
    0,75258726-0,79461=B*(1910,55 - 2065,31)
    -0,04202274=B * -154,76  veya  B*154,76 = 0,04202274
    B=0,04202274/154,76 =  2,715349e-4
   
11. Şimdi A yı hesaplayalım
     A = (0,4166818 - B * 1083,02) / 155,04  idi
     A = (0,4166818 - 2,715349e-4 *1083,02) / 155,04
     A=  7,90790e-4 
     
12.Şimdi bu iki değeri kullanıp C değerini hesaplıyoruz.
   0,003800=A + B * 10,72 + C * 1231,93
   0,003800= 7,90790e-4 + 2,715349e-4 * 10,72 + C * 1231,93
   0,003800= 0,003701644128 + C * 1231,93
   C = (0,003800 - 0,003701644128)/ 1231,93
   C = 7,9838848e-8
   
13. O halde sıcaklık hesap formülümüz;
    T= 1 / (7,90790e-4 + 2,715349e-4 * Ln(R) + 7,9838848e-8 * (Ln(R))^3) olacaktır.
    Formüle bakılırsa bilmemiz gereken R parametresinin ortam sıcaklığındaki NTC direnci olduğunu hemen anlamanız gerekir.
   
    O halde ADC okuması yaparak Rntc direncini hesaplamamız gerekiyor.
     
14. Vo=(HAM_ADC*10/2046)/10 eşitliğinden Vo yu buluyoruz.

15. R=R2*(5-Vo)/Vo          eşitliğinden R direncini hesaplıyoruz.

16. SOnra bulduğumuz R değerini gidip T denkleminde yerine koyarak sıcaklığı hesaplıyoruz. Bu aşamada Ln(R) değeri için yukarıda verdiğim kod örneğini kullanıyorsunuz.  Logno=R deyip alt program dan dönüşte Ln değeri size Ln(R) değerini vermiş olacaktır. (Ln(R)^3 hesaplaması için , Ln(R) * Ln(R) * Ln(R) şeklinde bir eşitlik kullanılabilir.
    T= 1 / (7,908e-4 + 0,0025+ 0,0000632)
    T = 298,15 (Kelvin)
    T = 298,15 - 273,15 = 25 Derece santigrad olarak hesaplanır.
   
17. aynı hesabı pic matematiği ile yapmaya çalışalım.
    7,908e-4 değerini 256 ile çarpalım  0,2024448 yi buluruz. Bunuda virgülden kurtaralım 
    0,2024448 * 10.000=  2024
    Şimdi de 0,0025 değerini 256 * 10.000 ile çarpalım  6400 değerini buluruz.
    Şimdi de 0,0000632 değerini 256*10.000 ile çarpalım 161 değerini buluruz.
    Bu durumda formülümüz 256*10000/( 2024 + 6400 + 161)
    256 * 10000 / 8585
    256 değerini de ayrıca 100 ile çarparak sayıları mümkün olduğunca virgülden kurtarmaya çalışacağız.
   
    Hesabı değişkenlerle halledelim
    Y=8585
    X= 25600 ** 10000 '32 bit çarpma yapıyoruz   
    x= DIV32 Y
    X=29819  (Kelvin)
    x=29819-27315= 2504
    x=2504/10
    ondalık=x MOD 10  (Onda=X//10)
    Böylece sonuç 25,0 derece olarak hesaplanmış olacaktır.
   
Epeyce karmaşık gibi gözükmesine rağmen adım adım gidilirse kolaylıkla anlaşılabilir sanırım.

Ete

~ENES~

Hocam emeginizi Nasil oderiz bilemiyorum doğrusu Allah sizden razi olsun karmasikta olsa güzel bir Anladim olmuş deneyip sonucu paylasacagim ...
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

Maxim

ete hocam
sen şu protona bir ısınabilsen ne işler çıkar var ya..

~ENES~

ete hocam o işleri basıcte de çıkarıyor zaten  :)
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

shnsngl

merhaba,
konuyu hortlatıcam ama çok acil
Arduino ile ntc kullanarak termometre yapıcam.
10K NTC kullanıyorum
-10 derece =42506
0 DERECE  =27219
25 DERECE =10000   değerler böyle bu değerlere göre a,b,c katsayılarını  ntc.calc programından ve internetteki baska bir programdan buldum ama yanlıs ölçüm yaptım
kendim bulmak istedim değerleri
0,383953378=A * 145,6366+ B * 1012,4802869       bu  1.
0,7118678178=A * 283,5264+ B * 1829,04120373   bu 2. denklemim burdan sonrasını ben getirdim ama yine yanlıs ölctüm lütfen bir de siz dener misiniz?




emre.bdkk

Hocam 11.maddedeki hesaplamayı anlayamadım.

A = (0,4166818 - 2,715349e-4 *1083,02) / 155,04

Burada işlem önceliği olarak ilk parantez içerisindeki sayılar hesaplanır yine işlem önceliğinden dolayı çarpma yapılır ardından 0,4166818 den çarpılan sayı çıkarılır ve 155,04 'e bölünür. Bu durumda A= -18,96517409816821 olması gerekmiyormu ? 

Teşekkürler

Powered by EzPortal