Strona 1 z 3

Strojenie PID

: 20 wrz 2008, 13:55
autor: korinsj
Mam sterownik silnika DC - pełny mostek ze sterowaniem PWM. Wypełnienie dla PWM zadaje PID. Sygnałami wejściowymi dla PID jest: aktualne położenie wału silnika z enkodera, oraz położenie zadane (zmieniające się w takt sygnałów zewnętrznych krok+/krok-).

I teraz pytanie - jak zabrać się do strojenia regulatora PID?

Obiekt regulacji będzie chyba typu całkującego (podwójnie całkujący?), więc chyba bez różniczkowania się nie obejdzie. Do tego obiekt astatyczny - a więc jest problem z pobraniem odpowiedzi na skok w pętli otwartej.

Próbowałem Zieglera-Nicholsa - wychodzi coś nie tak. Myślałem o auto-tuningu. Może metoda przekaźnikowa (Astroma-Hagglunda)? Napisałem program na którym mogę symulować PIDa i obiekt (inercyjny I-wszego rzędu z opóźnieniem) i coś to auto-strojenie za bardzo nie wychodzi.

Czy ktoś ma pomysł jak zrobić auto-tuning? Ostatecznie myślałem o tym, że komputer będzie wybierał parametry dla P I D, kazał sterownikowi wykonać krok i pobierał od niego odpowiedź: jaki max uchyb, jaki czas regulacji, jaka jakość regulacji i na tej podstawie może niech przemiata przez ileś tam wartości P I D zawężając obszar poszukiwań.


Może ktoś podrzuci jakiś pomysł?

SM

: 20 wrz 2008, 15:17
autor: Adalber
Jak wielki zadajesz skok jednostkowy w strojeniu Zieglera-Nicholsa ? Czy jest to np. połowa zawartości licznika wejściowego regulatora PID ,czy tylko jeden krok ?

: 20 wrz 2008, 15:31
autor: cnc3d
Czym zadajesz sygnał wejściowy?
Czy profil prędkości ma ograniczone przyspieszenie?
Jaka jest rozdzielczość enkodera?
Którą wartość chcesz minimalizować?
Jak wyznaczasz wskaźnik jakościowy?
PID jest analogowe, czy program w procku?
Na jakich zmiennych pracujesz (ilu bitowych)?
Jakie uchyby uzyskujesz w tej chwili?

: 20 wrz 2008, 20:48
autor: korinsj
1. Jak wielki zadajesz skok jednostkowy w strojeniu Zieglera-Nicholsa ? - 500 (jeden pełen obrót)
2. Czym zadajesz sygnał wejściowy? - poprzez RS-a z PCta
3. Czy profil prędkości ma ograniczone przyspieszenie? Nie. Tym zajmować się będzie sterownik nadrzędny. Ten ma tylko za zadanie być układem śledzącym (nadążnym). Dostaje impuls na zrobienie krok+/krok- i ma tak posterować silnikiem aby z enkodera utrzymać tę samą pozycję. Tak więc uchybem dla PID jest różnica między docelowym położeniem a aktualnym położeniem enkodera.
4. Jaka jest rozdzielczość enkodera? Niewielka - 500 impulsów / obrót.
5. Którą wartość chcesz minimalizować? Powiedzmy max. szybkość uzyskania wartości zadanej, przeregulowanie max. 20%
6. Jak wyznaczasz wskaźnik jakościowy? Całka z błędu do momentu w którym ewentualne oscylacje schodzą poniżej 1% błędu.
7. PID jest analogowe, czy program w procku? W procku. Układ na małym ARMie, mały CPLD "przygotowuje" sygnały dla procka.
8. Na jakich zmiennych pracujesz (ilu bitowych)? 32-bitowych. Kp z dokładnością 1/256, Ki z dokładnością 1/65536, Kd z dokładnością 1.
9. Jakie uchyby uzyskujesz w tej chwili? Pomierzę.

Dodatkowe informacje:
- PWM na 30kHz, rozdzielczość 10bit
- częstotliwość PID - 10kHz (Tp=1/10kHz)
- max częstotliwość z enkodera - 500kHz (chociaż ARM wyciągnie i więcej)
- mogę dodać strefę nieczułości (uchyb poniżej powiedzmy kilku działek daje zero)
- PID pozycyjny równoległy: PWM=Kp*e + Ki*SumaE + Kd * (e-em), Ki = (Kp * Tp) / Ti, Kd = (Kp * Td) / Tp

Testowo używam silnika DC "talerzowego" bez obciążenia - niewielka bezwładność, znikome tłumienie.
Chciałem spróbować z auto-tuningiem metodą Astrom-Hagglund, ale napisałem programik do symulacji PIDa i coś nie za bardzo to wychodzi. Pomogłoby to przynajmniej przy wstępnym doborze nastaw.

No chyba że powinienem dobierać nastawy dla niewielkich uchybów - w końcu układ ma być układem śledzącym (elektroniczna zębatka).

W razie czego mogę podesłać programik do symulacji - jak ktoś wie co robię nie tak w auto-tunningu A-H.

: 20 wrz 2008, 21:40
autor: cnc3d
Jeśli chcesz to zestroić to nie możesz postępować w ten sposób jak się stroi regulator PID prędkości w klasycznych serwonapędach. Musisz zasymulować płynne rozpędzanie i zwalnianie do zatrzymania. Nie zadawaj nagle 500 impulsów błędu, bo nigdy podczas pracy nie powinno się zdążyć, że błąd osiągnie taką wartość. Procedura strojenia jest taka. Ki i KD na zero i zwiększasz KP aż do osiągnięcia wzbudzenia. Potem gasisz te wzbudzenia zwiększając KD, ale bez przesady bo będzie trzeszczeć. Następnie zwiększasz całkę do wzbudzenia i odejmujesz z niej ok 30 procent. Dopiero wtedy możesz się zająć zabawa z autotuningiem, ale z doświadczenia to juz niewiele poprawi.

: 21 wrz 2008, 00:01
autor: Adalber
Tak na "oko" jeśli porównać stałe czasowe PWM a przede wszystkim PIDa i mało bezwładnego silnika może się okazać , że jesteś na granicy stosowalności (albo poza) metody Zieglera-Nicholsa .
Za duży skok jednostkowy może rzeczywiście tak jak pisze cnc3d ujawniać nieliniowości , które wprowadzają dodatkowy zamęt.
Napisz więcej jak zachowuje się sterownik.

: 21 wrz 2008, 06:47
autor: korinsj
1. Musisz zasymulować płynne rozpędzanie i zwalnianie do zatrzymania. - Tak też myślałem. Zrobię program w którym procek będzie miał wykonać przejazd - powiedzmy 1/3 drogi przyśpiesza się, 1/3 drogi stała prędkość, 1/3 drogi hamuje. Wynikiem będzie maksymalny i minimalny uchyb jaki uzyskał na całej trasie. Problem tylko będzie z wychwyceniem ewentualnych drgań/oscylacji w czasie "jazdy" po wartości zadanej.

2. Ki i KD na zero i zwiększasz KP aż do osiągnięcia wzbudzenia - Co uznać za moment wzbudzenia? Osiągnięcie drgań niegasnących? Po drugie - których drgań? Zwiększając Kp mam początkowe oczywiście aperiodyczne dojście do wartości zadanej (prawie, bo bez całkowania zawsze pozostaje jakiś uchyb). Dalej zwiększam Kp i dochodzi do jednego przeregulowania, potem lekkie zejście w dół i znów staje na lekkim błędzie. Dalej zwiększam Kp i dochodzę do momentu "oscylacji" - tzn. silnik nie stoi cicho, ale "trzeszczy" sobie na komutatorze (niewidoczne drgania w granicach 1..2 kroków). To są że tak powiem pierwsze oscylacje. Mogę go "wyciszyć" tłumiąc wał palcami. Dalej zwiększam Kp i silnik zaczyna oscylować już mocno, aż dojdę do drgań niegasnących, gdzie wał silnika w widoczny sposób kręci się tam i z powrotem. To są że tak powiem drugie oscylacje. I teraz pytanie - przy których oscylacjach mam uznać Kp za krytyczne? Kiedy uznać że jest już moment wzbudzenia?

3. Napisz więcej jak zachowuje się sterownik. - Przerabiam jeszcze zasilanie górnych tranzystorów mostka (przechodzę z pompy ładunkowej na mały transformatorek) i zaraz potem wracam do testów. Opiszę dokładnie jak zachowuje się silnik.

: 21 wrz 2008, 10:26
autor: cnc3d
Te duże drgania niegasnące. Czym sterujesz, jakie tranzystory, jaki dead time, jaki opornik w bramce, jakie prądy maksymalne chcesz uzyskać, jaka moc silnika.
Aha i do czego to ma być zastosowane.

: 21 wrz 2008, 11:02
autor: korinsj
1. Te duże drgania niegasnące. - OK
2. Czym sterujesz, jakie tranzystory - Power MOS IRF630
3. Jaki dead time, jaki opornik w bramce - moje sprawdzone rozwiązania, na dużych układach przetwarzania energii. Bramki steruję przez "odpowiednio" łączone TLP250, z rozbudowanym układem załączania/wyłączania tranzystora (ograniczenie stromości zboczy przy załączaniu, a szybkie wypompowanie ładunku z kondensatora bramki tranzystora przy wyłączaniu). Do tego dead time-y zaszyte w logice.
4. Jakie prądy maksymalne chcesz uzyskać, jaka moc silnika - prądy około 10A, moce powiedzmy 300..500W. Testy robie na 24VDC/3A.
5. Aha i do czego to ma być zastosowane. - Frezarki, tokarki, plotery CNC - mam na dziś kilka rzeczy do uruchomienia. Główny sterownik (ARM+dużo SDRAM) już prawie mam gotowy, soft pod Windowsy też. Teraz robię właśnie "końcówki" dla silników krokowych i DC. Główny sterownik daje "standardowe" impulsy a ja, w zależności od silnika zmieniam tylko końcówkę sterującą.

: 21 wrz 2008, 11:55
autor: cnc3d
Jakie błędy pozycji w stanach dynamicznych chcesz osiągnąć? Tzn. jaki maksymalny uchyb będzie dla ciebie zadowalający? Jaka jest częstotliwość pętli regulatora? Jak na te tranzystory to 10A troche dużo.