Strojenie PID

Rozmowy na temat układów elektronicznych sterowania obrabiarek CNC

Autor tematu
korinsj
Znawca tematu (min. 80)
Znawca tematu (min. 80)
Posty w temacie: 8
Posty: 80
Rejestracja: 08 wrz 2004, 18:20
Lokalizacja: Miłoszyce
Kontakt:

Strojenie PID

#1

Post napisał: korinsj » 20 wrz 2008, 13:55

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



Tagi:


Adalber
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 2
Posty: 694
Rejestracja: 10 lip 2005, 15:13
Lokalizacja: Polska

#2

Post napisał: Adalber » 20 wrz 2008, 15:17

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 ?


cnc3d
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 5
Posty: 635
Rejestracja: 29 mar 2008, 16:48
Lokalizacja: laski

#3

Post napisał: cnc3d » 20 wrz 2008, 15:31

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?


Autor tematu
korinsj
Znawca tematu (min. 80)
Znawca tematu (min. 80)
Posty w temacie: 8
Posty: 80
Rejestracja: 08 wrz 2004, 18:20
Lokalizacja: Miłoszyce
Kontakt:

#4

Post napisał: korinsj » 20 wrz 2008, 20:48

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.


cnc3d
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 5
Posty: 635
Rejestracja: 29 mar 2008, 16:48
Lokalizacja: laski

#5

Post napisał: cnc3d » 20 wrz 2008, 21:40

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.


Adalber
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 2
Posty: 694
Rejestracja: 10 lip 2005, 15:13
Lokalizacja: Polska

#6

Post napisał: Adalber » 21 wrz 2008, 00:01

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.


Autor tematu
korinsj
Znawca tematu (min. 80)
Znawca tematu (min. 80)
Posty w temacie: 8
Posty: 80
Rejestracja: 08 wrz 2004, 18:20
Lokalizacja: Miłoszyce
Kontakt:

#7

Post napisał: korinsj » 21 wrz 2008, 06:47

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.


cnc3d
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 5
Posty: 635
Rejestracja: 29 mar 2008, 16:48
Lokalizacja: laski

#8

Post napisał: cnc3d » 21 wrz 2008, 10:26

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.


Autor tematu
korinsj
Znawca tematu (min. 80)
Znawca tematu (min. 80)
Posty w temacie: 8
Posty: 80
Rejestracja: 08 wrz 2004, 18:20
Lokalizacja: Miłoszyce
Kontakt:

#9

Post napisał: korinsj » 21 wrz 2008, 11:02

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ą.


cnc3d
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 5
Posty: 635
Rejestracja: 29 mar 2008, 16:48
Lokalizacja: laski

#10

Post napisał: cnc3d » 21 wrz 2008, 11:55

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.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Elektronika CNC”