Ustawianie pozycji początkowej silnika krokowego

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Krzyslaw
Posty: 4
Rejestracja: 11 mar 2013 17:03
Wersja środowiska: LabVIEW 2012

Ustawianie pozycji początkowej silnika krokowego

Post autor: Krzyslaw »

Witam

Jestem początkującym użytkownikiem LabVIEW i dostałem zadanie rozbudowania istniejącego już programu. Mam do dyspozycji silnik krokowy, kartę Ni9403, komunikacja przez RSa.

Zadaniem silnika jest ruch płytą w kierunku góra dół, ale po zakończeniu pracy, płyta zostaje w jakimś tam położeniu i chciałbym żeby na samym początku, albo po zakończeniu pracy po wciśnięciu guzika zakończ w programie, program ustawiał jakieś zadane położenie początkowe, powiedzmy najniższą możliwą wysokość, tak żeby przy następnym uruchomieniu ruch płyty zaczynał się od tego właśnie położenia.

Inna sprawa to zrobienie czegoś w rodzaju wyłącznika awaryjnego, który po wciśnięciu guzika w programie zatrzyma wykonywanie programu i zatrzyma silniki.

Byłbym bardzo wdzięczny za udzielenie jakiejś porady jak to wykonać, albo przedstawienie jakiegoś przykładowego programu na podstawie którego mógłbym dowiedzieć się jak to się robi i przenieść to po odpowiednich zmianach do mojego programu.


Pozdrawiam i czekam na porady.
TuChoLa
Posty: 25
Rejestracja: 08 maja 2012 09:48
Wersja środowiska: LabVIEW 2013

Re: Ustawianie pozycji początkowej silnika krokowego

Post autor: TuChoLa »

Ustawianie pozycji bym zrobił w pętli while umieszczonej "za" lub "przed" pętlą główną, mam na myśli połączenie pętli za pomocą wire, wtedy odpowiednie pętle będą się wykonywać dopiero gdy wcześniejsza się zatrzyma. Zastosowanie while wynika z tego, że program musi poczekać, aż silnik zajmie odpowiednią pozycję i wtedy następuje zakończenie programu (wersja "za") lub uruchomienie pętli głównej (wersja "przed"). Rozwiązanie też zależy też od budowy układu, ja zakładam że ruch jest ograniczony krańcówkami, wtedy sygnał z krańcówki powinien zatrzymać pętle odpowiedzialną za ustawianie pozycji.

Awaryjne zatrzymanie zrobiłbym w osobnej pętli while, niezależnej od innych, byłaby ona odpowiedzialna kontrole stanu przycisku awaryjnego STOP, a inne pętle bym podpiął do zmiennej lokalnej dla STOP, tak by naciśnięcie STOP spowodowałoby zatrzymanie wszystkich innych pętli i finalnie całego programu.
Awatar użytkownika
fajfi
Posty: 185
Rejestracja: 28 sty 2004 00:00
Wersja środowiska: LabVIEW 2010
Lokalizacja: Wrocław

Ustawianie pozycji początkowej silnika krokowego

Post autor: fajfi »

Cześć,
może zaproponuję nieco inne rozwiązanie:
jeśli chodzi o wyłącznik awaryjny, to skorzystałbym raczej z rozwiązania sprzętowego niż programowego.
Najprostsze wydaje się użycie zwykłego wyłącznika krańcowego.
W jednym z układów mam takie rozwiązanie: kiedy obiekt sterowany silnikiem krokowym osiąga pewną niedozwoloną pozycję, to zmienia stan przełącznika krańcowego. Wtedy z przełącznika idzie impuls do komputera (przez port LPT, ale myślę, że w tej karcie też można to zrealizować), który jest interpretowany przez program jako wyłączenie go, dodatkowo odpowiednia elektronika wyłącza zasilanie silników.
Jeśli chodzi o położenie początkowe, to postępuje bardzo podobnie - przed wyłącznikiem awaryjnym mam inny przełącznik, który przy zmianie stanu (przełączanie odpowiednim zboczem) zatrzymuje (programowo) silnik.
Pozdrawiam
Fajfi
Krzyslaw
Posty: 4
Rejestracja: 11 mar 2013 17:03
Wersja środowiska: LabVIEW 2012

Ustawianie pozycji początkowej silnika krokowego

Post autor: Krzyslaw »

Jeśli chodzi o wyłącznik awaryjny to jestem za rozwiązaniem sprzetowym, tzn. bedzie przycisk wyłączenia awaryjnego ( coś na wzór takiego guzika przy awaryjnym wyłączaniu frezarek czy tokarek ) i chce żeby informacja o tym zdarzeniu trafiła do programu i pojawiła się jakaś informacja czy zapaliła dioda o awaryjnym wyłączeniu. Dlatego, że poza silnikami bedą jeszcze podlączone termostaty i pompa. Ale tak jak mówię musi być sygnalizacja tego w programie i tylko o to chodzi.

Jeśli chodzi o pozycjonowanie to jestem za wyborem opcji, że pozycja początkowa bedzie ustawiała się, gdy nacisne przycisk koniec w programie tzn. po wciśnięciu tego przycisku w programie najpierw płyta zostanie ustawiona do zadanego położenia, a po tym program się wyłączy. Tutaj chyba propozycja TuChoLa będzie dobra, ale wszystko wyjdzie w tzw. praniu.

Co do krańcówek to potrzebuję jeszcze jakieś rozwiązanie tego typu, że gdy zostanie osiągnięta maksymalna, bądź minimalna wysokość to bedzie jakaś sygnalizacja o tym w programie, żeby użytkownik wiedział o osiągnięciu konkretnego położenia.

Jesli bedą jeszcze jakieś pomysły to czekam na propozycje.

Pozdrawiam
Krzyslaw
Zyga
Posty: 86
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Re: Ustawianie pozycji początkowej silnika krokowego

Post autor: Zyga »

hej.
Pozycję zerową lepiej ustalać przed rozpoczęciem pracy systemu. Silnik traci moment trzymający w momencie zaniku zasilania. Jeśli nie masz odpowiedniego enkodera, stracisz informację o aktualnym położeniu.
TuChoLa
Posty: 25
Rejestracja: 08 maja 2012 09:48
Wersja środowiska: LabVIEW 2013

Re: Ustawianie pozycji początkowej silnika krokowego

Post autor: TuChoLa »

Zyga ma rację, bezpieczniej będzie robić ustalanie pozycji na starcie. Można zrobić przed i po ustalanie pozycji, przed by mieć pewność skąd startujemy oraz po by silnik nie stał po środku układu, bądź nie zjechał sam na dól jeśli ruch jest pionowy, a płyta dość ciężka.

Jeśli masz krańcówki to sprawdź ich własności, czesto są to krańcówki indukcyjne, które przy reakcji zamykają/otwierają klucz tranzystorowy dzięki czemu na "przewodzie odpowiedzi" masz sygnał albo następuje jego brak, zależy od krańcówki. Z tego co widziałem to Twoja karta ma ma porty Digital I/O więc, przewód odpowiedzi należy podłączyć do kjarty i odpowiedni stan na wejściu karty będzie informował o stanie urządzenia.
Awatar użytkownika
fajfi
Posty: 185
Rejestracja: 28 sty 2004 00:00
Wersja środowiska: LabVIEW 2010
Lokalizacja: Wrocław

Ustawianie pozycji początkowej silnika krokowego

Post autor: fajfi »

Co do pozycji początkowej, to w innym układzie stosuję następujące rozwiązanie:
oś silnika poprzez przekładnię jest sprzężona z wieloobrotowym precyzyjnym potencjomentrem.
Sygnał z potencjometru wchodzi jako jeden z kanałów do karty pomiarowej i stąd program zaraz po uruchomieniu "wie" w jakiej pozycji znajduje się silnik.
Spokojnie jest w stanie rozróżnić pozycję na poziomie pojedynczych kroków.
Grzesiek080
Posty: 82
Rejestracja: 26 maja 2009 07:18
Wersja środowiska: LabVIEW 2012
Lokalizacja: Sucha Beskidzka
Kontakt:

Re: Ustawianie pozycji początkowej silnika krokowego

Post autor: Grzesiek080 »

My mieliśmy 2 rozwiązania :
1. W jakiejś tam określonej pozycji byla zamontowana krancówka i silnik wykonywał zerowanie pozycji dochodzac do tej krancówki. I wtedy zerował licznik kroków.
2. W aplikacji gdzie mieliśmy obrót o 270 stopnii zastosowalismy tarcze z wyfrezowanym rowkiem + fotokomórka. Dziala to w miare stabilnie.

W rozwiązaniu z enkoderem jest taki problem ze przy zaniku zasilania tracimy informacje gdzie jestesmy ( chyba ze gdzieś to zapisujemy).
Wydaje mi sie że zliczanie kroków i zerowanie pozycji powinno być zrobione na poziomie sprzetowym a my tylko zadajemy pozycje wysyłając komende do sterownika silnika.
Bardzo interesujące wydaje mi sie rozwiazanie z potencjimentem ale nigdy czegoś takiego nie robiłem. Jestem ciekawy jaka jest zmiana rezystancji w czasie użytkowania. Czy po powiedzmy 10000 obrotach potencjometru nie straci on swojej dokładności.
ODPOWIEDZ