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

algorytm - Zasilacz cyfrowy laboratoryjny

piurek10 19 Jan 2015 18:29 897 5
  • #1
    piurek10
    Level 13  
    Witajcie
    Jestem na etapie programowania układu zasilacza laboratoryjnego z ograniczeniem prądowym.
    mikrokontroler atmega16
    Mój algorytm jest taki:

    Przerwanie co 8ms (ze względu na to że stosuje bascom i liczby zmiennoprzecinkowe nie mogę zejść niżej)
    W przerwaniu:
    - sczytane wartości napięć i prądów i porównanie ich z wartościami zadanymi
    -jeśli prąd powyżej 1A niż zadany to wyjście napięciowe zmniejszone o połowę i wystawia zmienną kontrolną1 na 1
    -Jeśli różnica 0,5A a 1A to napięcie zmniejszone o 0,8V zmienna kontrolna2 na 1
    -jeśli nie ma regulacji to zmienne kontrolne na zero

    Pętla główna:
    - obsługa przycisków
    - wyświetlanie co 1s wartości prądu oraz bez przerwy wartości zadanych (konieczne przy obsłudze przez przyciski.
    - Jeśli prąd przekracza 100mA to zmniejszenie napięcia o 0,11V i kontrolna3 1
    w przeciwnym przypadku na 0
    - regulacja napięcia jeśli wszystkie kontrolne na zero
    gdy napięcie około 2,7V od zadanej to zmiana o około 1,2V gdy natomiast różnica mniejsza niż 2,7V to zmiana o 0,156V

    Tak więc to jest mój algorytm jak macie jakieś uwagi to proszę napiszcie. Całość pisana jest w bascomie, w przerwaniu nie mogę zejść z czasem niżej bo dużo czasu zajmują obliczenia na zmiennych zmiennoprzecinkowych.
  • #2
    dondu
    Moderator on vacation ...
    piurek10 wrote:
    Przerwanie co 8ms (ze względu na to że stosuje bascom i liczby zmiennoprzecinkowe nie mogę zejść niżej)
    ...
    Całość pisana jest w bascomie, w przerwaniu nie mogę zejść z czasem niżej bo dużo czasu zajmują obliczenia na zmiennych zmiennoprzecinkowych.

    No to nie stosuj zmiennoprzecinkowych obliczeń oraz zrób krok do przodu i zmień język na C.

    Co do samego algorytmu - skoro jest ograniczenie które znasz, to je usuń.
  • #3
    piurek10
    Level 13  
    Mam za mało czasu jeśli chodzi o naukę C. Co do zmiennoprzecinkowych to w pewnych musze ze względu na dzielenie które jest nieuniknione. Chciałem się upewnić czy rozkład zadań jest odpowiedni.
  • #4
    dondu
    Moderator on vacation ...
    Każde zadanie można zrealizować na wiele sposobów zależnie od różnych ograniczeń i innych wymogów projektu. Dlatego Twój sposób jest dobry jeśli działa, a że natrafiłeś na jego ograniczenia i znasz ich przyczyny to bardzo dobrze, bo uzmysławia Ci to, że następny projekt powinieneś już robić w C.

    Dlatego nie bardzo jest Ci jak pomóc poza wskazaniem, byś co najmniej zmienił obliczenia na stałoprzecinkowe, o czym pisałem wcześniej.
  • #5
    jarek_lnx
    Level 43  
    Quote:
    Przerwanie co 8ms (ze względu na to że stosuje bascom i liczby zmiennoprzecinkowe nie mogę zejść niżej)
    W przerwaniu:
    - sczytane wartości napięć i prądów i porównanie ich z wartościami zadanymi
    -jeśli prąd powyżej 1A niż zadany to wyjście napięciowe zmniejszone o połowę i wystawia zmienną kontrolną1 na 1
    -Jeśli różnica 0,5A a 1A to napięcie zmniejszone o 0,8V zmienna kontrolna2 na 1
    -jeśli nie ma regulacji to zmienne kontrolne na zero

    Dziwny ten algorytm, jak na regulator bardzo niedokładny i bardzo powolny, jeśli nie możesz użyć wydajnego procesora szybkiego ADC i DAC i porządnego kompliatora z optymalizacją, to nie ma sensu tego robić cyfrowo.
    Zrób to analogowo, byle jaki wzmacniacz operacyjny za 50gr da ci kilka tysięcy razy lepszy czas regulacji (kilka us) oraz kilkaset razy lepszą dokładność (<1mA), a na wejęcie analogowego układu regulacji podasz sygnał z DAC'a i będziesz miał sterowanie cyfrowe..

    Quote:

    Co do zmiennoprzecinkowych to w pewnych musze ze względu na dzielenie które jest nieuniknione
    Czy ten Bascom jest aż tak kiepski że dwóch liczb stałoprzecinkowych podzielić nie umie? Nawet jeśli to wielu przypadkach można zastąpić dzielenie mnożeniem, nie wydaje mi sie żeby w zasilaczu było coś czego nie można zrobić bez liczb zmiennoprzecinkowych.

    O ile w ograniczeniu prądowym można zaakceptować taki kulawy regulator cyfrowy (nie wszyscy potrzebują stabilizacji prądu) to wymagania na parametry stabilizacji napiecia zazwyczaj są dość ważne, mam nadzieję że napiecia nie regulujesz cyfrowo.
  • #6
    tmf
    Moderator of Microcontroller designs
    piurek10 wrote:

    Przerwanie co 8ms (ze względu na to że stosuje bascom i liczby zmiennoprzecinkowe nie mogę zejść niżej)
    W przerwaniu:
    - sczytane wartości napięć i prądów i porównanie ich z wartościami zadanymi
    -jeśli prąd powyżej 1A niż zadany to wyjście napięciowe zmniejszone o połowę i wystawia zmienną kontrolną1 na 1
    -Jeśli różnica 0,5A a 1A to napięcie zmniejszone o 0,8V zmienna kontrolna2 na 1
    -jeśli nie ma regulacji to zmienne kontrolne na zero


    Przecież regulacja i kontrola prądu co 8 ms jest zupełnie bez sensu. Do czego tak zabezpieczony zasilacz miałby się przydać?
    W MCU masz komparator analogowy - wystarczy na jedno wejście podać mierzoną wartość a na drugie wyfiltrowany PWM. Przerwanie będziesz miał tylko wtedy, gdy np. napięcie na jednym wejściu jest wyższe niż na drugim. Ciągle jest to słabe, ale już o niebo lepsze. Swoją drogą to nie ma sensu na siłę wszędzie wstawiać cyfrówki, nawet jeśli w danym zastosowaniu, jak już wspomniano, wystarczy prosty układ analogowy za 50 gr. MCU w takim zasilaczu może służyć np. do ustawienia napięć i prądów, czy ogólnego sterowania.