Pozycjonowanie elektrycznego napędu liniowego + USB-6008

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
Awatar użytkownika
Zer0
Posty: 29
Rejestracja: 25 sty 2010 23:23
Wersja środowiska: LabVIEW 2014
Lokalizacja: Olsztyn

Pozycjonowanie elektrycznego napędu liniowego + USB-6008

Post autor: Zer0 »

Szanowni Forumowicze!
Chciałem w prosty sposób zrealizować sterowanie przemieszczeniem końcówki roboczej elektrycznego napędu liniowego (podłączonego wg schematu). Ale jak się okazuje mój sposób jest zbyt prosty. O ile ręczne wysterowanie nie stanowi problemu, to przy automatycznym pozycjonowaniu, gdy końcówka siłownika osiąga zadane położenie, układ "wpada w drgawki". Jak zatem dobrać nastawy poszczególnych członów regulatora PID i jak w praktyczny sposób zaimplementować całość w LV, jeśli nie znam transmitancji siłownika?
Przemieszczenie końcówki roboczej siłownika jest monitorowane analogowo, za pomocą potencjometru.
Schemat podłączenia
Schemat podłączenia
VI
VI
Panel
Panel
2015-06-26 09-35-52.png (25.47 KiB) Przejrzano 8478 razy
Zyga
Posty: 86
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Pozycjonowanie elektrycznego napędu liniowego + USB-6008

Post autor: Zyga »

Widzę, że coś porównujesz do wartości zadanej. Załóż sobie jakąś martwą strefę przy docelowej pozycji np. +/- 10.
Awatar użytkownika
Zer0
Posty: 29
Rejestracja: 25 sty 2010 23:23
Wersja środowiska: LabVIEW 2014
Lokalizacja: Olsztyn

Pozycjonowanie elektrycznego napędu liniowego + USB-6008

Post autor: Zer0 »

Coś porównuję, a konkretnie aktualnie mierzone przemieszczenie (po lekkiej obróbce). Myślę jeszcze nad zastosowaniem gotowego regulatora PID (z tej strony), ale niestety - złe nastawy regulatora mszczą się niemiłosiernie. A z tą martwą strefą to będę musiał poćwiczyć, to jest dobry pomysł :) Mam nawet coś podobnego już tutaj :)
Zyga
Posty: 86
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Pozycjonowanie elektrycznego napędu liniowego + USB-6008

Post autor: Zyga »

Hmm.. nie widzę tutaj tej martwej strefy. Natomiast jeśli chcesz koniecznie skorzystać z PIDa to musisz dobrać nastawy eksperymentalnie. Zasada jest taka. Najpierw P, jeśli sterowanie nie jest zadowalające, dobierasz I, jeśli nadal nie jest zadowalające dobierasz D. Moszesz wstępnie oszacować nastawy na podstawie odpowiedzi skokowej/impulsowej układu.
Co takiego przemieszcza ten siłownik?
Awatar użytkownika
Zer0
Posty: 29
Rejestracja: 25 sty 2010 23:23
Wersja środowiska: LabVIEW 2014
Lokalizacja: Olsztyn

Re: Pozycjonowanie elektrycznego napędu liniowego + USB-6008

Post autor: Zer0 »

Siłownik ma docelowo przemieszczać łapy z czujnikami. Niby jakoś sobie poradziłem z problemem zatrzymania końcówki roboczej w żądanej pozycji (właśnie za pomocą martwej strefy), ale problemem jest teraz precyzja pozycjonowania i powtarzalności. Chciałbym osiągnąć 0,5mm, ale przy stosowaniu liniowych funkcji do przeskalowania odczytu, 0,5mm osiągalne jest mniej więcej dla połowy zakresu. Zastanawiam się, jak osiągnąć zakładaną precyzję i do głowy przychodzi mi:
1) zwiększenie napięcia zasilania potencjometru do 20V. Zamiast 2,71075V dla maksymalnego wysunięcia uzyskam ok 10V, zatem będę miał szerszy zakres pomiarowy, współczynnik kierunkowy funkcji znacznie zmaleje, więc błąd pomiarowy i wahania napięcia zasilającego potencjometr nie będą aż tak wzmacniane;
2) zamiast skalowania za pomocą funkcji liniowej można by zastosować interpolację, ale nie wiem jak skorelować wartość napięcia, np 2,71075V z wysunięciem 300,0mm - z tego co widziałem w przykładach, LV pozwala na zbudowanie funkcji punkt po punkcie (czyli dla wartości 1, 2, 3, 4, a nie 2,71075). No i wraca problem z punktu 1), gdzie znaczenie ma 4 miejsce po przecinku w zmierzonej wartości napięcia na potencjometrze.

Obecnie program wygląda jak poniżej, ale zawiera on kilka niepotrzebnych rzeczy i błędów ;)
VI
VI
Zyga
Posty: 86
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Pozycjonowanie elektrycznego napędu liniowego + USB-6008

Post autor: Zyga »

Dla podanych przez Ciebie parametrów, czyli zakresu pomiarowego 300mm, z dokładnością 0,25 mm (zakładam zwiększone napięcie, a więc max zakresu odczytu jaki karta może wyciągnąć 0-10V), musisz wykrywać zmiany napięcia na poziomie 0,008. Nie brzmi to zbyt pewnie, tym bardziej jeśli masz jakieś niestabilne źródło zasilania.
Jeśli chodzi o interpolację, zerknij na przykład 1D Interpolation.vi. Zrobisz sobie kilka pomiarów przemieszczenia oraz odpowiadających mu napięć, w ten sposób otrzymasz wektor węzłów, który posłuży do wyznaczenia wartości nieznanych.
W moim mniemaniu najprościej będzie zmienić przetwornik.
Awatar użytkownika
Zer0
Posty: 29
Rejestracja: 25 sty 2010 23:23
Wersja środowiska: LabVIEW 2014
Lokalizacja: Olsztyn

Pozycjonowanie elektrycznego napędu liniowego + USB-6008

Post autor: Zer0 »

Na razie robię testy na zasilaczu laboratoryjnym (DF173005C) i stabilność napięcia zasilającego to jakiś żart - z 17,500V potrafi się zrobić 17,486. Najlepiej by było wymienić cały siłownik, na taki z enkoderem inkrementalnym. Niestety zakupu już dokonano i nic się z tym nie da zrobić.
Co do bloczku interpolującego, to rzeczywiście może to być jakaś metoda, wygląda bardzo obiecująco. Muszę tylko ogarnąć ładowanie danych z pliku tekstowego, bo wpisywanie na "sztywno" traci sens, szczególnie, że tych nieszczęsnych siłowników będzie więcej.

EDIT
Okazuje się, że taka prosta sztuczka daje ok 0,7mm (+0,4 / -0,3) dokładności pozycjonowania dla całego zakresu wysunięcia, niezależnie czy napięcie zasilające potencjometr wynosi 17,534V czy 17,500V. Mogę jeszcze pokombinować z interpolacją, ale chyba nie ma sensu robić sztuka dla sztuki, skoro dla tego siłownika (NLAD24V) i tak nie będzie lepiej.
VI
VI
ODPOWIEDZ