
NA WSTĘPIE
Wiem, wiem, ktoś zaraz powie, że układów aktywnego obciążenia nie sposób zliczyć i kolejny taki projekt przyczynia się do klęski urodzaju…

Mimo wszystko chciałbym przedstawić projekt aktywnego obciążenia. Aktywne obciążenie samo w sobie nie jest czymś szczególnym, ale obudowane w odpowiedni układ elektroniczny, nabiera niebanalnego formatu. Tutaj akurat rozszerzenie podstawy stanowi mikrokontroler wykorzystany do pomiarów prądu, napięcia i mocy, oraz badania pojemności dowolnych akumulatorów od 100mAh do 99Ah z funkcją automatycznego odcięcia obciążenia od źródła po osiągnięciu nastawionego napięcia rozładowania. Dodatkowym zajęciem mikrokontrolera jest sterowanie obrotami wentylatora w zależności od temperatury radiatora.
Ostatnio edytowany: 04-04-2019.
Ostatnio edytowany: 13-11-2021. ("Mała" Errata, poniżej)
OGÓŁY

Działanie podstawowego układu aktywnego obciążenia jest dosyć proste i niemal jednakowe we wszystkich tego rodzaju układach. Tranzystor mocy T3 włączony jest w szeregu ze źródłowym (lub emiterowym) rezystorem pomiarowym mocy RA+RB do źródła prądu (np. zasilacz, akumulator). Tranzystor sterowany jest sygnałem błędu, wytwarzanym we wzmacniaczu pomiarowym U2B na podstawie sygnału (napięcia) pobieranego z rezystora pomiarowego, oraz sygnału (napięcia) zadawanego z potencjometru regulacyjnego P1+P2. Różnica tych sygnałów (napięć) powoduje takie otwarcie (lub przymknięcie) tranzystora przez wzmacniacz pomiarowy, aby je wyrównać. Wpływa to oczywiście na wielkość prądu przepływającego przez tranzystor a tym samym prądu pobieranego z badanego źródła. Na rezystorze pomiarowym odkłada się napięcie proporcjonalne do przepływającego przezeń prądu zgodnie z prawem Ohma.
Oczywiście ten układ podstawowy doczekał się w różnych układach wielu modyfikacji, np. więcej niż jednego tranzystora mocy, dodatkowych tranzystorów sterujących, tranzystora MOSFET zamiast bipolarnego, wymyślnych wersji wzmacniaczy operacyjnych, itp..
W moim projekcie zastosowałem najprostszy wariant z jednym tranzystorem polowym, nie tanim ale o dużych możliwościach w charakterystyce SOA (w trybie DC), a mianowicie typ STW20NB50 w obudowie TO-247 (posiadałem go w swoich zasobach z rozbiórek). Tranzystor sterowany jest bezpośrednio przez popularny podwójny wzmacniacz operacyjny LM358, zasilany pojedynczym napięciem 9V. Napięcie pomiarowe z rezystora mocy (dwa równoległe rezystory 0R1 5W) doprowadzone jest przez prosty filtr RC (R9, C10) do wejścia odwracającego pierwszego wzmacniacza (U2B), oraz do wejścia nieodwracającego drugiego wzmacniacza (U2A), celem wzmocnienia napięcia przed podaniem do mikrokontrolera – pomiar prądu. Do wejścia nieodwracającego pierwszego wzmacniacza podawane jest również napięcie z dwóch szeregowo połączonych potencjometrów regulacyjnych (P1+P2), tworzących układ zgrubnej i dokładnej regulacji pobieranego przez obciążenie prądu. W pierwszym wzmacniaczu wypracowuje się sygnał błędu sterujący tranzystorem mocy. Tranzystor pracuje liniowo, nietypowo jak na MOSFET’a, ale najzupełniej normalnie.
Uwaga! Niniejszy układ aktywnego obciążenia nie jest w 100% „idiotoodporny” i może nie przeżyć odwrotnego podłączenia badanego źródła prądu!
Po zastanowieniu i dodatkowym zwróceniu mi na to uwagi przez Kolegów, dodałem do układu proste zabezpieczenie wejścia za pomocą szeregowego bezpiecznika 10A (F1) oraz równoległej, wstecznie podłączonej szybkiej diodzie (D5), która ma za zadanie przepuścić przez bezpiecznik prąd zwarciowy w przypadku odwrotnego podłączenia źródła prądu. Ale niestety nie zawsze zda to egzamin. Nie każde źródło będzie w stanie przepuścić przez tą diodę prąd zwarciowy na poziomie ponad 10A, tak, żeby upalić bezpiecznik. W takim przypadku prąd zwarcia (do 10A) będzie ciągle płynął. Ponieważ napięcie przewodzenia diody wewnątrz tranzystora MOSFET (typ w/g schematu, do 1,6V) jest większe od napięcia przewodzenia diody zewnętrznej (~0,6V), to tranzystor może to jednak przeżyć, bo cały (większość) prąd „pójdzie” przez diodę zewnętrzną. Wybrałem szybką diodę 20-to amperową w obudowie TO-220, która powinna przeżyć taki wypadek przy pracy, ale nic nie stoi na przeszkodzie, aby zastosować dowolną inną diodę.
Inną kwestią jest, jak to przeżyje sam mikrokontroler, kiedy dostanie napięcie ujemne względem masy…
Zamieszczam nowy schemat z dodanym zabezpieczeniem, niestety bez nowego rysunku płytki PCB, ale opisane zabezpieczenie można dołączyć „na pająka” między gniazdami wejściowymi a płytką.
SZCZEGÓŁY
Projekt aktywnego obciążenia powstał w oparciu o mikrokontroler ATtiny26. Wiem, że to przeżytek, ale użyłem go kiedy jeszcze robiłem pierwszy prototyp ładnych kilka lat temu, i tak już zostało. Taktowany jest wewnętrznym oscylatorem o częstotliwości 8MHz, który przy kilku pierwszych uruchomieniach jest kalibrowany „ręcznie” metodą prób i błędów poprzez zmianę parametru wpisywanego do rejestru OSCCAL oscylatora na początku programu. Opiszę tą procedurę nieco później, po opisie trybu pomiaru pojemności akumulatorów. Wprawdzie jest w układzie funkcja pomiaru pojemności akumulatorów, polegająca na zliczaniu odbieranego ładunku w funkcji czasu, ale stabilizowanie czasu za pomocą kwarcu uważam za zbędne ponieważ nie jest to sprzęt laboratoryjny, a niewielkie odchyłki zliczanego czasu (po kalibracji oscylatora) niewiele wpływają na wynik pomiaru Ah. Poza tym opcja pomiaru Ah doszła po długim czasie używania układu tylko jako aktywnego obciążenia, gdzie dokładność oscylatora w ogóle nie miała znaczenia. Jeśli komuś będzie zależało na stabilizacji zegara kwarcem – nie widzę przeciwwskazań, byle miał wolne nóżki XTAL do dyspozycji (ja nie miałem).
Program powstał całkowicie w asemblerze i zajmuje po brzegi dostępną pamięć procesora czyli pełne 2kB. Musiałem bardzo optymalizować, skracać i usuwać zbędny kod, zwłaszcza z moich uniwersalnych dołączanych bibliotek, żeby zmieścić obsługę wyświetlacza LCD, układu 1-Wire, programowego USART’u, pomiaru przez ADC napięcia i prądu, wyliczenia mocy i pojemności, i kilka innych wewnętrznych funkcji. Być może udało by się bardziej odchudzić program bardziej wyrafinowaną optymalizacją, ale na razie nie jest to potrzebne, no chyba że potrzebowałbym dołożyć jeszcze jakiś wodotrysk...

Przetwornik ADC otrzymuje zasilanie poprzez dławik (L1) i blokowane kondensatorem (C6) na końcówce AVCC, a jako źródło napięcia odniesienia wykorzystuje wewnętrzne napięcie 2,56V. Pomiary uruchamiane są cyklicznie co 200ms, w takt głównej pętli programu.
Pomiary.
Aby móc wyświetlać prąd i napięcie z dokładnością do 0,01 (co nie znaczy, że z taką dokładnością dokonywane są pomiary – nie za pomocą prostego wbudowanego napięcia odniesienia) , dokładność przetwarzania ADC została programowo podniesiona z 10 do 12 bitów. Bez tego zabiegu dokładność wskazań napięcia przy założonym zakresie 30V wynosiła 30V/1023(ADC) = ~0,03V, co mnie nie zadowalało. Dzięki oversamplingowi do 12 bit dokładność wskazań napięcia wyniosła 30V/4095(ADC) < 0,01V. Dla prądu o założonym zakresie 10A oversampling był w zasadzie zbędny, bo 10A/1023(ADC) = ~0,01A, co jest wystarczające, ale skorzystałem już z tych samych procedur przetwarzania co dla napięcia, a co. Przy każdym pomiarze wykonywane jest wiele „szybkich” odczytów z ADC z których wyciągana jest średnia, która następnie ląduje w „wolnym” buforze kołowym zapełnianym cyklicznie co pomiar. Średnia z tego bufora jest dopiero brana do dalszych właściwych obliczeń prądu lub napięcia. Dzięki temu odczyty są całkiem stabilne, bez „myszkowania”, ale wystarczająco szybko reagujące na zmiany mierzonych wielkości.
Temperatura radiatora mierzona jest układem Dallasa (U3) na szynie 1-wire (może to być 18B20 lub 18S20 - program rozpoznaje układ i się dostosowuje), z dokładnością do pełnych stopni, i na tej podstawie określane jest jak szybko kręcić wentylatorem radiatora – im goręcej, tym szybciej, rzecz jasna. Przy włączaniu zasilania wentylator otrzymuje duże obroty żeby się rozruszać a po chwili minimalne obroty, poniżej których już nie schodzi.
Pomiar pojemności akumulatorów polega w głównej mierze na sumowaniu odczytów prądu w ustalonych odstępach czasu (tutaj 1s) a następnie scałkowaniu tej sumy dla przedziałów określonego czasu (tutaj 1h = 3600s). Dla przykładu niech to będzie pomiar prądu 1A; jeśli będziemy go sumować w ciągu godziny co sekundę, to otrzymamy sumę odczytów = 1A * 3600s = 3600As; jeśli podzielimy to przez stały okres całkowania 3600s (1h), to otrzymamy 3600As/3600s = 1A „na godzinę”, czyli 1A pobrany w 1 godzinę, czyli 1Ah. Ale sprawdźmy, jeśli będzie prąd = 4A przez 10 godzin, to co wyjdzie? 4A * 36000s = 144000As -> 144000/3600 = 40Ah. Czyli wszystko się zgadza. A dla 0,5A przez 30min.? Policzmy, 0,5A * 1800s = 900As -> 900 / 3600 = 0,25Ah. Znowu się zgadza. Do sumowania odczytów prądu zastosowałem zmienną 4 bajtową, w której można zmieścić 291 godzin co sekundowych pomiarów w rozdzielczości 12bit – sumowane są surowe pomiary, bez przeliczania na wartości liczbowe prądu, dzięki czemu nie są sumowane błędy ew. zaokrągleń.
Rzecz jasna obliczenia wszystkich mierzonych parametrów są dokonywane na liczbach rzeczywistych ze stałą liczbą 2-ch miejsc po przecinku, traktowanych w obliczeniach jak liczby całkowite. Wyniki również otrzymujemy z dokładnością do dwóch miejsc po przecinku.
Aby zmierzyć pojemność aku. należy go podłączyć do obciążenia przy skręconych na minimum potencjometrach zgrubnym i dokładnym (wyłączenie obciążenia) oraz na maksimum potencjometrze regulacji napięcia odcięcia (P3). Wyświetlacz powinien pokazać napięcie na aku, np. 13,25V oraz brak prądu obciążenia. Jednostka napięcia powinna być zapisana jako „V” (wielką literą), jeżeli jest to małe „v”, to należy krótko nacisnąć przycisk załączenia funkcji odcięcia obciążenia aby wrócić do wielkiego „V”. Teraz regulujemy potencjometrem napięcie odcięcia, np. dla aku kwasowego 12V będzie to napięcie pełnego rozładowania 10,20V (1,7V/ogniwo, różne źródła mogą podawać nieco inne wielkości, zwłaszcza zależy od wykonania aku i jego producenta). Naciskamy dłużej (ponad 3 sek.) przycisk funkcji odcięcia obciążenia (S1), aż literka „V” zmieni się na małe „v”, dzięki czemu nastawiona wartość napięcia zostaje zapamiętana, a funkcja odcięcia załączona. Może się przy tym uaktywnić odcięcie i włączy się alarm (bipek), ponieważ układ odczytuje obniżone napięcie – nie należy się tym przejmować, tylko przekręcić potencjometr napięcia odcięcia z powrotem na maksimum i tak już zostawić – funkcja odcięcia obciążenia przejdzie z powrotem do czuwania. Raz nastawiona wartość napięcia odcięcia będzie zachowana dla kolejnych pomiarów aku podobnego typu, dopóki nie zechcemy mierzyć aku o innym napięciu. Przy kolejnym pomiarze podobnego aku wystarczy po prostu krótkim naciśnięciem przycisku załączyć/wyłączyć funkcję odcięcia obciążenia, bez kręcenia potencjometrem P3.
Teraz wystarczy nastawić żądany prąd obciążenia, najlepiej tzw. 20-godzinny (typowo wg zaleceń dla aku kwasowych), np. 2,2A dla aku 44Ah, i poczekać cierpliwie na sygnał zakończenia pomiaru – bipanie. W zależności od kondycji aku może to potrwać mniej niż lub co najmniej 20h. Dzięki funkcji odcięcia obciążenia nie musimy martwić się o przegapienie momentu pełnego rozładowania i zniszczenie aku – obciążenie wyłączy się samoczynnie. Oczywiście tuż po rozładowaniu należy taki aku natychmiast podłączyć do ponownego naładowania, najlepiej w trybie 10-godzinnym. Na wyświetlaczu możemy odczytać wartość Ah oraz czas pomiaru jaki upłynął.
Uwaga! Pomiar (zliczanie) pojemności uaktywnia się samoczynnie po wykryciu prądu co najmniej 50mA oraz zatrzymuje się poniżej tej wartości, bez jakichkolwiek czynności z naciskaniem przycisku i regulacją napięcia odcięcia, opisanych powyżej - służą one jedynie do załączenia trybu pilnowania napięcia i odłączenia obciążenia. Oznacza to, że pojemność będzie liczona również wtedy, jeśli zamiast aku będzie podłączony jakiś zasilacz; taki efekt uboczny, ale da się przeżyć...

Reszta.
Na jednym z wyjść procesora występuje w cyklu 1-sekundowym transmisja z programowego USART’u z prędkością 9600 8N1, w której zawarta jest informacja identyczna z pokazywaną na wyświetlaczu w postaci kodów ASCII. Można transmisję skierować np. do komputera poprzez dowolną przejściówkę RS232-TTL/USB i odczytywać informacje bezpośrednio w dowolnym terminalu, po wskazaniu odpowiedniego portu COM przejściówki. W transmitowanych danych występują kody ASCII sterujące terminalem, a mianowicie kody CR+LF na końcach linii oraz kod CLRSCR do czyszczenia ekranu na początku każdej transmisji, dzięki czemu dane wyświetlane są w oknie terminala w stałym miejscu (brak przewijania okna w miarę odbierania danych).
Aby zarówno programowy USART, jak i zliczanie pojemności akumulatorów w funkcji czasu działały prawidłowo, należy przy pierwszym uruchomieniu układu dokonać starannej kalibracji wewnętrznego oscylatora RC, wpisując odpowiednio dobraną wartość do rejestru OSCCAL, poprzez stałą zadeklarowaną w programie jako CALVAL. Kalibracja polega na kilkukrotnych operacjach poprawiania wartości tej stałej, kompilowania kodu i programowania, dopóki nie osiągnie się dokładności lepszej niż +/- 1 sek. na minutę. Aby wspomóc się przy tej operacji, można wykorzystać sygnał z brzęczyka, który uruchamia się w trybie pomiaru pojemności akumulatorów, kiedy wykryte zostaje napięcie odcięcia – należy bez podłączonego żadnego źródła napięcia na wejściu, załączyć tryb kontroli napięcia, tak, aby uruchomić blokadę obciążenia – załączy się brzęczyk z 1-sekundowym okresem. Wystarczy ze stoperem w ręku zliczyć 60 piknięć i sprawdzić, czy zajęło to jedną minutę +/- <1 sek.. Jeżeli na stoperze upłynęło więcej niż 60 sek., np. 73 (13 sek. różnicy), to znaczy, że oscylator pracuje za wolno i należy wartość CALVAL zwiększyć, aby go przyspieszyć – na początku krok zmian może być =16, a kolejne kroki każdy o połowę mniejsze, aż osiągniemy żądaną dokładność czasu. Analogicznie, jeżeli 60 piknięć zajęło mniej niż 60 sek., to trzeba zegar spowolnić zmniejszając stopniowo wartość CALVAL. Typowa wartość OSCCAL (CALVAL) dla 8MHz, według datasheet’a, to ok. 160 (0xA0), i na tej wartości można bazować zaczynając kalibrację.
Całą procedurę kalibracji można znacznie uprościć, jeżeli dysponuje się programatorem, który umożliwia odczytanie bajtów kalibracji umieszczonych w bajtach sygnatury mikrokontrolera Tiny26. Są tam bajty kalibracji dla zegarów 1, 2, 4 i 8MHz. Dla tego ostatniego należy programatorem odczytać starszy bajt spod adresu 0x0003 – jest to fabrycznie zapisany bajt kalibracji dla rejestru OSCCAL, który niestety nie jest automatycznie przepisywany przy włączaniu zasilania (automat działa tylko dla zegara 1MHz). Następnie zapisujemy ten bajt w programie jako wartość stałej CALVAL i sprawdzamy, czy jest zachowana dokładność czasu metodą „na brzęczyka”, jak opisałem powyżej, ale stosując minimalny krok zmian = 1.
(nieaktualne - program już jest) Jestem w trakcie przygotowywania specjalnego programu, dzięki któremu będzie można na komputerze łatwo podglądać pomiary w wygodnej postaci liczbowej, oraz zbierania danych do pliku wraz z rysowaniem wykresów czasowych. Jak czas mi pozwoli, to powinienem się niedługo z tym programem uporać – wyświetla już dane na sześciu „wirtualnych” wyświetlaczach (w jednym oknie programu), zostało mi tylko dopracować zbieranie danych i rysowanie wykresów. Udostępnię go jak tylko będzie gotowy.
Mikrokontroler steruje bezpośrednio alfanumerycznym wyświetlaczem LCD 2x16 znaków, w trybie 4-bitowym. Na wyświetlaczu pokazywane jest 6 parametrów, w górnej linii: napięcie, prąd, temperatura radiatora; w dolnej linii: moc, pojemność, czas pomiaru. Z racji na ograniczone miejsce musiałem dolną linię nieco skompresować, tak, że między mocą, pojemnością i czasem nie ma odstępów, ale nie stwarza to problemu z czytelnością, jeśli się wie co tam ma być (a my już wiemy

W układzie występuje kilka potencjometrów. Montażowe służą do korekcji pomiarów napięcia i prądu oraz kontrastu wyświetlacza, a osiowe do nastawiania poziomu prądu obciążenia (zgrubny i dokładny), oraz do nastawy napięcia odcięcia przy pomiarach Ah.
Zasilanie pochodzi od transformatora sieciowego o mocy < 3W i napięciu wtórnym 12V. Transformator pierwotnie nie znalazł się na żadnej płytce drukowanej, ponieważ wykorzystałem taki z uszami do montażu luzem w obudowie, a mostek z elektrolitem umieściłem na jego wyprowadzeniach „na pająka”. Jednak ostatnio płytki nieco przeprojektowałem i trafo oraz mostek znajdują się na płytce z procesorem. Standartowy stabilizator scalony w wersji SMD dostarcza napięcie 5V do zasilania całego układu, natomiast stabilizator 9V w obudowie TO-92 dla wzmacniacza operacyjnego byłem zmuszony dolutować na pająka od strony ścieżek, ponieważ o nim zapomniałem rysując płytkę 8-(. Napięcia są blokowane kilkoma kondensatorami elektrolitycznymi oraz ceramicznymi.
Budowa.
Układ elektroniczny został podzielony na dwie płytki drukowane: płytkę procesora z układami współpracującymi, oraz płytkę wykonawczą obciążenia z tranzystorem i rezystorami mocy. Zaprojektowane są tak, że można je podzielić na dwie, lub zostawić jako jedną większą płytkę. W przypadku rozdzielenia, płytki łączy się za pomocą krótkich odcinków przewodów, najlepiej linek, i umieszcza w posiadanej obudowie tak aby znajdowały się złączami możliwie blisko siebie (jak najkrótsze przewody łączące). Tranzystor mocy przymocowany jest do odpowiednio dużego radiatora z wentylatorem. Jeżeli radiator będzie oddzielony od metalowej obudowy, lub obudowa od masy, to można nie stosować podkładki izolacyjnej pod tranzystor, w przeciwnym wypadku jest ona niezbędna, ponieważ radiator jest na potencjale dodatnim badanego źródła (względem masy układu). Radiator można, a nawet należy przymocować do płytki z tranzystorem, żeby ten nie stracił swoich odnóży od ew. przeciążeń mechanicznych. W wersji prezentowanej układu płytki pozostały nierozdzielone i występują jako jedna; wykonałem ją metodą „żelazkową”, wraz dodatkową górną warstwą opisową. Płytka spoczywa na dnie obudowy na czterech plastykowych, gwintowanych tulejkach dystansowych, z radiatorem skierowanym w stronę wentylatora, który został odwrócony i wdmuchuje powietrze z zewnątrz na radiator. Dzięki temu jest on chłodzony skuteczniej niż gdyby wentylator wyciągał ciepłe powietrze z okolic radiatora. (tak też działa chłodzenie procesorów w komputerach)
Całość układu została zamknięta w typowej metalowej obudowie od zasilacza komputerowego. Na jednej ze ścianek został zamocowany panel frontowy z wyciętym otworem dla wyświetlacza. Oprócz wyświetlacza znalazły się tu również gniazda bananowe do podpinania badanego źródła oraz potencjometry regulacji. Dzięki temu, że jest to obudowa po zasilaczu z kompa, mam w niej już gniazdko na dopinany kabel zasilający.
W trakcie pierwszych dni pracy pierwszego układu prototypowego (dawno, dawno temu, za górami…

W najnowszej wersji układu zamiast bezpośredniego połączenia między rezystorem pomiarowym a wejściem (wejściami) wzmacniacza operacyjnego, pojawił się filtr RC, dzięki któremu kondensator blokujący między drenem i źródłem okazał się zbędny. Filtr ten bardzo skutecznie wyeliminował samowzbudzenie układu regulacji. Jedynym minusem może być znikome i powolne pływanie prądu obciążenia o +/- 0,01A. Ale za to można używać obciążenia z wysokimi prądami bez obawy o przester i zniszczenie z powodu wzbudzenia układu. Kondensator C10 tego filtru najlepiej dobrać doświadczalnie, spomiędzy wartości 4n7 do 47n, tak, aby wyeliminować wzbudzanie się, a jednocześnie nie wprowadzać zbyt długiego czasu reakcji układu regulacji, który może objawiać się powolnym pływaniem prądu obciążenia o wartości tym większe im większa jest pojemność C10.
Edycja: 13-11-2021:
"MAŁA" ERRATA!
Dzięki niektórym Kolegom, postanowiłem dopisać małą "wkładkę" w poprawką i wyjaśnieniem...
Uwaga będzie pomocna szczególne ewentualnym użytkownikom budującym niniejszy układ i mającym kłopoty z uruchomieniem.
Tworząc prototyp rysowałem płytkę drukowaną do schematu w nieco innym wydaniu niż wersja finalna pokazana w tym poście.
M.in. na płytce PCB nie ma miejsca na stabilizator 9V (78L09), istniejący na schemacie.
To oznacza, że na płytce wzmacniacz otrzymuje poprzez rezystor zasilane 5V, które jest nieco za niskie do w pełni poprawnej pracy wzmacniacza i tranzystora MOSFET. Ponieważ nie rysowałem nowej płytki pod nowy (bieżący) schemat (lenistwo 8-P), a później w ogóle o tym zapomniałem, to należy wprowadzić małą modyfikację na płytce PCB samemu. Można to spokojnie zrobić już po wytrawieniu płytki, przy montażu elementów.
Modyfikacja polega na pominięciu rezystora zaznaczonego na załączonym zdjęciu na żółto (47R według opisu płytki, na schemacie go nie ma), oraz dolutowaniu stabilizatorka 9V "na pająka" do określonych punktów na płytce, zgodnie z oznaczeniem na zdjęciu. Stabilizatorek w obudowie TO-92 jest na tyle mały, że można go spokojnie zmieścić na spodzie płytki od strony ścieżek.

Jeszcze na co chciałbym zwrócić uwagę, to to, że niektórzy (większość?) mogą mieć kłopot z poprawną kalibracją wewnętrznego zegara procesorka według mojej instrukcji, jeżeli dysponują tylko programatorem szeregowym z ISP (np STK500).
Z racji tego, że wszystkie końcówki procesorka, włącznie z RESET-em, są wykorzystane, to nie ma możliwości jego szeregowego programowania niskonapięciowego! Po pierwszym zaprogramowaniu fusów (o których wcześniej też zapomniałem napisać..., ale zaraz to uzupełnię) zgodnie z wymaganiami, kolejne programowania będą niemożliwe (wyłączenie funkcji pinu RESET).
Pozostaje tylko programowanie równoległe w programatorze "stacjonarnym" z wykorzystaniem wysokiego napięcia programowania.
Co do fusów, to uzupełniam tą informację. Fusebity w ATtiny26 powinny być wypalone tak:
FUSE HIGH BYTE = 0xE9
BIT7=1
BIT6=1
BIT5=1
RSTDISBL=0 --> wyłączamy funkcję pinu Reset,
SPIEN=1 --> wyłączamy programowanie przez spi (i tak nie da się wykorzystać),
EESAVE=0 --> włączamy ochronę pamięci eeprom przy kasowaniu/programowaniu,
BODLEVEL=0 --> ustawiamy poziom napięcia dla funkcji BOD = 4V,
BODEN=1 --> wyłączamy funkcję BOD (albo włączamy, jeśli chcemy

FUSE LOW BYTE = 0xE4
PLLCK=1 --> wyłączamy opcję PLL zegara,
CKOPT=1 --> wyłączamy opcję zbędną dla zegara wewnętrznego,
SUT1=1 --
SUT0=0 --> wybieramy najdłuższy czas StartUp = 65ms,
CKSEL3=0 --
CKSEL2=1 ---
CKSEL1=0 ----
CKSEL0=0 ----> wybieramy źródło zegara na wewnętrzny oscylator RC na częstotliwośi 8MHz.
Jeszcze mogę dorzucić najnowszą wersję softu (1.7) do procka, w której doszły małe kosmetyczne poprawki:
1- miganie dwukropkiem podczas odliczania czasu przy pomiarze Ah,
2- miganie jednostką "V" po obniżeniu mierzonego napięcia poniżej progu rozładowania aku (oprócz bipania),
3- odłączanie obciążenia po przekroczeniu temperatury radiatora 60°C i ponowne załączenie po ostudzeniu do 40°C, jednocześnie miganie w tym czasie na zmianę jednoską "°C" i wykrzyknikiem,
4- liczenie Ah już od poboru prądu 30mA (wcześniej 50mA),
5- przyspieszenie zliczania Ah do 5x/sek (wcześniej 1x/sek)).
6- być może coś jeszcze, nie pamiętam... 8-D
Procek był zapisany po korek, ale ściskając co nieco w kodzie, udało się powyższe rzeczy zaimplementować. Teraz jest naprawdę zapisany po korek!

Jeżeli ktoś zuważy babola w działaniu nowego softu, to proszę o informację (na tą chwilę, od dwóch m-cy sam niczego złego nie uświadczyłem)
To by było na tyle w tej erracie.
Jakby coś, ktoś, gdzieś jeszcze dojrzał, to niech da znać...
P.S.
Przymierzam się do upgrade'u projektu na układ Mega328 (lub inny Mega), graficzny LCD, zapis na kartę SD i regulację softem za pomocą enkodera z przyciskiem... Tylko ten bak czasu...
Koniec edycji.
13-11-2021
PROGRAM DO AKWIZYCJI DANYCH
Jest już gotowy (tak myślę) prosty program do wizualizacji pomiarów na ekranie komputera. Można w nim oglądać na żywo i w większym formacie te same odczyty, które widnieją na wyświetlaczu, ale przede wszystkim przeglądać zbierane pomiary w postaci wykresów 5-ciu mierzonych wartości. Dane można przeglądać również w postaci tabelarycznej. Dane zbierane są i zapisywane do plików, które można w dowolnym momencie w przyszłości odczytać, aby ponownie obejrzeć wykresy. Można również eksportować dane do pliku tekstowego z danymi oddzielonymi tabulacją, tak, żeby dało się je wczytać np. do MS Excel’a i tam dalej obrabiać. W programie jest kilka podstawowych ustawień, wpływających na rysowanie wykresów oraz ustawienia wyzwalania zbierania danych, które pomagają nieco zautomatyzować rozpoczęcie i zakończenie akwizycji. Poza tym jest prosty terminal, na którym można podejrzeć transmisję „na żywo”.
Oczywiście aby połączenie programu ze sprzętem doszło do skutku, należy wybrać nr portu COM, który jest przypisany do używanego przez nas konwertera USB<->COM (reszty ustawień transmisji portu COM nie trzeba zmieniać, bo są ustawione domyślnie wg wymagań aktywnego obciążenia, ale dla zasady ustawienia te są udostępnione w programie).
Program działa na pewno pod Win 10 x64 oraz XPekiem i prawdopodobnie będzie też działał też pod 7-ką.
Krótki opis działania programu
Podstawowym trybem akwizycji jest uruchamianie i zatrzymywanie jej ręcznie na żądanie. Aby uruchomić, należy na zakładce „Wykresy” nacisnąć pierwszy od góry przycisk „Uruchom zapis” (dwa następne są nieaktywne). Informacja nad wykresami (obok zakładek) zmieni się z „Zapis: zatrzymany” na „Zapis: uruchomiony”, a dwa przyciski do pauzowania i zatrzymywania akwizycji aktywują się. Akwizycja będzie trwała do momentu aż ją sami zatrzymamy, lub do wystąpienia sygnału zakończenia rozładowania, o ile będzie zaznaczona opcja „Sygnał końca rozładowania wyłącza zapis” na zakładce ustawień. Każde uruchomienie zapisu danych tworzy nowy plik z nazwą generowaną na podstawie tytułu sesji z zakładki „Dane” oraz bieżącej daty i czasu, we wskazanym przez nas katalogu na zakładce ustawień. Akwizycję można chwilowo wstrzymać (spauzować), aby potem ją ponownie uruchomić i kontynuować bez tworzenia nowego pliku. W zależności od wybranej opcji na zakładce ustawień, po uruchomieniu akwizycji (np. po całkowitym zatrzymaniu wcześniejszej akwizycji) dane można również zbierać do pliku z poprzedniej sesji, bez tworzenia nowego pliku.
Rozpoczęcie akwizycji danych może też rozpocząć się samoczynnie po wystąpieniu wybranego stanu w odbieranych danych, według jednej z pozostałych opcji „Wyzwalanie zapisu danych” na zakładce „Ustawienia”. Mimo wszystko aby móc włączyć automatyczną akwizycję, należy nacisnąć przycisk „Uruchom zapis”, dzięki czemu program wejdzie dopiero w tryb automatyczny. Informacja zmieni się z „Zapis: zatrzymany” na „Zapis: oczekuje”, a program będzie oczekiwał z rozpoczęciem akwizycji na wystąpienie wybranego stanu. Po wykryciu sygnału wyzwalającego akwizycja rozpocznie się, a informacja zmieni się na „Zapis: uruchomiony”. Poza tym, obowiązuje to samo co przy opisie trybu ręcznego.
Tytuł sesji najlepiej jest wpisać przed rozpoczęciem akwizycji, aby program wygenerował odpowiednią nazwę pliku z danymi. Aby wpisać tytuł sesji, należy go kliknąć 2x, co uruchomi edycję, a na zakończenie nacisnąć <enter> lub kliknąć na pasku obok pola edycyjnego. Po ewentualnym wczytaniu archiwalnej sesji z pliku, tytuł sesji wczyta się na podstawie zawartości pliku danych nie ignorując nazwę pliku (która może być zmieniona).
Wykresy (fragment widoczny w oknie) można zapisywać do plików graficznych w formacie .jpg lub .bmp, natomiast tabelkę z zakładki „Dane” można eksportować do pliku tekstowego z danymi rozdzielonymi tabulacją.
Zdaję sobie sprawę, że program ma pewnie kilka niedociągnięć i innych potknięć, ale ostatnio nie miałem czasu na dogłębne sprawdzenie wszystkiego, dla tego, jeżeli coś niedziałającego lub niepokojącego szanowni koledzy zauważą, to proszę o wytknięcie tego, i w miarę rzeczowe opisanie w jakich warunkach to coś wystąpiło. Z góry dzięki.
Jako, że trzymanie włączonego komputera (laptopa) przez dłuższy czas z podpiętym aktywnym obciążeniem np. w celu zbierania danych w trakcie rozładowania akumulatorów, nie jest zbyt ekonomiczne (np. 20 godzin), to w przyszłości planuję przesiadkę na Tiny461/861 oraz wykorzystanie szeregowej pamięci Flash o pojemności kilku/nastu Mbit. Dzięki temu można będzie zbierać dane w układzie, aby potem szybko przesłać zebrane pomiary do komputera jednym rzutem. Pierwszy krok, czyli przeportowanie kodu na Tiny461 zajęło tylko chwilkę…
KONIEC
Zastosowanie zaprezentowanego tutaj aktywnego obciążenia w prostych pomiarach różnych źródeł prądu pozwala rzucić nieco światła na ich stan, m.in. wydajność i stabilność, a ponadto w pomiarach porównawczych akumulatorów dobrać kilka sztuk o zbliżonych pojemnościach, lub po prostu zmierzyć pojemność aku z samochodu. Dodatkowo możliwość komunikacji z komputerem pozwala nam na zbieranie danych do pliku(ów) i przeglądanie w postaci wykresów na żywo lub z zapisów archiwalnych (prace nad programem na komputer trwają).
Zwracam uwagę na to, że należy zachować odpowiednią „odwrotno-proporcjonalność” przy obciążaniu źródeł jeśli chodzi o nastawę prądu w stosunku do przyłożonego napięcia: im większe napięcie badanego źródła, tym mniejszy prąd dopuszczalny (bezpieczny) można nastawiać. Można też powiedzieć, że iloczyn prądu i napięcia nie może przekroczyć pewnej wartości. W przeciwnym przypadku tranzystor obciążenia szybko ulegnie uszkodzeniu wychodząc poza charakterystykę SOA. Trzeba to sprawdzić dla posiadanego tranzystora i odpowiednio się do tego dostosować.
Trudno powiedzieć ile może kosztować zbudowanie tego układu aktywnego obciążenia ponieważ niemal w całości powstał z elementów z odzysku, ale można się pokusić o zgrubsze oszacowanie: trafo ~12zł, procek ~10zł, tranzystor 5-20zł, wyświetlacz 15-17zł, reszta drobiazgów 10-20zł, co razem daje ~80zł. Obudowa ze starego zasilacza komputerowego a radiator od starego procesora.
Zamieszczam kilka zdjęć układu, schemat i rysunki płytek oraz wsad do procka (z poprawionym wyświetlaniem czasu w drugiej linii – dodany dwukropek między godzinami i minutami), i, a niech tam, kod źródłowy w asemblerze (zastrzegam, tylko do użytku prywatnego). Jeśli komuś będzie bardzo zależało na wyjaśnieniu działania jakiegoś fragmentu programu, to postaram się takowy fragment zamieścić w poście i opisać. Rysunek płytek jest w formacie plików .pcb ze starego dziadka Traxmaker’a; nie wiem w czym nowszym da się toto otworzyć, ale przynajmniej w Protelach chyba powinno. Jakby co, dołączam też rysunki w PDF.
W razie niejasności i pytań, postaram się odpowiadać w miarę możliwości i swojej skromnej wiedzy.
Dziękuję za uwagę (jeśli dobrnęliście aż tutaj

Pozdrawiam!
Sly8-)















Cool? Ranking DIY