Witam. Wiem że o modułach ACS712 dość sporo jest pisane, lecz nigdzie nie znalazłem rozwiązania które pomogło by mi dostrzec mój błąd (chyba). Otóż potrzebuję mierzyć prąd do 20A z dokładnością co 100mA. Do tego używam układu ACS712(wersja 30A).Napisałem testowo krótki programik mierzący napięcie z ACS-a i wyświetlającego go w postaci "prądu"(odczyt w amperach). I teraz tak, pomiar z żarówki 12V/21W mam dobry - taki sam jak na mierniku wpiętym szeregowo w "obwód" ACS712, czyli 1,96A. Lecz gdy jako "odbiornika" użyję przekaźnika(0,03A)lub rezystora(100ohm-0,12A),(47ohm-0,25A), to na mierniku(fabrycznym) mam odczyt pomiaru - wynik, a na "mierniku" z modułu ACS712 wyniku pomiarowego nie mam - są same "zera". Mierząc prąd na grzałce(drucie oporowym gdzie reguluję sobie opór-prąd)mierzę (ustawienia na drucie oporowym przykładowe) i tak: na mierniku fabrycznym mam 5,05A a na mierniku ACS712 mam 4,96-4,98A - tak skacze. Wiadoma jest sprawa że drut oporowy zmienia swój opór z temperaturą, lecz ja zawsze trochę czekam na "ustabilizowanie się" - nagrzanie grzałki by wynik był stabilny. Mój miernik (ten fabryczny) pokazuje dobrze - sprawdzałem jeszcze na trzech innych miernikach i mają te same wskazania. Zamieszczam mój kod testowy do pomiaru prądu i proszę mi powiedzieć co ja źle zrobiłem że mi tak mierzy.
$regfile = "M32def.dat"
$crystal = 10000000
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.3
Config Lcd = 20 * 4
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim Wart_ac As Word
Dim W As Word
Dim V As Single
Dim Wp As Single
Dim Ww As Single
Dim Wn As String * 3
Dim W2 As Word
Dim V2 As Single
Dim Wp2 As Single
Dim Ww2 As Single
Dim Wn2 As String * 3
Cls
Cursor Off
Start Adc
Do
W = Getadc(1)
W2 = Getadc(2)
V = W * 0.0049 'typowy voltomierz(mnożnik) -> pomiar napięcia(OUT) z układu ACS712
V2 = W2 * 0.0049 'tu wpisać mnożnik (odpowiedni)napięcia jeśli idzie przez dzielnik -> jest to pomiar napięcia zasilającego układ ACS712 i procesor
V2 = V2 / 2 'dzielenie napięcia zasilającego układ ACS712 przez dwa, np:5V/2=2,5V
V = V - V2 'jest to odejmowanie połowy napięcia z układu ACS712 tak by był wynik "0"
V = V / 0.066 'jest to "przesuwanie" wyniku z ACS712
If V < 0.04 Then V = 0 'tu jest "zerowanie"wyniku gdy bez pomiaru na ACS712 końcowe cyfry wyniku "skaczą"
Locate 2 , 1
Wn = Fusing(v , "##.##")
Lcd Wn ; "A"
Waitms 100
Loop
End
Chciałbym użyć tego modułu bo pomimo krytyki jaką znalazłem w necie między innymi że "wyparuje po minucie" bo nie wytrzyma takiego prądu, układ po ocynowaniu ścieżek na owym drucie oporowym-grzałce wytrzymał ponad 20A (bo tyle miałem na mierniku) i był ledwo ciepły, chodził tak prawie 10minut i się nie spalił, poza tym mam mało miejsca u układzie, a ACS712 jest mały.
Atmega podłączona standardowo:
VCC - +5V bezpośrednio do zasilania
AVCC - +5V przez dławik 10uH, przy nodze AVCC kond 100n do GND
AREF - kond 100n do GND
poza tym są inne kondy filtrujące w zasilaniu
moduł ACS712 podłączony bezpośrednio do ADC1
pomiar napięcia zasilania układu ACS712 i procesora (zasilanie)+5V do ADC2 (początkowo szło przez dzielnik 1:4(rezystor 3k/1% i rezystor 1k/1%-do masy),ale wynik był bardzo niestabilny - skakał, po podłączeniu bezpośrednio do zasilania wynik się znacznie ustabilizował. Zasilanie pomimo układu 7505 wynosi 4,88V dlatego zdecydowałem się na takie podłączenie.
Kod: text
$regfile = "M32def.dat"
$crystal = 10000000
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.3
Config Lcd = 20 * 4
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim Wart_ac As Word
Dim W As Word
Dim V As Single
Dim Wp As Single
Dim Ww As Single
Dim Wn As String * 3
Dim W2 As Word
Dim V2 As Single
Dim Wp2 As Single
Dim Ww2 As Single
Dim Wn2 As String * 3
Cls
Cursor Off
Start Adc
Do
W = Getadc(1)
W2 = Getadc(2)
V = W * 0.0049 'typowy voltomierz(mnożnik) -> pomiar napięcia(OUT) z układu ACS712
V2 = W2 * 0.0049 'tu wpisać mnożnik (odpowiedni)napięcia jeśli idzie przez dzielnik -> jest to pomiar napięcia zasilającego układ ACS712 i procesor
V2 = V2 / 2 'dzielenie napięcia zasilającego układ ACS712 przez dwa, np:5V/2=2,5V
V = V - V2 'jest to odejmowanie połowy napięcia z układu ACS712 tak by był wynik "0"
V = V / 0.066 'jest to "przesuwanie" wyniku z ACS712
If V < 0.04 Then V = 0 'tu jest "zerowanie"wyniku gdy bez pomiaru na ACS712 końcowe cyfry wyniku "skaczą"
Locate 2 , 1
Wn = Fusing(v , "##.##")
Lcd Wn ; "A"
Waitms 100
Loop
End
Kod: text
Chciałbym użyć tego modułu bo pomimo krytyki jaką znalazłem w necie między innymi że "wyparuje po minucie" bo nie wytrzyma takiego prądu, układ po ocynowaniu ścieżek na owym drucie oporowym-grzałce wytrzymał ponad 20A (bo tyle miałem na mierniku) i był ledwo ciepły, chodził tak prawie 10minut i się nie spalił, poza tym mam mało miejsca u układzie, a ACS712 jest mały.
Atmega podłączona standardowo:
VCC - +5V bezpośrednio do zasilania
AVCC - +5V przez dławik 10uH, przy nodze AVCC kond 100n do GND
AREF - kond 100n do GND
poza tym są inne kondy filtrujące w zasilaniu
moduł ACS712 podłączony bezpośrednio do ADC1
pomiar napięcia zasilania układu ACS712 i procesora (zasilanie)+5V do ADC2 (początkowo szło przez dzielnik 1:4(rezystor 3k/1% i rezystor 1k/1%-do masy),ale wynik był bardzo niestabilny - skakał, po podłączeniu bezpośrednio do zasilania wynik się znacznie ustabilizował. Zasilanie pomimo układu 7505 wynosi 4,88V dlatego zdecydowałem się na takie podłączenie.
