logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega 32 - Jak często wywoływać funkcje regulatora PI przy TIMER1 w trybie FAST PWM?

GrzesiekF1 20 Sie 2015 07:17 780 3
REKLAMA
  • #1 14934036
    GrzesiekF1
    Poziom 10  
    Witam,
    projektuję sterownik silnika, w którym zaimplementowany jest regulator PI. Napotkałem problem synchronizacji. Otóż wykorzystuję TIMER1 atmegi32 w trybie FAST, PWM 10-bit (mode 7 z noty katalogowej), preskaler ustawiony na 1. W jakich odstępach czasu powinien być realizowany pomiar i zadawanie nowej (wyliczonej przez regulator) wartości rejestru OCR1?
    Znalazłem kod, w którym autor wykorzystuje takie same ustawienia jak ja i funkcje regulatora wywołuje co 1ms. Dlaczego?
    Pozdrawiam i liczę na szybką pomoc.
  • REKLAMA
  • #2 14934050
    Steryd3
    Poziom 33  
    Nie bardzo rozumiem problem.
    Chcesz sobie zrobić regulator PI.
    Znalazłeś jakiś kod...którego nie widzimy więc nie można się do niego odnieść.
    Pytanie o interwały czasowe w jakich ma być realizowany pomiar i obliczane wyjście regulatora jest raczej pytaniem do Ciebie. To jak często trzeba to robić zależy głównie od dynamiki obiektu jakim chcesz sterować. Jak będzie to jakiś wielki piec to może starczyć co 10s a jak jakiś dynamiczny obiekt (jak twój silnik) to 1ms może być ok a może być za wolno.

    Sprecyzuj problem i dodaj jakiś kod o który można oprzeć dyskusje.
  • REKLAMA
  • #3 14934138
    Konto nie istnieje
    Poziom 1  
  • #4 14935476
    GrzesiekF1
    Poziom 10  
    Witam,
    kod nie jest moje autorstwa, więc nie chcę go umieszczać . W każdym razie algorytm jest realizowany w następujący sposób:
    1. Wysłanie za pomocą UARTu informacji do uC o zezwoleniu na regulację prądu + wysłanie wartości współczynników regulatora i prądu referencyjnego.
    2. Jeśli ustawiona jest flaga zezwalająca na regulację, oraz ustawiona jest flaga przerwania od timer0 (ustawionego w tryb CTC z wywołaniem co 1ms) to rozpoczynana jest procedura regulacji.
    [ if((timer0_interrupt == 1)&(reg_status ==1)) ]
    3. W pętli powyżej dokonywany jest odczyt wartości z ADC i wywoływana jest funkcja z zaimplementowanym regulatorem. Funkcja zwraca wyliczoną wartość, która jest wpisywana do OCR1x.
    4. Wyzerowanie flagi timer0_interrupt. Koniec if'a.
    5. Funkcja if jest ponownie wykonywana, gdy flaga timer0 jest ustawiona.

    Moje pytanie bierze się z tego, że nie wiem, jak często powinienem (mogę) wywoływać pętlę regulacji.

    Sterownik ten ma tylko (albo aż) sterować prądem silnika, poza hamulcem nic na wirniku umieszczone nie będzie. Jeśli się zawiesi, nikomu krzywda się nie stanie ;)
REKLAMA