Spisu treści:

Kątowa kontrola położenia silnika krokowego 28BYJ-48 z Arduino i analogowym joystickiem: 3 kroki
Kątowa kontrola położenia silnika krokowego 28BYJ-48 z Arduino i analogowym joystickiem: 3 kroki

Wideo: Kątowa kontrola położenia silnika krokowego 28BYJ-48 z Arduino i analogowym joystickiem: 3 kroki

Wideo: Kątowa kontrola położenia silnika krokowego 28BYJ-48 z Arduino i analogowym joystickiem: 3 kroki
Wideo: Silniki krokowe (cz.1/2) zasada działania 2024, Lipiec
Anonim
Kątowa kontrola położenia silnika krokowego 28BYJ-48 za pomocą Arduino i analogowego joysticka
Kątowa kontrola położenia silnika krokowego 28BYJ-48 za pomocą Arduino i analogowego joysticka

Jest to schemat sterowania silnikiem krokowym 28BYJ-48, który opracowałem do wykorzystania w ramach mojego ostatniego roku pracy doktorskiej. Nie widziałem tego wcześniej, więc pomyślałem, że wrzucę to, co odkryłem. Mam nadzieję, że pomoże to komuś innemu!

Kod w zasadzie pozwala silnikowi krokowemu „skopiować” położenie kątowe joysticka analogowego, to znaczy, że jeśli popchniesz joystick do przodu, silnik będzie skierowany na „północ”. popchnij joystick w kierunku zachodnim, silnik obraca się w tym samym kierunku.

Do mojej realizacji wymagałem, aby w przypadku puszczenia joysticka, czyli braku położenia kątowego, silnik wracał do kierunku „domu”. Kierunek domu jest skierowany na wschód, a silnik (lub przynajmniej dowolny wskaźnik / urządzenie, które podłączono do wału wyjściowego!) Musi również być skierowany w tym kierunku po włączeniu.

Kieszonkowe dzieci

Arduino Uno lub podobny

płytka stykowa i wybór przewodów połączeniowych (męski na męski, męski na żeński)

Zasilanie 5V

Moduł analogowego joysticka (najlepiej z funkcją chwilowego przycisku, co ułatwia odpoczynek w pozycji "domowej")

Silnik krokowy 28BYJ-48 i sterownik krokowy ULN2003

Długopis, papier i blu-tac (lub inne urządzenie wskazujące do przymocowania do silnika!)

Krok 1: Krok 1: Konfiguracja

Podłącz silnik krokowy do sterownika krokowego i podłącz styki w następujący sposób:

IN1 - pin Arduino 8

IN2 - pin Arduino 9

IN3 - pin Arduino 10

IN4 - pin Arduino 11

Podłącz zasilacz 5 V do szyn zasilających na płytce stykowej i podłącz wejścia 5 V ULN2003 do szyn zasilających. podłącz szynę uziemiającą do ziemi w swoim Arduino.

dla joysticka podłącz w następujący sposób:

Pin przełącznika - pin Arduino 2

Oś X - Arduino A0 (analog we 0)

Oś Y - Arduino A1

+5V - wyjście Arduino 5V

GND - Arduino GND

Na koniec podłącz uziemienie płytki stykowej do drugiego pinu Arduino GND

Krok 2: Krok 2: Wyjaśnienie kodu

Dołączyłem pełny kod Arduino do pobrania i użycia. Ale zrobię co w mojej mocy, aby wyjaśnić istotne części tutaj.

Teoria stojąca za tym kodem polega na tym, że przestrzeń zajmowana przez joystick jest podzielona na wykres, z 0, 0 pośrodku. jednak wejścia joysticka znajdują się na (około) 512 w środku, więc aby przezwyciężyć te dwie funkcje są używane do "zerowania" wartości odczytanej z osi X i Y. w zależności od używanego zasilacza może zajść potrzeba zmiany wartości w funkcjach ZeroX i ZeroY, aby joystick dawał wiarygodny odczyt 0 podczas spoczynku.

Kiedy wartości X, Y są odczytywane, są najpierw konwertowane na radiany za pomocą funkcji atan2() w bibliotece math.h. Wyjaśnienie tej funkcji wykracza poza zakres tej instrukcji, ale proszę, sprawdź to - jest to dość prosta sztuczka geometrii!

Wreszcie, aby ułatwić życie tym z nas, którzy pracowali w stopniach, a nie w radach, wartość rad obliczona przez atan2() jest konwertowana na stopnie.

W górnej części pętli znajduje się mały fragment kodu, który umożliwia kliknięcie przycisku chwilowego na joysticku, aby przenieść lokalizację „domową”. Było to niezwykle przydatne podczas testowania kodu, ale zostawiłem to, ponieważ widzę, jak może być przydatne w niektórych przypadkach.

Teraz przejdźmy do głównej części kodu! zaczynamy od dwukrotnego odczytania z joysticka współrzędnych X, Y oddzielonych opóźnieniem 10ms, a następnie sprawdzenia, czy są takie same - stwierdziłem, że joystick czasami wyprowadzał sporadyczne odczyty, a to niewielkie opóźnienie wystarczyło, aby zatrzymać pracę silnika na ich podstawie. Jest to również na tyle krótkie opóźnienie, że nie wydaje się kolidować z celowymi danymi wejściowymi.

Reszta kodu jest raczej oczywista i zrobiłem co w mojej mocy, aby ją udokumentować; Seria poleceń JEŻELI porównuje aktualny kąt joysticka z kątem silnika i przesuwa silnik do tego kąta. 28BYJ-48 ma 5.689 kroków na stopień, dlatego pomnożymy wymagany ruch przez tę pozornie nieparzystą liczbę!

Jedyną częścią kodu, która wymaga najwięcej wyjaśnień, jest to, co nazwałem „zawijanym przypadkiem”. Mimo że joystick i silnik były m.in. +175°, a następnie drążek przesunął się do -175° (ruch drążka o zaledwie 10°, z północnego zachodu na południe od zachodu), silnik przesunąłby się W NIEWŁAŚCIWYM KIERUNKU o 350°! aby to wyjaśnić, napisano specjalny przypadek.

Sprawa zawijana zaczyna się od sprawdzenia, czy silnik i joystick mają przeciwne znaki, tj. silnik jest dodatni, a joystick ujemny lub odwrotnie. Sprawdza również, czy suma wartości bezwzględnych (to znaczy wartości dodatnich) joysticka i silnika jest większa niż 180°.

Jeśli oba te stwierdzenia są prawdziwe, funkcja sprawdza, czy silnik musi się poruszać zgodnie z ruchem wskazówek zegara (wartość silnika jest ujemna) czy przeciwnie do ruchu wskazówek zegara (jeśli wartość silnika jest dodatnia).

Wartości bezwzględne kąta silnika i kąta joysticka są sumowane i odejmowane od 360° w celu określenia odległości do przemieszczenia. Wreszcie, kąt silnika (który teraz odzwierciedla kąt joysticka) jest aktualizowany jako taki.

Krok 3: ZAKOŃCZONE

Pozostało więc tylko przesłać kod do Arduino i uruchomić go! Obejrzyj powyższy film, aby dowiedzieć się, jak działa projekt. Byłoby to przydatne w przypadku gimbali kamer, ramion robotów i wielu innych zastosowań!

Jeśli użyjesz kodu, daj mi znać, a jeśli zauważysz, że kod można poprawić, chętnie wysłucham Twojej opinii.

Zalecana: