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

Przenośne elektroniczne obciążenie na Atmega8 i MCP6002, program pod Arduino IDE

gdL 19 Paź 2017 21:41 5454 21
  • Projekt elektronicznego obciążenia napisany od zera w środowisku Arduino IDE z zainstalowaną biblioteką MiniCore w C++ z użyciem klas, powinno umożliwić Wam łatwą rozbudowę i dodawanie nowych modułów.

    Przenośne elektroniczne obciążenie na Atmega8 i MCP6002, program pod Arduino IDE


    Po kilku latach przerwy w elektronicznym hobby postanowiłem wrócić do projektowania. Kupiłem oscyloskop, ale potrzebne mi było jeszcze kilka urządzeń, które nie należą ani do tanich ani też zajmujących mało miejsca na biurku. Dlatego w ramach wprawy postanowiłem zaprojektować i wykonać elektroniczne obciążenie i generator DDS w niewielkich obudowach. Urządzenia te zasilane bateryjnie goszczą na elektrodzie w ramach konkursu zorganizowanego przez NDN - zapraszam do komentowania, rozbudowy i samodzielnego wykonania.



    Zmontowane przeze mnie elektroniczne obciążenie jest to bardzo prosty sprzęt, służy głównie do testowania urządzeń zasilających, baterii, ale też do zasilania urządzeń i elementów elektronicznych wymagających stałego prądu jak np. diody. Obciążenie działa w trzech trybach do wyboru - stałoprądowe, stałomocowe i stałorezystancyjne - udające rezystor. Po przekroczeniu maksymalnej mocy przez kilka sekund obciążenie automatycznie wyłącza się.

    Czym różni się od innych projektów tego typu w necie?
    1. Spójny z innymi moimi projektami interfejs z pojedynczym klikalnym enkoderem.
    2. Podstawowe funkcje elektronicznego obciążenia.
    3. Zasilanie bateryjne.
    4. Czytelny kod napisany przeze mnie (można sobie łatwo dodać inne moduły).
    5. Minimalna ilość elementów.

    Budowa: Ze względu na zakres napięć generowanych przez procesor (0-5V) i krok regulacji PWM (max. 10bit) mamy do wyboru albo szerszy zakres prądów albo większą dokładność regulacji na zasadzie "coś za coś". W moim przypadku ze względu na użycie w aplikacjach typowo elektronicznych zdecydowałem się na zakres prądów 0-2A (EDIT: Jak zauważył Kolega @zbychmg nie da się osiągnąć więcej jak 2A - zakres jest typowo "elektroniczny"), rezystor pomiarowy 1R, Daje to krok regulacji około 5-6mA. Mogę więc z powodzeniem testować diody led, ale niektórych testów zwarciowych nie przeprowadzę. Częstotliwość PWM to chyba około 4kHz. Zastosowany przeze mnie MOSFET to BUZ10, jednak lepszy będzie jakiś z literką "L" oznaczającą poziom logiczny bramki, opamp to MCP6002 - jeden z tańszych wzmacniaczy operacyjnych rail-to-rail.





    Konstrukcja mechaniczna wymaga odizolowania radiatora i tranzystora MOSFET od plastikowej obudowy, mogą bowiem osiągać wyższe temperatury - ja wykorzystałem cienką prasowaną płytkę mdf, ale równie dobry będzie grubszy laminat lub sklejka. Radiator mocujemy do płytki, a płytkę do plastikowej obudowy. Zastosowałem niewielki radiator ze starego zasilacza ATX, bo interesują mnie głównie małe prądy i wysoka dokładność.

    Zasilanie bateryjne, pojedyncze ogniwo 18650 Li-Ion Samsung ICR18650-26JM 2600mAh z typową aplikacją ładowarki Li-Pol TP4056 pojedyncza cela 1S 3,7V microUSB z zabezpieczeniami oraz wyjście 5V na taniej przetwornicy "własny power bank" do 500mA. Warto do niej dolutować duży kondensator elektrolityczny, żeby wygładzić przebiegi.

    Zastosowanie urządzenia w testach szybkich przeciążeń jest możliwe, jednak wymaga odpowiedniego dobrania filtrów wejściowych przy wzmacniaczu operacyjnym i eksperymentów przy filtrowaniu (opcjonalne kondensatory C6, C61 i C7). Czym niższa częstotliwość odcięcia filtrów tym stabilniejsze działanie, ale wolniejsza odpowiedź na zmiany. Przy rezygnacji z większości filtrów bardzo ważne jest stabilne zasilanie, tania chińska przetwornica może nie wystarczyć :) Poza stabilnym zasilaniem warto wtedy dodać do kodu moduły czytające wartości szczytowe - może być konieczne zastosowanie procesora o większej ilości pamięci flash.
    Można też dodać osobne terminale do pomiaru napięcia.

    Przenośne elektroniczne obciążenie na Atmega8 i MCP6002, program pod Arduino IDE
    Przenośne elektroniczne obciążenie na Atmega8 i MCP6002, program pod Arduino IDE

    Dołączony projekt Arduino IDE 1.8.2 + MiniCore oraz schemat.

    Ewentualne modyfikacje:
    - dodanie diody Schottkiego przed MOSFETem pozwoli go uratować przy odwrotnej polaryzacji.

    Odpowiedzi na dotychczas zadawane pytania i wątpliwości:
    1. Dodałem BUZ10 zamiast egzotycznego MOSFET'a do projektu PCB i schematu. Wiem, że projekt PCB nie jest perfekcyjny, bo zrobiony tylko po to, żeby wiedzieć, gdzie dziergać. Projekt wykonany w całości na płytce uniwersalnej, ścieżki o potencjalnie dużym prądzie poprawiane srebrzanką. Co do rozłożenia elementów, to byłem nawet zadowolony, miało być raczej horyzontalne ze względu na kształt obudowy. Jeśli możecie, zamiast BUZ10 polecam raczej jakiś "logic level mosfet" (ale maksymalny prąd nie wzrośnie wiele ze względu na 1R rezystor R2).
    2. @pier Bateria ma sporą pojemność, starcza przynajmniej na kilkanaście godzin ciągłego użycia zanim będzie wymagać ładowania.


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • Metal Work Pneumatic
  • #2 19 Paź 2017 22:22
    Mikroprocesorowiec
    Poziom 11  

    Obwód R12, C6 to niezbyt dobry pomysł.
    R11, C2 dlaczego? Układ sie wzbudzał?
    C1 tantalowy? Nie lepiej było dać rezystor o większej rezystancji a kondensator mniejszy ale ceramiczny?
    Ile mocy wyciągnąłeś na tym radiatorze?

  • #3 19 Paź 2017 22:26
    gdL
    Poziom 27  

    Mikroprocesorowiec napisał:
    Obwód R12, C6 to niezbyt dobry pomysł.
    R11, C2 dlaczego? Układ sie wzbudzał?
    Ile mocy wyciągnąłeś na tym radiatorze?


    R12 i C6 dał dużo stabilności w przypadku kiepskiej jakości napięcia zasilania.
    R11 i C2 ponoć jest stosowany w komercyjnych układach elektronicznego obciążenia.
    Można zrobić tak jak mówisz z R1,C1 :)
    Długofalowo więcej jak 7W nie wyciągnę, bo robi się niekomfortowo ciepło.

  • #4 19 Paź 2017 22:37
    Mikroprocesorowiec
    Poziom 11  

    Niewiele projektów konkursowych ma obudowy, przez co sa takie niedokończone. Widzę, że upatrzyłeś sobie konkretny typ. Jeszcze jakieś urządzenia przedstawisz?

  • #5 19 Paź 2017 22:53
    gdL
    Poziom 27  
  • #6 19 Paź 2017 23:46
    Urgon
    Poziom 36  

    AVE...

    4.7A i takie cienkie ścieżki?!
    Ogólnie projekt PCB wygląda dla mnie słabo - ścieżki wąskie jak zadek węża. Brak też wylewki masy, co sprzyja zakłóceniom i podnosi koszt materiałowy domowej produkcji płytki. Do tego sporo pustej, nieużytej przestrzeni, co też nie jest dobre. Całość dałoby się zrobić na płytce jednostronnej. Schemat też tyłka nie urywa. Plus za użycie normalnego programu EDA zamiast Eagle czy innego badziewia...

  • #7 20 Paź 2017 07:03
    gdL
    Poziom 27  

    Urgon napisał:
    AVE...

    4.7A i takie cienkie ścieżki?!
    Ogólnie projekt PCB wygląda dla mnie słabo - ścieżki wąskie jak zadek węża. Brak też wylewki masy, co sprzyja zakłóceniom i podnosi koszt materiałowy domowej produkcji płytki. Do tego sporo pustej, nieużytej przestrzeni, co też nie jest dobre. Całość dałoby się zrobić na płytce jednostronnej. Schemat też tyłka nie urywa. Plus za użycie normalnego programu EDA zamiast Eagle czy innego badziewia...


    Projekt PCB był tylko poglądowy, projekt wykonany na płytce uniwersalnej (jednostronnie). Za to z rozłożenia elementów byłem nawet dumny, w końcu zmieściło się w takiej niewielkiej obudowie. Schemat, no cóż. Chętnie zobaczę coś bardziej zaawansowanego na bazie mojego projektu :)

  • Metal Work Pneumatic
  • #8 20 Paź 2017 08:43
    Mikroprocesorowiec
    Poziom 11  

    gdL napisał:
    Chętnie zobaczę coś bardziej zaawansowanego na bazie mojego projektu :)

    Urgon (poczytaj jego posty) jak i inny, którzy nie wystartowali w konkursie (a deklarowali taki zamiar) jak zwykle najlepiej wiedzą, jak powinien wyglądać projekt konkursowy. Nie wiedzą co to prototyp. Myślą, że wszystkie projekty to prace dyplomowe itp jak np oscyloskop 250ms/s. Zobacz projekty kolego Urgon a tam znajdziesz
    Cytat:
    Jest to uniwersalny konwerter USB-MIDI. Firmware pochodzi ze strony uCapps.de,
    to w konwerterze midi. Innymi sie nie chwali.

    Tak więc wypowiedzi takich osób ignoruj. Przyznam, że chciałem zobaczyć urządzenie w środku, ale już nie ma potrzeby. Uniwersalka wyjaśnia wszystko :-)

    Cytat:
    Mam jeszcze zasilacz o podobnym sterowaniu,

    Pokaż ten zasilacz. Domyślam sie, że też wersja kieszonkonwa.

  • #9 20 Paź 2017 13:53
    marszalek_duck
    Poziom 17  

    Cześć,

    buduję sobie właśnie coś podobnego i zastanawiałem się jak sterować tym cyfrowo. Myślałem żeby dać po prostu zewnętrzny DAC i sygnał z niego na OP. Widzę jednak ze ty tutaj podałeś sygnał PWM, czy w takim razie testowany sygnał (obciążenie) też będzie miało przebieg jak PWM (będzie nieliniowe)? Czy możne temu ma zapobiec filtr za OP (R12 i C6)? I kolejne pytanie, dlaczego podałeś sygnał sprzed filtra na wejście odwracające przez R11 i C2?

    Z góry dziękuję za jakieś podpowiedzi :)

  • #10 20 Paź 2017 15:59
    Owen27
    Poziom 10  

    R1 i C1 to filtr dolnoprzepustowy przerabiający PWM na napięcie stałe.

  • #11 20 Paź 2017 16:23
    zbychmg
    Poziom 28  

    Mam pytanie jakie napięcie zasila OP MCP6002 ?
    Ze schematu wynika, że to napięcie zasilania Atmegi czyli 5V.

    Tranzystor BUZ10 zaczyna przewodzić gdy Vgs > 3 V.

    Przy 3A na S(ource) tranzystora mamy 3V, na G(ate) może być co najwyżej 5 V.
    Ja osiagnąłem prąd ok. 0.8 A przy podpięciu G tranzystora do 5V.

    Tak, że te 4.7A to raczej teoria.

    BUZ pracuje liniowo (PWM jest fitrowany) to nie bardzo rozumiem dlaczego sugetia autora, aby to był tranzystor z literką L.

  • #12 20 Paź 2017 16:39
    gdL
    Poziom 27  

    marszalek_duck napisał:
    Cześć,

    buduję sobie właśnie coś podobnego i zastanawiałem się jak sterować tym cyfrowo. Myślałem żeby dać po prostu zewnętrzny DAC i sygnał z niego na OP. Widzę jednak ze ty tutaj podałeś sygnał PWM, czy w takim razie testowany sygnał (obciążenie) też będzie miało przebieg jak PWM (będzie nieliniowe)? Czy możne temu ma zapobiec filtr za OP (R12 i C6)? I kolejne pytanie, dlaczego podałeś sygnał sprzed filtra na wejście odwracające przez R11 i C2?

    Z góry dziękuję za jakieś podpowiedzi :)


    R1, C1 dają przy odpowiednim dobraniu wartości przebieg zbliżony do stałego, pozostałe elementy chronią przed wzbudzeniem oraz stabilizują wyjście - elementy z dopiskiem OPT są opcjonalne, jeśli wyjście będzie niestabilne przy zastosowanym zasilaniu. Ja miałem taki problem z moją przetwornicą. Generalnie czym lepsze zasilanie tym mniej filtrowania potrzeba.

    BUZ10 może nie otworzyć się całkiem przy 5V. Wskazany jest mosfet typu 'logic level'. Ja u siebie mam BUZ10 i testowałem dla 2A - działa. Więcej nie potrzebuję. Ja generalnie używam zwykle poniżej 800mA.

  • #13 20 Paź 2017 17:07
    Mikroprocesorowiec
    Poziom 11  

    Na BUZ11 90W testowałem. Naturalnie oamp zasilany z 12V. Zamiast MCP dałem popularnego LM358. Jak się używa mosfet-a nie trzeba rai-2-rail na wejsciu i wyjsciu, potrzebny taki, rail-2-rail na wejściu ale od 0V (LM258 od -0,3V) do 5V (przy zasilaniu rzedu 7V wystarczy właśnie LM). Na wyjściu nie musi byc rail-2rail, bo min pełnego otwarcia dla mosfeta to 6 lub 3V. Zdaje sie nie mozna użyc popularnych TL0xx bo na wejsciu nie maja od Vee ale zdaje sie grubo ponad Vee (1 czy 1.5V). Natomiast TL0xx moga pracowac na wejściu blisko zasilania.

    Tu mamy specyficzna sytuacje, zasilanie bateryjne. Naturalnie mozna kombinowac z przetwornicą. W sumie to czesta praktyka. Mostek "H" L6201/2/3 ma boostrap.

    Nie kojarzę mosfetów dużej mocy logic-level. Jak pamiętam to jednak 6V do pełnego otwarcia.

  • #16 21 Paź 2017 20:51
    pier
    Poziom 23  

    Wydaje mi się że użycie standardowego lcd na hd44780 i do tego z podświetlaniem słabo wychodzi przy zasilaniu bateryjnym. Mogłeś użyć jakiegoś oled-a lub lcd z samymi cyframi bez sterownika.

  • #17 22 Paź 2017 00:02
    zbychmg
    Poziom 28  

    Prezentowany układ obciązenia w wersji bateryjnej (zasilanie 5V) może działać praktycznie do ok. 1,8-2 A. (To wynika z ch-ki tranzystora polowego BUZ10)

    Przenośne elektroniczne obciążenie na Atmega8 i MCP6002, program pod Arduino IDE

    We wzmacniaczu liniowym, a taki jest tutaj zastosowany nie stosuje się tranzystorów z wejściem logicznym. Takie tranzysry stosuje się przy układach impulsowych (PWM) , gdzie tranzystor jest cyklicznie załączany i wyłączany, przez co moc wydzielana w tranzystorze jest dużo mniejsza niż przy pracy liniowej (tranzysor pracuje jako regulowany rezystor).

    Przy 2A prądu w rezystorze tracona jest moc 2W w tranzystorze (Uzas-2V) x 2A.
    Zakładając Uzas 12V w tranzystorze traci się 10W.

    Przy napięcu obciążenia >6V i < od 35V można byłoby przewidzieć zasilanie ukłądu z napięcia obciążenia (regulator liniowy 7805 + dioda blokująca na wyjściu ) a prąd zasilania dodawać do prądu mierzonego na rezystorze 1 Ohm.
    (Mamy pomiar napięcia, więc łatwo można określić przy jakim napięciu dodajemy prąd do wyniku.)
    Dłuższa praca układu (np. rozłądowanie akumulatora) nie obciążałaby bateri.

  • #18 26 Paź 2017 10:59
    22053
    Użytkownik usunął konto  
  • #19 26 Paź 2017 16:10
    zbychmg
    Poziom 28  

    R-MIK napisał:

    Sens stosowania tranzystora w wejściem "logicznym" jest. Do pełnego otwarcia wystarcza napięcie np 3V a nie 6.


    Masz racje, są tranzystory, zwykle oznaczane literką L, które mają mniejsze napięcie załączenia Vgs ok. 2,5V. (diagram), czyli mogą być sterowane z układów logicznych.

    Przenośne elektroniczne obciążenie na Atmega8 i MCP6002, program pod Arduino IDE

    Kiedyś siedziałem w TTL-u i dla mnie wejście logiczne oznaczało zupełnie co innego.

    Trochę niefortunne tłumaczenie (logic level input) wejście logiczne, oznaczałoby wejście, które do jakiegoś poziomu daje na wyjściu stan 1, a powyżej stan 0.
    W tym wypadku układ jest liniowy, ale może współpracować z wyjsciami logicznymi 0-5V, a nawet 0-3,3V.

    A do aplikacji autora projektu jak najbardziej się nadaje, zwiększając znacznie zakres prądowy obciążenia.

    No cóż, człowiek uczy się całe życie...

    Natomiast nie bardzo rozumiem co miałeś na myśli pisząc

    R-MIK napisał:

    Gdy użyć tranzystora 6V, nie można wykorzystać go na max (choć tu ograniczeniem to bardziej jest radiator).


    Chodziło Ci o tranzystor, który załącza się przy Vgs > 6V ?

    Jeśli ten parametr będzie większy od 5V, a układ zasilamy z 5V (autor użył przetwornicy 5V zasilanej z LiOn), to tranzystor się nie załączy.
    Radiator nie ma tu żadnego znaczenia.
    Moc tracona w tranzystorze dla tej aplikacji, to iloraz prądu drenu Id i napięcia Vds, a od Vgs (i ch-ki tranzystora) zależy tylko wartość prądu Id.

  • #20 26 Paź 2017 16:45
    22053
    Użytkownik usunął konto  
  • #21 27 Paź 2017 10:58
    zbychmg
    Poziom 28  

    Mam wrażenie, że próbujemy sobie coś tłumaczyć, o czym obaj dobrze wiemy.
    Z braku czasu piszemy skrótowo i nie zawsze czytamy to jeszcze raz, co skutkuje, że nie wychodzi to o czym myślimy,
    ale się poprawiamy, mam nadzieję, że z pożytkiem dla innych użytkowników forum.
    Nie myli sie ten, co nic nie robi (pisze).

    Piszesz

    R-MIK napisał:
    Taki tranzystor mocy, z Vgs 6V (nie ds) będzie przewodził pewnie juz przy 2V (w nocie to znajdziesz) ale jego rezystancja bedzie duża, w konsekwencji moc w nim wydzielana też.


    Chodziło Ci o Vgs przy którym tranzystor osiąga min. rezystancji Rds...

    Odnosząc się do prezentowanego projektu zasilanego z bateri Vgs < 5V.
    max prąd będzie zależny od ch-ki tranzystora i faktycznie stosująć tranzystor NTP60N06L, możemy w tym projekcie osiągnąć nawet blisko 5A, a zmniejszając rezystor z 1 Ohm na 0,1 Ohm nawet blisko 40A pod warunkiem, że będziemy go dobrze chłodzić i nie przekroczymy mocy max (tutaj 150W).

    Jak już pisałem, tranzystor pracuje jako regulowany "rezystor", więc jeśli osiągnie zadany prąd, to moc jaka się w nim wydzieli nie zależy od Vgs, tylko od prądu Id i napięcia obciążanego źródła. W tym przypadku moc tracona w tranzystorze Pt będzie zależeć od prądu i napięcia na tranzystorze Ut = Uobc - Iobc x 1 Ohm w przybliżeniu można przyjąć:

    Pt= (Ut * Iobc )

    Od Vgs zależy tylko jaki to będzie prąd.

    W aplikacjach z PWM, gdzie tranzystor działa jako przełącznik, ważne jest aby Rds było jak najmniejsze, co zmniejsza moc wydzielaną w tranzystorze w czasie gdy jest załączony.

    Ale w tym projekcie tranzystor będzie całkowicie załączony, tylko gdy napięcie obciążenia będzie bliskie naięciu U= (Iobc x 1 Ohm)

    W tej aplikacji można zastosować tranzystor bipolarny, czy darlington, moc jaka będzie w nim tracona będzie podobna jak dla Mosfeta.

    Przy czym na darlingtonie mamy dodatkowo ok. 1,5V spadku na dwóch złączach BE
    czyli przy 5V na wejściu i rezystorze 1 Ohm na wyjściu możemy osiągnąć max. 3,5 A
    W zmodyfikowanym układzie darlingtona możemy osiągnąć większy prąd (zależny od param.tranzystora) teoretycznie I = (Uobc - I x 1 Ohm) upraszczając Imax = Uobc/ 2 (tranzystor mocy z małym napięciem nasycenia Uce)

    Ale jak się popatrzy na schematy, to na pytanie dlaczego stosujemy Mosfety odpowiedź chyba jest oczywista :) .

    Przenośne elektroniczne obciążenie na Atmega8 i MCP6002, program pod Arduino IDE

  • #22 14 Lis 2017 09:00
    zbychmg
    Poziom 28  

    Jeśli mogę ?

    1. Jeśli masz zainstalowany program arduino IDE,ustawiasz w opcji

    Narzędzia/płytka: Arduino NG or older

    Narzędzia/procesor: Atmega8

    Narzędzia/programator: USBasp

    Kompilujesz program i masz kod do wysłania przez USBasp

    tutaj w miarę obszerny opis:

    http://uczymy.edu.pl/wp/blog/2016/11/19/atmega8-arduino-uno-r3-operacja-przeszczep/

    i na elektrodzie:

    https://www.elektroda.pl/rtvforum/topic2005378.html

    2. Obsługa wyświetlacza LCD 16 x 2 (16x4 20x2 20x4 itp) , czyli wysyłanie znaków, jakie mają się na nim pojawić, to deklaracja jaki wyświetlacz podłączamy i do których nóżek procesora przykłądowo:
    LiquidCrystal lcd(2, 3, 4, 5, 6, 8); // podłaczenie nóżek procesora 2-8 do wyprowadzeń LCD opisanych jako (RS,EN,D4,D5,D6,D7) Piny LCD 2 4 6 11 12 13 14

    lub wyświetlacz z magistralą I2C

    LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

    a następnie określić z jakim wyświetlaczem procesor współpracuje

    lcd.begin(16,2);

    Dalej w programie juz tylko polecenia:

    lcd.setCursor(x,y); // ustawienie kursora na pozycji y w linii x (0- linia pierwsza 1 inia druga
    lcd.print("tekst");lcd.print(y); // wyświetlony tekst od pozycji kursora lub zmiennej liczbowej


    3. Arduino kompiluje poprawny kod wynikowy dla Atmega8, który można wysłać do procesora i uruchomić.

    Trzeba kupić za parę zł programator USBasp, a tutaj jak go podłączyć:

    https://majsterkowo.pl/forum/elektronika-f19/...anie-atmega8-przez-programator-avr-t3070.html

    Pozdrawiam