Program do sterowania serwomechanizmem

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
wiorec
Posty: 9
Rejestracja: 29 cze 2016 12:02
Wersja środowiska: LabVIEW 2013

Program do sterowania serwomechanizmem

Post autor: wiorec » 21 paź 2016 14:42

Witajcie
Jestem na etapie tworzenia od podstaw programu który z poziomu myRIO pozwoli na sterowanie serwomechanizmem. Moim głównym założeniem jest DOKŁADNE sterowanie pozycją serwa. W datasheetcie mojego serwa doczytałem się:

Position "0" (1.5 ms pulse) is middle, "90" (~2ms pulse) is all the way to the left. ms pulse) is middle, "90" (~2ms pulse) is all the way to the right, "the left.

Ok przeszedłem do napisania programu, gdzie doszedłem do tego etapu.

Obrazek

Dodałem sobie suwak od ustawiania częstotliwości jednak coś podobnego chciałem stworzyć dla naszego Duty Cycle z tym, że nie wiem jak to ogarnąć. Przykładowo początkowo chciałbym aby domyślną wartością było 1,5ms (pozycja środkowa) a później abym mógł manewerować między tymi 90 w prawo i 90 w lewo.

Z góry dziękuje za pomoc

Awatar użytkownika
ksyhu
Posty: 31
Rejestracja: 06 lis 2009 19:15
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Program do sterowania serwomechanizmem

Post autor: ksyhu » 23 paź 2016 13:36

Na początek przeczytaj dokumentację do VI, którego używasz:
http://zone.ni.com/reference/en-XX/help ... mdutyfreq/

Następnie przeczytaj jeszcze raz manual serwomotoru. Moim zdaniem, w zdaniu które zacytowałeś są błędy logiczne, dotyczące działania napędu. Jeżeli nie, to prawdopodobnie występują jeszcze sygnały kierunku (dodatkowe wyjścia, poza PWM). Tak, czy inaczej żeby ustawić napęd na odpowiednią pozycję musisz ustawić puls o oczekiwanej szerokości (zakładam, że wiesz jak wygląda sygnał PWM). I tak:
* Pozycja -90 = Puls o szerokości 1.0ms (prawdopodobnie ten punkt w cytacie jest błędny)
* Pozycja 0 = Puls o szerokości 1.5ms
* Pozycja 90 = Puls o szerokości 2.0ms

Na początek musisz wiedzieć jaki procent danej częstotliwości stanowi impuls jaki chcesz wystawić. Np. dla pozycji 0:
Okres dla częstotliwości 50Hz wynosi 1000ms/50 = 20ms
1.5ms/20ms = 0,075
Także widać, że wypełnienie (Duty cycle) musi wynosić 0.075 przy częstotliwości 50Hz. Tak samo należy postąpić w pozostałych przypadkach.

Kiedy już wykonasz testy dla tych trzech pozycji. Możesz wyliczyć równanie prostej, które pozwoli Ci płynnie zmieniać wypełnienie w zależności od kąta, a następnie uzależnić je od częstotliwości.

Polecam zapoznać się z poradnikiem:
http://www.ni.com/myrio/project-guide

Prawdopodobnie znajdziesz tam rozwiązanie twojego problemu. Jednak wydaje mi się, że więcej satysfakcji sprawi samodzielne rozwiązanie problemu B-)
Często prowadzę z sobą długie rozmowy i jestem przy tym tak mądry, że czasami nie rozumiem ani jednego słowa z tego, co mówię.

wiorec
Posty: 9
Rejestracja: 29 cze 2016 12:02
Wersja środowiska: LabVIEW 2013

Program do sterowania serwomechanizmem

Post autor: wiorec » 09 lis 2016 23:37

ksyhu dzięki wielkie. Nie korzystałem z linków które podałeś a jedynie z obliczeń które mi podałeś i tak oto rozpisałem kod programu który będzie automatycznie:

1. Obliczał na podstawie częstotliwości okres
2. Szerokość impulsu dzielił przez okres dając gotowy duty cycle.

Obrazek

Tak to wygląda na screenie. Działanie tego sprawdzę dopiero na uczelni jak bede miał dostęp do myRIO. Pozostało mi jeszcze tylko przeskalować jakoś aby zamiast szerokości impulsu podawać pozycje w stopniach ale to myślę, że już sobie ogarne.

EDIT
Rozpisałem sobie równanie prostej i wstawiłem do programu także skalowanie też już mam ogarnięte
-90 1ms
-89 1,005555556ms
-88 1,011111111ms
-87 1,016666667ms
-86 1,022222222ms
-85 1,027777778ms
-84 1,033333333ms
itd.

ODPOWIEDZ