Konu başlığına uygun kısa bir cevap vermek gerekir ise olmaz. Olmazmış... Aslında amaca göre değişir. Buradaki konu altında devam eden elektronik yük projemde yük akımının kontrol edilmesi için düşük değerli bir direnç kullanılması gerekliydi. 10A seviyesini hedef olarak belirlediğim için 0.1R kullanmaya karar verdim. Böylece 10A akım geçerken direnç uçlarında 1V gerilim oluşacaktı. Güç olarak ise nadiren yüksek akım kullanmayı düşündüğüm için 10A x 1V = 10W ın uygun olduğuna karar verdim. Buraya kadar her şey planlandığı gibi gerçekleşti.
Hazır yük akımını kontrol eden böyle bir direnç varken bu direnç üzerinden akım değerini de okumaya karar verdim. 1V değeri bir opamp ile x6 kat büyüterek bir gerilim bölücü trimpot ile 5V seviyesine ayarlanmasını sağladım. 10bit adc 5volt üzerinden 1023 değer okuyacaktı. Aşırı akım durumunu da tespit etmek adına 10.23A in en yüksek ölçüm değerim olmasına karar verdim. Böylece adc den okunan değerleri de 100'e bölerek doğrudan 10ma 'lik çözünürlük elde etmek mümkün olacaktı. Teoride her şey plana uygun ilerlerken pratikte durum farklı oldu. Isıdan dolayı taş direnç değerinin az bir miktarda değişeceğinin farkındaydım ama bu azıcık değişimim ölçümde büyük hatalara yol açacağının farkında değilmişim. Bu nedenle de ilk başta tutarlı bir akım okuması gerçekleştiremedim. Isıdan kaynaklı direnç değişimini tespit ederek, bu durumdan kaynaklı okuma hatasını telafi etmek amacı ile taş direnç üzerine lm35 ısı sensörünü çelik bir kıskaç yardımı ile monte ettim.
Bulunduğum ortam sıcaklığına uygun olarak ilk başta lm35 üzerinde 29°C okudum. 5A yük akımı ile gerçekleştirdiğim test sırasında sıcaklık 70°C ye yükseldi bu sırada yük akımı gerçekte 5A iken adc üzerinden 5,56A gibi bir değer okunuyordu. Üstelik teste devam etseydim ısı daha da artacak ve okuma hatası da iyice artacaktı. 560ma fark %10 dan yüksek bir okuma hatası anlamına geliyordu.
Dirence ait teknik özellikleri buldum. +/-300ppm/°C değer değişimi verilmiş. Yani her bir °C lık değişimde dirençin değeri 300/1000000 oranında değişir denilmiş. Şimdi bu bilgileri ışığında hesap kitap yapmaya çalışalım.
5A ile test yaptığım için bu değeri referans alıyorum. Normalde 0,1R için V=IxR den 5x0,1=0,5Volt direnç üzerinde gerilim oluşur. Bu değeri yaklaşık 5 kat yükselterek yaklaşık 2,5Volt seviyesine getiriyoruz ve Adc den 500 değerini okuyoruz. Bu değeri de 100 e bölerek 5,00A değerini okuyoruz.
Bu değere göre yeniden hesap yapıldığında 0,06A sapma hesaplanırken gerçekte sapma bu değerden 10 kat fazla yaşanıyor. Üreticinin verdiği 300ppm değerinden bir sonuç çıkartamayınca kendi ölçümlerime göre tersten hesap yaparak ppm değerini 2800ppm olarak hesaplıyorum.
2800ppm sapma ile teori ve pratik birbiri ile örtüşmeye başlıyor. LM35 in ölçümünü aldığımız adc üzerinde okunan her 1 birimlik değer 0,488°C ye tekabül ediyor. Bu durumda 2800ppm/°C değerini, adc değerleri için ~1368,52ppm/adc olarak hesaplıyorum.
Lm35 üzerinden hem °C değeri ile hem de adc değeri ile direncin ısıya bağlı değişimini hesaplayarak sonucu doğruluyoruz. Akım için adc değerinde 56 fazlalık var ve düzeltmeyi bu noktada uygulayacağız. 5A için sapma oranına göre 56 fazla okuma alıyoruz. Yük akımız 1A olsaydı sapma oranına göre 11 fazla okuma alıyor olurduk. Yük akımına göre bir denklem kurmalıyız. Yük akımı bizim için akım okuduğumuz adc kanalı. 5A için ve 40°C fark için bu değer 556 olmuş. Bu değerlerden faydalanarak 56 değerini hesaplamalı ve adc değerini 500 olarak güncellemeliyiz. Formülümüz şöyle olmalıdır.
Fark = Adc / (1+sapmaOranı) * sapmaOranı = 56{codeBox}
int Ambient = 60; // oda sıcaklığı lm35 değeri 60int Resistor_PPM = 2800; // Ppm değerifloat Swing_Ratio = Resistor_PPM * 0.488758553;int Correction;int RawVal_Lm35;int RawVal_Curr;float Amper,temp;RawVal_Lm35 = analogRead( Lm35 );RawVal_Curr = analogRead( Adc_A );temp = RawVal_Lm35 * 500.0 / 1023.0;Swing_Ratio = (RawVal_Lm35 - Ambient) * Swing_Ratio /1000000;Correction = RawVal_Curr / (1+Swing_Ratio) * Swing_Ratio;RawVal_Curr -= Correction;Amper = RawVal_Curr * 10.23 / 1023.000; {codeBox}
Peki pratikte sonuç ne oluyor... Taş direnç içten ısındıktan sonra dış yüzeyinin de ısınması, sonrasında bu ısının lm35 e transfer olup ölçülebilir hale gelmesi arasında bir zaman farkı var. Kalibrasyon işleminden sonra ölçümler ısı değişiminden çok az etkilenmeye başlıyor. Ölçümler sırasında sıcak, soğuk fark etmeksizin 50ma sapma gözlemledim. Zaten 10bit adc nin son biti doğal olarak gürültülü bu nedenle 10ma hesapladığımız çözünürlüğün 20ma e yükseldiği düşünülünce 50ma sapma bence iyi bir değer. Başka bir ifade ile 5A i en fazla 5.05 olarak yanlış okuyoruz. Bu da %1 okuma hatasına denk gelir.
Bu sorundan kaynaklı başka bir problem daha var. Taş direnç yük akımı sabit tutmaktan sorumlu ve ısı ile değer değiştirdiğinden yük akımını sabit tutamıyor. Direnç ısındıkça yük akımı bir miktar azalıyor. Isı stabil olunca yük akımı da stabil oluyor. İşin olumlu tarafı bu durumu 50ma hatalıda olsa ölçebiliyoruz...