Pic-Adc-Akü

Başlatan oguztkn, 22 Şubat 2020, 02:05:30

oguztkn

Merhabalar,

12 volt bir akünün voltaj izlemesini yapmak istiyorum. Belirli voltajlara gelince uyarı ya da buzzer gibi bildirimler alacağım. Devre ölçülecek aküden beslenecek. Hangi yöntem ile daha sağlıklı bir çalışma olur danışmak istedim.

Dirençler ile gerilim bölücü yaparak adc'den izlemek şeklinde mi ? ( Dirençleri watt'lı seçmek gerekiyor galiba)
AD5726 gibi DAC entegreleri kullanmak mı ?  ( 5v-15v aralığında imiş datasheet'te)

Bir de devreyi de aynı aküden besleyeceğim için 7805'ten daha verimli hangi regülatör kullanmalıyım. 2575 in pasif komponentleri fazla geldi , ams1117 de 7805'te ne kadar verimli bilemedim.

Şimdiden Teşekkürler.....

ete

Akü voltajı gerilim bölücü ile rahatlıkla okunabilir. EKstra bir malzemeye gerek yok bence.
Önemli olan Akü voltajının düşmesi sonucunda devre beslemesinde yada en azından ADC ref geriliminde herhangi bir değişiklik olmamasıdır. Bunu sağlamak için mutlaka üzerinde FVR yani sabit voltaj referans modülü olan bir işlemci kullanmak ve ADC ref voltajını FVR den vermek gerekir. Söz konusu ref voltajı besleme ne kadar değişirse değişsin sabit kalır çünki pic tarafından üretilen bir voltajdır.

Besleme ayarlaması için 7805 de kafi gelir diye düşünüyorum. Tabiiki LM2575 ideal olurdu.

Gerilim bölücüde watt lı direncede gerek yok. Büyük bir akım çekilmeyecek sonuçta ama %1 toleranslı direnç kullanılması ölçümün sıhhatlı yapılması açısından önemli olacaktır.

Ete

elektro77

#2
aküden bahsedilince sorayım dedim.
Geçenlerde bir teknenin aküsüne üzerinde 7805 olan ve masa üzerinde çalışan bir devre taktım. Devre ilk çalıştığında direk patladı. 7805 gümledi. değiştirdim ve masada yine çalıştı. Akü 100 amperdi. Sebebi amperden mi bilmiyorum.
Dün yine 12 volt ile çalışan ve üzerinde yine 7805 olan bir mp3 çalar modülünü arabanın aküsüne direk bağladım ve yine ilk açılışta oda güm.
Sonuçta cihazlar aküye bile bağlansa harcadığı miktar kadar akım çekmezmi.
Bunun sebebi nedir. Bir tecrübeniz varmı bu konuda.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

oguztkn

#3
16f1825 te FVR var hocam sanırım bu işimi görebilir. Şöyle bir ibare var datasheet'te; FixedVoltageReference(FVR)with1.024V,
2.048V and 4.096V output levels

Burada fvr ile referansı 4.096 volt seçip bunuda adc de 1023 kabul edecek şekilde bir mantık kuracağım sanırım ?

ete

Bende arabaya bir çok şey bağlıyorum ama hiçbiri patlamıyor. Kimse ihtiyacından fazla akım çekmez.
Ancak bağladığın aletlerin giriş voltajlarına dikkat etmek gerekir. 3V ile çalışan aleti direk 12 V ta takarsan elbette gümler. Sebep bu veya buna benzer bir şeydir mutlaka.

Ete

elektro77

Alıntı yapılan: ete - 22 Şubat 2020, 10:16:13Bende arabaya bir çok şey bağlıyorum ama hiçbiri patlamıyor. Kimse ihtiyacından fazla akım çekmez.
Ancak bağladığın aletlerin giriş voltajlarına dikkat etmek gerekir. 3V ile çalışan aleti direk 12 V ta takarsan elbette gümler. Sebep bu veya buna benzer bir şeydir mutlaka.

Ete
hocam 7805 ler in ve gnd tarafinfan patladilar. bu sitede bulunan hic kimse 3 voltluk bir devreye 12 volt verecek kadar acemi değillerdir heralde. teessuf ederim.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

oguztkn

Alıntı yapılan: ete - 22 Şubat 2020, 07:24:52Akü voltajı gerilim bölücü ile rahatlıkla okunabilir. EKstra bir malzemeye gerek yok bence.
Önemli olan Akü voltajının düşmesi sonucunda devre beslemesinde yada en azından ADC ref geriliminde herhangi bir değişiklik olmamasıdır. Bunu sağlamak için mutlaka üzerinde FVR yani sabit voltaj referans modülü olan bir işlemci kullanmak ve ADC ref voltajını FVR den vermek gerekir. Söz konusu ref voltajı besleme ne kadar değişirse değişsin sabit kalır çünki pic tarafından üretilen bir voltajdır.

Besleme ayarlaması için 7805 de kafi gelir diye düşünüyorum. Tabiiki LM2575 ideal olurdu.

Gerilim bölücüde watt lı direncede gerek yok. Büyük bir akım çekilmeyecek sonuçta ama %1 toleranslı direnç kullanılması ölçümün sıhhatlı yapılması açısından önemli olacaktır.

Ete


Hocam akü 12 değilde 24 olduğu durumda

Besleme de LM2575'e geçeceğim. Ama 24 volt akünün bitiş voltajı kaçta bırakılmalıdır internette pek bilgi bulamadım. Genelde 12 volt üzerinden hesaplar.

muyat

7805'e kondansator koydunuz mu?

ete

12V luk akü , 10V rta düşünce bitmiş sayulıyor. Orantılama yaparsan 24V luk akü de 20V ta düşünce bitmiş sayılır bence.

Ete

oguztkn

#9
Hocam merhaba,

30 voltu gerilim bölücü ile pic'in adc kanalına girdim. 16f1938 kullandığımdan FVR ile adc ref gerilimini 4096 olarak seçtim.

for x=1 to 30
     adcin 13,ham
     hamtoplam=hamtoplam+ham
     next x
     
     ortalama=hamtoplam/30
     hamtoplam=0
     aku=(ortalama+1)*/95

şeklinde blok ile 3 haneli olarak okuyabiliyorum. Ama virgülden sonra iki hane göstermem için nasıl bir değişiklik yapmak gerekir ? Sanırım sayılar büyüyeceğinde 32 bit işlem yapmak gerekiyor ama o konuda bilgim yok. 30 volt ile 20 volt arasını adc ile işleyip lcd de göstermeye çalışıyorum. Gerilim bölücülerim ile şu şekilde +30v -> 27K -> 3k3 -> GND
                                                               -> bu kısma paralel 5v1 zener ve onada paralel 100nf kondansatör ekledim.   

ete

Öncelikle gerilim bölme elemanlarına bakalım. Verdiğin 27K+3K3 ikilisi ile bölünmüş gerilim 3,27V çıkacak olup bu 4,096V dan epeyce uzak bir değer. Burada amaç bölme sonucunda ve 30V luk beslemede 4,096V veya buna en yakın değeri elde etmek. Bu nedenle 27K yerine en azından 22K kullanman daha doğru olacaktır.
Bu durumda 3,91V bölünmüş voltaj elde edilecektir. Gelelim ADC tarafında. girişe 4,96V verdiğin zaman alacağın ADC değeri 1023 olacaktır. Amaç 30V luk voltajı ölçmek ise hesabımızı 3,91V üzerinden yapmamız gerekecek. Bu voltaj için ADC den okuyacağın değer 976 olacaktır.
Bu durumda 3,91V karşılığı 976 kuduğumda ekranda 30,00V okumam gerekecek. O halde 330V yerine 3000 sayısını baz alacağız. 3000/976=‭3,073770491803279‬  bu sayıyı 256 ile çarpacağız. Çünki sonucu hesaplarken 256 ya bölünmüş halini bulacağız. 256 x ‭3,073770491803279‬=‭786,8852459016393‬
küsürattan kurtulmak için bu sayıyı ‭7869 kabul edeceğiz ve 10 ile çarptığımız için sonucu 10 a bölerek hesap yapacağız. Bu durumda formülümüz;
Volt=(HAM_ADC*/7869)/10 şeklinde olacaktır.
Burada */ ifadesi  bir 32 bit çarpma ifadesidir. Sonucu ise 256 ya bölerek verir.
Hemen deneyelim.
HAM_ADC=976 olsun. Hesabı basic matematiğine göre yapacağız.
Volt=(976 *7869)=‭7.680.144‬  bunu 256 ya bölersek ‭7.680.144‬/256=30.000 çıkacaktır. Bu sonucu birde 10'a bölmemiz gerekecektir. ve 30.000/10=3000 sonucunu elde etmiş oluruz. Buda aradığımız cevap olacaktır.
Bunu ekrana yazdırırken;
Tamsayı=3000/100, ondalık=3000//100 şeklinde yazdırırsan olur biter.
Bu işlemlerden yalnızca */ işlemi 32 bit yapılıyor ki bunu basic yapabiliyor. Sonucuda 256 ya bölerek bize veriyor. Böylece özel artimetik işlem yada değişken kullanmadan her iş çözülmüş oluyor.

Ete


oguztkn

Hocam dediğiniz formülü uygulayarak voltaj okuma işini halledebildim.Aynı durumu acs ile akım okumak içinde yapmaya çalıştım fakat normalde 512 gibi bir değer vermesi gerekirken 612 veriyor. Bunun nedeni ile fvr den dolayı analog + referans 4096 da olmasından kaynaklı olduğunu biliyorum.

Bir konudaki yazınızda :

BASLA:
TOPLAM=0 'bu komut eksik sende toplam değeri her okumadan önce sıfırlamaz isen bir sonraki hesap şaşar.
FOR X=0 to 9
ADCIN 1,ADC
TOPLAM=TOPLAM+ ABS(512-ADC)
NEXT
ADC=TOPLAM/10
AMPS=(ADC*/1503)/10
LCDOUT $FE,$80," I= ",DEC amps,",",DEC1 AMPS//10
PAUSE 100
GOTO BASLA

şekilde bir arkadaşa paylaşmışsınız. Bu bilgiden yola çıkarak uyarlamaya çalıştım. Benim formülümde değer AMPS=(ADC*/1020)10 olacağını hesapladım. Fakat yukarıdaki bloğu uyguladığımda iki yönde de farklı değerler çıkmasının haricinde alakasız rakamlar çıkıyor. Nerede yanlış yapıyorum acaba ?

ete

Öncelikle o verdiğim örnekte kim ne yapıyor onu açıklayayım.
ACS tipi akım ölçerler akımın her yönünde 0-2,5V gibi bir voltaj üretir akım değerine bağlı olarak.Bu voltaj 2,5-5V da olabilir.
Bir motor düşün kutuplarına + besleme ve - besleme verince motor sağa döner. Kutupları değiştirirsen motor ters yöne döner. İkinci konumda akım yönü değişmiş olur. ACS sensörüde akım yönüne göre 0-512 aralığında bir değer yada 512-1023 aralığında bir değer üretir. Bu durumda bizim hesap için kullanmamız gereken maksimum değer daima 512 olacaktır.
Diyelimki 40 amperlik bir sisteminiz var ve bunun için parametre (çarpan) hesabı yapacaksınız. Aşağıdaki şekilde olmalı.
400/512=0,78125 bunu 256 ile çarpınca  200 gibi bir değer bulacağız. O halde formülümüz adc*/200 şeklinde olacaktır.
Bunları anlatmamdaki maksadım kullandığın formüllerin yanlış olma ihtimalleridir.
ADC sensörü boşta 512 vermesi gerekiriken 612 gibi bir değer vermesi güzel değil bir şeylerin yanlış olduğunun göstergesidir. Ama sistemini FVR ile kuruyor isen bu durumda adc girişine gerilim bölücü uygulaman gerekir. Zira ref voltajın hiç bir zaman 5V olmayacaktır. 4,096V olacaktır. 5V u 4,09 ya düşürecek bir gerilim bölücü olmalıdır.

ABS parametresi sayının absolute değerini kullanır. ABS(512-ADC) işleminde sayı 512 den büyük ise ondan 512 yi çıkartıp bize 0-512 aralığında net adc değerini verir.Şayet akım ters yönde çekiliyor ise ADC değerimiz bu sefer 412 çıkacaktır. Bu durumda aynı formül bize net 100 değerini verecektir. Böylece bizim için akım yönüne bağlı olarak 412 yada 612 okunması sonucumuzu değiştirmeyecektir.

Bu yazılanlara göre kendi hesaplarını yeniden değerlendir varsa bir hata düzeltmeye çalış. Olmaz ise yeniden mesaj at üzerinde tartışalım. Bu işi yapmadan önce sisteminden belirli bir akım çekip okunan adc değerini bir yere not et. Akım yönünü değiştir (sadece ACS nin giriş çıkışlarını ters çevir ve aynı okumayı yeniden yap ve ADC değerini not et. Mesajında bu bilgileri ver ona göre yeniden tartışalım.

Ete

oguztkn

Merhaba hocam,

acs712-20A için o zaman

200/512=0,390625 bunu da 256 ile çarpınca 100 çıkıyor. Bu hali ile kullandığımda;

acs_oku:
    hamtoplam2=0
    FOR X=0 to 29
    ADCIN 11,ham2
    hamtoplam2=hamtoplam2+ ABS(512-ham2)
    PAUSEUS 10
    NEXT
    ham3=hamtoplam2/30

    amper=(ham3*/100)
return

şeklinde kullanıyorum. Sistemi başlattığımda 102 değeri çıkıyor. Motoru sağ ve sola döndürdüğümde ise 40 değişiklik oluyor. Yani 102+40 yada 102-40 şeklinde (ham3 değeri). Bu şekli acs nin doğru çalıştığını gösteriyor sanırım. Sorun şurada başlıyor +ref değerimiz 4096mv olduğundan acs boşta çıkarması gereken 512 değeri yerine 612 çıkarıyor. Gerilim bölücü demişsiniz ama bunu yazılım olarak çözülmesi gerekmezmi ? Çünkü acs nin beslemesi 5v ama pic'in adc +ref'i 4096mv.

ete

Ref voltajına karşılık gelen voltajın ADC pinlerine tatbik edilmesi gerekir. Genel kural şudur ADC pinlerine REF voltajından fazla voltaj gelemez. Senin fikrine göre 4,096V olan ref voltajına karşılık ADC pinine 5V gelecek demektir. Bunun yazılım ile çözülmesi bence mantıksız. Basitçe farkı adc değerinden çıkartabilirsin ama bu seferde diğer yönde aksaklık çıkar.
Ref voltajın 4,96 ise Pic ölçümlerde bu voltaj ve üzerini hep 1023 olarak kabul eder. Buda hataya sebep olur. DOğrusu gerilim bölücü kullanmaktır. Şöyle düşün sensörden 4,096v geldi okunan değer 1023, voltaj arttı 4,1V geldi okunan değer yine 1023, 4,3V geldi okunan değer yine 1023 4,5V geldi okunan değer yine 1023. 5V geldi yine okunan değer 1023 sen yazılımla ne geldiğini nasıl bulacaksın?


Ete

Powered by EzPortal