Mocy… ubywaj! Regulowane obciążenie by Dave Jones i inni

dc2_00Zdarza mi się budować układy z odbiornikami dużych mocy. Tak jest w przypadku robotów mobilnych. Przy skręcaniu czy uderzeniu w ścianę, gdy kółka natrafiają na większy opór, silniki zaczynają się blokować i pobierają znacznie więcej prądu niż normalnie. Jeżeli tego nie przewidzę, odpowiednio izolując kontroler i przygotowując układ do przeniesienia dodatkowych mocy, może dojść do przypadkowych restartów i innych, znacznie gorszych problemów.

Do celów testowania układów w takich warunkach wykorzystuję sztuczne obciążenie prądowe.

W Sieci znajdziecie kilka narzędzi tego typu. Firmowe są zazwyczaj okrutnie drogie – chociaż sam znalazłem jedną taką eksportową perełkę (o tym poniżej). Ale można takie obciążenie wykonać samemu. Mnie spodobało się rozwiązanie przedstawione przez Dave’yego Jonesa z EEV blog w odcinku 102. Później znalazłem pomysł Nicka Gammon’a – i to ten postanowiłem wykorzystać tworząc takie narzędzie dla siebie.

Coś z Chin…

Jakiś czas temu opisywałem narzędzie tego typu zakupione na ali: Obciążenie Elektroniczne Made In China.

IMG_1219Problem z nim polega na tym, że pobiera co najmniej 200mA. Potrzebowałem czegoś, co pozwoli mi na testowanie z mniejszymi obciążeniami.

Pomysł z Arduino

Po krótkich poszukiwaniach w sieci, znalazłem bardzo ciekawy projekt autorstwa Nicka Gammon’a – gdzie potencjometr zastąpiono mikrokontrolerem

Dummy_load_schematic2

Jak sami widzicie, schemat jest całkiem prosty. Układ sterowany jest sygnałem PWM z mikrokontrolera. Prąd pobierany ze źródła (tutaj: zaciski load) będzie proporcjonalny do stopnia wypełnienia sygnału PWM (ang. duty).

Na potrzeby prototypu użyłem Arduino UNO.

Do generowania PWM na Arduino służy instrukcja analogWrite(pin, duty). Zamiast pin wstawiacie pin Arduino, na którym chcecie generować sygnał (tu: 3). Zamiast duty wstawiacie stopień wypełnienia sygnału. Parametr duty przyjmuje wartości od 0..254 (czyli 255 wartości). Przykładowo:

  • analogWrite(3, 0): generuje na pinie D3 sygnał PWM o wypełnieniu 0% (czyli sygnał cały czas „0”) – prąd nie jest pobierany ze źródła,
  • analogWrite(3, 127): 50%, czyli połowa cyklu stan wysoki, potem niski)
  • analogWrite(3, 254): sygnał wysoki (przez cały cykl) – maksymalna moc pobierana ze źródła.

Na schemacie wybrano pin D3, ale może to być dowolny inny, który potrafi generować PWM, np: D3, D9, D10, D11 (490 Hz) D5, D6 (980 Hz).

Wartość pobieranego prądu

Symulacja pokazała, że układ powinien zadziałać – „wysysając” nawet do 2.5A. Żeby dowiedzieć się, jakie jest natężenie prądu płynącego ze źródła, wystarczy zmierzyć napięcie w punktach TPA lub TPB.

Do wyświetlenia wartości prądu pobieranego ze źródła postanowiłem użyć modułowego miernika napięcia. Jakiś czas temu testowałem kilka z nich (zob. Jeszcze jeden modułowy…) Wybór padł na model 3-przewodowy (nie pobiera prądu z mierzonego obwodu).

dc2_10

Niestety miernik ten wyświetla napięcie w formacie x.x, tzn. z dokładnością do 100mV. Jeżeli prąd pobierany ze źródła będzie 100mA lub 199mA – miernik i tak wyświetli wartość „0.1” (w praktyce błędy są większe).

Zaraz, zaraz: to ten miernik mierzy napięcie (V) czy prąd (A)? Miernik mierzy napięcie, ale przedstawiony układ jest tak wyskalowany, że wartość napięcia liczbowo odpowiada wartości prądu wysysanego ze źródła.

Czarny i czerwony kabelek miernika podłączyłem do masy i zasilania układu. Żółty kabelek podłączyłem w punkcie TPB.

Pozostałe rozwiązania:

  • Zasilanie: 12v wprowadzane przez jacka Arduino,
  • Sterowanie ‚pożeraczem’ przez pin D3 (analogWrite([0..255])),
  • Potencjometr liniowy 50k do wygodnej regulacji obciążenia (na wejściach analogowych) – podłączony do A0 (analogRead()),
  • Pomiar napięcia w miejscu TPB – miernikiem modułowym.

Z innych pomysłów: komunikacja z komputerem po USB (logowanie), mierzenie napięcia wejściowego (np. czy nie pada pod obciążeniem), mierzenie temperatury tranzystora – i elegancka obudowa… A może zamiast Arduino użyję coś mniejszego?

BOM (Bill Of Materials)

Do wykonania projektu potrzebowałem kilka elementów:

  • LM358, zawiera 2 wzmacniacze operacyjne – wystarczy więc jedna kostka + podstawka,
  • N-MOSFET IRLZ34N z solidnym radiatorem (może być podobny o dużej mocy),
  • Rezystor 5W: 1Ω,
  • Rezystory 470Ω,
  • Potencjometr 50k,
  • Kondensator elektrolitycznych 10uF (lub coś podobnego),
  • Modułowy miernik napięcia, najlepiej 3-kabelkowy,
  • Arduino UNO z zasilaczem 12V,

Nie ignorujcie konieczności zastosowania radiatora. Ten układ traci moc zamieniając ją na ciepło – które musi być jakoś odprowadzone. Bez radiatora… jednego IRF540 załatwiłem po 15 minutach.

dc2_12

Kilka przydatnych rysunków:

  • LM358:LM358
  • IRF540 lub IRLZ34N:
    irf540
  • Rezystory „cementowe”: układ polega na traceniu mocy. Koniecznie użyjcie rezystorów, które mogą przenieść duże moce, np. 5W lub lepiej 10W.
    dc2_11

Podłączenie potencjometru do Arduino

Potencjometr ma pozwolić na płynną regulację obciążenia. Jego podłączenie jest proste: wystarczy na skrajne piny potencjometra podać 5v i masę GND a środkowy – podłączyć do wybranego wejścia analogowego Arduino.

Pozostało to oprogramować. Potencjometr podłączyłem do pinu A0:

int POT_PIN = 0;
int OUT_PIN = 3;
//---------------------
int lastPotValue = -1;
//---------------------
void setup(){
  Serial.begin( 9600 );
  Serial.println("-------");
  pinMode( POT_PIN, OUTPUT );
  pinMode( OUT_PIN, OUTPUT );
}
//---------------------
void loop(){
  //read pot value
  int currentPotValue = analogRead(POT_PIN);

  //Serial.print("Pot value: ");
  //Serial.println( currentPotValue );

  //if no change - do nothing
  if( currentPotValue != lastPotValue ){
    lastPotValue = currentPotValue;
    int outValue = map( lastPotValue, 0, 1023, 0, 255 );
    
    Serial.print("Changing to: ");
    Serial.println( outValue );
    
    //set pot output on digital exit
    analogWrite( OUT_PIN, outValue );
  }
  delay( 100 );
}

Zauważcie użycie funkcji map(). Funkcja ta „mapuje” wartość odczytaną z potencjometry (0..1023) na wartość podawaną do wygenerowania sygnału PWM (0..254).

Podłączenie na płytce stykowej

Podłączyłem wszystko na płytce stykowej. Zamiast 9v, użyłem standardowego zasilacza 12v podłączonego do wejścia dc Arduino.

dc2_04Na potrzeby testów do tranzystora podłączyłem multimetr z termoparą – z temperaturą nie ma żartów!

Testy

dc2_00

Testy wykonałem podłączając obciążenie do zasilacza. Notowałem wartości „wysysanego” prądu w zależności od generowanego sygnału PWM. Przedstawia to poniższy wykres:

dc2_chartSkonstruowane obciążenie potrafi „wyciągnąć” do 2.6 A ze źródła. Nawet wskazania miernika nie były aż tak odległe od wskazań zasilacza laboratoryjnego i dopiero powyżej 1A różniły się o 1 najmniej znaczącą liczbę.

Wnioski

Znaleziony układ okazuje się całkiem atrakcyjnym sposobem na samodzielne skonstruowanie obciążenia DC. Testy na płytce prototypowej potwierdzają, że działa. Oczywiście jeszcze wiele kwestii wymaga wyjaśnienia. Dla przykładu, napięcie TP:B wydaje się być jednak wyższe niż wskazania prądu pobieranego z zasilacza. Być może będzie można to zniwelować poprzez odpowiednie skalibrowanie miernika modułowego.

To obciążenie bardzo przyda mi się w warsztacie i uzupełni większy chiński „pożeracz” mocy. W kolejnym tekście zdam relację z jego budowy.

Źródła

5 komentarzy do “Mocy… ubywaj! Regulowane obciążenie by Dave Jones i inni”

  1. Dziękuję za ciekawy artykuł.
    Poszukuję regulowanego obciążenia do układu testera ogniw 18650.
    Czy w opisywanym układzie w obwodzie obciążenia występuje „kluczowanie prądu” ?
    Rozumiem że skoro mosfet się grzeje to pracuje w najgorszych dla siebie warunkach co jest wykorzystywane do „wytworzenia” na nim „regulowanej rezystancji”, która w połączeniu z rezystorem ceramicznym tworzy sumaryczne obciążenie.

    Zastanawia mnie czy prąd w obciążeniu jest stały.
    Jeżeli jest stały (nie szybkozmienny) to nie będzie problemu z pomiarem pojemności ogniwa.

    Do pomiarów prądu i napięcia wykorzystuję układ INA226

    1. Hej,
      znalazłem taki układ z AVT: AVT2376. Udało mi się go skleić i uruchomić – ale na razie nie jestem w stanie zmierzyć pojemności baterii (albo inaczej: pomiary nie są powtarzalne ani nie pasują mi do wyników uzyskanych przez miernik, który zbudowałem – ani metodę techniczną – zobacz: http://uczymy.edu.pl/wp/blog/2017/10/15/tester-rezystancji-wewnetrznej-ogniw-18650/). Jeżeli chcesz wyślę Ci PDF-em nieskończony tekst (odezwij się na fb).
      Pozdrawiam,
      Arek

    2. Już wszystko jasne 🙂 Zasada jest rzeczywiście bardzo prosta.
      Tranzystor (jego bramka) MOSFET jest sterowany z wyjścia wzmacniacza który pracuje w układzie komparatora.
      Wzmacniacz porównuje dwa napięcia na wejściu.
      Jedno napięcie pochodzi „z lewej strony” od dzielnika rezystancyjnego (lub poprzez PWM) a drugie jest pobierane z rezystora który jest w układzie obciążenia. Mając te dwa napięcia wzmacniacz/komparator steruje MOSFETem ( włącza i wyłącza) dążąc do tego aby napięcie na obciążeniu było takie samo jak na dzielniku rezystancyjnym.
      Dzięki takiej mamy możliwość sterowania obwodem obciążenia i utrzymywania na nim „stałego” ustalonego napięcia na obciążeniu co daje nam stały ustalony prąd.
      W moim przypadku przy badaniu ogniw 18650 będę celował w maksymalny prąd rozładowania 3A więc w zakresie panujących w cyklu napięć 4,25-> 3V zastosuję obciążenie 1om co w przypadku uszkodzenia i zwarcia mosfeta zabezpieczy mnie przed uszkodzeniem ogniwa. W najgorszym przypadku popłynie prąd ~3A.
      Gdybym zastosował rezystor 0,1R to przy zwarciu by było 30A i wolę nie testować co bo się wtedy stało.

Dodaj komentarz