ACS712 HAKKINDA

Başlatan muyat, 11 Temmuz 2020, 22:24:07

muyat

12F675 işlemci kullanıyorum.
2 adet röle ile çift yönlü dc motor kontrolü yapıyorum.
Sistem boşta iken acs712 çıkışında 2.50volt var..
Çıkışa 12 volt 21watt bir ampül bağladıgımda
beyaz isimli giriş 0 iken sarı isimli röle çekiyor ve acs712 çıkışı 2.8volt oluyor.
gri isimli giriş 0 iken mavi isimli röle çekiyor ve acs 712 çıkışı 2.3 volt falan oluyor..Burası ampülle tam istedigim gibi.

Basit ufak bir dc motor bagladıgımda ise motor tek bir yöne normal olarak dönerken acs çıkışı 2.510 volt olurken motoru elimle zorladıgımda 2.580 volt oluyor .
FAkat motor diger yöne normal olarak dönerken acs çıkışı 2.580 falan olurken motoru o an elimle tutunca acs çıkışı 2.510volt oluyor burası işimi bozuyor.Çünkü motor ters yöne dönerken acs çıkışının 2.5 voltun altına düşmesi gerekirken düşmüyor..Ama yukarda ampülle denedigimde düşüyor.Bunun nedeni ne olabilir
VE aşagıdaki kodda ne gibi düzenlemeler gerekiyor.
Beyaz ve gri isimli butonlara basınca hem ilgili rölenin çekmesini,hem de acs712 çıkışını analog olarak okuyup motor yüke binince rölenin bırakmasını istiyorum.İstedigim gibi olmadı.   



@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON &_MCLRE_OFF & _BODEN_OFF & _CP_ON
DEFINE OSCCAL_1K 1                                        
DEFINE ADC_BITS 10 
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50 

CMCON = 7 ' Comparators off
ANSEL = %0000100 
ADCON0.7 = 1 ' Right justify for 10-bit
trisio = %00111100
GPIO=0 

             


TRISIO=%01111100


BEYAZ VAR GPIO.4 'giriş1    
YESIL VAR GPIO.5  'giriş3 
MOR VAR GPIO.3      'giriş2
MAVI VAR GPIO.0   
SARI VAR GPIO.1     


HAM VAR WORD
GPIO=0
         
CLEAR


BASLA:

IF BEYAZ=0 AND MOR=1 THEN                   

ADCIN 2,HAM
IF (HAM > 550) AND (HAM < 1024) Then BASLA                                                                                
SARI=1 
ELSE
SARI=0                                                                      
ENDIF

IF MOR=0 AND BEYAZ=1 THEN                                  
ADCIN 2,HAM
IF (HAM > 550) AND (HAM < 1024) Then BASLA
MAVI=1
ELSE
MAVI=0
ENDIF

GOTO BASLA

end





ete

ACS712 nin nasıl veya nereye bağlı olduğu konusunda hiç bilgi vermemişsin.
Şayet ana beslemede değişmeyen bir akım akış yönüne sahip ise sen röle ile yön değiştirsende ACS den gaçan akımın yönü değişmediğinden hep bir yönde çıkış verir.
Ama ACS yi motorun bir koluna bağlarsan bir yönde soldan sağa akan akım diğer yönde sağdan sola akacağından akıma bağlı çıkış voltajıda 2,5V üzeri veya 2,5V altı şeklinde değer alır.
Motorların elle tutulması tesadüflere bağlı olarak fırçaların uygun yere denk gelmesi halinde akım çektirir. Durdurmak yerine durmadan iyice yavaşlatmak daha doğru sonuçlar doğurur.
Önce sisteminin doğru şekilde kurulmıuş olduğundan emin ol sonra kod için düzeltme yaparsın.
Dikkat edersen sistem boşta 2,5V (ADC karşılığı 511) bir offset voltajı veriyor.
Sistem soldan sağa akım yönünde çalışırken voltajın 0-2,5V aralığında olurken diğer yönde 2,5-5V aralığında olur. Bu durumda doğru sonuç alabilmen için 0-2,5V aralığıda okuduğun adc değerini 511 den çıkartman, diğer yönde ise okuduğun değerden 511 çıkartman gerekir.
Okunan ADC değerini bir ibre çizgisi gibi düşün. Orta noktası sıfır (2,5V karşılığı) akım sağa giderken ibre sıfırdan aşağı inecek tersi yönde ise bre yukarı doğru çıkacaktır.
Bu iş için uygun formül şu olurdu, OKUNAN=ABS(HAM-511)
Bu formül sana şayet HAM değer 511 den küçük ise (511-HAM) değerini, Ham değer 511 den büyük ise (HAM-511) sonucunu verecektir. Sana lazım olanda bu zaten.
Programda ise yanlızca OKUNAN değerlendirmesi yapacaksın. Akım ne yönde olursa olsun yada motor hangi yöne dönerse dönsün se OKUNAN şundanbüyük ise bunu yap gibi ifadeler kullanabilirsin artık.

Ete

Powered by EzPortal