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

HPS 2014 Hybrydowy laboratoryjny zasilacz sieciowy

bobeer 07 Sep 2015 17:17 7215 11
Optex
  • HPS 2014 Hybrydowy laboratoryjny zasilacz sieciowy

    HPS 2014
    Hybrydowy laboratoryjny zasilacz sieciowy.


    Parametry użytkowe zasilacza w skrócie:

    1. Wykorzystanie tanich i łatwo dostępnych elementów.
    2. Wydajność prądowa min 3A (dla niskich napięć może dochodzić do 5A).
    3. Rozdzielczość DAC 12bit. (filtrowany PWM 4.9kHz)
    4. Rozdzielczość ADC 11bit (12bit przed histerezą, uśrednianie dithering).
    5. Zakres napięć wyjściowych 0.05V - 25.00V (krok 6.25mV).
    6. Regulacja szybkości narostu i opadania napięcia podczas cyklu włącz/wyłącz 1mV-40V/s.
    7. Ustawianie opóźnienia włączenia/wyłączenia zasilacza 1min – 99h59m.
    8. Odczyt parametrów LCD 2x8 znaków tekstowych.
    9 Szybki interfejs oraz wygodna obsługa za pomocą jednego pokrętła z przyciskiem.
    10. Rozbudowane menu z możliwością strojenia oraz kontroli stanu zasilacza.
    11. Wbudowany program automatycznego sprawdzania poprawności działania urządzenia od strony sprzętowej oraz test spójności danych zawartych w pamięci.
    12. Pomiar prądu zrealizowany od strony + zasilania w celu uniknięcia problematyki wspólnej masy.

    Najważniejsze elementy i przybliżona cena

    Atmega8 DIP 5zł
    24C128 1zł
    LCD 2*8 15zł
    Enkoder 5zł
    OP07 3zł
    TSH22 3zł
    LM2576 4zł
    LM358 0.5zł
    TL431 0.5zł
    78L05 0.5zł
    6xSK34 3zł
    dławiki 3zł
    pozostałe 20zł
    suma ~60zł

    Do kosztów części należałoby doliczyć transformator (w prototypie zaadaptowany wraz z obudową po fabrycznym zasilaczu do stacji dyskietek TIMEX) oraz moduł zasilacza +-6V (wcześniej opisywany na elektroda flyback1).


    Indukcyjności w postaci dwu dławików zastosowane w zasilaczu impulsowym „wyglądają” następująco:

    Dławik duży 200uH:
    54 zwoje DNE 1mm (na jednej warstwie mieści się 35zw) na rdzeniu RTMSS-27x14x12 Al=94 ARNOLD MS-106075 2,29 zł.
    Dławik mały 20uH:
    35 zwojów DNE 0.2mm - przewinięty dławik z zasilacza 1.5A drut nawinięty podwójnie (materiał 26 rdzeń żółty średnica 1.5cm).
    Enkoder:
    Przetestowane były 4 typy enkoderów (jeden nie kwadraturowy ze zmienną pozycją impulsu). Aktualny soft skompilowany dla 2 impulsów na detent (na prośbę mogę skompilować pod inny enkoder).

    Zasilacz jak przystało na prototyp typu „tylko jeden” nie ma zaprojektowanej PCB, wszystko leży na przyzwoitej jakości (zielonej) płytce uniwersalnej :). Jeśli ktoś miałby ochotę się pobawić dodaję schemat z eagla.


    Założenia

    Celem projektu było sprawdzenie możliwości zbudowania oryginalnego zasilacza o jak najmniejszej liczbie nietypowych lub kosztownych elementów, równocześnie uzyskanie możliwie jak największej elastyczności i ekonomiczności oraz walorów użytkowych tak kompromisowego rozwiązania. Budowa zasilacza miała być równocześnie poligonem doświadczalnym różnych mniej lub bardziej przydatnych rozwiązań programowo-sprzętowych. Podczas realizacji projektu, przede wszystkim chciałem odpowiedzieć na pytanie, na ile wystarczające jest użycie wbudowanego w procesor ADC w celu osiągnięcia zadowalającej szybkości i precyzji pomiarów dla taniego zasilacza laboratoryjnego.
    Kolejnym celem było sprawdzenie użycia pojedynczego napięcia zarówno do generowania napięć z PWM DAC, jak i odniesienia dla przetwornika ADC w procesorze.
    W celu wyciśnięcia maksimum możliwości z ADC ATMEGI nie obeszło się bez sprawdzenia działania zaimplementowanego ditheringu, połączonego z uśrednianiem 384,256,64 10 bitowych próbek zależnie od kanału ADC. Przy okazji programu sterującego LCD, w przerwaniu zrealizowano multipleksowaną transmisje do LCD wraz z 244Hz 8bit PWM dla regulacji jasności i kontrastu wyświetlacza. Na koniec, trochę czasu poświęcone zostało na analizie przetwarzania sygnałów z różnej jakości enkoderów oraz próby maksymalnego zwiększenia niezawodności ich działania.

    Skrócony opis hardware

    Ze sprzętowego punktu widzenia, zasilacz to hybryda z impulsowym preregulatorem śledzącym wyjściowe napięcie zasilania, zrealizowanym na staruszku LM2576 oraz liniowym LDO na mosfecie typu P. Regulacja napięcia oraz prądu zrealizowana jest na zwykłych wzmacniaczach operacyjnych, początkowo LM358, później TSH22.Pomiar prądu to również archaiczny, ale tani OP07. Rozwiązanie takie może wymagać niestety ręcznej korekty rezystorów dzielnika, stąd rezystory *20M na schemacie. Normalnie należało by użyć INA138 lub coś zaprojektowanego specjalnie do tak precyzyjnych zastosowań. Na wyjściu zasilacza znajduje się odłączalny elektrolit 1000uF, który umożliwia dla ustawionych niskich prądów uzyskanie szybszego ich ograniczania (niestety tego typu LDO wymaga dołączenia większej pojemności wyjściowej w celu zapewnienia stabilności pętli regulacji w całym zakresie napięć i obciążeń). Mosfet Q2 służy do ograniczenia strat mocy we wzmacniaczu operacyjnym regulacji napięcia podczas stanu ograniczania prądu (dzieje się to z opóźnieniem kilku sekund).
    Sercem systemu procesorowego jest praktycznie najtańszy (biorąc pod uwagę relację możliwości -cena) AVR- ATMEGA8 w prototypie obudowa DIP. Połączony z pamięcią I2C eeprom zawierającą 90% niewykonywalnych danych (tablice etykiety itd.).


    Napięcia zasilające

    Mimo, iż z założenia zasilany pojedynczym napięciem zmiennym zasilacz do poprawnej pracy wymaga dodatkowych napięć +- 6V. Napięcia nie muszą być idealnie stabilizowane, jednak nie powinny przekraczać 6V, ze względu na prąd TL431 oraz dopuszczalne napięcie zasilania wzmacniaczy operacyjnych. Dodatnie 6V służy do zasilania procesora oraz WO dla niskich napięć wyjściowych preregulatora. TL431 strojony jest na 5.112V. ATMEGA zasilana jest z takiego równoległego stabilizatora, co umożliwia generowanie stabilizowanego PWM oraz użycie napięcia odniesienia dla ADC.
    Ujemne 6V jest konieczne z dwóch powodów. Pierwszy to poprawna praca TSH22 oraz OP07 w okolicach masy (ponieważ zasilacz pracuje z regulacją napięcia praktycznie od 0V, a użyte wzmacniacze nie zapewniają „komfortu” w okolicach masy). Drugi powód to poprawne wysterowanie bramki mosfeta LDO dla niskich napięć wyjściowych. Zastosowany tranzystor powinien mieć możliwie małe napięcie załączenia (VGSth) dla założonego maksymalnego prądu. Użyty w prototypie tranzystor katalogowo ma max 4V napięcia dla 250uA DS. Ponieważ wzmacniacze nie posiadają specjalnego dla nich stałego napięcia zasilania, koniecznym rozwiązaniem było użycie diod zapewniających poprawną pracę dla całego zakresu napięć wyjściowych LM2576. Dla U preregulatora <6V napięcie VDD wzmacniaczy operacyjnych pobierane jest z linii +6V.


    Instrukcja użytkowania, opis menu itp.

    Podstawowa obsługa zasilacza sprowadza się do ustawienia prądu, napięcia lub zapisania do pamięci/przywrócenia zapisanych parametrów. W głównym menu możliwe jest również włączenie i wyłączenie napięcia wyjściowego z uwzględnieniem parametrów szybkości narostu opadania lub bez (długie przytrzymanie guzika powoduje załączenie/odłączenie napięcia wyjściowego z maksymalną szybkością, długie przytrzymanie guzika na pozycji pamięci powoduje zapisanie aktualnych parametrów w tej pamięci).


    Menu obsługi parametrów głównych zasilacza
    a) -on/off
    b) - regulacja napięcia
    c) – regulacja prądu
    d) – pamięć 1
    e) – pamięć 2
    f) – pamięć 3
    g) – pamięć 4
    h) – pamięć 5

    Menu narzędziowe
    1) – auto on (czas HH:MM maksymalnie 100 godzin opóźnienia)
    2) – auto off (czas HH:MM maksymalnie 100 godzin opóźnienia)
    3) – szybkość narostu napięcia (1mV/s – 40V/s krok 1mV/s)
    4) – szybkość opadania napięcia (1mV/s – 40V/s krok 1mV/s)
    5) – kontrast LCD
    6) – jasność1 LCD guzik/dial aktywny
    7) – jasność LCD interfejs nieaktywny
    8) – stan zasilania po zaniku napięcia (włączony, wyłączony, ostatnio wybrany)
    9) – ustawianie zegara RTC (HH:MM:SS tryb 24h)
    10) – wybór języka (angielski/polski)
    11) – blokada rozszerzonej części menu

    Menu narzędziowe rozszerzone
    12) – możliwość wyświetlania numeru lub ikony w menu podczas wyboru edytowanego parametru (wyłączone, numer, ikona)
    13) – automatyczne zaokrąglanie zmierzonego napięcia do napięcia zadanego
    14) – szybkość przewijania napisów (najszybciej, szybko, powoli)
    15) – czas po jakim następuje przewijanie tekstu opisującego parametr
    16) – czas w sekundach po jakim zostaje ustawiona jasność2, powrót kursora w głównym menu, lub wyświetlenie napisu 'standby' jeśli zasilacz jest wyłączony.
    17) – czas w sekundach od aktywności użytkownika, po jakim następuje zapis do NVRAM
    18) – synchronizacja RTC do częstotliwości napięcia sieciowego (10-100Hz /wyłączona)
    19) - Wartość prądu powyżej którego jest dołączany dodatkowy kondensator 1000uF


    Menu ustawień zaawansowanych (Ustawienia serwisowe służące do kalibracji napięć i krytycznych parametrów pracy zasilacza)

    20) – korekta napięcia referencyjnego VREF +- 127 (raw)
    21) – wartość pwm DAC rozdzielczość przetwornika (dec 2B)
    22) – offset napięcia PWM dla sterowania napięciem +- 127 (raw)
    23) – offset napięcia PWM dla sterowania prądem +- 127 (raw)
    24) – offset wyświetlanego zmierzonego napięcia z ADC +- 127 (raw)
    25) – offset wyświetlanego zmierzonego prądu z ADC +- 127 (raw)
    26) – odświeżanie pomiarów ADC (Turbo 15Hz ,normalna 5Hz, niska 2Hz)
    27) - dzielnik czasu procesora na obsługę LCD. W zależności od użytego wyświetlacza możliwe czasy wykraczające znacznie poza specyfikacje HD44780 ale umożliwiające szybszą obsługę interfejsu użytkownika (zakres 8-64)

    Menu logów systemowych (16 parametrów x4B)
    28) ilość startów systemu
    29) czas pracy w godzinach
    30) ilość zadziałań enkodera
    31) ilość zadziałań przycisku
    32) ilość zapisów eeprom (+1 dla każdej sekwencji niezależnie od ilości bajtów)
    33) ilość naprawionych błędów eeprom (dla każdego bajtu)
    34) ilość nienaprawialnych błędów eeprom (dla każdego bajtu)
    35) ilość restartów systemu z powodu zadziałania watchdoga

    Menu logów systemowych (ekstrema napięć kanałów adc)
    36) VIN1 min -minimalne napięcie wyjściowe zasilacza
    37) VIN1 max – maksymalne napięcie wyjściowe zasilacza
    38) VIN2 min -minimalny prąd wyjściowy zasilacza
    49) VIN2 max – maksymalny prąd wyjściowy zasilacza

    40) VIN3 min -minimalne napięcie wyjściowe preregulatora
    41) VIN3 max – maksymalne napięcie wyjściowe preregulatora
    42) VIN4 min -minimalne napięcie wyjściowe preregulatora
    43) VIN4 max – maksymalne napięcie wyjściowe preregulatora

    Program diagnostyczny

    Zasilacz po podłączeniu zasilania, kolejno wykonuje następujące czynności:
    1.Uruchamia bootloader. W tym momencie, za pomocą konsoli szeregowej, można załadować eeprom i2c lub podejrzeć zawartość pamięci (bootloader BUBL w wersji bez SPI, nieco okrojony)
    2. Sprawdzany jest przycisk sprzętowy. Jeśli wciśnięty, na LCD pojawia się informacja, że dalsze przytrzymanie guzika spowoduje załadowanie domyślnych wartości ustawień urządzenia (NVRAM). W obecnej wersji softu liczniki i logi pozostają nienadpisane po tej operacji
    3. Kolejną czynnością jest sprawdzenie CRC pamięci ROM procesora oraz EEPROM I2C
    (pamięć eeprom wbudowana w AVR jest zabezpieczona innym mechanizmem i nie posiada sumy kontrolnej)
    W przypadku błędów pamięci na LCD zostaje wyświetlony komunikat ERROR CD dla flash procesora lub ERROR CE dla eeprom I2C. W pierwszej linii LCD wyświetlana jest 16bitowa suma kontrolna, kolejno oczekiwana oraz obliczona (po 4 znaki HEX).
    Jeżeli sprawdzenie CRC zakończy się sukcesem, program przechodzi do zgrubnego testu elementów zasilacza. Przeprowadzane są następujące czynności:

    a) Wyłączany jest preregulator, napięcie wyjściowe i prąd zostaje ustawiane na 0
    b) Sprawdzane jest napięcie wejściowe czy nie jest zbyt wysokie (45V MAX)
    c) Sprawdzane jest napięcie za preregulatorem czy wynosi <0.1V kiedy wyłączony LM2576
    d) Włączany jest preregulator, sprawdzane napięcie czy zawiera się w granicach 1-2V
    e) Sprawdzany prąd wyjściowy czy = 0mA

    W przypadku nie spełnienia któregoś z warunków zasilacz nie włączy się, na LCD zostanie wyświetlony numer błędu zależny od miejsca w którym test stwierdził problem ERROR 01-05
    ERROR 01 – zbyt wysokie napięcie wejściowe
    ERROR 02 – zbyt wysokie napięcie za preregulatorem gdy wyłączony
    ERROR 03 – zbyt niskie napięcie preregulatora gdy włączony
    ERROR 04 – zbyt wysokie napięcie preregulatora gdy włączony
    ERROR 05 – zmierzony prąd wyjściowy >0 (preregulator wyłączony)

    Ostatni z błędów może się pojawić w związku z nieprecyzyjnym dobraniem dzielnika w gałęzi pomiaru prądu, o czym należy pamiętać podczas uruchamiania zasilacza.
    W przypadku wystąpienia błędów zasilacz kontynuuje sprawdzanie, co po ustąpieniu problemu uruchamia dalszą część programu.
    Po pomyślnym zakończeniu testów, zasilacz załącza napięcie wyjściowe startując od 0V z ustaloną prędkością narostu.

    Sygnalizacja zdarzeń i błędów

    Na wyświetlaczu oprócz napięcia, prądu, oraz symbolu włącz/wyłącz może pojawić się kilka dodatkowych znaków oznaczających następujące zdarzenia:

    1.Symbol wtyczki oznacza ponowne podłączenie zasilania (zegar RTC jest zatrzymany i wymaga ponownego ustawienia).
    2.Symbol dzwonka (zależny od wyświetlacza – znak z wbudowanego CGromu) oznacza działający timer włączający lub wyłączający zasilacz po zadanym czasie.
    3. Symbol litery E (Error) Zostanie wyświetlony w przypadku zresetowania procesora np. wskutek zadziałania watchdoga.
    4. Litera 'R' (Restore) zostanie wyświetlona po pomyślnej procedurze przywracania domyślnej wartości pamięci 'NVRAM'.
    Znaki statusowe zostają wyczyszczone w momencie wejścia w menu narzędziowe.
    Migający wykrzyknik w drugiej linii oznacza pracę zasilacza w trybie ograniczania prądu.


    Dla dociekliwych, więcej detali z działania wybranych fragmentów programu oraz wykorzystanie zasobów procesora

    Timer0
    Wejście T0 jest połączone z napięciem zmiennym i służy do synchronizacji czasu zegarów oraz RTC z częstotliwością sieci energetycznej. W menu, można wybrać czy chcemy aby zegar w zasilaczu działał z wzorca sieciowego czy z kwarcu procesora. Można również ustawić częstotliwość synchronizacji 10-100Hz.
    Timer1
    Jest wykorzystywany do generowania sprzętowego PWMa dla zadanego napięcia oraz prądu zasilacza. Działa w trybie 12bit fast pwm (nominalnie 4078). Dla MCK= 16MHz częstotliwość pwm=3.9kHz.
    Timer2
    Wysyłanie danych do LCD oraz generowanie soft PWM.
    Jednym z najważniejszych modułów jest program umożliwiający wyświetlenie na LCD informacji o stanie pracy urządzenia. Ze względu na wygodę użytkowania zasilacza, zastosowałem wyświetlacz o skromnej ilości wyświetlanych znaków (tylko 2x8). Jest to jednak wystarczająca ilość dla monitorowania napięcia oraz prądu. Najczęściej, wartości te będą wyświetlane przez 99.9% czasu działania. Założona minimalna częstotliwość zmian zawartości ekranu to 10Hz, możliwa do zmiany z poziomu menu. Ponieważ, jak zwykle chciałem zrobić coś mniej standardowego niż zwykły czterobitowy interfejs, postanowiłem, że wraz z transferem wyświetlanych danych wystawię PWM sterujący jasnością podświetlania oraz kontrastem. Stała filtru uśredniającego wartości magistrali to minimum 0.2sek. Oprócz PWM, na portach danych wyświetlacza znajduje się również sterowanie dodatkowych tranzystorów oraz stabilizatora impulsowego LM2576. Ze względu na dokładność zarówno generowanego PWM-a jak i czasów związanych z protokołem obsługi wyświetlacza, program realizowany jest w przerwaniu timera2 (MCK/256 ), jednak obsługa LCD jest wywoływana nieco rzadziej (MCK/256/lcd_presc (możliwość zmiany z poziomu menu 8-64), czyli z częstotliwością około 1-8kHz. W każdym cyklu wysyłany jest jeden znak do lcd (przesyłane dwie połówki bajtu z uwagi na tryb 4bit). Dodatkowo po wysłaniu wszystkich bajtów wiersza, wykonywane są zaadresowania „dram” (displayram= pamięć ram w AVR odwzorowująca wyświetlane wiersze w LCD) dla każdej z dwóch linii tekstu. Taki podział czasu umożliwia płynne działanie wyświetlacza oraz minimalny wpływ danych na uśrednione napięcie PWM (poniżej 1% dla standardowych szybkości magistrali). Przesłanie danych do LCD jest zsynchronizowane czasowo z przerwaniem timera2. Program inicjalizacji wyświetlacza nie korzysta z programu automatycznego wysyłania danych z bufora ram do LCD, który na ten czas pozostaje wyłączony.
    Przerwanie timera2 służy też do generowania stosunkowo dużych znaczników czasowych. Po odpowiednim podzieleniu, generowane są interwały 4ms (250Hz) oraz 1s dla RTC. W programie softowych timerów są inkrementowane liczniki, wykorzystywane do generowania dokładnych opóźnień w pętli głównej np. dla programu przewijania napisów na LCD, automatycznego zapisu ram do eeprom, częściowo obsługi enkodera (dial/knob).

    Przetwornik ADC i dithering
    Największą część czasu procesora zaraz po programie obsługi LCD wraz z softowym generatorem pwm-a zabiera procedura obsługi adc, mux i uśredniania wyników pomiarów wraz z wstępnymi przeliczeniami wartości napięć z przetwornika.
    Przetwornik analogowo-cyfrowy pracuje z zegarem MCK/128/13 = 16MHz/128/13 =9.6kHz.
    Ponieważ do komfortowego czasu reakcji prezentowanych wyników wystarcza w zupełności częstotliwość 10Hz, pozostały czas procesora warto poświęcić polepszeniu precyzji pomiarów poprzez zastosowanie uśredniania. W związku z powyższym, moduł ADC podczas swojej pracy zbiera próbki napięć z portów w różnej ilości w zależności od kanału. Dla ADC0 - pomiaru napięcia uśredniane jest 384 pomiarów. ADC1- prąd 256 pomiarów. Kanały pomocnicze ADC2,ADC3,ADC6 64 pomiary. Do tego dochodzą „czasy martwe” - na ustabilizowanie po przełączeniu kanału. Po zsumowaniu wartości te dają maksymalną wartość odświeżania minimum 10Hz.
    W menu użytkownika dostępna jest możliwość zmiany częstotliwości odświeżania wyniku pomiarów. W tym celu, użyty jest dodatkowy bufor zapewniający synchroniczność wyświetlania pomiarów wraz z częstotliwością odświeżania informacji na LCD.
    Procesor dodatkowo generuje szum, który jest dodawany do napięcia odniesienia, a pobierany z jednego z portów mux. Dzięki zastosowaniu ditheringu oraz uśredniania, możliwe stało się podniesienie rozdzielczości pomiarów ADC do koło 12 bitów ze znacznym zminimalizowaniem błędu przetwornika DNL. Niestety, mimo tych zabiegów ADC AVR’a posiada dodatni offset napięcia zerowego, który wynosił w moim przypadku nawet 30mV. Dodatkowo, pomiar napięć poniżej 0.1V jest obarczony większym błędem nieliniowości.

    Wykorzystanie EEPROM i funkcjonalności NVRAM
    W programie obsługi wbudowanej pamięci eeprom procesora, zostało wykorzystane przerwanie gotowości zapisu oraz mechanizmu zapisu lustrzanego w celu wychwycenia i ewentualnego odzyskania wartości uszkodzonych komórek pamięci. Niespójne wartości mogą powstać wskutek zaniku zasilania, podczas procedury zapisu. Sytuacja taka jest jednak w 100% do skorygowania przez program odtwarzania danych. Automatyka polega na synchronicznym adresowo odczycie obszaru pamięci ram oraz eeprom (pierwszego lustra) i porównaniu na występowanie różnicy ich zawartości. Jeśli takowa zaistniej, bajt pamięci ram jest zapisywany do eeprom (w postaci 3 równo od siebie oddalonych kopii. Dostępna potrojona pamięć to 160B co daje wartosc 480B dla 512B eeprom.). Współpraca programu głównego z funkcjonalnością automatycznego zapisu do eeprom polega na ustawieniu bitu w rejestrze EECR oraz dwóch bajtów zawierających adres początkowy i ilość danych do zapisu. Całą resztę wykonuje program przerwania. Realizacja funkcjonalności NVRAM sprowadza się do przydzielenia obszaru ram, który będzie automatycznie umieszczany w eeprom. Uzupełnieniem funkcjonalności jest timer, który po wykryciu aktywności interfejsu użytkownika generuje zadane opóźnienie czasowe przed zapisem całego NVRAM oraz automatycznie raz na 1h automatycznie zapisuje obszar NVRAM związany z logowaniem parametrów pracy urządzenia.

    Automatyczne logowanie zdarzeń
    Ponieważ program używa automatycznego kopiowania pamięci ram do niezawodnego eeprom, aż prosiło się, aby część pamięci przeznaczyć na rejestr zdarzeń. I tak, na ten moment logowane są następujące zdarzenia systemowe (po 4B na każdy parametr):

    0-ilość startów systemu
    4-czas pracy systemu w godzinach
    16-liczba zapisów eeprom – pojedyncza inkrementacja oznacza jedno wywołanie procedury kopiującej ram do eeprom bez względu na ilość bajtów kopiowanych.
    20-ilość poprawnych odzyskań każdego bajtu w eeprom w przypadku kiedy dwa pozostałe bajty są spójne.
    24-ilość nienaprawialnych błędów odczytu eeprom. 3 bajty kopii lustrzanej mają różne wartości (jakakolwiek wartość <>0 kwalifikuje procesor do wymiany)
    28- ilość restartów systemu na skutek zadziałania wachdoga. Jakakolwiek wartość >0 oznacza poważne problemy ze sprzętem lub uszkodzenie programu podczas działania zasilacza (np. wywołane problemami z pracą zegara procesora).

    Zakres pamięci ram zawierający adresy odpowiadające monitorowanemu zakresowi zaczynają się od 128dec i ma rozmiar maksymalnie 160B.
    Ponieważ rozmiar pamięci ram kontrolera znacznie przekracza potrzebną w naszym zastosowaniu, można sobie pozwolić na jej użycie w postaci modyfikowalnej kopii pamięci nieulotnej. Dla średniej liczby zapisów do eeprom w ilości 1/h liczba 100.000 zapisów zostanie osiągnięta w czasie około 10lat.
    Jako dodatkowe zabezpieczenie danych pamięci eeprom, zastosowana jest blokada zapisu podczas zaniku sygnału 50Hz (maksymalne opóźnienie zadziałania blokady 100ms).

    Logowanie zdarzeń wykorzystuje mechanizm buforowania. Program w pętli głównej sprawdza zakres pamięci ram odpowiedzialny za chwilowe przechowywanie zabuforowanych zdarzeń w pojedynczych bajtach pamięci (max 8b na parametr), co umożliwia przechowanie 256 zdarzeń do momentu zapisania ich (zsumowania z istniejącą wartością) do przewidzianej przestrzeni w pamięci ram. Rozwiązanie takie jest kompromisem pomiędzy ilością rom zajmowaną przez program, a szybkością zalogowania zdarzenia, która sprowadza się do inkrementacji jednej komórki ram (z zatrzymaniem na max w przypadku przekroczenia zakresu 8bit).

    RTC oraz synchronizacja do sieci 50/60Hz
    Ponieważ program korzysta z sygnału napięcia zmiennego (detekcja jednej połówki sinusa), w celu rozpoznania wyłączenia urządzenia, również zegary czasu mogą być bezpośrednio synchronizowane do częstotliwości sieci. Synchronizacja polega na sprawdzeniu wartości timera0 w momencie kiedy licznik synchronizowany kwarcem wyznaczy upływ jednej sekundy (jest to wykonywane w programie przerwania tiemra2 (pomiar obarczony jest jitterem powodowanym generowaniem przerwania timera2 z najwyższym priorytetem, nie ma to jednak większego znaczenia). W zależności od wartości tcnt0, wartość licznika „do sekundy” jest zwiększana lub zmniejszana (korekcja dzielnika 250Hz/1s proporcjonalnie do odchylenia) , aż do osiągnięcia synchronizmu z pracą timera napędzanego prądem zmiennym zasilacza. Jest to właściwie nic innego jak cyfrowe PLL. Zakres chwytania wynosi +- 1Hz dla 50Hz co wydaje się wartością wystarczającą w przypadku normalnej sieci energetycznej. Rozwiązanie takie ma również tę zaletę, że w przypadku krótkotrwałych zakłóceń lub zaniku napięcia sieciowego, RTC będzie pracować nadal z częstotliwością niewiele odbiegającą od wzorca.

    Mapa EEPROM I2C

    00-9F -kopia zapasowa domyślnych wartości NVRAM
    A0-FF -zarezerwowane
    100-2FF -zakres tekstowych opisów wartości parametrów
    300-34F -definicje znaków dla „petit index” (liczba dwucyfrowa w jednym znaku 5x7)
    360-39F -definicje dodatkowych znaków statusu (min. symbol wtyczki po włączeniu zasilania)

    400- pierwsza etykieta parametru
    400-40F – 16 bajtów definicji znaku CGRAM dla wyświetlania ikon w menu (używane pierwsze 8)
    410-411 -2 bajty tekstu doklejane do wyświetlanej wartości parametru
    412-47F – Etykieta tekstowa wyświetlana w menu (auto przewijanie) zakończona wartością FF
    480-druga etykieta parametru
    ...

    2000 – początek pamięci dla wybranego drugiego języka (polski)
    3FFE,3FFF – CRC16 całej pamięci EEPROM (obliczane algorytmem CRC Xmodemu)

    Na zakończenie. Co poprawić, co zepsuć ;)

    Niewielkim mankamentem, którego nie udało mi się wyeliminować a jedynie przymaskować występowanie, jest zmiana napięcia odniesienia w momencie zapisu przez AVR’a pamięci eeprom. Problem przejawiał się zachwianiem pomiarów ADC . Dla pomiaru napięcia wyjściowego było to zaburzenie na poziomie około 20mV. Na szczęście nie zaobserwowałem wpływu na napięcie wyjściowe zasilacza, ewentualnie wpływ jest tak znikomy, że trudny do zmierzenia.
    Drugi problem, to archaiczny układ pomiaru prądu HI-side, wymagający precyzyjnego dostrojenia rezystorów w dzielniku, w innym razie może wystąpić offset zera lub zmierzony prąd będzie obarczony znacznym błędem. Jak wcześniej wspomniałem, gorąco polecam (użycie w kolejnej wersji) specjalizowanego do takiego zastosowania układu typu INA138 lub coś w tym stylu :) . Wybranie bardziej kłopotliwego sposobu pomiaru prądu, było podyktowane nieprzyjemnościami eksploatacyjnymi mojego poprzedniego zasilacza z pomiarem prądu od strony masy, kto miał ten wie w czym rzecz :).
    Trzecia sprawa to jedynie sugestia użycia słabszego mosfeta w LDO (mniejsze pojemności), co umożliwi przyspieszenie pętli sprzężenia zwrotnego i poprawi parametry dynamiczne zasilacza (przy tej okazji, zapewne znowu trzeba będzie popracować nad kompensacją częstotliwościową).

    Dziękuję za uwagę :)
    HPS 2014 Hybrydowy laboratoryjny zasilacz sieciowyHPS 2014 Hybrydowy laboratoryjny zasilacz sieciowy HPS 2014 Hybrydowy laboratoryjny zasilacz sieciowy HPS 2014 Hybrydowy laboratoryjny zasilacz sieciowy HPS 2014 Hybrydowy laboratoryjny zasilacz sieciowy



    Cool? Ranking DIY
    About Author
    bobeer
    Level 28  
    Offline 
  • Optex
  • #2
    oskar777

    Level 26  
    INA138 ma Vin (min) = 2.7V więc nie ma pełnego zakresu napięcia, do zasilacza się nie nadaje lepszy jest ACS712 jest jeszcze jeden scalak ale nie mogę sobie nazwy przypomnieć
  • #3
    bobeer
    Level 28  
    oskar777 wrote:
    INA138 ma Vin (min) = 2.7V więc nie ma pełnego zakresu napięcia, do zasilacza się nie nadaje lepszy jest ACS712 jest jeszcze jeden scalak ale nie mogę sobie nazwy przypomnieć


    Nie zwróciłem uwagi że ina138 będzie miała takie ograniczenie. Faktycznie w nocie stoi bykiem "Input common-mode and power-supply voltages are
    INA168: 2.7 V to 60 V independent and can range from 2.7 V to 36 V"
    Ostatecznie można by spróbować się pobawić w zasilanie ujemnym napięciem i przesunięcie offsetu zera, ale wolałbym bez takich komplikacji. ACS712 to bardzo ciekawe układy działające w oparciu o efekt halla, tutaj już niema ograniczeń co do napięcia wejściowego bo wejście pomiarowe jest odseparowane galwanicznie.
    W związku z powyższym czekam na propozycję przystępnego scalaka, który nie będzie działał na zasadzie ASC712, będzie dokładny jak ina138 i będzie mógł mierzyć prąd na poziomie masy (może być zasilany napięciem ujemnym jak opamp na schemacie).
  • Optex
  • #4
    paluszasty
    Level 25  
    Nie bardzo rozumiem jaki jest problem zasilania tego ukłądu INA? Przecież nie trzeba go zasilać napięciem wyjściowym zasilacza. W zasilaczu na pewno jest sporo układów (WO) zasilanych oddzielnym zasilaniem i ten układ też może być tak zasilany.
  • #5
    bobeer
    Level 28  
    paluszasty wrote:
    Nie bardzo rozumiem jaki jest problem zasilania tego ukłądu INA? Przecież nie trzeba go zasilać napięciem wyjściowym zasilacza. W zasilaczu na pewno jest sporo układów (WO) zasilanych oddzielnym zasilaniem i ten układ też może być tak zasilany.

    Nie chodzi o problem z zasilaniem tylko zakresem napięcia wejściowego względem masy "Input common-mode". Można zasilić układ ujemnym napięciem, ale poziom odniesienia zera też powędruje w ujemne napięcie i trzeba go by było przesuwać w górę.
    Można też problem spróbować obejść też z drugiej strony, stosując dzielnik napięcia na wejściu wzmacniacza (dzielnik do plusa podciągający wejścia wzmacniacza do poziomu przy którym powinien pracować poprawnie). Podobny zabieg został zastosowany w opisywanym zasilaczu, jednak tam działało w stronę masy obniżając napięcie wejściowe do dopuszczalnego zakresu przez OP07.
  • #8
    AMD_Athlon
    Level 12  
    Bardzo podoba mi się ten zasilacz.
    Czy zna kolega orientacyjne wartości tętnień na wyjściu - chodzi mi o to czy jest jakaś zauważalna różnica między konfiguracją hybrydową, a rozwiązaniem klasycznym (liniowym).
    Sam przymierzam się do budowy jakiegoś zasilacza (jeszcze nie wybrałem którym będę się inspirował) i miał bym prośbę - czy mógłby kolega łopatologicznie wytłumaczyć problem z pomiarem prądu w ujemnej gałęzi? Dla mnie z definicji wyjście zasilacza laboratoryjnego (plus i minus, nie mówię o "zielonym") jest odizolowane galwanicznie od masy/PE/obudowy. W takim wypadku wydaje mi się bez znaczenia czy pomiar jest w po stronie wysokiej, czy niskiej. Czy coś przeoczyłem?
  • #9
    oskar777

    Level 26  
    z INA226 jest taki problem (chyba, że coś nie doczytałem), że trzeba dać rezystor pomiarowy a przy większych prądach ciężko dorwać dobry i względnie tani rezystor pomiarowy. Na stronie głównej elektrody w "karcie" wiadomości po prawej był taki artykuł o układzie cyfrowym do pomiaru prądu.
    Nie mogę go znaleźć niestety te artykuły są do 4 strony a nie wiem gdzie na forum jest ich kontynuacja, mam nadzieje że gdzieś jest.
  • #10
    Doctore.
    Level 18  
    No ze strony programowej to nieźle, ale ta pcb...
    Też myślałem o odłączanym kondensatorze wyjściowym, tak by tętnienia przy dużych prądach były małe ale i też by nie usmażyć delikatnych urządzeń którym strzał z kondensatora może zaszkodzić.
    Czy takie rozwiązanie się sprawdza?
  • #11
    Janusz_kk
    Level 36  
    Witam
    Nie mam eagle dlatego prosiłbym o przekonwertowanie schematu na pdf, no i soft, rozumiem że binarki są ciekawe ;) ale wolałbym coś bardziej strawnego, aby przeanalizować kod, może być na priva.

    Dodano po 2 [minuty]:

    Aaa przepraszam, pierwszy czarny ekran to schemat :)
    mea culpa.

    Dodano po 3 [minuty]:

    Noo ale to co się nazywa "soft" raczej softem nie jest :(

    Dodano po 52 [minuty]:

    Patrząc na schemat widzę że nakombinowałeś się "jak koń pod górę"
    szczególnie z zasilaniem, kuriozum jest zmienianie nap zasilania opampów podczas zmiany nap wyjściowego, jedynie OP07 wymaga wys nap zasilania, reszcie wystarczy +-6 do 12V, jak juz dawałeś przetwornicę na LM2576 to mozna było dać drugą a dławikiem i dodatkowymi uzwojeniami która by robiła np +5V, 12V i -12V, prosto i łatwo. Pozostaje OP07, którego zmieniłbym na pracującego od "0" i przeniósł pomiar na masę.
    Sterowanie p-mosfeta jest też nadmiernie pokomplikowane, a można to zrobić na podwójnym komparatorze np LM393 którego wyjścia mozna łączyć. Kondesator na wyjściu to źródło kłopotów, ja już przez stary zasilacz reg unitry spaliłem układ przez to że projektant dał tam na wyjście kondesator, tutaj dałbym jako p.zakóceniowy max 100n i wyjście obciążył źródłem prądowym lub opornikiem, teraz nie ma prawie nic, to tyle na szybko uwag.
  • #12
    Freddy
    Level 43  
    Janusz_kk wrote:
    Nie mam eagle dlatego prosiłbym o przekonwertowanie schematu na pdf, no i soft
    To sobie ściągnij darmową wersje.