Strojenie PID
-
Autor tematu - Znawca tematu (min. 80)
- Posty w temacie: 8
- Posty: 80
- Rejestracja: 08 wrz 2004, 18:20
- Lokalizacja: Miłoszyce
- Kontakt:
Strojenie PID
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
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:
-
- Specjalista poziom 3 (min. 600)
- Posty w temacie: 5
- Posty: 635
- Rejestracja: 29 mar 2008, 16:48
- Lokalizacja: laski
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?
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 - Znawca tematu (min. 80)
- Posty w temacie: 8
- Posty: 80
- Rejestracja: 08 wrz 2004, 18:20
- Lokalizacja: Miłoszyce
- Kontakt:
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.
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.
-
- Specjalista poziom 3 (min. 600)
- Posty w temacie: 5
- Posty: 635
- Rejestracja: 29 mar 2008, 16:48
- Lokalizacja: laski
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.
-
- Specjalista poziom 3 (min. 600)
- Posty w temacie: 2
- Posty: 694
- Rejestracja: 10 lip 2005, 15:13
- Lokalizacja: Polska
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.
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 - Znawca tematu (min. 80)
- Posty w temacie: 8
- Posty: 80
- Rejestracja: 08 wrz 2004, 18:20
- Lokalizacja: Miłoszyce
- Kontakt:
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.
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.
-
Autor tematu - Znawca tematu (min. 80)
- Posty w temacie: 8
- Posty: 80
- Rejestracja: 08 wrz 2004, 18:20
- Lokalizacja: Miłoszyce
- Kontakt:
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ą.
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ą.