- Wymagane materiały
- Schemat obwodu obciążenia elektronicznego Arduino DC
- Projekt PCB i plik Gerber
- Zamawianie PCB w AllPCB
- Kod Arduino do regulowanego obciążenia DC
- Testowanie naszego regulowanego obciążenia DC
Jeśli kiedykolwiek pracowałeś z bateriami, obwodami SMPS lub innymi obwodami zasilania, często zdarzało się, że musisz przetestować swoje źródło zasilania, ładując je, aby sprawdzić, jak działa w różnych warunkach obciążenia. Urządzenie, które jest powszechnie używane do przeprowadzania tego typu testów, nazywa się Stałoprądowym Obciążeniem DC, które pozwala nam regulować prąd wyjściowy źródła zasilania, a następnie utrzymuje go na stałym poziomie, aż do ponownej regulacji. W tym samouczku nauczymy się, jak zbudować własne regulowane obciążenie elektroniczne za pomocą Arduino, które może przyjmować maksymalne napięcie wejściowe 24 V i pobierać prąd do 5 A. W tym projekcie wykorzystaliśmy płytki PCB, które są produkowane przez AllPCB, profesjonalnego dostawcę usług w zakresie produkcji i montażu PCB z siedzibą w Chinach.
W naszym poprzednim samouczku dotyczącym źródła prądu sterowanego napięciem wyjaśniliśmy, jak używać wzmacniacza operacyjnego z tranzystorem MOSFET i korzystać z obwodu źródła prądu sterowanego napięciem. Ale w tym samouczku zastosujemy ten obwód i utworzymy cyfrowo sterowane źródło prądu. Oczywiście, cyfrowo sterowane źródło prądu wymaga obwodu cyfrowego i do tego celu służy Arduino NANO. Arduino NANO zapewni wymagane sterowanie obciążeniem DC.
Obwód składa się z trzech części. Pierwsza część to sekcja Arduino Nano, druga część to przetwornik cyfrowo-analogowy, a trzecia część to układ czysto analogowy, w którym zastosowano podwójny wzmacniacz operacyjny w jednej obudowie, który będzie sterował sekcją obciążenia. Ten projekt jest zainspirowany postem na Arduino, jednak obwód został zmieniony dla mniej złożonego z podstawowymi funkcjami, aby każdy mógł go zbudować.
Nasze obciążenie elektroniczne ma następujące sekcje wejściowe i wyjściowe.
- Dwa przełączniki wejściowe do zwiększania i zmniejszania obciążenia.
- Wyświetlacz LCD, który wyświetli ustawione obciążenie, rzeczywiste obciążenie i napięcie obciążenia.
- Maksymalny prąd obciążenia jest ograniczony do 5A.
- Maksymalne napięcie wejściowe dla obciążenia wynosi 24 V.
Wymagane materiały
Elementy wymagane do zbudowania obciążenia elektronicznego DC są wymienione poniżej.
- Arduino nano
- Wyświetlacz LCD 16x2 znaków
- Dwulufowe gniazdo
- Mosfet IRF540N
- Mcp4921
- Lm358
- Rezystor bocznikowy 5 W. 1 oma
- 1k
- 10k - 6szt
- Radiator
- .1uF 50v
- 2k - 2szt
Schemat obwodu obciążenia elektronicznego Arduino DC
Na poniższym schemacie wzmacniacz operacyjny ma dwie sekcje. Jeden służy do sterowania tranzystorem MOSFET, a drugi do wzmacniania wykrywanego prądu. Możesz również sprawdzić wideo na dole tej strony, które wyjaśnia pełną pracę obwodu. Pierwsza sekcja zawiera R12, R13 i MOSFET. R12 służy do zmniejszenia efektu obciążenia sekcji sprzężenia zwrotnego, a R13 jest używany jako rezystor bramki Mosfet.
Dodatkowe dwa rezystory R8 i R9 służą do wykrywania napięcia zasilania zasilacza, które będzie obciążane przez to atrapę obciążenia. Zgodnie z zasadą dzielnika napięcia te dwa rezystory obsługują maksymalnie 24 V. Więcej niż 24 V wytworzy napięcie, które nie będzie odpowiednie dla pinów Arduino. Dlatego uważaj, aby nie podłączać zasilania, które ma napięcie wyjściowe większe niż 24 V.
Rezystor R7 jest tutaj rzeczywistym rezystorem obciążenia. Jest to rezystor 5 W, 0,1 Ohm. Zgodnie z prawem mocy, będzie obsługiwał maksymalnie 7A (P = I 2 R), ale ze względów bezpieczeństwa rozsądniej jest ograniczyć prąd obciążenia do maksymalnie 5A. Dlatego obecnie maksymalne obciążenie 24 V, 5 A może być ustawione przez to obciążenie zastępcze.
Kolejna sekcja wzmacniacza jest skonfigurowana jako wzmacniacz wzmocnienia. Zapewni 6x wzmocnienie. Podczas przepływu prądu wystąpi spadek napięcia. Na przykład, gdy prąd o natężeniu 5 A przepływa przez rezystor, spadek napięcia na rezystorze bocznikowym 0,1 oma wyniesie 0,5 V (V = I x R) zgodnie z prawem omów. Wzmacniacz nieodwracający wzmocni go do x6, więc 3V będzie wyjściem z drugiej części wzmacniacza. Wyjście to zostanie wykryte przez analogowy pin wejściowy Arduino nano i zostanie obliczony prąd.
Pierwsza część wzmacniacza jest skonfigurowana jako obwód wtórnika napięciowego, który będzie sterował tranzystorem MOSFET zgodnie z napięciem wejściowym i uzyska pożądane napięcie sprzężenia zwrotnego z powodu prądu obciążenia przepływającego przez rezystor bocznikowy.
MCP4921 to konwerter cyfrowo-analogowy. DAC wykorzystuje protokół komunikacyjny SPI do pobierania danych cyfrowych z dowolnego mikrokontrolera i w zależności od tego zapewnia analogowe wyjście napięcia. To napięcie jest wejściem wzmacniacza operacyjnego. Wcześniej nauczyliśmy się również, jak używać tego DAC MCP4921 z PIC.
Z drugiej strony jest Arduino Nano, który dostarczy cyfrowe dane do DAC poprzez protokół SPI i kontroluje obciążenie, wyświetlając je również na wyświetlaczu 16x2. Wykorzystywane są dwie dodatkowe rzeczy, czyli przycisk zmniejszania i zwiększania. Zamiast podłączać go do pinu cyfrowego, podłącza się go do pinów analogowych. Dlatego można go zmienić na inny typ przełączników, np. Suwak lub enkoder analogowy. Ponadto modyfikując kod, można dostarczyć surowe dane analogowe do sterowania obciążeniem. Pozwala to również uniknąć problemu odbicia przełącznika.
Wreszcie, zwiększając obciążenie, Arduino nano dostarczy dane obciążenia do DAC w formacie cyfrowym, DAC dostarczy dane analogowe do wzmacniacza operacyjnego, a wzmacniacz operacyjny będzie sterował MOSFET zgodnie z napięciem wejściowym wzmacniacza operacyjnego. Wreszcie, w zależności od przepływu prądu obciążenia przez rezystor bocznikowy, pojawi się spadek napięcia, który będzie dalej wzmacniany przez drugi kanał LM358 i uzyskany przez Arduino nano. Zostanie to wyświetlone na wyświetlaczu postaci. To samo stanie się, gdy użytkownik naciśnie przycisk zmniejszania.
Projekt PCB i plik Gerber
Ponieważ ten obwód ma ścieżkę wysokoprądową, rozsądniejszym wyborem jest zastosowanie odpowiedniej taktyki projektowania PCB w celu usunięcia niepożądanych przypadków awarii. Dlatego płytka drukowana jest zaprojektowana dla tego obciążenia DC. Użyłem oprogramowania Eagle PCB Design do zaprojektowania mojej płytki PCB. Możesz wybrać dowolne oprogramowanie CAD PCB. Ostatecznie zaprojektowaną płytkę PCB w programie CAD pokazano na poniższym obrazku,
Jednym z ważnych czynników, na które należy zwrócić uwagę podczas projektowania tej płytki PCB, jest użycie grubej płaszczyzny zasilania dla prawidłowego przepływu prądu w całym obwodzie. Istnieje również szlifowane szwy VIAS (losowe przelotki w płaszczyźnie uziemienia), które służą do prawidłowego przepływu gruntu zarówno w warstwach do góry, jak i do dołu.
Możesz również pobrać plik Gerber tej płytki PCB z linku poniżej i użyć go do produkcji.
- Pobierz regulowany elektroniczny plik Gerber z obciążeniem DC
Zamawianie PCB w AllPCB
Gdy będziesz gotowy z plikiem Gerber, możesz go użyć do wyprodukowania PCB. Skoro już o tym mowa, przywołujemy sponsora tego artykułu ALLPCB, znanego z wysokiej jakości PCB i ultraszybkiej wysyłki. Oprócz produkcji PCB AllPCB zapewnia równieżMontaż PCB i pozyskiwanie komponentów.
Aby otrzymać od nich zamówienie na PCB, odwiedź allpcb.com i zarejestruj się. Następnie na stronie głównej wprowadź wymiary swojej płytki PCB i wymaganą ilość, jak pokazano poniżej. Następnie kliknij Cytuj teraz.
Teraz możesz zmienić inne parametry swojej płytki PCB, takie jak liczba warstw, kolor maski, grubość itp. Po prawej stronie możesz wybrać swój kraj i preferowaną opcję wysyłki. To pokaże Ci czas realizacji i całkowitą kwotę do zapłaty. Wybrałem DHL, a moja łączna kwota to 26 USD, ale jeśli jesteś pierwszym klientem, ceny spadną w kasie. Następnie kliknij Dodaj do koszyka, a następnie kliknij Sprawdź teraz.
Teraz możesz kliknąć „Prześlij plik Gerber”, klikając „Prześlij Gerber”, a następnie kliknij Kup.
Na następnej stronie możesz wpisać swój adres do wysyłki i sprawdzić ostateczną cenę, jaką musisz zapłacić za PCB. Następnie możesz przejrzeć swoje zamówienie, a następnie kliknąć przycisk Prześlij, aby dokonać płatności.
Po potwierdzeniu zamówienia możesz usiąść i skierować płytkę drukowaną do domu. Otrzymałem zamówienie po kilku dniach, a następnie opakowanie było schludne, jak pokazano poniżej.
Jakość PCB była jak zawsze dobra, co widać na zdjęciach poniżej. Górną i dolną stronę planszy pokazano poniżej.
Po otrzymaniu płyty możesz przystąpić do montażu wszystkich komponentów. Moja gotowa tablica wygląda mniej więcej tak, jak pokazano poniżej.
Następnie możesz przesłać kod i włączyć moduł, aby sprawdzić, jak działa. Pełny kod tego projektu znajduje się na dole tej strony. Wyjaśnienie kodu jest następujące.
Kod Arduino do regulowanego obciążenia DC
Kod jest dość prosty. Najpierw dołączyliśmy pliki nagłówkowe SPI i LCD, a także ustawiliśmy maksymalne napięcie logiczne, piny wyboru chipów itp.
#zawierać
Ta sekcja zawiera wymagane deklaracje liczb całkowitych i zmiennych związane z przepływem programu. Ustawiliśmy również skojarzone piny urządzeń peryferyjnych z Arduino Nano.
const int slaveSelectPin = 10; // Wybór chipa pin int number = 0; wzrost int = A2; // Zwiększ pin int zmniejsz = A3; // zmniejsz pin int current_sense = A0; // czujnik prądu pin int voltage_sense = A1; // pin wykrywania napięcia int state1 = 0; int state2 = 0; int Zestaw = 0; napięcie pływaka = 0; float load_current = 0,0; float load_voltage = 0,0; prąd pływakowy = 0,0; napięcie pływaka = 0,0; LiquidCrystal lcd (7, 6, 5, 4, 3, 2); // piny LCD
Służy do konfiguracji LCD i SPI. Tutaj również są ustawione kierunki pinów.
void setup () { pinMode (slaveSelectPin, OUTPUT); pinMode (wzrost, INPUT); pinMode (spadek, INPUT); pinMode (current_sense, INPUT); pinMode (Voltage_sense, INPUT); // zainicjuj SPI: SPI.begin (); // ustaw liczbę kolumn i wierszy na LCD: lcd.begin (16, 2); // Wydrukuj wiadomość na wyświetlaczu LCD. lcd.print ("Ładowanie cyfrowe"); lcd.setCursor (0, 1); lcd.print ("Circuit Digest"); opóźnienie (2000); }
Służy do konwersji wartości DAC.
void convert_DAC (unsigned int value) { / * Step Size = 2 ^ n, Zatem 12 bitów 2 ^ 12 = 4096 Dla odniesienia 5 V, krok będzie równy 5/4095 = 0,0012210012210012V lub 1mV (w przybliżeniu) * / unsigned int container; unsigned int MSB; unsigned int LSB; / * Krok: 1, zapisano 12-bitowe dane w kontenerze Załóżmy, że dane to 4095, binarnie 1111 1111 1111 * / container = wartość; / * Krok: 2 Tworzenie Dummy 8 bit. Tak więc, dzieląc 256, górne 4 bity są przechwytywane w LSB LSB = 0000 1111 * / LSB = pojemnik / 256; / * Krok: 3 Wysłanie konfiguracji z przebiciem 4-bitowych danych. LSB = 0011 0000 LUB 0000 1111. Wynik to 0011 1111 * / LSB = (0x30) - LSB; / * Krok: 4 Kontener nadal ma wartość 21-bitową. Wyodrębnianie dolnych 8 bitów. 1111 1111 AND 1111 1111 1111. Wynik to 1111 1111, czyli MSB * / MSB = 0xFF & kontener; / * Krok: 4 Wysłanie 16-bitowych danych poprzez podzielenie na dwa bajty. * / digitalWrite (slaveSelectPin, LOW); opóźnienie (100); SPI.transfer (LSB); SPI.transfer (MSB); opóźnienie (100); // weź pin SS wysoki, aby odznaczyć układ: digitalWrite (slaveSelectPin, HIGH); }
Ta sekcja jest używana do bieżących operacji związanych z czujnikami.
float read_current (void) { load_current = 0; for (int a = 0; a <średnia; a ++) { load_current = load_current + analogRead (current_sense); } load_current = load_current / Average; load_current = (load_current * MAX_VOLT) / 1024; load_current = (load_current / opamp_gain) / load_resistor; return load_current; }
Służy do odczytu napięcia obciążenia.
float read_voltage (void) { load_voltage = 0; for (int a = 0; a <średnia; a ++) { load_voltage = load_voltage + analogRead (voltage_sense); } load_voltage = load_voltage / Average; load_voltage = ((load_voltage * MAX_VOLT) /1024.0) * 6; powrót load_voltage; }
To jest rzeczywista pętla. Tutaj mierzone są kroki przełącznika, a dane są przesyłane do przetwornika cyfrowo-analogowego. Po przesłaniu danych mierzony jest rzeczywisty przepływ prądu i napięcie obciążenia. Obie wartości są również ostatecznie drukowane na wyświetlaczu LCD.
void loop () { state1 = analogRead (wzrost); if (stan1> 500) { opóźnienie (50); state1 = analogRead (wzrost); if (state1> 500) { volt = volt + 0,02; } } state2 = analogRead (zmniejsz); if (stan2> 500) { opóźnienie (50); state2 = analogRead (zmniejsz); if (state2> 500) { if (volt == 0) { volt = 0; } else { volt = volt-0,02; } } } liczba = wolt / 0,0012210012210012; convert_DAC (liczba); napięcie = read_voltage (); current = read_current (); lcd.setCursor (0, 0); lcd.print ("Ustaw wartość"); lcd.print ("="); Zestaw = (wolt / 2) * 10000; lcd.print (zestaw); lcd.print ("mA"); lcd.setCursor (0, 1); lcd.print ("I"); lcd.print ("="); lcd.print (bieżący); lcd.print ("A"); lcd.print ("V"); lcd.print ("="); lcd.print (napięcie); lcd.print ("V"); // lcd.print (load_voltage); //lcd.print("mA "); // opóźnienie (1000); //lcd.clear (); }
Testowanie naszego regulowanego obciążenia DC
Obwód obciążenia cyfrowego jest lutowany i zasilany za pomocą źródła zasilania 12V. Użyłem mojej baterii litowej 7,4 V po stronie źródła zasilania i podłączyłem miernik cęgowy, aby sprawdzić, jak działa. Jak widać, gdy ustawiony prąd wynosi 300 mA, obwód pobiera 300 mA z akumulatora, co również jest mierzone miernikiem cęgowym jako 310 mA.
Pełne działanie obwodu można znaleźć na wideo, do którego link znajduje się poniżej. Mam nadzieję, że zrozumiałeś projekt i podobało Ci się stworzenie czegoś pożytecznego. Jeśli masz jakieś pytania, zostaw je w sekcji komentarzy lub skorzystaj z forów.