Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATmega32] [C] - Pomiar prądu poprzez pomiar różnicowy

kiclaw 03 Paź 2012 21:42 4374 10
  • #1 03 Paź 2012 21:42
    kiclaw
    Poziom 16  

    Witam

    Mam taki problem, próbuje zrobić sobie amperomierz oparty na uC Atmega32, korzystając z pomiaru różnicowego napięcia na boczniku. Czyli mierze spadek napięcia na boczniku, następnie dziele go przez jego rezystancje i wychodzi mi prąd.

    Jednak napotkałem się na taki problem, mianowicie: Żeby zwiększyć rozdzielczość amperomierza, napięcie z bocznika poddałem podziałowi przez 2. I tutaj jest właśnie problem bo gdy to zrobię to na wyświetlaczu mam maksymalną wartość 512.
    Jest to zapewne spowodowane tym, że: wzór na ADC to:

    Cytat:
    ((VposVneg)*GAIN*512)/Vref
    czyli w tym wypadku napięcie Vpos jest niższe (bo jest dzielone) niż Vneg i się przez to psuje pomiar. Stwierdziłem że trzeba by wynik pomiaru ADC przemnożyć przez jakiś współczynnik zależny od dzielnika, ale nie mam pomysłu na jego wartość.

    Mógłbym oczywiście mierzyć bez dzielnika ale wtedy amperomierz miałby rozdzielczość tylko do 1,7A (niby wystarczy, ale przydało by się więcej).

    Wrzucam schemat układu pomiarowego w którym przeprowadzam pomiar prądu,teoretycznie prąd powinien wynieść 36,7mA, natomiast zewn. miernik pokazuje 33mA. Rezystory 68R mają symulować to, że amperomierz został wpięty w jakiś układ elektryczny.

    [ATmega32] [C] - Pomiar prądu poprzez pomiar różnicowy
    Gdy usunę ze schematu dzielnik, to układ pokazuje mi ADC=13 (czyli prąd 43mA - czyli o 10mA więcej niż pokazuje zewn. miernik, tak więc dokładność pomiaru tutaj trochę kuleje )

    Wrzucam również kod programu, nie dodawałem kodu liczącego prąd - liczę go na razie samodzielnie, bo najpierw chciałbym uporać się z tym niepoprawnym wynikiem ADC.

    Kod: C
    Zaloguj się, aby zobaczyć kod


    Oczywiście do policzenia prądu muszę jeszcze pomnożyć ADC przez 2 (współczynnik dzielnika), ale w tej chwili mnożenie i tak nic nie da bo ADC mam zwracane jako jedna liczba.

    0 10
  • #2 04 Paź 2012 10:36
    korrus666
    Poziom 40  

    Dzielnik masz źle podłączony. Dzielnik ma być na rezystorze a nie między ADC1 i masą. Przecież masz dzielić napięcie na rezystorze. ADC1 podłączasz między rezystory dzielnika. R2 dzielnika ma być podłączony do drugiej nogi rezystora bocznikowego a nie do masy.

    [ATmega32] [C] - Pomiar prądu poprzez pomiar różnicowy

    0
  • #3 04 Paź 2012 18:20
    kiclaw
    Poziom 16  

    korrus666 W dzielniku podłączonym tak jak na Twoim schemacie, na ADC0 i ADC1 będą takie same napięcia jakby tego dzielnika w ogóle nie było (no, będą się różnić kilkoma mV), więc w ogóle nie rozumiem idei podłączania dzielnika po Twojemu bo taki sam efekt uzyskamy jakby go w ogóle nie było.

    Mi właśnie chodzi o to, żeby tak podzielić napięcie z nóżki bocznika żeby na ADC doszła ½ tego napięcia (w celu poszerzenia rozdzielczości pomiaru).

    Mam problem z tym że w takim układzie Vpos jest mniejszy niż Vneg i pomiar jest nieprawidłowy. Tak dzisiaj nad tym myślałem i wpadłem na prosty pomysł, żeby napięcie z drugiej nóżki bocznika też podzielić przez 2. Wtedy będę miał na ADC1--ADC0 poprawną różnicę napięć (podzieloną przez 2, czyli ADC będzie 2 razy mniejszy, a więc zwiększy się rozdzielczość)

    Dla pewności zasymulowałem układ w PSpice, no i wszystkie napięcia się zgadzały.

    [ATmega32] [C] - Pomiar prądu poprzez pomiar różnicowy

    Liczę już to chyba drugą godzinę we wszystkie możliwe strony, i stwierdzam że teoretycznie układ powinien działać. No ale cóż,chyba teoria się w tym przypadku rozmyła z praktyką, bo gdy złożyłem to na płytce to odczyty zaczęły wariować i pokazywać ADC od 0 do 1023.

    0
  • #4 04 Paź 2012 20:25
    excray
    Poziom 39  

    Nie rozumiem. Dlaczego nie ustalisz sobie masy układu w punkcie ADC0 a wtedy nie będziesz w ogóle musiał wykonywać pomiaru różnicy tylko zmierzysz sobie napięcie na ADC1, bezpośrednio czy też bądź z dzielnikiem - jak wolisz.

    0
  • #5 04 Paź 2012 21:02
    atom1477
    Poziom 43  

    kiclaw napisał:
    korrus666 W dzielniku podłączonym tak jak na Twoim schemacie, na ADC0 i ADC1 będą takie same napięcia jakby tego dzielnika w ogóle nie było (no, będą się różnić kilkoma mV), więc w ogóle nie rozumiem idei podłączania dzielnika po Twojemu bo taki sam efekt uzyskamy jakby go w ogóle nie było.

    Mylisz się.

    kiclaw napisał:

    Mi właśnie chodzi o to, żeby tak podzielić napięcie z nóżki bocznika żeby na ADC doszła ½ tego napięcia (w celu poszerzenia rozdzielczości pomiaru).

    No i tak będzie w układzie zaproponowanym przez korrus666.

    Niestety mimo to układ może nie działać. Skoro rezystor pomiarowy daje tak duże napięcie że trzeba je dzielić żeby zmierzyć je za pomocą ADC (czyli zakładam że dopiero po podzieleniu będzie 5V), to z pewnością napięcia na końcówkach tego rezystora wykraczają poza zakres napięć zasilania mikrokontrolera co go uszkodzi.


    Twój układ zasymulowany w SPICE wygląda na działający tylko dlatego że mylnie założyłeś że napięcie na prawej końcówce rezystora BOCZNIK jest równe 0, a ta przecież nie będzie.
    Przykładowo dla napięcia 5V zarówno po lewej jak i prawej stornie rezystora BOCZNIK (czyli gdy na rezystorze BOCZNIK nie ma napięcia = brak prądu), chciałbyś aby na ADC poszło 0V, nie? A w Twoim układzie tak nie będzie bo na jedno wejście podasz 5V podzielone na 2, a na drugie całe 5V. Czyli różnica wyniesie 2,5V.
    Jak już to musisz dzielić oba napięcia. Wtedy na oba ADC pójdzie 2,5V czyli różnica wyniesie 0V tak jak powinno być.

    0
  • #6 04 Paź 2012 23:50
    kiclaw
    Poziom 16  

    Cytat:

    Nie rozumiem. Dlaczego nie ustalisz sobie masy układu w punkcie ADC0 a wtedy nie będziesz w ogóle musiał wykonywać pomiaru różnicy tylko zmierzysz sobie napięcie na ADC1, bezpośrednio czy też bądź z dzielnikiem - jak wolisz.

    excray Oczywiście że tak można, tylko spójrz, to jest wzór na ADC: [ATmega32] [C] - Pomiar prądu poprzez pomiar różnicowy
    Gdybym ADC0 podłączył do masy to Vneg było by 0. Czyli amperomierz by działał poprawnie tylko wtedy gdy podłączył bym go jakby "na samym końcu" układu. Bo chociażby w moim układzie ze schematu powyżej takie rozwiązanie już by nie zadziałało ponieważ na R4 też odkłada się jakieś napięcie (i co za tym idzie "za bocznikiem nie jest 0V tylko jakieś napięcie R4").

    Cytat:
    Mylisz się.

    atom1477
    Wrzucam import do symulatora Falstada (zmieniłem wartości rezystorów na WEJ i WYJ żeby było to bardziej widoczne, że jest tak jak pisałem), w Spice wyszły mi takie same wyniki ale przecież nie będę tu wrzucał całego *cir.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Cytat:
    Niestety mimo to układ może nie działać. Skoro rezystor pomiarowy daje tak duże napięcie że trzeba je dzielić żeby zmierzyć je za pomocą ADC (czyli zakładam że dopiero po podzieleniu będzie 5V), to z pewnością napięcia na końcówkach tego rezystora wykraczają poza zakres napięć zasilania mikrokontrolera co go uszkodzi.


    Pisałem o tym wcześniej, nie dziele napięcia bo mi nie wydala zakres uC, tylko dzielę go bo chce mieć możliwość pomiarów większych prądów. Multimetr pokazuje mi spadek napięcia na rezystorze: 5mV (teoretycznie powinno wyjść: 5,5mV)

    Cytat:
    Twój układ zasymulowany w SPICE wygląda na działający tylko dlatego że mylnie założyłeś że napięcie na prawej końcówce rezystora BOCZNIK jest równe 0, a ta przecież nie będzie.


    Ależ właśnie tak nie założyłem, przecież właśnie po to mierze napięcie na ADC1 bo wiem że tam jest jakieś napięcie (czyli tak de facto, napięcie WEJ minus Vbocznika)

    Cytat:
    Jak już to musisz dzielić oba napięcia. Wtedy na oba ADC pójdzie 2,5V czyli różnica wyniesie 0V tak jak powinno być.
    Tak właśnie zrobiłem, ale różnica Vpos-Vneg przy dzielniku 2, powinna chyba wyjść Vbocznika*2 ?


    No chyba że źle odczytuje parametry rezystora pomiarowego, na obudowie bocznika mam nadrukowane: 5W0Ω15J czyli rozumiem że jest to jest to: Moc:5W, rezystancja: 0,15Ω i tolerancja 5%?

    Na chwilę obecną jak pisałem, teoretycznie wszystko gra, a praktycznie wartość ADC która powinna wynieść 5 a skacze 20-60.


    Pozdrawiam

    0
  • #7 05 Paź 2012 00:42
    korrus666
    Poziom 40  

    Zrób tak.
    Masy układu pomiarowego i mierzonego powinny być odseparowane galwanicznie, wtedy nie musiałbyś mierzyć napięcie za pomocą dwóch wejść ADC bo wystarczyłoby jedno.
    Jedna noga bocznika do masy układu pomiarowego druga przez dzielnik lub bez do wejścia ADC.
    Nie obchodzą cie wtedy napięcia przed i za bocznikiem bo nie mają żadnego wpływu na pomiar.
    W sumie dzielnik też nie jest potrzebny bo przy rezystorze 0.15 oma masz 1,5 V dla 10 amper. chyba większych prądów nie będziesz mierzył. Zresztą rezystor by nie zniósł takiego prądu bo wydzielałoby się na nim 15 watów.



    Strasznie komplikujesz sobie życie.

    0
  • #8 05 Paź 2012 10:51
    atom1477
    Poziom 43  

    Nie rozumiem co chcesz zrobić.
    Piszesz że chcesz rozszerzyć zakres pomiarowy. Ok.
    Ale co tu rozszerzać skoro z dzielnika otrzymujesz 5,5mV?
    Przecież zakres ADC to 5V więc i bez rozszerzania zakresu możesz zmierzyć 1000 krotnie większe prądy niż masz teraz.
    Druga sprawa to dzielnik:

    kiclaw napisał:

    Cytat:
    Jak już to musisz dzielić oba napięcia. Wtedy na oba ADC pójdzie 2,5V czyli różnica wyniesie 0V tak jak powinno być.
    Tak właśnie zrobiłem, ale różnica Vpos-Vneg przy dzielniku 2, powinna chyba wyjść Vbocznika*2 ?

    Coś źle interpretujesz. Dzielnik dzieli a nie mnoży :D
    Przy dzielniku 2 napięcie Vpos-Vneg będzie wynosiło Vbocznika/2.

    0
  • #9 05 Paź 2012 19:18
    kiclaw
    Poziom 16  

    korrus666 napisał:
    Masy układu pomiarowego i mierzonego powinny być odseparowane galwanicznie, wtedy nie musiałbyś mierzyć napięcie za pomocą dwóch wejść ADC bo wystarczyłoby jedno. Jedna noga bocznika do masy układu pomiarowego druga przez dzielnik lub bez do wejścia ADC. Nie obchodzą cie wtedy napięcia przed i za bocznikiem bo nie mają żadnego wpływu na pomiar.


    Nie wiem czy dobrze Cie zrozumiałem, ale proponujesz takie rozwiązanie?
    [ATmega32] [C] - Pomiar prądu poprzez pomiar różnicowy

    Jeśli tak, to przecież na czas pomiaru zrobię przerwę w obwodzie.

    korrus666 napisał:
    W sumie dzielnik też nie jest potrzebny bo przy rezystorze 0.15 oma masz 1,5 V dla 10 amper. chyba większych prądów nie będziesz mierzył.


    Tutaj problem jest inny spójrz, to jest wzór na ADC: [ATmega32] [C] - Pomiar prądu poprzez pomiar różnicowy
    Czyli spadek napięcia na rezystorze to jest: [ATmega32] [C] - Pomiar prądu poprzez pomiar różnicowy

    ADC maksymalnie wynosi 512, czyli po podstawieniu tego 512 do wzoru powyżej, to obliczony spadek napięcia wyniesie 0,256 (czyli to maksymalne spadek, bo wyżej już ADC się przepełni), dzieląc to na 0,15Ω wychodzi mi maksymalny prąd 1,70A. Trochę mało więc wsadziłem dzielnik:2, czyli ADC=512 będę miał przy Vbocznika=0,512V,czyli maksymalny prąd wyniesie 3,41A (przy tym prądzie przepełnienie ADC). I o to właśnie mi chodzi.

    atom1477
    Cytat:

    Ale co tu rozszerzać skoro z dzielnika otrzymujesz 5,5mV?
    Przecież zakres ADC to 5V więc i bez rozszerzania zakresu możesz zmierzyć 1000 krotnie większe prądy niż masz teraz.

    j.w

    Cytat:
    Coś źle interpretujesz. Dzielnik dzieli a nie mnoży Very Happy
    Przy dzielniku 2 napięcie Vpos-Vneg będzie wynosiło Vbocznika/2.


    Przepraszam, oczywiście masz rację :) Ale wczoraj siedziałem przy tym z 6 godzin i już mi się zaczęło pieprzyć.


    Albo ja gdzieś popełniam błąd totalnie psujący pomiar, albo cos z płytką. Jutro zrobię układ z osobnym zasilaniem uC i osobnym układu pomiarowego.

    0
  • #10 05 Paź 2012 20:23
    atom1477
    Poziom 43  

    Problem popełniasz we wzorze na napięcie na boczniku.

    kiclaw napisał:

    Czyli spadek napięcia na rezystorze to jest: [ATmega32] [C] - Pomiar prądu poprzez pomiar różnicowy

    Bo powinno wyjść 0,5V. Co da 3,33A.
    Poza tym z góry zakładasz że Gain jest równe 10 a przecież nie musi tak być.
    Może być równe 1 i wtedy bez żadnych kombinacji masz zakres pomiarowy 33,3A.
    Oczywiście praca ze wzmocnieniem równym 10 jest lepsza bo wtedy masz mniejsze wymagania na bocznik (mniejsza moc) i na zakres napięć wejściowych (łatwiej zmieścić napięcia w zakresie 0...5V).
    Dlaczego zamiast jakiegoś cudowanego dzielnika nie dasz np. bocznika z rezystora 0,05Ω (3 równolegle połączone 0,15Ω)? Wtedy bez żadnego dzielnika i przy pracy z Gain równym 10 miał byś zakres 9,99A.

    0
  • #11 07 Paź 2012 18:49
    kiclaw
    Poziom 16  

    Cytat:
    Problem popełniasz we wzorze na napięcie na boczniku.
    Bo powinno wyjść 0,5V. Co da 3,33A.


    Wychodzi dobrze, sprawdź moje adnotacje w kodzie co do Vref i GAIN

    Generalnie przedmuchałem płytkę, i co się okazało. Dość duży offset (rzędu nawet 500mV), ale jakoś sobię z tym poradziłem i uzyskałem dokładność amperomierza około 15mV.

    Cytat:
    Dlaczego zamiast jakiegoś cudowanego dzielnika nie dasz np. bocznika z rezystora 0,05Ω (3 równolegle połączone 0,15Ω)? Wtedy bez żadnego dzielnika i przy pracy z Gain równym 10 miał byś zakres 9,99A.


    O tym nie pomyślałem, ale wg. mnie to świetny pomysł, bo wtedy znacznie zwiększa się rozdzielczość.

    Tematu na razie nie zamykam bo jeszcze może będę się tym bawił żeby uzyskać lepszą dokładność.

    0