NTC için kod üreticisi...

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


Erol YILMAZ

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


selimkoc

17 Ocak 2021, 23:02:20 #2 Son düzenlenme: 17 Ocak 2021, 23:06:05 selimkoc
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


ACM

05 Eylül 2021, 13:29:37 #6 Son düzenlenme: 06 Eylül 2021, 02:48:07 ACM
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.

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.

Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.