Strona 1 z 5

Sterownik serwa DC - szczegóły działania PIDa

: 02 gru 2008, 09:04
autor: korinsj
Witam,

Właśnie prowadzę testy sterownika do serwa DC. Żeby nie być gołosłownym, tutaj wrzuciłem krótki filmik z testów:



Narazie prędkości nie za duże, start/stop "na sztywno" (bez przyśpieszeń).

Ale mam pytanie do znawców z dziedziny - z tego co się orientuję większość sterowników do serw posiada trzy członową pętle regulacji: stabilizacja prądu, stabilizacja prędkości, stabilizacja położenia.

W tej chwili robię tylko pętla stabilizacji położenia: uchyb (położenie zadane - położenie z enkodera) idzie na PID, a z PIDa na wyjście PWM.

W tym wypadku obiekt (silnik) to całka z inercją, a więc K/s(1+sT).

I tu mam problem. Dla mojego silnika K=40, T=0,04s. Wyliczam nastawy dla PID takie, aby czas regulacji wynosił 0,01s. Otrzymuję wysokie P i spore D.

I w tym cały problem - wyjście PWM może zmieniać się od 0 (0% wypełnienia) do 1330 (100% wypełnienia). Tak duża wartość wzmocnienia P wymusza bardzo duże skoki części różniczkującej aby stłumić drgania. I wszystko "siada" bowiem wyjście PID wielokrotnie przekracza górny zakres PWM 1330 (nie mieści się w dynamice). Natomiast małe wartości wzmocnienia P powodują iż silnik jest miękki.

Z której strony spróbować ugryźć ten problem?

: 02 gru 2008, 21:04
autor: Leoo
korinsj pisze:I wszystko "siada" bowiem wyjście PID wielokrotnie przekracza górny zakres PWM 1330 (nie mieści się w dynamice).
I tak ma być. Przy krótkim czasie odpowiedzi silnik będzie sterowany na 100% mocy. Czy Kolega zastosował mechanizm zabezpieczenia przed przepełnieniem wartości członu całkującego?
Czy wpisanie do PWM wartości 1331 nie spowoduje jego przepełnienia (przyjęcie wartości 1)?

: 03 gru 2008, 05:20
autor: korinsj
Mam ograniczenie zarówno nasycenia całkowania jak i sygnału wyjściowego. I tu pies pogrzebany. Całkowanie nawet wyłączam.

Przykład: silnik sterowany napięciowo (PWM) to całkowanie z inercją o parametrach K=40 T=0,04s. Zakładam czas regulacji 0,01s, to Kp=390, Ki=0 (aby było łatwiej), Kd=12000! Krotki czas regulacji => duże Kp => duże Kd aby stłumić drgania od dużego Kp. Tylko że przy takich nastawach wartość wyjściowa od razu leci w kosmos. Wyjście PIDa oczywiście ograniczam do -1330..+1330 ale tym samym "psuję" działanie różniczki która chce stłumić drgania. No wiec wydłużam czas regulacji, zmniejsza mi się Kp i Kd, jest coraz lepiej, ale silnik robi się coraz bardziej miękki.

Nie wiem czy sterowanie z pętlami stabilizacji prądu, prędkości i pozycji załatwia ten problem choćby dlatego że silnik sterowany prądowo to całkiem inny obiekt (podwójne całkowanie).

[ Dodano: 2008-12-03, 08:17 ]
Ten program do symulacji wszystko wyjaśni:

www.korinsj.com.pl/pub/regtest.exe

Proszę nacisnąć "GO!". Potem ustawić ograniczenie sygnału wyjściowego (pomiędzy PID a obiektem) na 1330 (czyli dla mnie jest to max PWM - 100%) i znów nacisnąć "GO!".

Będzie widać o co chodzi.

: 03 gru 2008, 11:30
autor: Adalber
Jak uzyskałeś transmitancję napędu (sinika) ? Została obliczona czy zdjąłeś charakterystykę ?

: 03 gru 2008, 11:39
autor: korinsj
Zdjąłem charakterystykę.

Tym bardziej że to "typowa" transmitancja. Dla sterowania napięciowego i odczytu położenia z enkodera to obiekt astatyczny typu całka z inercją. Pochodna (czyli prędkość) to będzie obiekt inercyjny I-wszego rzędu. Dla sterowania prądowego to będzie podwójne całkowanie.

Silnik talerzowy (dyskowy), bez obciążenia, więc tarcie pomijalnie małe.

: 03 gru 2008, 18:24
autor: Leoo
korinsj pisze:Ten program do symulacji wszystko wyjaśni:
Mam wątpliwości co do symulatora.
Jedna z metod strojenia PID wygląda tak: ustawiamy Ti na nieskończoność i Td na 0. Następnie dobieramy P tak, by silnik osiągnął wartość zadaną lub najbliższą z możliwych. W tym miejscu wszelkie kombinacje parametrów wywołują oscylacje. Sterownik typu P nie powinien oscylować. Ti ustawiałem na 20s, więcej się nie udało.

: 03 gru 2008, 18:35
autor: korinsj
Wydaje mi się że jest OK. Aby całkowicie wyłączyć całkowanie można wpisać 0. Aby np. otrzymać aperiodyczne dojście do wartości zadanej można ustawić K=0.1 Ti=0 Td=0

: 03 gru 2008, 21:53
autor: Leoo
korinsj pisze:Wydaje mi się że jest OK. Aby całkowicie wyłączyć całkowanie można wpisać 0.
Dobra, przy K=0,2, Ti=0 i Td=0, PID zachowuje się jak P.
Empirycznie dla K=390, Ti=40 i Td=10,65 odpowiedź regulatora jes prawie bez przerzutu. Myślę, że ograniczenie PWM +/- 1330 nie powinno być uwzględniane w symulacji. Jeśli Kolega zaimplementuje kod do innego procesora, którego PWM działa na 8 bitach, to okaże się że zakres ograniczenia wyniesie +/-128 i reakcji prawie nie będzie.

: 04 gru 2008, 05:46
autor: korinsj
> Empirycznie dla K=390, Ti=40 i Td=10,65 odpowiedź regulatora jes prawie bez przerzutu.

Powiem jedno - piękne nastawy!

> Myślę, że ograniczenie PWM +/- 1330 nie powinno być uwzględniane w symulacji.

Musi być, bo takie ograniczenie ma układ rzeczywisty. Zresztą mogę wrzucić te nastawy do sterownika i ściągnąć odpowiedź na skok i porównać go z odpowiedzią z symulacji.

>okaże się że zakres ograniczenia wyniesie +/-128 i reakcji prawie nie będzie.

Dokładnie TAK!. Symulacja działa poprawnie - jak układ rzeczywisty.

Ale chyba już wiem gdzie leży problem. Sterownik serwa DC ze strukturą: uchyb położenia => PID => wyjście PWM nigdy nie zadziała poprawnie w układzie rzeczywistym (ze względu na ograniczenie wyjścia). Porobiłem jeszcze sporo innych symulacji - tylko struktury: PI_P, P_PI, P_PID powinny działać poprawnie. Spróbuję dzisiaj załadować je w procek - powinno być OK!

: 04 gru 2008, 09:27
autor: Leoo
korinsj pisze:Sterownik serwa DC ze strukturą: uchyb położenia => PID => wyjście PWM nigdy nie zadziała poprawnie w układzie rzeczywistym (ze względu na ograniczenie wyjścia).
Niezupełnie. Kiedy PWM osiąga 100% wypełnienia silnik otrzymuje nominalny moment obrotowy. Zadając napięcie otrzymujemy moment. Poza tym istnieją regulatory PID z wyjściem dwustanowym. Jeśli chodzi o serwa, to choćby UHU, ELM-CHAN, GECKO i pewnie wiele innych, wszystkie mają wyjścia PWM bez pomiaru prądu (nie mylić z ogranicznikiem).
http://elm-chan.org/works/smc/report_e.html
Autor ELM publikuje schemat blokowy i kod źródłowy - można coś przylookać.