logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ACS712 - niedokładne pomiary przy niskim prądzie, jak poprawić dokładność?

mcgyver26 27 Maj 2014 15:11 4503 10
  • #1 13638665
    mcgyver26
    Poziom 16  
    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.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    $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
    Zaloguj się, aby zobaczyć kod

    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.
  • #2 13651912
    slawko_k
    Poziom 35  
    Zrobiłeś miernik na analogowym czujniku.
    I teraz wymaga on kalibracji czyli zapamiętania wartości minimalnej oraz wartości maksymalnej.
    Nie widzę w twoim programie żebyś zapamiętywał 0 a wiec popełniasz znaczny błąd przy niewielkich wartościach. Dla dużych prądów będzie lepiej ale bład też będzie gdyż producent podaje ze czułość to 63-69mV/A.
    I po to kalibracja żebyś to dokładnie określił dla twojego egzemplarza.

    Jeżeli chcesz zrobić miernik o rozdzielczości 100mA to czego dziwisz się ze prąd 30mA odczytuje jako 0?

    Po co mierzysz napięcie zasilające procesor skoro przetwornik masz skonfigurowany tak że napięcie odniesienia to napięcie zasilania.
    Czy zasilanie będzie 3V czy 4V czy 5V to wynik zawsze będzie taki sam (1023).

    Wg mnie niepotrzebnie od początku wchodzisz w ułamki. Wszelkich obliczeń dokonuj na zmiennych całkowitych a ostateczny wynik na LCD dopiero przeliczaj.
  • #3 13657790
    benchmarek
    Poziom 22  
    Tak jak kolega slawko_k napisał musisz wykonać kalibrację układu przed właściwym pomiarem, nie wystarczy przyjąć sobie 2,5V jako zero, trzeba to zmierzyć najlepiej przetwornikiem którego później bedziesz używał do pomiarów. Kalibrację zrób zaraz po włączeniu układu przy braku przepływu prądu przez ACS lub na żadanie np. po wciśnięciu jakiegoś przycisku ze stosownym komunikatem na ekranie.
  • #4 13659295
    mcgyver26
    Poziom 16  
    Witam i dziękuję za odpowiedź. Z góry założyłem że sygnał wyjściowy z czujnika ACS712 jest równy połowie napięcia zasilania (zależnie od tego w którym kierunku płynie prąd to napięcie pomiarowe od tej połowy napięcia zasilającego "idzie" w górę lub w dół - w moim przypadku w górę. Napięcie zasilania czujnika mierzyłem z tej racji iż nie miałem "równego" napięcia zasilania - 5V,tak by po odliczeniu połowy tego napięcia co daje czujnik odliczyć połowę napięcia zasilania - tak by mieć wynik "zero", i od tego "zera" dopiero liczyć napięcie (0,066V/1A). Na początku miałem od 2,5V(z czujnika - przy zasilaniu 5V) odjąć te 2,5 tak by mieć wynik zero i od tego mierzyć prąd(napięcie),lecz nie znalazłem układu 7805 co by dał równe 5V na wyjściu. Widocznie tu jest mój błąd - teraz tak, zrobiłem pomiar (na grzałce-drucie oporowym) i tak(przy napięciu zasilania czujnika - 4,87V), wyjście z czujnika:
    2,43V przy 0A(brak pomiaru prądu)
    2,44V przy 0,1A
    2,46V przy 0,5A
    2,49V przy 1A
    w obu miernikach wymieniłem dla pewności baterie
    obwód pomiarowy prądu zasilany z akumulatora(12V/70Ah) żeby pomiar był stabilny,lecz w urządzeniu będzie sterowany sygnałem PWM dlatego "filtr" - kondensator(C2) na module ACS712 wymieniłem z 1n na 100n
    Przyjąłem że na wyjściu z czujnika mam 0,066V/1A i czy "w sęsie kalibracja" macie namyśli by robić pomiar co 0,006V/0,1A chcąc uzyskać taką rozdzielczość?,a może ja nie mogę "załapać" o tej porze będąc jeszcze po całym dniu na nogach - w biegu, a zmęczenie robi swoje - jak coś proszę nie myśleć że chcę gotowca, ale jakiś przykład by mógłby się przydać o co bym serdecznie prosił. Wiem że w notacji układu jest podana rozbierzność napięć jak kolega wyżej wspomniał lecz ja trzymam się tego środkowego.
  • #5 13659412
    slawko_k
    Poziom 35  
    Kalibracja to najczęściej znalezienie wskazań dla prądu 0 oraz dla prądu max.
    Potem obliczasz współczynnik i każdy pomiar przez niego mnożysz.
    W całym zakresie pomiędzy powinno wtedy dobrze działać o ile czujnik jest idealnie liniowy
  • #6 13659515
    benchmarek
    Poziom 22  
    Ja robię kalibrację w ten sposób:
    Wiedząc że przez ACS nie przepływa żaden prąd czyli I=0, odczytuje przetwornikiem ADC napięcie. Wynosi ono np. 2,49V . Zapisuje tą wartość w pamięci. Następnie dokonując pomiaru przy prądzie I różnym od zera odejmuję od tego co uzyskam zapamiętaną wcześniej wartość np. 2,55-2,49=0,06V co daje dla acs712-20 0,06/0,66=0,91A
  • #7 13660766
    mcgyver26
    Poziom 16  
    Witam, ja maksymalny prąd(napięcie na wyjściu z czujnika) jaki mogę zmierzyć to 20A ponieważ tylko tyle mam na mierniku.Niestety na chwilę obecną teraz nie mogę tego sprawdzić, ponieważ po takim "męczeniu" akumulatora dość szybko mi się rozładował i zaczyna "siadać" mi napięcie. Puki akumulator się nie naładuje to pomiaru nie wykonam by dowiedzieć się jakie wskazanie(napięcie)będę mieć na wyjściu z ACS-a przy tych 20A.
  • #8 13683208
    BogdanS
    Poziom 20  
    Zobacz oscyloskopem jaką masz składową zmienną na wyjściu ACS712. U mnie przy zerowym prądzie na wejściu, zasilanie z LP2950-05, amplituda szumów na wyjściu ACS712 to ok. 15mV. 10nF przy wyprowadzeniu 6.
  • #9 13685478
    mcgyver26
    Poziom 16  
    Witam. U mnie szumy są tak samo jak u kolegi przy amplitudzie 15m, ale zaczynają się pojawiać w znikomym stopniu już przy amplitudzie 25m, czas 20m - kondensator jak już pisałem 100n lecz przy sprawdzaniu oscyloskopem sprawdziłem też na 10n i 1n. Co to wcześniejszych postów, to po naładowaniu akumulatora mam teraz taki odczyt napięcia na wyjściu modułu acs712:
    2,42V przy 0A
    2,55V przy 2,08A (tu jest wpięta żarówka 12V/21W - wcześniej miałem na niej odczyt 1,96A)
    3,61V przy 19,64A ( i tu dalej nie jestem w stanie zrobić pomiaru ponieważ b.szybko topią mi się przewody i końcówki którymi "łączę" się z drutem oporowym-grzałką). Napięcie zasilania układ acs712 +(procek i lcd-k) wynosi 4,86V. Na chwilę obecną u mnie jest brak czasu, lecz jak tylko będę mógł to coś postaram się wymyśleć by zrobić odczyt napięcia z czujnika przy tych 20A(jak wspomniałem tylko tyle mam na mierniku) trafo daje 20,3A więc mogło by być do tych 20A(pomiar) moduł jest na 30A ponieważ chciałem mieć trochę "rezerwy"
  • #10 13692323
    mcgyver26
    Poziom 16  
    Witam ponownie, otóż wreszcie wykonałem pomiar (mam nadzieję że jest poprawny), wykonałem go dwa razy z różnych źródeł zasilania w obwodzie "prądowym" by mieć pewność iż że na zasilanie obwodu "prądowego"(jego pomiar) nie ma wpływ rozładowywanie się akumulatora. Tak że dokonałem dwóch pomiarów z różnymi źródłami zasilania w obwodzie prądowym: z akumulatorem 12V/70Ah i transformatorem(20,3A) + mostek (cztery diody po 30A), a oto pomiary z nich:
    pomiar z akumulatora:
    2,38V przy 0A
    3,67V przy 20A
    2,11A - żarówka 12V/21W
    pomiar z trafa(z mostkiem):
    2,38V przy 0A
    3,67V przy 20A
    1,79A - żarówka 12V/21W
    na zasilaniu ACS-a wyszło mi 4,82V.
    Próbowałem coś napisać z "zapamiętywaniem" zera jak pokazał kolega"benchmarek ", ale wynik mam zawsze zero - oto kod
    Kod: text
    Zaloguj się, aby zobaczyć kod

    $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

    W2 = Getadc(1)
    V2 = W2 * 0.0049 'tu robię odczyt "zera"->wynik bez pomiaru
    Writeeeprom V2 , 1 'tu zapisuję wynik bez pomiaru "zero"
    W = Getadc(1)
    V = W * 0.0049 'tu robię odczyt wyniku
    Readeeprom V2 , 1 'tu odczytuję wcześniej zapisany wynik "zero"
    V = V - V2 'a tu odejmuję wynik od "zera"
    V = V / 0.066 'odczyt w amperach

    Locate 2 , 1
    Wn = Fusing(v , "##.##")
    Lcd Wn ; "A"
    Waitms 100
    Loop
    End
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Próbowałem różnych "kombinacji"(z kalibracją), ale zawsze coś mi źle wychodzi, już nie wiem co jest nie tak, więc proszę o wyrozumiałość bo mam "mętlik"w głowie
  • #11 13694682
    mcgyver26
    Poziom 16  
    Ponownie witam wszystkich którzy chcieli mi pomóc. Dziś w nocy po przebudzeniu dostałem olśnienia, że zapis "zera" jest w pętli i się powtarza. Dziś zapis "zera" zrobiłem przed pętlą, tak by "zero" było zapamiętane tylko raz i ruszyło - mam odczyt prawidłowy(prawie) do 20A - dalej nie wiem czy jest poprawny(mam miernik do 20A), ale liczę że tak. Wcześniej napisałem że "prawie prawidłowy"(odczyt) ponieważ różnica wynosi 100mA (na mierniku ACS712-30 jest odczyt większy o te 100mA niż na mierniku M890G (sprawdzane na kilku miernikach). Ten wynik jak na przetwornik analogowy mnie zadowala więc zamykam temat i DZIĘKUJĘ WSZYSTKIM którzy mi pomogli i chcieli mi pomóc. Zamieszczam kod na którym mam taki odczyt - pomiar, może się komuś przyda.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jest to kod "testowy" więc proszę nie patrzeć na zmienne - dziękuję i temat zamykam.
REKLAMA