ACS712 AKIM BELİRLEME

Başlatan muyat, 02 Eylül 2021, 16:37:49

muyat

MErhabalar.
Röleli bir devremde acs712 kullandım.Rölenin kesmesi gereken akımı da pice ayrı bir 10k trimpot baglayarak belirlemeye çalışıyorum.Yani biraz yüksek akım çekilirse acs712 sayesinde röle enerjiyi kesecek ve motor duracak.Kesme akımını dedigim gibi picin ayrı bir pinine baglı 10k trimpotla belirliyorum.
picin ano girişinde trimpot baglı
picin an4 girişinde acs712 baglı
Diyelimki butona bastık röle çekti ve program aşagıdaki döngüye girdi.
Rölemiz bazı durumlarda motorun artı ucunu tetikletirken,bazı durumlarda da eksi ucunu tetikleteceğinden
acs712nin 511 den önce ve sonra alabilecegi değerleri giriyorum kodlara.Buraya kadar sorun yok.

HAMS'ın yani trimpotun alacagı degerler 0-1024 arası ise trimpotu en sağa çevirdigimizde alacagı deger maksimum 1024 olacak.Bu durumda da şayet ben eksi anahtarlama yapacaksaksam ham1 degeri 0-511 arasında olacagından sadece bu 0-511 aralıgını yorumlatacagından hams degerini 2'ye böldümki hesaplamada sonuç negatif çıkmasın.
Burdan yola çıkarak aşagıdaki matematik işlemi dogru mudur?

for I=0 to 5000
ADCIN 0,HAMS
ADCIN 4,HAM1


IF (HAM1 >0) AND (HAM1<511-(HAMS/2)) THEN' eksi anahtarlama
SOLROLE=0
goto CIK
ENDIF

IF (HAM1 >511+(HAMS/2)) AND (HAM1 < 1024) Then 'artı anahtarlama
SOLROLE=0
GOTO CIK
ENDIF
pause 1
next
CIK:
SOLROLE=0

aRci

merhaba;
ilk olarak sormak isterim motorun çektiği akımı tek yönlü ölçmenin sakıncası varmı? yani acs yi motora değil de motoru süren sürücü ye bağlasanız ve motor ileri yada geri dönerse dönsün acs den sürekli pozitif yönlü (511 den fazla ) akım değeri almanızın sakıncası var mı?

ete

ACS serisi Akım sensörleri çekilen akımın her iki yönünde de çıkış verirler. Bunu sağlamak için sensör boşta yani akım çekilmez iken çıkışında 2,5V voltaj verir. Akım yönüne bağlı olarak bir yönde çekilen akıma göre bu voltaj 2,5-5V arasında değişir. Yada akım tersi yönde çekiliyor ise 0-2,5V arasında çıkış verir.
Bu durumda sensör 3 konumlu çalışır diyebiliriz. Boşta ADC karşılığı olarak 511 verirken akımın bir yönde çekilmesine bağlı olarak 511-1023 aralığında veya akımın ters yönde çekilmesine bağlı olarak da 0-511 aralığında ADC değeri verir.
Şimdi akımın çekiliş yönünden bağımsız olarak ne yönde çekilirse çekilsin hep net adc değerini hesaplayabilmek için ABS yani absolute değer komutunu kullanmamız gerekiyor.
Örnek vereyim. ADC kanalından okuduğumuz değer 711 olsun. Net adc değerimiz 711-511 =200 olarak hesaplanır. Bu değerin akıma çevrilmesini sonra açıklayacağım.
Şimdi akım yönü değişti diyelim ve çekilen akıma karşılık ADC kanalından okuduğumuz değer 311 olduğunu varsayalım. Bu durumda hesap 511-311=200 olarak bulunacaktır.
Bir sürü if komutundan kurtulmak için akım ne yönde çekilirse çekilsin net ADC karşığını aşağıdaki formül ile bulabiliriz.
OKUNAN=ABS(HAM-511)
Yukarıdaki iki örneği de aynı formül ile hesaplasa idik çıkan sonuç her iki konumda da 200 olacak idi.

Gelelim okunan değerin akıma çevrilmesine. Burada sensör akım değeri önem kazanıyor. Diyelimki sensörümüz 5,0 A lik bir sensör. Maksimum ADC karşılığımız 511 olacağı için 50/511=0,0978473581213307  bu sayıyı 256 ile çarparsak 25,04 rakamını buluruz. Bu sayıyı 251 olarak kullanıp formülümüzü AKIM=(OKUNAN */251)/10 şeklinde düzenleyeceğiz. Bu hesabın sonucu maksimum akımda 50 olarak çıkacak olup buda 5,0A karşılığıdır.

Sensör 20,0 A lik ise, (200/511)*256=100,2 ve bu rakamı 1002 şeklinde kullanarak formülümüzü AKIM=(OKUNAN */1002)/10 şeklinde kullanacağız.

Şimdi gelelim Muyat arakadaşımızın meselesine.
Pot dan okunan HAMS değeri ile ACS den okunan değeri karşılaştıracağımız için pot dan okunacak değeri ACS seviyesine indirgemeiz gerekir. Okunan değeri 2 ye bölmek çözüm gibi gözüksede doğrusunu şöyle yapabiliriz.
(511/1023)*256=127,9 bunu 1279 olarak kullanalım. HAMS=(HAM*/1279)/10 bize 0-511 aralığında bir değer verecektir. BU aşamadan sonra işimiz daha kolay olacaktır.
ACS den gelecek bilgi OKUNAN=ABS(HAM-511) formülü ile bulunacak idi.
Şimdi roleyi kontrol edecek kodu şöyle yaabiliriz.
IF OKUNAN>HAMS THEN
  ROLE=0
  goto CIK
ENDIF
'neden burada röle ye sıfır veriliyor anlamadım. Bir transistör sürüyor ise rolenin çekmesi için 1 verilmesi gerekmezmi. Şema olmayınca insan karar veremiyor.
Akım değerleri kullanılmadığı için onları hesaplamadık. Yanlızca pot ve ACS nin ADC karşılıkları kullanılmış oldu.
Hepsi bu kadar.
Ete



muyat

#3
Ete hocam;
Yukardaki anlatım gayet açıklayıcı.Özellikle 256 sayısını kullanarak işlem yapmak hiç aklıma gelmemişti.
ABS yani absoule value'nin de matematikteki "mutlak değer" anlamına geldiğini bilmek de anlamayı kolaylaştırıyor.Çok teşekkürler.
Ayrıca yukarda yazmayı unutmuşum..Program for döngüsüne girmeden önce RÖLE=1 tabiki.
Peki bir de son olarak şunu  sorayım:
Piyasada satılan acs712ler'in yükün girecegi klemens kısmındaki klemens sizce o kadar yüksek akıma dayanıyor mu?Bana uzun vadede ve uzun süreli ve sürekli çalışacak  bir motorda aşagıdaki resimdeki klemens pek güven vermiyor.
Çünkü ben 7-8 amperlik bir yükte(led)  bile normal 5.08mm dişili erkekli klemenslerde bile kararma sorunları yaşadım.klemensin içindeki metal kısım yükten dolayı ısınıp bozulabiliyor.



ete

Şimdiye kadar kullandıklarımı entegreyi satın alarak kendim devreye koyarak kullandım.
Klemensler 5A için yeterli olur. Ancak diğer akımlar için bence yetersiz olurlar.
Ete

muyat

Hocam tekrar merhaba.
Geçenlerde bastıgım bir pcbde şöyle bir problem yaşadım.
Öncelikle yukardaki 3 numaralı mesajdaki acs712 20a lık hazır sensörlerden alıp,sensörlerdeki acs712 entegresini üflemeli havya ile söktüm.
Sonra bunu kendi yaptıgım pcbye aktardım.
Acs712 entegresini resimdeki gibi pcb'nin arka kısmına tam da rölelerin alt kısmına gelcek şekilde yerleştirdim..Kartta 3 adet röle ve 3 adet acs712 var.
Sorun şu:
Röle çıkışlarında yük yok iken röle çektigi anda acs712 çıkış voltajı 2.5volt degil,2.1volt oluyor.Dolaysıyla acs712 , rölelerin sanırım bobininden etkileniyor.Hatta emin olmak için masaya bobinine enerji verilmiş ve kontak ucu boş olan bir röle koydum..Hazır satılan acs712 modülünü röleye çok yaklaştırdıgımda çıkış voltajının 2.1 volt oldugunu gördüm..
Bu nedenle bu sensör kullanılacaksa kesinlikle rölenin tam altında veya üstünde olmamalı.
Şimdi kartı çöpe atmamak için kalibrasyonda 2.5voltu 2.1 volt kabul ederek hesabı şu şekilde yapabilir miyiz?
2.5 volt =511 değerine karşılık geliyorsa oran ve orantıdan 2.1 volt=429 degerini alır.

Bu durumda OKUNAN=ABS(HAM-429) degeri doğru mudur?
2 numaralı mesajda potdan okunan degeri de acsden okunan degerle karşılaştırmak istedigimizde;
HAMS=(HAM*/1072)/10 bize 0-429 aralığında bir değer verecektir.Burası da doğru mudur?
Yaptıgım prototip kart aşagıdadır.Acs712ler tam rölenin alt kısmında.
https://imgyukle.com/f/2021/12/24/oRBQky.png

ete

Sensör verisinin yanlızca bir yöndeki voltaj düşmesine bakmak hata olur diye düşünüyorum.
Biliyorsun bu sensör boşta 2,5V verirken akım A dan B ye giderken 2,5V-0V aralığını verir. Akım B den A ya doğru giderkende 2,5-5V aralığında voltaj verir.
Henüz sensörden akım geçirip hang, yöne sapma yaptığına bakmamışsın bu bir hesap hatası doğrabilir.
Ölçmeyi amaçladığın akımı o sensörden geçir ve bak bakalım sensör çıkışında kaç volt oluşuyor.

Bu açıklamamı bir kenara bırakıp yaptıklarının doğruluğunu test edelim.
Sensör mutlak değerini akım yönünü dikkate almadan bulmamızı yarayan formül,
OKUNAN=ABS(HAM-429)  şeklinde olacak bu doğru.
Okunan değerde akım hesaplama formüğlünü nasıl elde ettin onu anlamadım.
HAMS=(HAM*/1072)/10  formülünden bahsediyorum. Hemen bir hesap yapalım maksimum akım değerin,
OKUNAN=ABS(HAM-429) ile OKUNAN=429 hesaplanacak (HAM=0 olunca maks akım geçmiş olacak)

HAMS=(429*/)/10=179 sonucu elde edilecek. Bu doğrumudur sence? Bence değil Bu sensör madem 20 amperlik o halde sonucun 200 çıkması beklenirdi. Acaba boştaki voltajın 2,5 dan 2,1 V ta düşmesi ile okunacak akımdan da biraz düşme olacağınımı hesaba kattın. Öyle is düşüncen doğru olabillir. Ama o sensör hala 20A akım değerini hesaplayacak durumda olmalı. Bu nedenle bana göre doğru formül HAMS=(HAM*/1194)*/10 şeklinde olmalı.
Nasıl hesapladım onuda açıklayayım. SOnuç 200 çıkacak idi bunu 429 a bölersek ve sonucuda 256 ile çarparsak 119,3473193473193 sonucunu buluruz. Virgülden sonra bir hane fazla alıp değerini bir artırırsam küsüratları eklemiş olurum o haşde sabit çarpanım 1194 olacaktır. Hesap böyle

Dediğim gibi sensörden akım geçirip ne yönde voltaj verdiğine kesn olarak bakman gerekiyor.

Ete

muyat

Hocam bugun test ettim.
Örnegin bu sensör üzerinden ufak bir dc motorun artı ucunu  anahtarladıgımda röle çektigi anda çıkış voltajı 2,1den 2.2volt falan oluyor.O sırada elimle motoru zorladıgımda voltaj 2.6volt falan oluyor.
dc motorun eksi ucunu acs712 çıkışından röle ile  anahtarladıgımda ise bu sefer sensörün çıkış voltajı 2.1voltun altına iniyor.2.0v falan.Motoru elimle zorlarsam 1.7volt falana düşüyor.
Yukardaki son yazdıgınız formülü denedim.Şu an işimi görüyor.Bu verilere göre yine de bir değişiklik gerekiyor mu?Çünkü voltajımız orta noktadan geriye kaymış durumda 2.1 volt.

ete

Görünüşe bakılırsa senin sensör akım çekilince voltaj yukarı doğru 5 volta doğru yaklaşıyor. Ben tersini düşünmüştüm.
Bu durumda formül işini görüyor olsada farklı bir formül ortaya çıkabilir. Zira,
ADC karşılığı olarak okuma 429 dan başlayıp 1023'e doğru gidecek. Farkını alırsak 1023-429=594 birim ölçüm değeri 20 bir başka deyişle 20,0 Ampere tekabül edecek demektir. O halde yeni formülümüzde, (200/594)*256=86,19528 şeklinde sabit çarpan değeri bulunacak ve bunu yuvarlarsak 862 şeklinde bir sayı bulacağız demektir. O halde formül Akım=ABS((Ham-429)*/862)/10 şeklinde olmalıdır.
Hemen hesap yaparak test edersek A=(((1023-429)*862)/256)/10=200 değerini bize verecektir.
Birde bu formülü dene istersen.
Ete

muyat

Hocam yalnız şöyle bir durum var.
Değer 429dan başlarken artı anahtarlarsak,deger 1023 'e doğru kayacagı için 1023-429=594 birim ölçü degeri.
Fakat eksi anahtarlarsak da deger 429'dan 0'a doğru yaklaşacagı için 429 birim ölçü degeri var.

Bu durumda  ABS kullanımı yanlış sonuç vermez mi?

Yani doğrusu bu durumda şu olması gerekmez mi?
Değer 429dan büyükse 1023-429=594birim
200/594*256=86,19 ve yuvarlarsak 862(Bu kısmı zaten siz yaptınız.
Bu durumda
IF HAM>=429 THEN
Akım=((Ham-429)*/862)/10 
ENDIF
Değer 429dan küçükse 429-0=429 birim var.
200/429*256=119,3 ve yuvarlarsak 1193
Bu durumda
IF HAM<429 THEN
Akım=((429-HAM)*/1193)/10 
ENDIF

Yukardaki formüllere göre artı anahtarlarken değer maksimum 1023 iken akım maksimum akım 20 iken,eksi anahtarlarken değeri 0 sayarsak yani akım=((429-0)*/1193)/10 da yine maksimum akım 20 çıkar.
Bu duruma yukardaki formüller daha doğru olmaz mı?



ete

Şayet sistemin böyle ise tasarımın baştan yanlış. ACS sensöründen motor ne yöne dönerse dönsün bir yönde akım geçmeli. Sonuçta sisteminde tek bir beslemen var. Motora giden voltajları sen yöne göre çeviriyorsun. Çevrilmemiş halinden yararlanarak bir yönde senörü kullanabilirdin.
Bu durumda işin epeyce zor gibi gözüksede belkide değildir. Bana kalırsa bu iki varsayımdan hangisi gerçek devreye daha iyi uyum sağlıyor ise birini kullan derim. Teorik olarak düşünürsek bir taraftaki ADC değerin 0-429 diğer taraftaki ise 429-858 şeklinde yürümesi gerekir diye düşünüyorum.

Ete

Hattuşa

hocam o zaman ACS yi motor girişine değilde beslemeye seri bağlamak daha mantıklı değil mi? motor girişinde eğer DC motor ise yön değişiminde beslemenin yönü değiştiği için akım +- gözükebilir. direk +V a seri girsek ACS yi +V girişi motorun hangi ucuna bağlanırsa bağlansın akımın yönü sabit olur diye düşünüyorum

ete

Aklın yolu daima birdir. Nasıl yapsam da motor yönü değişse bile akım yönü değişmese dediğin zaman ACS sensörü ana motor besleme hattına ve yön değiştirme hattından öncesine bağlanması gerekir. Başka yolu varmı bunun? yok elbette.

Ete

Powered by EzPortal