Arduino ile Yüksek Voltaj Ölçme | SMPS DC Bara Ölçümü

    Arduino ile 5v 'tan daha yüksek bir voltajı ölçmek için; ya da herhangi bir mikro denetleyici için analog referans değerinin üzerindeki bir gerilimi ölçmek istediğimizde linkteki yazıda anlattığım gerilim bölücüleri kullanırız. Henüz okumadıysanız, okuyup buraya geri dönmenizi tavsiye ederim. Örnek olsun diye 9V 'luk bir pili ölçmeye çalışalım, bu aynı zamanda en fazla 9V dc çıkışı olan farklı bir kaynak da olabilir.

Arduino ile daha yüksek voltaj ölçme



    Burada teorik olarak yaptığımız şey en fazla 5v olan arduino ölçme kapasitesini 9V a çıkartmaktır. Dirençleri seçerken GND 'ye bağlı olan 5 in kaç katıysa (4) kaynağın + sına bağlı olan direncin de 4'ün o katı olduğuna dikkat edin.. Toplamda dirençlerimizin GND ve arduino analog pin arasında olan üzerinde 5V diğer direnç üzerinde de 4v olmasını istiyoruz, 12V ölçüyor olsaydık ikinci direnç 4'ün değil 7'nin 4 katı olacaktı, 9 da 4, 12 'de 7 nerden geldi? Kaynak voltajı - 5v (arduino adc max) 'tan geldi. Basitçe üstteki direnç 5x, alttaki direnç 4x olmalı, 9v 'luk bir kaynak için. Bulunabilirliği göz önüne alarak 20 ve 16 yı seçmiş bulunduk.


Arduino ile voltaj okuma konusunu okumadıysanız, şimdi okumanın tam zamanı. Gelelim oradan ne farkımız var noktasına, artık ADC 'den okuduğumuz veriyi 5v üzerinden değil, gerilim bölücünün çarpanı üzerinden değerlendirmemiz gerekiyor, gerilim bölücü en basit haliyle; kaynaktaki voltaj değerini bir şeye ('x') bölmüş ve A0 noktasındaki gerilimi elde etmiş. Bizim örneğimiz için şöyle olacak:

    9V / x = 5V    => 9v/5v = x    => x = 1.8 

biz de tam tersi yol izleyerek yani ADC den okuduğumuz voltaj değerini bu çarpan ile çarparak kaynak voltajına ulaşmış olacağız. Başka türlü hesaplanabilir miydi? 

    (R1 + R 2) / R2  (R2 gnd ye bağlı olan direnç)
    (20 + 16) / 20    => 1.8

yani maksimum direncin "toplam direnç" R2 ye oranıyla, maksimum gerilimin orta ucta oluşan ADC gerilimine oranı aynı. Koda bakacak olursak, işin matematiği dışında değişen bir şey yok :

// C++ code
//
void setup()
{
 Serial.begin(115200);
}

void loop()
{
  int ADC_Value = analogRead(A0);
  float vOnDivider = ADC_Value * 5.0 /1023;
  Serial.print(vOnDivider);
  float vOnSource = vOnDivider *1.8f;
  Serial.print(" ");
  Serial.println(vOnSource);
}

aslına bakarsanız ölçeceğimiz maksimum gerilimi 1023 e bölüp devam etsek de olurdu. Dikkat ederseniz, vOnDivider değerini yani 5 'i 1.8 le çarpıyoruz o da 9 ediyor 😁


Haydi biraz yükselip bir SMPS devresinde giriş voltajı olan 220v AC den doğrultularak elde edilmiş DC Bara denen voltajı ölçmek istiyor olalım; 220v * √(2) = 312V DC ölçeceğiz yani, bu durumda R2 miz 5x ken R1 'imizin de 312-5 'ten 307x olması lazım. Bu noktada voltaj yükseldiği için devrenin güç değerlerini de işin içine katmak gerekecek. Önce ne direnç kullanabiliriz ona bakalım, 307 k direnç arasak bulur muyuz, bulabiliriz belki ama, 307 bizim için alt limit, bu da ne demek 220v olaki yükselirse, bizim A0 da 5v u geçecektir o yüzden daha yüksek bir direnç kullanmak daha güvenli olacaktır. Maksimumda kaça kadar çıkabilsin noktasını düşünürsek 250v AC için 354v dc demek, 355 diyelim düz hesapla; 5x e 350x kullanabiliriz, yani 5k kullanacaksak diğerini 350k k kullanmamız gerekecek.
Devreden geçen akımı hesaplayalım :

I = V / Rtop    => 355V / 355K  = 1mA

350K direnç üzerinde 350V oluşacak, gücü hesaplarsak;

P = I * V    => 0.001 * 350 = 0.350w 

burada bir sıkıntı var,  nedir? piyasadan alacağımız dirençler 1/4w yani 0.25w, biz bu direnç için 0.350w harcar diyoruz, yani bizim dirence elveda bu noktada; ne yapmalıyız, ya daha yüksek güçlü bir direnç almalıyız ya da direnç sayısını artırarak dirençlerin güç tüketimlerini de dağıtabiliriz, 350K yerine iki tane 175K seri kullansak; direnç başına 0.175w güç tüketimi söz konusu olacak bu işimize yarar, ya da K lardan çıkıp M lere geçeceğiz ki devrenin akımı daha da düşsün, R2 yi 20 K 'ya çıkartalım, bu durumda R1 in de 345*4 'ten 1380K olması lazım, olmadı, olabilen ne var 1.5M ohm olabilir. Bu durumda toplam direncimiz 1520k oldu, orta noktada 5v maksimum için artık kaynakta 380V a kadar ölçüm yapabiliyor olacağız. Güç değerimiz kurtarıyor mu peki?

devre akımı; 380V/ 1520K = 250µA
1.5M direnç için güç tüketimi : "380-5" => 375V*0.25mA = 0.093w.

 Umarım mevzu net olarak anlaşılmıştır, dirençlerle alakalı daha fazla detay isterseniz Direnç Parametreleri konusunu okumanızı öneririm, kafanıza takılan herhangi bir şeyi lütfen yorumlarda sormaktan çekinmeyin!

Herkese kolay gelsin!


5 yorum:

  1. Dostum ellerine sağlık, çok açıklayıcı bir bilgi olmuş.
    Ancak şöyle bir soru sorabilirim;
    Arduino Nano'yu 5v pininden besliyorum, ortalama 4.96 ila 5.0V giriş ile (LM2576S-5V SMD Regülatör kullanmama rağmen 11.90v girişi maalesef net 5v olarak vermiyor).
    Ayrıca, 11.90v batarya voltajını 100k ve 10k direnç kullanarak gerilimini düşürerek normalde 1.082v değer görmem gerekirken 1.077 civarında bir değer okuyorum, dolayısıyla maalesef ilgili kodlamayı da yapmama rağmen doğru değer okuyamıyorum, 11.84V gibi bir sonuç dönüyor. A0 bacağında ayrıca 100nf kondansatör bağlı. Bu sorunu nasıl aşabilirim?
    Bursa'dan Fatih :)

    YanıtlaSil
  2. Bu kadar hassas ölçmen gerekiyorsa, arduino AREF değerini internal 1.1v ayarlayabilirsin, bu hata oranını 5 kat düşürecektir, ikincisi daha hassas olması için dirençleri töleransı 1% olanlardan kullanmanı ve değerlerini de mümkün olduğu kadar düşürmeni tavsiye ederim (10Kya 1K gibi) o vakit sonuçların daha doğruya yakınlaşacaktır, AREF i değiştirmek için bir konu yazmıştım ona bakabilirsin. Bursa 'ya selamlar olsun Fatihim :)

    YanıtlaSil
    Yanıtlar
    1. Aslında orayı okurken buraya geldim, orası kafamı çok karıştırdı. Örneğin 1.1v u asla geçmiyorsa demişsin. Fakat A0 a, gerilim bölücüden sonra gelen değer 3S pil de 1.145V, 4S pil de 1.527V değer taşıyor. Dolayısıyla bu Aref ölçümü için uygun değil sanırım. Yada ben olayı tam olarak kavrayamadım :)

      Sil
    2. 1.1v u aşan her değer için 1023 adc değeri okursun, o sebeple asla geçmemeli, aslında senin ölçmek istediğin voltaj 12v olduğu için 1.1v ref değeri anlam taşımıyor her halukarda 12v u 1024 'e bölmüş olacaksın, ben olsam direnç yerine 1k trimpot kullanırdım; pil girişlerini dış uçlara verip orta uçta 1.1v görene kadar ayarlar sonra yapıştırıcı kullanarak sabitlerdim. O şekilde bir dene sonra Aref 5V ken trimpotu %v ayarlayıp dene, artık hangisinde iyi sonuç alırsan ona göre davranırsın.

      Bir de girişe tek kondansatör yerine RC filter for ADC input konusuna bi bakmanı tavsiye ederim google dan daha verimli olacaktır.

      Sil
    3. Pcb tasarimi bitti maalesef, yani hersey yerli yerinde bu saatten sonra değişiklik yapmam cok zor. Dün forumlarda gezerken yukarıda bahsettigin konuyu okudum, buyuk değerli direnc daha fazla gurultuye sebep olabileceği. Bu yuzden dun akşam 100k yerine 10k, 10k yerine 1k %1 toleranslı direnc atarak sorunu çözdüm. Çok düşük bir fark oluşuyor (12.15v degerini zaman zaman 12.12v gibi gösteriyor) sanirim bu da kabul edilebilir bir değer. Ancak, yine de aref ile kullanımın cok az hata payi oldugu icin sorma gereği duymustum. Fakat dediğim gibi, pcb hazırlandığı için trimpot vb. cok zor suan icin. Belki yeni versionda kullanabilirim :)

      Sil

Türksat Saat Kanalı ve IRIG-B Time Code

Türksat Saat Kanalından Saat Bilgisi Nasıl Alınır? Uyduda kanalları dolaşırken, şu Türksat Saat kanalı hep dikkatimi çekmiştir. Özellikle  S...