Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Kategoria: Akumulatorki / Baterie / Ładowarki

PID - Regulacja PID ramienia na łożysku zakończonego silnikiem

Tojmak987123 07 Sty 2017 21:40
  • #1 07 Sty 2017 21:40
    Tojmak987123
    Poziom 3  

    Witam,

    piszę z prośbą o pomoc dotyczącam regulacji PID układu. Obiektem regulacji jest ramie zawieszone na łożysku z silnikiem na jednym końcu. Zakres ruchu ramienia jest ograniczony
    podpórkami. Pozwalają one na ruch ramienia w zakresie mniej więcej +/- 40 stopni. Sygnałem wejściowym do regulatora jest kąt pobrany z żyroskopu, sygnałem wyjściowym jest
    wartość PWM silnika. Próbuję napisać dla niego regulator PID. Na początku próbuję uzyskać w miarę porządany efekt na samym regulatorze P, ewentualnie PI. Problem jest taki,
    że za każdym razem jak kolwiek bym nie próbował, obiekt zachowuje się w podobny sposób - np. ma utrzymywać kąt 0 stopni (poziom). Ramię opadając zwiększa PWM. Problem jest
    taki, że ramię dostaje albo za mało mocy (delikatnie odbija się od ogranicznika ograniczającego kąt ujemny), albo za dużo. Wtedy po uderzeniu w drugi ogranicznik, zaczyna wariować i nieprzerwanie uderza po kolei w oba ograniczniki. Czy ma ktoś może pomysł jak uzyskać coś satysfakcjonującego z tej regulacji? Poniżej wstawiam linijki kodu dotyczące regulacji jedynie używając członu P:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    WARTOŚĆ_ZADANA - w opisanym przykładzie to kąt 0 stopni (poziom),
    fi_x - kąt z czujnika,

    Poniżej obrazek jak wygląda stanowisko:

    PID - Regulacja PID ramienia na łożysku zakończonego silnikiem

  • #2 08 Sty 2017 08:18
    dondu
    Moderator Mikrokontrolery Projektowanie

    Po pierwsze PWM nie może być ujemne, ani większe niż maksymalne możliwe.
    W Twoim algorytmie nie ma zabezpieczenia przed tym faktem.

    Po drugie dobranie nastaw regulatora to nie jest prosta sprawa i często czasochłonna.

    Po trzecie są na to sposoby - poszukaj opracowań w sieci - materiałów jest tysiące także po polsku, gdybyś miał z tym problem.

  • #3 08 Sty 2017 10:08
    Tojmak987123
    Poziom 3  

    Witam, dzięki za odpowiedź. Co do Twojego pierwszego komentarza. Zapomniałem wstawić tej linijki kodu, ale jest ograniczenie tej wartości. Stan wysoki nie może być niższy od 900 us, ani większy od 2100 us. Próbowałem z początku zrobić to wyznaczając odpowiedź skokową. Jednak nie przyniosło to żadnych rezultatów. Postanowiłem napisać bo próbuje je dobrać już od dłuższego czasu i nic nie pomaga. Próbowałem już różnych sposobów, mnożyć wzmocnienie przez funkcję ekspotencjalną by zmiany były bardziej dynamiczne w miarę oddalania się od podpór. Czego bym nie próbował silnik zawsze reaguje w podobny (opisany przeze mnie) sposób. Nie mniej jednak dziękuje za odpowiedź. Będę oczywiście dalej walczył. Zastanawiałem się tylko czy nie robię czegoś całkowicie źle.

  • #4 31 Sty 2017 18:32
    Michal.elektryk
    Poziom 9  

    Spróbuj podnieść do kwadratu, albo przesunąć zakres tak, żeby osiągał max pwm przed dotknięciem podpór.

    Ja zawsze stroiłem od razu PID, dla mnie jest to łatwiejsze od samego P.
    Ustawiasz I oraz D malutkie pilnując tylko, żeby różniczka była zawsze większa od całki.

    Michał Pietrzak
    lider theSP

  • #5 19 Lut 2017 20:04
    Tojmak987123
    Poziom 3  

    Z opóźnieniem dużym, ale problem rozwiązany. Zrezygnowałem z rozwiązania gdzie prędkość kątowa zależała w całym zakresie od wychylenia ramienia. Dla wychylenia 10 stopni silnik ma taka sama prędkość jak dla wychylenia 40 stopni. Dziękuje wszystkim za pomoc.