Sterownik serwa DC - szczegóły działania PIDa
-
Autor tematu - Znawca tematu (min. 80)
- Posty w temacie: 11
- Posty: 80
- Rejestracja: 08 wrz 2004, 18:20
- Lokalizacja: Miłoszyce
- Kontakt:
Sterownik serwa DC - szczegóły działania PIDa
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?
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?
Tagi:
-
- Lider FORUM (min. 2000)
- Posty w temacie: 12
- Posty: 4017
- Rejestracja: 15 lis 2006, 22:01
- Lokalizacja: Tarnobrzeg
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?korinsj pisze:I wszystko "siada" bowiem wyjście PID wielokrotnie przekracza górny zakres PWM 1330 (nie mieści się w dynamice).
Czy wpisanie do PWM wartości 1331 nie spowoduje jego przepełnienia (przyjęcie wartości 1)?
-
Autor tematu - Znawca tematu (min. 80)
- Posty w temacie: 11
- Posty: 80
- Rejestracja: 08 wrz 2004, 18:20
- Lokalizacja: Miłoszyce
- Kontakt:
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.
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.
-
Autor tematu - Znawca tematu (min. 80)
- Posty w temacie: 11
- Posty: 80
- Rejestracja: 08 wrz 2004, 18:20
- Lokalizacja: Miłoszyce
- Kontakt:
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.
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.
-
- Lider FORUM (min. 2000)
- Posty w temacie: 12
- Posty: 4017
- Rejestracja: 15 lis 2006, 22:01
- Lokalizacja: Tarnobrzeg
Mam wątpliwości co do symulatora.korinsj pisze:Ten program do symulacji wszystko wyjaśni:
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.
-
- Lider FORUM (min. 2000)
- Posty w temacie: 12
- Posty: 4017
- Rejestracja: 15 lis 2006, 22:01
- Lokalizacja: Tarnobrzeg
Dobra, przy K=0,2, Ti=0 i Td=0, PID zachowuje się jak P.korinsj pisze:Wydaje mi się że jest OK. Aby całkowicie wyłączyć całkowanie można wpisać 0.
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.
-
Autor tematu - Znawca tematu (min. 80)
- Posty w temacie: 11
- Posty: 80
- Rejestracja: 08 wrz 2004, 18:20
- Lokalizacja: Miłoszyce
- Kontakt:
> 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!
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!
-
- Lider FORUM (min. 2000)
- Posty w temacie: 12
- Posty: 4017
- Rejestracja: 15 lis 2006, 22:01
- Lokalizacja: Tarnobrzeg
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).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).
http://elm-chan.org/works/smc/report_e.html
Autor ELM publikuje schemat blokowy i kod źródłowy - można coś przylookać.