Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Woltomierz na PIC16F684 - dwa zakresy

ukixx 28 Lut 2017 17:09 4602 16
  • Woltomierz na PIC16F684 - dwa zakresy
    Witam.
    Przedstawiam projekt woltomierza, którego sercem jest mikrokontroler PIC16F684. Urządzenie jest częścią innego projektu dlatego też nie posiada obudowy. Woltomierz posiada dwa wejścia, pierwsze ma zakres 0-20V a drugie 0-5V. Ponieważ użyłem trzech wyświetlaczy siedmiosegmentowych to wybór, z którego wejścia ma być wyświetlany wynik jest realizowany za pomocą przycisku i sygnalizowany diodą LED.
    Mikrokontroler posiada tylko 12 pinów I/O więc do sterowania wyświetlaczami użyłem rejestru 74HC595. Urządzenie jest zasilane z napięcia 5V.
    Konstrukcja jest bardzo prosta, napięcia wejściowe są odfiltrowane za pomocą kondensatorów MLCC o pojemności 4.7µF, rezystancja wejściowa 10kΩ powoduje, że układ ten nadaje się do pomiaru napięcia baterii, akumulatorów i zasilaczy.

    Niestety laminat jest słabej jakości także wykonanie do pięknych nie należy :(
    Woltomierz na PIC16F684 - dwa zakresy
    Woltomierz na PIC16F684 - dwa zakresy
    Woltomierz na PIC16F684 - dwa zakresy


    Fajne!
  • #2 28 Lut 2017 22:58
    prosiak_wej
    Poziom 26  

    A jak z dokładnością? Lepsza czy zbliżona do chińskich modułów po 12zł, które napędza jeden układ scalony i można kupić wersję na praktycznie dowolny zakres napięć.

  • #3 28 Lut 2017 23:16
    ukixx
    Poziom 18  

    Dokładność zależy od wartości rezystorów. Rozdzielczość ADC to 10-bit, więc do 3-cyfrowego miernika jest wystarczająca. Ja wskazania tego miernika porównywałem z UT-203 i M890G, dla zakresu 20V wynik mam z dokładnością 0.1V czyli mniej niż 1%. Zakres 0-5V użyłem do amperomierza, bocznik 1mR i wzmacniacz pomiarowy x100 i gdy na boczniku mam 35.6mV to miernik wskazuje 35.6A. To jaka będzie dokładność zależy od wyskalowania i kalibracji miernika, a także od dokładności napięcia zasilania.

  • #4 02 Mar 2017 16:36
    silvvester
    Poziom 24  

    ukixx napisał:
    Dokładność zależy od wartości rezystorów. Rozdzielczość ADC to 10-bit, więc do 3-cyfrowego miernika jest wystarczająca.


    Dokładność zależy od przetwornika AD, a właściwie liniowość i jest szczerze mówiąc taka sobie. Owszem w jednym punkcie można bez problemu uzyskać 0,1V dokładności, ale wtedy w innym punkcie będzie błąd 0,3V. Jako wskaźniki takie woltomierze się sprawdzają, ale pisanie o dokładności 0,1V w całym zakresie jest nadużyciem.

    Poza tym wystarczyło użyć jednego klucza np. cd4052 i zrobić dzielnik wejściowy, miałbyś wtedy 2-3 zakresowy z automatyką.

  • #5 02 Mar 2017 19:35
    RomanWorkshop
    Poziom 8  

    Dobrym rozwiązaniem jest użycie dzielnika podobnego do tego, jakie są stosowane w multimetrach uniwersalnych. Do dwóch zakresów byłyby potrzebne trzy rezystory: 90k/9k/1k lub 180k/18k/2k. Z takiego dzielnika otrzymuje się napięcia Vin/10 i Vin/100, które podłącza się do dwóch wejść przetwornika ADC. Jeśli napięcie Vin/10 przekracza zakres pomiarowy przetwornika, to program mikrokontrolera przełącza go na drugi zakres, na którym mierzy on napięcie Vin/100 (oczywiście z mniejszą rozdzielczością wyniku). Zaletą użycia takiego dzielnika jest dużo większa rezystancja wejściowa woltomierza. Przykład praktyczny: Link .

  • #6 03 Mar 2017 10:41
    ukixx
    Poziom 18  

    silvvester napisał:
    Dokładność zależy od przetwornika AD, a właściwie liniowość i jest szczerze mówiąc taka sobie. Owszem w jednym punkcie można bez problemu uzyskać 0,1V dokładności, ale wtedy w innym punkcie będzie błąd 0,3V. Jako wskaźniki takie woltomierze się sprawdzają, ale pisanie o dokładności 0,1V w całym zakresie jest nadużyciem.

    Poza tym wystarczyło użyć jednego klucza np. cd4052 i zrobić dzielnik wejściowy, miałbyś wtedy 2-3 zakresowy z automatyką.

    Sprawdzałem ten układ z multimetrem i przy 20V wynik odbiega od wskazania multimetru o 0.1V, a to jest dokładność. Rozdzielczość też mam 0.1V, gdyby przetwornik AD był 12-bitowy to może pokusiłbym się o dodanie drugiego miejsca po przecinku.

    Zamiast np. CD4052 wolałbym użyć tranzystorów 2N7002 ze względu na kilkadziesiąt razy mniejszą rezystancję w stanie przewodzenia. Poza tym prezentowany układ będzie częścią prostownika więc automatyczny przełącznik zakresów nie jest mi potrzebny, za to pomiar z dwóch kanałów już tak.

    RomanWorkshop napisał:
    Dobrym rozwiązaniem jest użycie dzielnika podobnego do tego, jakie są stosowane w multimetrach uniwersalnych. Do dwóch zakresów byłyby potrzebne trzy rezystory: 90k/9k/1k lub 180k/18k/2k. Z takiego dzielnika otrzymuje się napięcia Vin/10 i Vin/100, które podłącza się do dwóch wejść przetwornika ADC.

    Uniwersalne multimetry mają rezystancję wewnętrzną 1MΩ lub 10MΩ, nawet zastosowanie rezystancji 100k pogarsza liniowość pomiaru przetwornika AD. Dobrze by było wtedy użyć wzmacniacza operacyjnego np. LM358 między dzielnikiem a wejściem ADC.

  • #7 03 Mar 2017 21:42
    trol.six
    Poziom 30  

    ukixx napisał:
    gdyby przetwornik AD był 12-bitowy to może pokusiłbym się o dodanie drugiego miejsca po przecinku.

    Zwiększyć rozdzielczość możesz poprzez zaszumienie sygnału małą i stałą, wartością przebiegu trójkątnego o wartości kilku bitów dodaną do napięcia mierzonego. I robisz kilka pomiarów (czasem najlepiej podzielnych przez wielokrotność 2) sumując je po prostu. Czasem można zaszumieć samą wartość Vref. Ja mam zrealizowany tester zenerek w ten sposób. Nie podnosi to dokładności, ale zwiększa przejrzystość odczytu.

    Dodać taki szum jest łatwo z dodatkowego pina poprzez rezystor i filtrujący kondensator.
    Oczywiście wszystkie wartości trzeba dobrać, wraz ze stałą czasową tego filtra. Generalnie temat troche trudniejszy.

    RomanWorkshop napisał:
    Do dwóch zakresów byłyby potrzebne trzy rezystory: 90k/9k/1k lub 180k/18k/2k. Z takiego dzielnika otrzymuje się napięcia Vin/10 i Vin/100, które podłącza się do dwóch wejść przetwornika ADC. /.../ Przykład praktyczny

    Takie połączenie bez aktywnego przełączania rezystorów, wymaga niższego napięcia Vref.
    Nie wiem czy jest to jakiś super pomysł. :)

  • #8 04 Mar 2017 01:45
    R-MIK
    Poziom 35  

    ukixx napisał:

    Mikrokontroler posiada tylko 12 pinów I/O więc do sterowania wyświetlaczami użyłem rejestru 74HC595.

    Czy nie rozsądniejsze byłoby zastosowanie większego mikrokontrolera?

  • #9 04 Mar 2017 12:16
    ukixx
    Poziom 18  

    trol.six napisał:
    Zwiększyć rozdzielczość możesz poprzez zaszumienie sygnału małą i stałą, wartością przebiegu trójkątnego o wartości kilku bitów dodaną do napięcia mierzonego...

    Czyli zastosować tzw. oversampling, w sumie mógłbym z tego skorzystać gdyż próbkowanie mam i tak ok 2x na sekundę, tylko dla 3-cyfrowego wyświetlacza nie ma to sensu. Pomyślę nad tym jak będę robił kolejną wersję miernika.

    trol.six napisał:
    RomanWorkshop napisał:
    Do dwóch zakresów byłyby potrzebne trzy rezystory: 90k/9k/1k lub 180k/18k/2k. Z takiego dzielnika otrzymuje się napięcia Vin/10 i Vin/100, które podłącza się do dwóch wejść przetwornika ADC. /.../ Przykład praktyczny

    Takie połączenie bez aktywnego przełączania rezystorów, wymaga niższego napięcia Vref.
    Nie wiem czy jest to jakiś super pomysł. :)

    Takie połączenie musi spełniać warunek Vin/10 < Vdd i maksymalne mierzone napięcie dla Vin/100 wyniesie zakres dla Vin/10 razy Vdd/Vref.
    Także ten sposób jest mało efektywny i lepszym rozwiązaniem jest zmiana dzielnika przez dołączanie równolegle rezystora między wejściem ADC a masą.

    R-MIK napisał:
    Czy nie rozsądniejsze byłoby zastosowanie większego mikrokontrolera?

    Nie, gdyż większy mikrokontroler trzeba kupić, a PIC16F684 mam ze złomu w ilości ok. 30szt. Poza tym zawsze jest to jakiś sposób na poradzenie sobie ze zbyt małą ilością pinów w mikrokontrolerze, a więc można się czegoś przy okazji nauczyć. Program zajmuje ok. 300 linijek kodu na 2048 więc bez sensu jest też pchać większy mikrokontroler.

    Chociaż zastosowanie większego mikrokontrolera uprościło by układ.

  • #10 04 Mar 2017 18:48
    RomanWorkshop
    Poziom 8  

    Oczywiście taki dzielnik nie jest jakimś super odkryciem, ale sprawdza się jeśli maksymalne mierzone napięcie wejściowe Vin nie przekracza 50V (przy napięciu zasilania mikrokontrolera Vcc=5.0V). Dodatkowo dzielnik 90k/9k/1k spełnia też wymagania przetworników ADC wbudowanych w mikrokontrolery AVR i PIC, jeśli chodzi o impedancję wyjściową Zout źródła mierzonego napięcia, która według not katalogowych może wynosić do 10k.

  • #11 06 Mar 2017 14:00
    pikarel
    Poziom 28  

    To urządzenie na zakresie 5 V i pomiarze napięcia 5 V mierzy go (pomijając precyzję przetwarzania) z rozdzielczością 0,1 V, ma więc względnie dobrą dokładność 2%.
    Przy pomiarze napięcia 0,5 V dokładność to już tylko 20%, czyli dyskwalifikuje go jako urządzenie pomiarowe, jednak świetnie nadają się do użycia jako wskaźnik napięcia i/lub prądu w każdym zasilaczu, który nie ma takiego pomiaru wcale.

    Popularność tych PIC-ów jest raczej znikoma, nie udostępniłeś też wsadu do procesora, więc urządzenie pozostanie tylko na Twoim stole.
    Popularne kiedyś PIC16F84 to niestety całkowicie inny procesor.

  • #12 06 Mar 2017 14:12
    R-MIK
    Poziom 35  

    Początkujący niesamowicie strzegą swoich "tajemnic". Ja do zaawansowanych projektów udostępniam nie tylko kody wynikowe ale także źródłowe. Wyjątek stanowi jeden projekt i to wcale nie najwyższych lotów a embargo obejmuje tylko kody źródłowe.

  • #13 06 Mar 2017 18:44
    ukixx
    Poziom 18  

    Jesteś pierwszym, który pyta o program. Nie jest on żadną tajemnicą :)
    Oryginalny kod na zakresie 5V jest wyświetlany z mnożnikiem x10 (użyty do amperomierza 0-50A) więc do pomiaru napięcia wystarczyłoby tylko przesunąć kropkę o jedną pozycję w lewo.

  • #17 14 Mar 2017 23:52
    R-MIK
    Poziom 35  

    Też kiedyś pisałem w asm ale to było w czasach gdy kompilatory C były drogie i niezbyt inteligebntne. Teraz czasem robię wstawki w asm ale to bardzo rzadki przypadek. Dlaczego wolę C? Np taki kod:

    Kod: avrasm
    Zaloguj się, aby zobaczyć kod

    (nie ma syntax asm pic)

    zastępuje taki:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Jak chcę określoną liczbę cyfr, np 5 to:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Jak maja być "wygaszone" zera nieznaczące:
    Kod: c
    Zaloguj się, aby zobaczyć kod
    Przy tak małym programie nie ma większego problemu, ale wiem ile było rzeźby dla kodu 8kB dla 8051. W C można napisać to z 10 razy szybciej ale przyznam, że podstawowa znajomość assemblera jest bardzo przydatna.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME