Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Prosty miernik pojemności kondensatorów na PIC16F628A

p.kaczmarek2 04 May 2016 11:54 12420 26
Renex
  • Prosty miernik pojemności kondensatorów na PIC16F628A

    Witajcie moi drodzy!
    Chciałbym wam pokazać kolejny projekt oparty na mikroprocesorze z rodziny PIC. Jest to bardzo prosty miernik pojemności kondensatorów. Całość składa się zasadniczo tylko z jednego PIC16F628A i elementów pasywnych.

    Idea projektu
    Projekt bazuje na pomyśle R-B z embedded-lab.com i wykorzystuje Analog comparator do pomiaru pojemności kondensatora. Całość polega na zmierzeniu czasu ładowania kondensatora od 0 do danego napięcia. Wyniki pokazywane są na wyświetlaczu zgodnym z HD44780. Pomiar rozpoczyna się w momencie gdy wciśnie się przycisk MEASURE. Za całość odpowiada PIC16F628A:
    Prosty miernik pojemności kondensatorów na PIC16F628A

    Schemat
    Wzorowałem się na schematach z embedded-labs.
    Końcówka pomiarowa:
    Prosty miernik pojemności kondensatorów na PIC16F628A
    Reszta, mikroprocesor i jego połączenie z wyświetlaczem:
    Prosty miernik pojemności kondensatorów na PIC16F628A
    Schematy pochodzą ze strony embedded-lab.com.

    W przypadku swojego projektu pominąłem jedynie rezonator kwarcowy (używam wewnętrznego 4MHz, trochę kosztem precyzji pomiaru) oraz dodałem na płytce stabilizator by można było zasilać całość z baterii.

    Wzór PCB
    Pierwotny pomysłodawca układu złożył go na płytce developerskiej od PIC16F628A, lecz ja zaprojektowałem dla tego układu własne PCB o wymiarach około 5 na 5 cm, wraz z wszystkimi potrzebnymi połączeniami (również ICSP) wyprowadzanymi do złączy goldpin. Na płytce również umieściłem miejsce na stabilizator napięcia 7805.
    Prosty miernik pojemności kondensatorów na PIC16F628A
    Pliki Eagle i plik .pdf do wydruku do termotransferu są w załącznikach.

    Programowanie przez ICSP
    Na płytce wyprowadzone jest wyjście do ICSP, dzięki czemu można ją programować bez problemu z PICKIT2/PICKIT3 lub innych programatorów. Ułatwia to rozwój i testowanie miernika.

    Zasilanie
    Na płytce jest miejsce na stabilizator 5V, w swoim przypadku umieściłem tam 7805 a przed nim dałem podłączenie baterii 9V, ale nic nie stoi na przeszkodzie by zastosować tam inny regulator LDO, lub po prostu całkowicie go pominąć i zasilić bezpośrednio z 5V (przed stabilizatorem są na płytce wyprowadzone 2 goldpiny w tym celu; również można zasilić układ przez ICSP)

    Wykonanie projektu
    Płytkę wykonałem samodzielnie metodą termotransferu. Przyciski RESET i MEASURE są wyprowadzone na przewodach, tak samo jak wyświetlacz HD oraz złącza do podłączania mierzonego kondensatora. W przyszłości zamierzam dodać do tego jakąś obudowę, ale na ten moment to jest tylko prototyp i pewnie jeszcze będę poprawiać jego działanie (kalibracja itp.):

    Oto cały setup (zdjęcie bez a potem wraz z podpisami):
    Prosty miernik pojemności kondensatorów na PIC16F628A Prosty miernik pojemności kondensatorów na PIC16F628A

    Animacja GIF przedstawiająca działanie:
    Prosty miernik pojemności kondensatorów na PIC16F628A

    Dokładność pomiaru
    Dokładność pomiaru jest moim zdaniem zadowalająca jak na prototyp. Poniższa tabelka przedstawia porównanie zmierzonych i odczytanych wartości kondensatorów wraz z błędem względnym i bezwzględnym:
    NameCMeasuredDiff%
    Electrolytic 250V 10uF 1010,30,33,00%
    Electrolytic 200V 10uF109,960,040,40%
    Electrolytic 250V 2.2uF2,22,320,125,45%
    Electrolytic Frolyt 1/8010,920,088,00%
    Electrolytic 400V 47uF4745,961,042,21%
    Electrolytic 50V 1uF10,980,022,00%
    Electrolytic 16V 33uF3332,90,10,30%
    ceramic 103N Z5U0,010,0090,00110,00%
    ceramic B 472K0,00470,0040,000714,89%
    ceramic B 332K0,00330,0030,00039,09%
    green 10NJ100E 0.0110,010,0110,00110,00%
    orange 63 MKT 0.470,470,4320,0388,09%
    yellow .1J1000,10,0880,01212,00%

    Tutaj warto zwrócić uwagę, że na ten moment precyzja liczenia i wyświetlacza ogranicza się do 3 liczb po przecinku (0.001uF), więc wartosci takie jak 0.0047 mogą być jedynie pokazane jako 0.004 lub 0.005. Zamierzam to poprawić w przyszłości.

    Nie jest to wynik zły, zwłaszcza, że użyte w projekcie rezystory były tolerancji 10%, co również ma duży wpływ na rozrzut wyników pomiarów. Dokładność można by jeszcze zwiększyć poprzez dodanie mechanizmu kalibracji oraz poprzez zwiększenie częstotliwości taktowania całego układu.


    Kosztorys
    PIC16F628A - 7 zł
    Wyświetlacz 2x16 HD44780 - 10 zł
    Tych drobniejszych elementów można za 1zł dostać kilka sztuk, ale nie będę liczyć co do grosza, i tak raczej nikt nie kupuje pojedynczo.
    Gniazdo DIP18 - 1 zł
    Goldpiny - 1 zł
    Laminat - 5 zł
    Drobnica, rezystory - 1 zł
    Suma kosztów: 25 zł

    Dalszy rozwój projektu
    W najbliższym czasie planuję przenieść kod na PIC18F2550 oraz poszerzyć go o dodatkowe funkcjonalności, takie jak pomiar innych wartości komponentów oraz możliwość kalibracji i odczytu wartości przez USB. Projekt może być Open Source, więc jestem otwarty na wszelką współpracę - proszę zainteresowanych o wypowiedzi w temacie.

    Załączniki
    W załącznikach jest projekt Eagle płytki wraz z pdf gotowym do wydruku, skompilowany wsad na PIC16F628A ustawiony na uzycie wewnętrznego oscylatora 4MHz oraz cały projekt wraz z kodem mikroC PRO for PIC.

    Cool? Ranking DIY
    About Author
    p.kaczmarek2
    Moderator Smart Home
    Offline 
  • Renex
  • #2
    Imekxus
    Level 18  
    1. Brak kondensatorów przy kwarcu na schemacie z rysunku 4 (15-30 pF zgodnie z tabelą 14.2 z noty), chociaż na PCB je widzę, może warto o tym wspomnieć w opisie albo wkleić schemat ideowy całości w poście w postaci obrazka?
    2. Między GND a resetem powinien być chyba kondensator 100nF (tego nie jestem pewien)
    3. Brzydko wycięta płytka
    4. Otrzymywane dokładności całkiem przystępne, chociaż należy pamiętać, że prawdziwe wartości pojemności mogą się też różnić znacznie od tych zadeklarowanych przez producenta (w zależności od kondensatora nawet 20%), w celu kalibracji Twojego urządzenia potrzebowałbyś miernik wzorcowy
    5. Pomyśl o tej obudowie, dobrze wykonane obudowy są ciepło przyjmowane w dziale DIY (szczególnie w przypadku mało skomplikowanych projektów jak ten)

    @Edit
    przeczytałem jeszcze raz na trzeźwo i odwołuje punkt 1 (chociaż dalej nie wiem od czego są te 22pF na Twojej płytce)

    @edit2
    źle ze mną, pomimo tego, że piszesz, że użyłeś wewnętrzny rezonator to ja na płytce widzę kwarc :D
  • #4
    p.kaczmarek2
    Moderator Smart Home
    Imekxus wrote:
    1. Brak kondensatorów przy kwarcu na schemacie z rysunku 4 (15-30 pF zgodnie z tabelą 14.2 z noty), chociaż na PCB je widzę, może warto o tym wspomnieć w opisie albo wkleić schemat ideowy całości w poście w postaci obrazka?

    Na projekcie PCB są one dostępne, natomiast w wykonanym protypie je pominąłem razem z rezonatorem (użyłem wewnętrznego 4MHz).

    Imekxus wrote:

    2. Między GND a resetem powinien być chyba kondensator 100nF (tego nie jestem pewien)

    Przeglądałem wiele projektów opartych na PIC i tego się zazwyczaj nie stosuje.

    Imekxus wrote:

    4. Otrzymywane dokładności całkiem przystępne, chociaż należy pamiętać, że prawdziwe wartości pojemności mogą się też różnić znacznie od tych zadeklarowanych przez producenta (w zależności od kondensatora nawet 20%), w celu kalibracji Twojego urządzenia potrzebowałbyś miernik wzorcowy

    Zgadza się, stąd w tekście podkreśliłem, że porównuje wartość zmierzoną (miernikiem) z odczytaną (z etykiety kondensatora), i wiem, że lepiej byłoby zastosować do badań drugi, dobrej jakości miernik.

    bobo wrote:

    1. W jakim zakresie pojemności mierzy ten miernik?

    Od 1nF do 100uF, ale w najbliższym czasie zamierzam ten zakres poszerzyć.

    Imekxus wrote:

    2. Nie ma się co wstydzić i wypada podać pełny adres strony źródłowej:
    http://embedded-lab.com/blog/making-a-digital-capacitance-meter-using-microcontroller/

    W tekście wytłuściłem skąd wziął się oryginalny pomysł na ten projekt, natomiast bezpośredniego linku nie umieściłem, ponieważ zbędna reklama nie zawsze jest mile widziana w takich tematach.
  • Renex
  • #5
    Steryd3
    Level 33  
    Miernik prosty...jeżeli pisałeś samemu program to może się czegoś nauczyłeś. Jeżeli był on pobrany ...to powstrzymam się od uszczypliwości.
    Miernik oprócz walorów edukacyjnych właściwie nie posiada innych.

    Przy omawianiu zakresu na Twoim miejscu określił bym go jako 100?F z rozdzielczością 1nF -takie określenie jest bardziej precyzyjne.

    Przy rozszerzaniu zakresu raczej większe możliwości ma jego poszerzanie w górę -co ma racje bytu przy pomiarach dużych elektrolitów. W dół będzie ciężko- czasy ładowania niewielkie a i o pasożytniczą pojemność nie trudno.

    Ogólnie jestem na tak- projekt warty do polecenia pod warunkiem, że program będzie pisać się samemu.
  • #6
    mariomario
    Level 18  
    p.kaczmarek2 wrote:

    Dalszy rozwój projektu
    W najbliższym czasie planuję przenieść kod na PIC18F2550 oraz poszerzyć go o dodatkowe funkcjonalności, takie jak pomiar innych wartości komponentów oraz możliwość kalibracji i odczytu wartości przez USB. Projekt może być Open Source, więc jestem otwarty na wszelką współpracę - proszę zainteresowanych o wypowiedzi w temacie.


    Chętnie przyłączę się do rozwoju takiego projektu na PIC18F2550 :)

    PIC18F2550 będzie o tyle lepszy od użytego PIC16F628A, że posiada on moduł ADC i wg. mnie będzie on chyba dokładniejszy (ale nie dam głowy za to). Można też przenieść kilka pomysłów z Arduino np. z tej stronki Link

    Do takiego testera można by w przyszłości dodać kolejne funkcje takie jak:
    - pomiar pojemności ogniw li-ion
    - pomiar indukcyjności
    - dodatkowa opcja: regulowane sztuczne obciążenie DC
    - tester diod półprzewodnikowych
    - tester diod zenera i ich napięcia przewodzenia
    - może obsługa wyświetlacza o większej rozdzielczości (wyświetlacz graficzny - np. takie jak od starych Nokii) ?

    Na rynku istnieje wiele testerów o podobnych możliwościach, ale takiego typowo open-source jeszcze nie spotkałem (o tylu funkcjach), co najwyżej jakieś pojedyncze małe projekty. Fajnie jakby coś takiego uniwersalnego powstało i to jeszcze open-source
  • #7
    p.kaczmarek2
    Moderator Smart Home
    Bawiłem się tą metodą, którą zasugerował @mariomario, oraz przy okazji odświeżyłem sobię obsługę timerów i ADC na PIC18F2550 i wyszło coś takiego:
    Code: c
    Log in, to see the code

    Jest to testowa wersja która wyniki wysyła przez UART.

    Wymagania montażowe:
    Między AN0 a AN1 rezystor 10k.
    Między AN0 a AN2 rezystor 220.
    Między AN0 a GND badany kondensator.
    Pin TX jakoś podłączony do odbiornika (najlepiej konwerter na USB).

    Jak nie ma elementu, to wykrywa to i pisze "No element detected".
    104 ceramik mierzy jako 99nF
    474J foliowy mierzy jako 500nF
    47uF elektrolit mierzy jako 44uF
    1000uF elektrolit jako 1063uF
    2200uF elektrolit jako 2107uF
  • #8
    LisLucyfer
    Level 2  
    A jak wygląda sprawia mierzenia mniejszych pojemności, np. 10nF, 1nF? Da się w tę stronę poszerzyć zakres?
  • #9
    Freddy
    Level 43  
    Przy tej metodzie, nie za bardzo.
  • #10
    mariomario
    Level 18  
    Freddy wrote:
    Przy tej metodzie, nie za bardzo.


    A co proponował byś zmienić w kodzie aby była możliwość pomiaru poniżej np 1nF ? (może jakiś przykład ? fragment kodu ?)
  • #11
    p.kaczmarek2
    Moderator Smart Home
    mariomario wrote:
    Freddy wrote:
    Przy tej metodzie, nie za bardzo.


    A co proponował byś zmienić w kodzie aby była możliwość pomiaru poniżej np 1nF ? (może jakiś przykład ? fragment kodu ?)


    Zrobiłem bardzo szybki test czy można zwiększyć dokładność pomiaru dla mniejszych pojemności.
    Idea jest prosta - zwiększyć rezystor przez który ładujemy, by kondensator ładował się dłużej, dzięki czemu można całość uchwycić w ADC.
    (można by też np. przyśpieszyć jakoś częstotliwość próbkowania ADC, ale to inna sprawa)
    Zamieniłem rezystor 10k na 440k (połączone dwa 220k) i w kodzie zmieniłem tylko wartość rezystora.

    Teraz 10nF mierzy jako 9.9931 (duzo liczb po przecinku) i timer zlicza 439 cykli ładowania.
    Więć na 1nF by było 40~ cykli...
    A jak dam bardzo mały kondensator (np 22pF) to wcale go nie wykrywa (logiczne).

    Dokładność, mierzenie mniejszych pojemności się polepszyło kosztem czasu ładowania.
    Bardzo dużo to nie zmieniło, ale zawsze to coś. Można jeszcze sprobować z wiekszym rezystorem.

    I myślałem by dać możliwość przełaczania zakresu bądź automatyczne wsparcie paru zakresów. Tzn. najpierw ładujemy przez rezystor 10k, a potem jak się naładuje szybko to testujemy jeszcze raz np. przez 500k by mieć większą dokładność mniejszych pojemności.
  • #12
    Denar83
    Level 9  
    Bardzo fajny układzik. Ja zaproponuje jeszcze przerobienie trochę tego miernika i dołożenie układu rozładowania ewentualnego napięcia na kondensatorze przed pomiarem wykorzystując wolny port i dokładając kilka elementów. Ale to się zda raczej do większych pojemności bo to samo w sobie wprowadzi jakąś dodatkową pojemność.
  • #13
    Freddy
    Level 43  
    Denar83 wrote:
    Ja zaproponuje jeszcze przerobienie trochę tego miernika i dołożenie układu rozładowania ewentualnego napięcia na kondensatorze przed pomiarem wykorzystując wolny port i dokładając kilka elementów
    Pomysł bez sensu - co zrobisz jak kondensator będzie naładowany do 50V? po procesorze.
  • #15
    Freddy
    Level 43  
    Denar83 wrote:
    nie chodzi o uszkodzenie procka
    ... ale do tego doprowadziłby Twój pomysł :D.
  • #16
    Denar83
    Level 9  
    Freddy wrote:
    ... ale do tego doprowadziłby Twój pomysł .

    Freddy nie chodzi tu o uszkodzenie czegokolwiek. Pomyśl jaki wpływ na wynik pomiaru może mieć częściowo naładowany kondensator albo co się stanie, kiedy po raz kolejny wciśniemy przycisk "start" na tym samym badanym kondensatorze. Widziałem już podobne konstrukcje, w większości takie jak te, przy których trzeba rozładować kondensator przed pomiarem, są i bardziej sprytne, które robią to automatycznie, jak i również z automatycznie zmiennym zakresem przy zastosowaniu kilku zewnętrznych komparatorów.
  • #17
    Freddy
    Level 43  
    No to sprawdź sobie taki efekt na najbardziej popularnym testerze na forum.
  • #18
    wegi1
    Level 13  
    p.kaczmarek2 wrote:

    W przypadku swojego projektu pominąłem jedynie rezonator kwarcowy (używam wewnętrznego 4MHz, trochę kosztem precyzji pomiaru) oraz dodałem na płytce stabilizator by można było zasilać całość z baterii.



    Zaiste... Pewnie ukochane wysokopoziomowe oprogramowanie też ma swój timing nad którym nie da się zapanować...



    Przykład "samowoli" C

    https://www.youtube.com/watch?v=gusXn4ZmcrE



    p.kaczmarek2 wrote:


    Na płytce jest miejsce na stabilizator 5V, w swoim przypadku umieściłem tam 7805 a przed nim dałem podłączenie baterii 9V, ale nic nie stoi na przeszkodzie by zastosować tam inny regulator LDO, lub po prostu całkowicie go pominąć i zasilić bezpośrednio z 5V (przed stabilizatorem są na płytce wyprowadzone 2 goldpiny w tym celu; również można zasilić układ przez ICSP)





    Takie urządzenie

    http://www.mikrocontroller.net/wikifiles/8/8f/Ttester_eng111k.pdf

    Przed każdym pomiarem mierzy napięcie zasilania - w przypadku baterii widać, że po każdym pomiarze pojemności jest ono coraz niższe.
    Szkoda tracić pieniądze na baterię, żeby ładować nią kondensatory, z zasilacza było nie było jest taniej :)



    Freddy wrote:
    Pomysł bez sensu - co zrobisz jak kondensator będzie naładowany do 50V? po procesorze.



    Że niby 50V uszkadza procka dopiero po przeróbkach zaproponowanych przez Denar83 ???
  • #19
    Freddy
    Level 43  
    wegi1 wrote:
    Że niby 50V uszkadza procka dopiero po przeróbkach zaproponowanych przez Denar83 ???
    To naładuj sobie kondensator do 50V i podłącz pod ten miernik.
  • #20
    wegi1
    Level 13  
    Freddy wrote:
    To naładuj sobie kondensator do 50V i podłącz pod ten miernik.



    Zakwestionowałeś przeróbki zaproponowane przez Denar83, podając powód że kondensator naładowany do 50V uszkodzi procka - pytanie moje dotyczy logiki kwestionowania przeróbek proponowanych przez Denar83 - zadam je jeszcze raz bezpośrednio:

    Czy kondensator naładowany do 50V podłączony do układu bez przeróbek zaproponowanych przez Denar83 nie uszkodzi procka, dopiero go uszkodzi jak układ będzie po przeróbkach "Denar83" ???
  • #21
    Freddy
    Level 43  
    Zerknij do DS procesora i sprawdź maksymalne dopuszczalne napięcia na pinach, to sie dowiesz.
  • #22
    wegi1
    Level 13  
    Freddy wrote:
    Pomysł bez sensu - co zrobisz jak kondensator będzie naładowany do 50V? po procesorze.



    wegi1 wrote:
    Czy kondensator naładowany do 50V podłączony do układu bez przeróbek zaproponowanych przez Denar83 nie uszkodzi procka, dopiero go uszkodzi jak układ będzie po przeróbkach "Denar83" ???




    Freddy wrote:
    Zerknij do DS procesora i sprawdź maksymalne dopuszczalne napięcia na pinach, to sie dowiesz.



    Zerknąłem do DS procesora


    http://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdf

    Absolute Maximum Ratings(†)
    Voltage on VDD with respect to VSS ............................................................................................................ -0.3 to +6.5V
    Voltage on MCLR and RA4 with respect to VSS ............................................................................................-0.3 to +14V


    † NOTICE: Stresses above those listed under “Absolute Maximum Ratings” may cause permanent damage to the
    device. This is a stress rating only and functional operation of the device at those or any other conditions above those
    indicated in the operation listings of this specification is not implied. Exposure to maximum rating conditions for
    extended periods may affect device reliability.



    Zatem według Twojej logiki cały miernik jest bez sensu, bo procek się zjara przy 50V zarówno [z] jak i [bez] przerób[kami/ek] "Denar83" - dobrze rozumiem ???
  • #23
    wegi1
    Level 13  
    Zaproponowane poprawki przez Denar83 są bardzo dobre, a bezsensem jest ich negowanie powołując się na fakt, że procek się spali przy 50V, skoro bez przeróbek zaproponowanych przez Denar83 procek i tak się spali przy 50V.
  • #24
    Freddy
    Level 43  
    Widzę wegi1, że jesteś uparty, jak osiołek :D.
    Zobacz sobie, że nawet fabryczne mierniki pojemności, też nie układu mają autorozładowania kondensatora.

    Autorozładowanie kondensatora nie jest dobrym pomysłem i dlatego sie tego nie stosuje - dlaczego, choćby dlatego, że czasy rozładowania kondensatorów są bardzo różne i nigdy nie doszłoby do całkowitego rozładowania.

    PS.Jeśli nie rozumiesz jakiegoś zagadnienia, to nie wypowiadaj sie na jego temat.
    To nie jest żaden wstyd, nikt nie jest omnibusem.
  • #25
    rs232
    Level 10  
    Nic się nie uszkodzi, sam taki miernik zrobiłem tylko na atmedze8.
    Przecie tych 50V nie podłączasz do portów procka - logicznie myśląc tylko, nawet jak podłączasz kondensator naładowany do 5V to go nie rozładowywujesz "gołymi" portami procka tylko przez dodatkowe układy/elementy via tranzystor itd.itp.

    Projekt fajny, warto naprawdę dołożyć ten układ rozładowania, ponadto można to zrobić bardziej "pro mode", np. na N-mos sterowanym PWM z pomiarem napięcia i prądu rozładowania badanej pojemności (kontrolujesz moc aby nie uwalić N-mosa). Jak będzie mało można jeszcze wyliczać dodatkowe parametry jak ESR itd. (tylko jeszcze dodać mały generatorek sinus, a to na procku nie problem).

    https://pl.wikipedia.org/wiki/Low_ESR
  • #26
    kaiserin
    Level 11  
    "Pomysł bez sensu - co zrobisz jak kondensator będzie naładowany do 50V? po procesorze."

    Porada bez sensu taki voltage i tak postawi krzyżyk na procku. Prędzej obronią go mody z tranzystorami niż bezpośrednie przepięcie na portach.
  • #27
    Freddy
    Level 43  
    Tak, tak, oczywiście macie racje i dlatego takie genialne rozwiazanie nie jest stosowane w żadnym profesjonalnym mierniku pojemności.

    mariomario wrote:
    A co proponował byś zmienić w kodzie aby była możliwość pomiaru poniżej np 1nF ? (może jakiś przykład ? fragment kodu ?)
    Inna metoda pomiarowa. Było kilkanaście różnych mierników na elektrodzie.