NTC için kod üreticisi...

Başlatan mehmet, 02 Ekim 2020, 10:46:42

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

Erol YILMAZ

güzel bir NTC tool'a ihtiyaç var.


selimkoc

#2
https://rusefi.com/Steinhart-Hart.html

Burada güzel bir hesaplayıcı var. Formülünü de C formatında veriyor.

https://www.circuitbasics.com/arduino-thermistor-temperature-sensor-tutorial/

Burada örnek var.

https://www.youtube.com/watch?v=U9EIsX1C0rQ

Burada videosu var.


kimlenbu

Lookup table kullanmanın amacı ne ? FPU olmayan işlemcilerde hızdan kazanmak mı ? Ben şöyle bir fonkisyon kullanıyorum, hassas bir iş değil, mosfet sıcaklıklarını kontrol etmek için yazmıştım, bir hata var mı acaba şüpheye düştüm..

float GetTemperature(void){
const float multiplier=(float)3300/(float)4096;
 float vo=0; //Voltage Divider Voltage
 float temp=0; //NTC Calculated Temperature
 float r0=10000; //NTC Resistance at 25 C
 float r1=0; //NTC Resistance
const float r2=10000; //NTC Series Resistance
const float vi=3300; //input voltage 3300mV
const float b=4050; //NTC coefficent
const float t0=293.15; //room temp 25 C = 293.15K
 
 // 1/T = 1/T0 + 1/B * ln(R/R0)
 // T : Temperature
 // T0: Room Temperature (293.15K)
 // B : NTC Coefficent
 // R : NTC Resistance
 // R0: NTC Resistance at 25 C
 
 //TemperatureRaw=ADC_DualConvertedValueTab[0];
 TemperatureRaw=(tmpTemperatureTotal/ADCSample);
 vo=TemperatureRaw*multiplier;
 r1=r2*((vi/vo)-1);
 temp=(1/((1/t0)+(1/b)*log(r1/r0)))-273.15f;
 flagTemperatureReady=0;
 return temp;
}

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

ACM

#6
https://www.sebulli.com/ntc

Anlamadığım 2 nokta var

1: "Number of interpolating points" bölümü nedir , nasıl belirliyeceğiz bunu ?

2: p1 = NTC_table[ (adc_value >> 3)  ]   Bu kodda adc değerini 3 sağa iteleyip tablodan eşit değeri alıyor ise tabloda olmayan değer çıkarsa ne olacak ?

C bilen arkadaşlar halay çekerken biz protoncular kenarda seyrediyoruz , birileri "Gel len sende katıl" dese fenamı olur. Bilen için birkaç dakika sürmez bu kodu protana çevirmek. Kıs kıs gülüşleri duyuyorum , ayıp ediyorsunuz ama.

mehmet

1) 0 - 1023 arasındaki çözünürlük.

2) Dikkat ederseniz ki sadece p1 değil,
p2 değeri de alınıyor. Okunan ADC değeri
hangi iki p değeri arasında önce bu bulunuyor.
p1 ve p2 değerleri çıkıyor. Bu iki değere
göre interpolasyon ile bir değer hesaplanıyor.

Bulunan iki nokta arası eğri olsa bile,
bu yöntemle doğru kabul edilip hesap yapılıyor.

Birinci sorunuzdaki olay burada önem kazanıyor.
Ne kadar parçaya ayrılırsa doğruluk o kadar
artıyor. Tabii mcu gücü de o kadar azalıyor.
Tablodaki hata oranı da altta görülmekte.

Proton diline bunu çevirmek için flash
alanında olacak şekilde tabloyu oluşturun.
(RAM alanını harcamamak için)
Bu tablodan iki değer okuyup ve alttaki
formülü uygulayın.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

ACM

   "Number of interpolating points" değeri tablonun çözünürlülüğü imiş , kolay gibi görünüyor böyle anlatınca Mehnet hocam. Halay başı olmasakda kuyrukda bir yer bulacam gibi.

  Teşekkürler Mehmet hocam.