Buralarda dursun.
https://preis-ing.de/en/extras/werkzeuge-fuer-ingenieure-en-translation/c-code-generator-for-ntc-lookup-table/
güzel bir NTC tool'a ihtiyaç var.
https://rusefi.com/Steinhart-Hart.html (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/ (https://www.circuitbasics.com/arduino-thermistor-temperature-sensor-tutorial/)
Burada örnek var.
https://www.youtube.com/watch?v=U9EIsX1C0rQ (https://www.youtube.com/watch?v=U9EIsX1C0rQ)
Burada videosu var.
Steinhart-Hart on Excel:
https://www.mathscinotes.com/2019/11/steinhart-hart-thermistor-calibration-in-excel-using-matrix-formulas/
https://www.mathscinotes.com/wp-content/uploads/2019/11/ExampleThermistor.xlsx
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;
}
https://www.sebulli.com/ntc/
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.
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.
"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.