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

Pomiar napięcia - dziwne wartości

27 Lis 2018 21:24 432 19
  • Poziom 10  
    Witam

    Próbuje mierzyć napięcie przez dzielnik napięcia (1000 Ohm / 200 Ohm) - oporniki wyliczone dla maksymalnego napięcia 30V.
    Wyniki są dziwne - poniżej tabela pomiarów wykonanych przez arduino oraz zwkłym multimetrem dla różnych napięć :









    multimetr Arduino
    3,7 4,5
    5,6 7,1
    7,7 9,6
    9,7 12,2
    11,6 14,5
    13,5 16,7
    15,9 19,43


    Kod arduino :


    Code:
    void setup()  
    

    Serial.begin(9600);
    }

    void loop()
    {
       int data0 = analogRead(A0);
      float data1 = data0 * 0.028330078125;
      Serial.println(data1);
      delay(500);
    }


    Szukałem przykładów w sieci ale są podobnie zbudowane - w czym problem ?
  • PCBway
  • Poziom 29  
    Bierz pod uwagę dokładność pomiarów.
  • PCBway
  • Poziom 30  
    Tak patrzę w kodzie na
    Code:

    * 0.028330078125;

    Czy to ma sens? W AVR-GCC float i double to chyba 7 cyfr po przecinku? Nie wystarczyło by "* 0.0283300"?

    Te rezystory, 1000 i 200R to jaką mają tolerancję?
    Z kodu wynika, że napięciem odniesienia jest Vcc, jaką ma wartość? Dlaczego nie jest to wewnętrzne Vref albo lepiej zewnętrzne stabilne Vref? Miernikiem o jakiej dokładności mierzysz Vcc i napięcie podane na dzielnik?
    Przyjmij najgorszy przypadek, zsumuj błędy pewnie będzie w zakresie błędu, np +/-20%. Pamiętaj o błędzie przetwornika, w AVR to zdaje się +/- 2 LSB, co jest istotne przy pomiarze małych wielkości, no i ofsecie.
  • Poziom 43  
    Corcho napisał:
    (1000 Ohm / 200 Ohm) - oporniki wyliczone dla maksymalnego napięcia 30V.
    Gratulacje za wyliczenie. 1,2 kΩ obciążające niewiadome źródło o wartości 30 VDC (?), przeciw megaomom multimetru :D
  • Poziom 10  
    @Krzysztof Kamienski Ok rozumiem że oporniki mają źle dobrane wartości - proszę o podanie właściwych - chciałbym mierzyć napięcie na akumulatorze samochodu. Na tą chwilę mierzyłem napięcie jakie daje zasilacz uniwersalny z regulowanym napięciem.

    @LChucki Jak w moim przypadku ustawić właściwie Vref ? w kodzie ?

    Dziękuje z góry za porady ?
  • Poziom 43  
    Corcho napisał:
    chciałbym mierzyć napięcie na akumulatorze samochodu
    W porzadku, ale nie ,,dojąc" z niego 10 mA na pomiar. :cry: Wartości 10cio krotnie wyższe (10 kΩ/ 1 kΩ) były by właściwsze, no i programowanie napięcia referencyjnego w części analogowej Arduino, Kolega podpowie. :D
  • Poziom 30  
    Corcho napisał:
    rozumiem że oporniki mają źle dobrane wartości

    Nie chodzi o wartości tylko ich tolerancję. Rezystor 1000R w praktyce nie ma 1000R, zależnie od tolerancji, dla 5%, w dopuszczalnym zakresie temperatur, będzie to od 950 do 1050R. Dla 10% od 900 do 1100. Rezystorów o jakiej tolerancji użyłeś?

    Corcho napisał:
    Na tą chwilę mierzyłem napięcie jakie daje zasilacz uniwersalny z regulowanym napięciem.

    Miernikiem o jakiej dokładności? Na jakim zakresie?
    Błąd pomiarowy miernika z marketu, to kilka procent w pełnym zakresie ale na początku zakresu, błąd może osiągać 50% i więcej.

    Corcho napisał:
    Jak w moim przypadku ustawić właściwie Vref ? w kodzie ?

    Tak, w kodzie.
  • Poziom 36  
    Corcho napisał:
    Witam

    Próbuje mierzyć napięcie przez dzielnik napięcia (1000 Ohm / 200 Ohm) - oporniki wyliczone dla maksymalnego napięcia 30V.
    Wyniki są dziwne -
    ..............
    Szukałem przykładów w sieci ale są podobnie zbudowane - w czym problem ?


    Problem jest w tym, że nie zaznajomiłeś się z tematem i zaczynasz podłaczac wszystko, w zasadzie bez sensu...
    Bez urazy... ale to jest prawda.
    Na wiele błędów, niektórzy tu wyżej już wskazali, jednak bez pełnego kommentarza, tak abyś doszedł do poporawnej konkluzji przy znikomym twoim wysiłku.
    Pierwsza rzecz to wybór napięcia referencyjnego, dla którego tworzysz odpowiedni dzielnik napięcia mając na uwadze maxymalny poziom mierzonego napięcia.
    Nie możesz polegac na standardowych oznaczeniach wartości rezystorów z uwagi na ich zbyt duże pole tolerancji (o czym już pisano). Owszem możesz je użyc w połączeniu z dodatkowym potencjometrem służącym do pewnego rodzaju doraźnej kalibracji tego dzielnika.
    Jaki rząd wartości rezystorów wybrac? Tu nalezałoby zasięgnąc rady datasheet, który dopuszcza dośc szeroki wybór 1 do 100kohms (patrz rys.24.8).
    Wg textu poprzedzającym rysunek, wartoś tej impedancji jest zalecana na ok 10k .
    Ty jednak dałeś tylko 200 ohms.
    Następna przyczyna rozczarowania; W twoim kodzie nie widac abyś stosował inne niż defaultowe napięcie referencyjne które jest VCC i przyjmowane jako 5V., które jednak nigdy nie jest = 5.0V (!!!)
    Metoda ta do zgrubnych pomiarów może byc stosowana.
    Jeżeli wyrazenie :
    float data1 = data0 * 0.028330078125;
    ma stanowic pomierzony i przekalkulowany poziom napięcia, to jest to zupełnie błędny tok.
    Z jakiego źródła pochodzi ten współczynnik: 0.028330078125 ?
    Policz go jeszcze raz: Z max. 30V aby ‘zejśc’ do 5V potrzebujesz dzielnik napięcia 1:6
    Twój dzielnik da ci na wyjściu 6V, co jest powyżej dopuszczalnego na input analogowy wynoszący 0 – Vcc.
    Praktycznie wszystkie ważne parametry stosowane do pomiaru i obliczeń są albo ‘pływające’/nieustalone, albo błednie dobrane lub obliczone.

    Dokładniejsze wyniki możesz uzyskac stosując zewnętrzne/niezależne źródło referencyjne, albo wykorzystac istniejące wewnętrzne 1.1V, które jest dośc stabilne lecz nie zbyt dokładne (+/- 10%). Przed stosowaniem należałoby je pomierzyc i odpowiednio skorygowac współczynnik rachunkowy. Również wymagac będzie odpowiednio dopasowanie dzielnika zapewniające optymalny poziom napięcia na wejściu analogowym.
    Wybór napięcia referencyjnego wskażesz edytując odpowiednio rejestr ADMUX (szczególy w datasheet tab. 24-3).

    e marcus
  • Poziom 30  
    emarcus napisał:
    Nie możesz polegac na standardowych oznaczeniach wartości rezystorów z uwagi na ich zbyt duże pole tolerancji (o czym już pisano). Owszem możesz je użyc w połączeniu z dodatkowym potencjometrem służącym do pewnego rodzaju doraźnej kalibracji tego dzielnika.

    To niewiele da, chyba, ze kalibracje będzie przeprowadzał często. Rezystor 5% potrafi TRWALE zmienić swoja rezystancje po nagrzaniu i schłodzeniu, tak więc zmierzony przed wlutowaniem, po wlutowaniu może mieć inna wartość. Standardowe rezystory zmieniają dość znacznie swe parametry w czasie i pod wpływem temperatury. W mieszkaniu wszystko bedzie ok ale na mrozie, czy w upale beda odchyłki. 1% czy 0,1% są pod tym względem zdecydowanie stabilniejsze i nie trzeba co chwila przeprowadzać kalibracji układu. Rezystory 1% sa tanie, nie jak kiedyś cena razy 2, tylko cena + 10%.
    Nie ma wiec co kombinować z potencjometrami, które też zmieniają wartość rezystancji pod wpływem temperatury. Należałoby użyć potencjometru hermetycznego, który bedzie droższy od rezystorów 0,1%! Po co więc układ rezystor 5% + potencjometr hermetyczny za kilka złotych i wymagana kalibracja co miesiąc/rok? Nie lepiej dac rezystory 1% 2zł za 100szt? Albo 0,1% po 0,5zł?
  • Poziom 10  
    Dziękuję za wszystkie odpowiedzi - czy mógłbym prosić o złożenie mi wszystkiego w jedno i przedstawienie jak zbudować układ dzielnika napięcia oraz przykład kodu do arduino abym mógł mieżyć napięcie w zakresie do 30V z dokładnością 0,1 V - czy to możliwe z arduino ? a może zastosować jakiś specjalny układ (najlepiej gotowy moduł) ?

    Pozdrawiam
  • Poziom 10  
    LChucki napisał:
    Corcho napisał:
    abym mógł mieżyć napięcie w zakresie do 30V z dokładnością 0,1 V

    Z dokładnością czy rozdzielczością?


    I z dokładnością i rozdzielczością chętnie :)
  • Poziom 30  
    Na przykład kodu nie licz, bo to nie zajęcie na godzinę czy dwie. Musisz wspomagać się kodami dostępnymi w Internecie, po ich analizie, wybrać co najlepsze i dostosować do swoich wymagań.
    Co do budowy dzielnika, to użyj rezystorów min 1%. Dobierz je tak, aby:
    - nie przekroczyć użytego napięcia odniesienia
    - podzielnik był całkowity, co pozwoli uniknąć problemu liczb zmiennoprzecinkowych
    Nie piszesz, jakiego mikrokontolera używasz, zakładam, że Mega328. Jego wewnętrzne Vref to 1,1V. Dzielnik, najlepiej więc dobrać 30:1 i zaczynają się schody. Potrzebne rezystory np 29k i 1k. 1k 1% nie ma problemu z 29 mogą być. To już jakoś rozwiążesz, może szeregowe połączenie rezystorów? Może inne wartości?
    Chcesz rozdzielczość 10mV dla 30V. 30V/0,01=3000. ADC w AVR ma przetwornik 10-bit, czyli 3 razy za mała rozdzielczość.
    NIE DA SIĘ! Na 12-bit osiągniesz wymaganą rozdzielczość, ale TYLKO rozdzielczość, o dokładności raczej nie ma mowy.

    Masz kilka rozwiązań:
    - inny mikrokontroler i mimo wszystko weryfikacja swoich wymagań
    - zewnętrzny ADC npINA219 i mimo wszystko weryfikacja swoich wymagań
    - zewnętrzny ADC 16-bit
    - Kilka zakresów pomiarowych i weryfikacja swoich wymagań,bo na zakresie do 1V nie ma problemu z rozdzielczością 10mV, dla 30V będzie to prawie 30mV.

    Na temat dokładności na razie nie piszę, bo nie wiem jaka opcje wybierzesz.
    Na moje oko, to tak sobie wymyśliłeś, choć pewnie nie potrzeba, że chcesz mierzyć z 12-bit rozdzielczością.

    Co będziesz mierzył? Pytam, bo jak dojdziemy do dokładności, to miej świadomość, że stabilne i DOKŁADNE Vref to koszt min 50zł. Stabilne Vref, które spełnia Twoje wymagania kupisz za kilka złotych, ale trzeba mieć je czym skalibrować. Masz czym?
  • Poziom 36  
    Corcho napisał:


    I z dokładnością i rozdzielczością chętnie :)


    Poniżej masz link do podobnego projektu wykonanego w dwóch variantach; prawie to co ty potrzebujesz.
    W prawdzie oba testy są dla Arduino Mega, lecz w tej kwestii pomiaru napięcia, rónice nie mają wpływu na twój projekt. .

    Przeanalizuj oba przykłady, abyś zrozumiał koncept dzielnika napięcia względem napięcia referencyjnego i przewidywanego zakresu napięcia. Przeczytaj i przeanalizuj cała dyskusję <Comments>.
    Mimo że oba przykłady korzystają z VCC jako Vref, to masz już dostateczną ilośc wiedzy aby swobodnie wykorzystywac alternatywnie inne napięcia; bądź to wewnętrzne (1.1V dla Uno; 2.56V dla Mega), bądź to zewnętrzne o dowolnie wybranym poziomie.
    Zwróc uwagę na kommentarz : Ladislav M. odnośnie swojego projektu z zastosowaniem innego wyświetlacza (TFT).
    Byc może, cos z tego wszystkiego skorzystasz... i dokończysz swój projekt we własnym zakresie bez potrzeby ‘xxxxxxxx xxx x xxxxxxxxxxx.’

    https://www.allaboutcircuits.com/projects/make-a-digital-voltmeter-using-the-arduino/

    dla większego zrozumienia/opanowania tematu, przeanalizuj dodatkowo ten przykład;
    https://www.electroschematics.com/9351/arduino-digital-voltmeter/

    Wyciągnij wnioski z porównania z tymi powyżej.
    Myślę że na tym etapie mógłbyś już zacząc coś robic samodzielnie zamiast ‘skamlec‘ i czekac na gotowy produkt z dedykacją.

    A tymczasem kol. Chacki niech przeanalizuje swoje rachunki i odszuka, że rozdzielczośc 0.1V , o jakiej autor referował, jest raczej równa 100 mV zamiast 10 mV. i przyzna ze Arduino, choc to sprzęt nie najwyższej klasy, wystarczy dostatecznie aby zrealizowac prawdopodobnie pierwszy testowy/próbny projekt autora.
    Byc może jest to tylko cwiczenie domowe ze szkoły(?). Stopień zaawansowania auora w tej dziedzinie jest oczywisty – bez pytania o to.

    e marcus
  • Poziom 30  
    emarcus napisał:
    niech przeanalizuje swoje rachunki i odszuka, że rozdzielczośc 0.1V , o jakiej autor referował, jest raczej równa 100 mV zamiast 10 mV.

    Faktycznie, więc problemu rozdzielczości nie ma, gorzej z dokładnością. Przy 200kHz ADC ma błąd +/-2LDB(przy 1MHz 4,5) a dla rozdzielczości 0,1V przy 30V wystarczy rozdzielczość niewiele ponad 8-bit, więc błąd przetwarzania można pominąć. Dokładność określa się w procentach, a nie w przypadku napięcia w mV ale można policzyć. 100mV do 30V to wychodzi mi jakieś 0,33%. Rezystory muszą więc być 0,1%, Vref, bez zaglądania w notę, zewnętrzne. Kalibracja wewnętrznego Vref pewnie niewiele da bo w czasie może byc odchyłka od tych 0,33% ale trzeba by to sprawdzić w nocie katalogowej.

    Dodano po 8 [minuty]:

    Zerknąłem w notę. Vref dla Mega328 to typowo 1.1V, min 1V, max 1,2V. Jaka to nam daje dokładność tego napięcia odniesienia bez kalibracji?
  • Poziom 31  
    Może sobie spokojnie wziąć rezystory 1%, zmierzyć napięcie Vref i nie dzielić włosa na 4. Napięcie Vref wewnętrzne w Atmegach może nie nadaje się do masowej produkcji bo wymagałoby kalibracji każdego egzemplarza, ale jest stabilne w czasie, więc jak zmierzy 1.05V to będzie miał ten 1.05V dzisiaj i za miesiąc, co do tego konkretnego celu w zupełności wystarczy. Corcho na razie ogarnia robienie dzielnika rezystorowego więc pewnie nie robi projektu dla NASA.
  • Poziom 30  
    kaczakat napisał:
    ale jest stabilne w czasie,

    Konkretnie jaka to stabilność?

    kaczakat napisał:
    Corcho na razie ogarnia robienie dzielnika rezystorowego więc pewnie nie robi projektu dla NASA.

    Co robi, to robi, chce uzyskać DOKŁADNOŚĆ 100mV a wewnętrzne Vref bez kalibracji daje mu kilka razy mniejszą dokładność. Nie napisał czy ma czym skalibrować, czy może zapłaci 50zł za Vref.
  • Poziom 35  
    LChucki napisał:
    Konkretnie jaka to stabilność?

    No taka, że w warunkach pokojowych dla jego celów wystarczająca. Ale jak będzie chciał użyć w wersji outdoor to już niekoniecznie.
    Zawsze można zajrzeć do dokumentacji, aby się o tym dowiedzieć.
  • Poziom 30  
    khoam napisał:
    No taka, że w warunkach pokojowych dla jego celów wystarczająca.

    "Fachowa" odpowiedź.

    khoam napisał:
    awsze można zajrzeć do dokumentacji

    Autor ma problem z rozróżnieniem rozdzielczości od dokładności. Dzielnik 30:1 zrobił źle bo nie dzieli przez 30 lecz przez 31 a nie sądzę aby o to mu chodziło. Nie wie o jakiej tolerancji rezystory zastosował. Żądanie od niego znalezienia w dokumentacji jakiejkolwiek informacji jest bezcelowe. Jak mu się nie wyłoży "kawy na ławę" jak to zrobiłem, to sam nie da rady.
    Proszę więc uświadomić autora, jakiej dokładności może się spodziewać jeśli skalibruje Vref w AVR i jak to ma zrobić.