Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

AVR PID - Regulator dla kilku obiektów

23 Lip 2013 14:50 1773 2
  • Poziom 30  
    Witam

    Zbudowałem urządzenie do lutowania (podgrzewacz 3 strefowy + hotair). Regulacji temperatury dokonuję w układzie zamkniętym używając algorytmu PID. Niestety w tym przypadku mam do regulacji w zasadzie 4 różne obiekty. Są 3 grzałki podgrzewacza, które w przybliżeniu mają taki sam charakter obiektu + grzałka gorącego powietrza dla której regulator już musi mieć całkowicie inne nastawy. Wzorując się na ogólnodostępnych materiałach, posiadanej skromnej wiedzy oraz projekcie stacji lutowniczej AVT–987 p. Lucjana Bryndzy, rozszerzyłem funkcję regulator PID dla 4 obiektów w taki sposób:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Natomiast wywołanie wygląda tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Niestety to złe rozwiązanie. O ile da się wprowadzić różne nastawy regulatora to nie da się zmienić okresu próbkowania, który w tym przypadku będzie taki sam dla każdego obiektu. Grzałka hotair ma bardzo małą bezwładność temperaturową czego nie da się powiedzieć o podgrzewaczu.

    Jaki jest inny, lepszy pomysł na rozwiązanie problemu regulacji kilku obiektów do zaimplementowania w jednym uP?
    Dodam, że procesor w czasie pracy ma do obsłużenia
    - synchronizację z siecią na przerwaniu INT7_vect, przerwanie od fazowej regulacji mocy TIMER0_COMP_vect, przerwanie od TIMER2_COMP_vect, na którym zrealizowana jest regulacja PWM dla 5 różnych wyjść dodatkowych, przerwanie od timera ogólnego TIMER1_COMPA_vect (wszelkie stałe czasowe, opóźnienia itp) poza tym obsługuje komunikację przez RS232 oraz wykonuje kilka prostych obliczeń. Dlaczego to wypisuje, a na dlatego że boję się, że może dochodzić do sytuacji takich gdy tych wiele przerwań zakłóca normalną pracę regulatora PID.
    Regulacja temperatury podgrzewacza działa względnie. Na początku jest w sumie spore przeregulowanie (nawet do 15'C) a potem uchyb maleje do +/- 2-3'C jednak regulacja hotair to totalna porażka.

    Za każdą pomoc i nakierowanie na słuszny trop z góry dziękuję.
  • Poziom 43  
    Zastosuj po prostu 4 oddzielne PIDy.
    Albo ten jeden, ale wyzwalaj go tak często jak wymaga tego grzałka.
    Częstsze wyzwalanie PIDów dla podgrzewaczy nie jest szkodliwe. Po prostu procesor będzie musiał mielić więcej danych.
    No i w ogóle to przeszedł bym na liczby całkowite. Nawet pisząc w C to jakieś 10-cio krotne przyspieszenie obliczeń. A tutaj to bardzo ważne.
  • Poziom 30  
    Witaj

    Liczby całkowite w sumie to chyba nie problem, w końcu można wszystko przesunąć o np 4 miejsca w prawo a na samym końcu to samo tylko w lewo. Kiedyś już kombinowałem z pomnożeniem PIDów ale zauważyłem, że dosłownie 2 grzałki (tylko 2 były) pracowały dziwnie na zmianę. Boję się tutaj tej sporej ilości przerwań. Jeśli ustawiam sobie np okres próbkowania regulatora na 0.1s to w tym czasie otrzymam odpowiednio 10 przerwań od synchronizacji (100Hz, przerwanie od ZCD 2x50Hz = 100), 100 przerwań od fazowej regulacji mocy (przerwanie co 1us =1000 w ciągu sekundy oraz 100 w ciągu 0.1s), 10 raz przerwanie od timera ogólnego i ogromna ilość przerwań od TIMER2_COMP_vect, na którym jest zrobiony regulator PWM :
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Kod: c
    Zaloguj się, aby zobaczyć kod