instructables Sterowanie prędkością silnika VHDL Decyduj o kierunku i prędkości Lewy i prawy regulator prędkości

NOTATKA: Ta strona jest częścią większej kompilacji. Upewnij się, że zaczynasz TUTAJ, aby zrozumieć, gdzie poniższe elementy pasują do większego projektu
Nadview
Sterowanie prędkością i kierunkiem silnika to jeden z dwóch głównych działów w robocie fotodetektorowym, drugi to dział fotodetektora lub detektora światła. Podczas gdy dział fotodetektorów koncentruje się na widzeniu robota, dział kontroli prędkości silnika i kierunku skupia się na ruchu robota. Sterowanie prędkością i kierunkiem silnika przetwarza dane pochodzące z działu fotodetektorów i daje fizyczny wynik w postaci ruchu silnika.
Celem tego podziału jest sterowanie prędkością i kierunkiem zarówno lewego, jak i prawego silnika robota poszukującego światła. Aby określić te wartości, będziesz potrzebować rozmiaru i położenia światła, które zostało przechwycone przez kamerę i przetworzone przez progowanie. Będziesz także potrzebował zmierzonej prędkości na każdym z silników. Z tych wejść będziesz mógł wyprowadzić wartość PWM (modulacja szerokości impulsu) dla każdego z silników.
Aby to osiągnąć, musisz utworzyć te moduły VHDL (również połączone poniżej):
- Kontrola
- Obliczenie błędu
- Konwersja binarna
- Brak źródła światła
Możesz zobaczyć kod VHDL dla tego działu tutaj.
Zaopatrzenie
Zalecamy kodowanie za pomocą ISE Design Suite 14.7, ponieważ można go również używać do testowania kodu w języku VHDL. Aby jednak wgrać kod do BASYS 3, będziesz musiał zainstalować Vivado (wersja 2015.4 lub 2016.4) i napisać ograniczenie z rozszerzeniem .xdc.
Sterowanie prędkością silnika VHDL: Zdecyduj o kierunku i prędkości, lewy i prawy regulator prędkości: Strona 1
KROK INSTRUKCJI
Krok 1: Kontrola
Aby zrozumieć, jak kontrolować zachowanie robota poszukującego światła, wyjaśnimy pożądane zachowanie robota, gdy zobaczy źródło światła. To zachowanie będzie kontrolowane w zależności od położenia i rozmiaru źródła światła.
Zastosowany algorytm jest analogiczny do kontrolera robota RC, z jedną dźwignią, którą można obrócić w lewo lub w prawo, a drugą dźwignią, którą można obrócić do przodu lub do tyłu.
Aby szukać światła, chcesz, aby robot poruszał się po linii prostej, jeśli źródło światła znajduje się tuż przed robotem. Aby to zrobić, potrzebujesz tej samej prędkości zarówno dla lewego, jak i prawego silnika. Jeśli światło znajduje się po lewej stronie robota, chcesz, aby prawy silnik poruszał się szybciej niż lewy, aby robot mógł skręcić w lewo w kierunku światła. I odwrotnie, jeśli światło znajduje się po prawej stronie robota, chcesz, aby lewy silnik poruszał się szybciej niż prawy silnik, aby robot mógł skręcić w prawo w kierunku światła. Jest to analogiczne do lewej dźwigni kontrolera RC, gdzie możesz kontrolować, czy chcesz przesunąć robota w lewo, w prawo czy prosto.
Następnie chcesz, aby robot poruszał się do przodu, jeśli źródło światła jest daleko (małe źródło światła), lub cofał się, jeśli wykryte źródło światła jest zbyt blisko (duże źródło światła). Chcesz również, aby im dalej robot znajdował się od źródła światła, tym szybciej się poruszał. Jest to analogiczne do prawej dźwigni kontrolera RC, gdzie możesz kontrolować, czy chcesz poruszać się do przodu, czy do tyłu i jak szybko chcesz, aby się poruszał.
Następnie możesz wyprowadzić wzór matematyczny na prędkość każdego z silników, a my wybieramy zakres prędkości od -255 do 255. Wartość ujemna oznacza, że silnik będzie się obracał do tyłu, podczas gdy wartość dodatnia oznacza, że silnik będzie się obracał do przodu.
To jest podstawowy algorytm ruchu tego robota. Aby dowiedzieć się więcej o tym module, kliknij tutaj.
Krok 2: Obliczanie błędów
Ponieważ masz już docelową prędkość i kierunek silników, chcesz również wziąć pod uwagę zmierzoną prędkość i kierunek silników. Jeśli osiągnął docelową prędkość, chcemy, aby silnik poruszał się wyłącznie na podstawie swojego pędu. Jeśli nie, chcemy zwiększyć prędkość silnika. W teorii sterowania jest to znane jako system sterowania ze sprzężeniem zwrotnym w pętli zamkniętej.
Aby dowiedzieć się więcej o tym module, kliknij tutaj.
Krok 3: Konwersja binarna
Z poprzednich obliczeń znasz już działania potrzebne dla każdego z silników. Jednak obliczenia są wykonywane przy użyciu binarnego znaku. Celem tego modułu jest konwersja tych wartości ze znakiem na wartość, którą może odczytać generator PWM, czyli kierunek (zgodnie lub przeciwnie do ruchu wskazówek zegara) i prędkość (w zakresie od 0 do 255). Ponadto, ponieważ sprzężenie zwrotne z silnika jest mierzone w postaci binarnej bez znaku, potrzebny jest inny moduł do konwersji wartości bez znaku (kierunek i prędkość) na wartość ze znakiem, którą można obliczyć za pomocą modułu obliczania błędów. Aby dowiedzieć się więcej o tym module, kliknij tutaj.
Krok 4: Brak źródła światła
Stworzyłeś robota, który porusza się w poszukiwaniu światła, gdy robot wykryje światło. Ale co się stanie, gdy robot nie wykryje światła? Celem tego modułu jest dyktowanie, co należy zrobić, gdy wystąpi taki warunek.
Najprostszym sposobem na znalezienie źródła światła jest obracanie się robota w miejscu. Jeśli po obracaniu się przez określoną liczbę sekund robot nadal nie znalazł źródła światła, chcesz, aby przestał się poruszać, aby oszczędzać energię. Po kolejnej ustalonej liczbie sekund robot powinien ponownie obrócić się w miejscu, szukając światła. Aby dowiedzieć się więcej o tym module, kliknij tutaj.
Krok 5: Jak to działa
Wyjaśnienie to można znaleźć na powyższym obrazku. Jak wspomniano na początku tej instrukcji, będziesz potrzebować danych wejściowych „rozmiar” i „pozycja” z podziału progowego. Aby upewnić się, że te dane wejściowe są prawidłowe (npample, gdy otrzymasz rozmiar = 0, rozmiar jest naprawdę zerowy, ponieważ kamera nie wykrywa światła, a nie dlatego, że kamera wciąż się inicjowała) będziesz także potrzebował jakiegoś wskaźnika, który nazywamy „READY”. Dane te będą przetwarzane przez układ sterowania (Ctrl. vhd) w celu określenia docelowej prędkości każdego silnika (9 bitów ze znakiem).
Aby uzyskać bardziej stabilną moc wyjściową silnika, chcesz użyć sprzężenia zwrotnego w systemie z zamkniętą pętlą. Wymaga to wprowadzenia „kierunku” i „prędkości” każdego silnika z działu pomiaru prędkości silnika. Ponieważ chcesz uwzględnić te dane wejściowe w swoich obliczeniach, będziesz musiał przekonwertować te wartości bez znaku na 9-bitowy znak binarny. Odbywa się to za pomocą konwertera binarnego bez znaku na podpisany (US2S.vhd).
Obliczenie błędu (error. vhd) polega na odjęciu zmierzonej prędkości od prędkości docelowej w celu określenia działania dla każdego silnika. Oznacza to, że gdy oba mają tę samą wartość, odejmowanie wynosi zero, a silnik będzie się poruszał wyłącznie na podstawie swojego pędu. Możesz także dodać mnożnik, aby robot mógł szybciej osiągnąć prędkość docelową.
Ponieważ sterownik silnika potrzebuje prędkości i kierunku każdego silnika, musisz przetłumaczyć podpisane wartości działania na dwie oddzielne wartości bez znaku: prędkość (1 bit) i kierunek (8 bitów). Odbywa się to za pomocą konwertera binarnego typu sign-to-unsigned (S2US.vhd) i staje się danymi wejściowymi do działu sterowania silnikami.
Dodaliśmy również moduł określający, co zrobić, gdy światło nie zostanie wykryte (brak licznika światła. Bhd). Ponieważ ten moduł jest w zasadzie licznikiem, będzie liczyć, jak długo robot musi się obracać lub pozostać w miejscu. Dzięki temu robot „widzi” swoje otoczenie, a nie tylko to, co znajduje się przed nim, i oszczędza energię akumulatora, gdy żadne źródło światła nie jest naprawdę dostępne.
Krok 6: Połącz Files
Aby połączyć files należy podłączyć sygnały z każdego modułu. Aby to zrobić, musisz utworzyć nowy moduł najwyższego poziomu file. Wstaw wejścia i wyjścia poprzednich modułów jako komponenty, dodaj sygnały do połączeń i przypisz każdy port do odpowiedniej pary. Możesz odnieść się do połączeń na powyższej ilustracji i spojrzeć na kod tutaj.
Krok 7: Przetestuj
Po ukończeniu całego kodu musisz wiedzieć, czy Twój kod działa, zanim prześlesz go na tablicę, zwłaszcza że części kodu mogą być tworzone przez różne osoby. Wymaga to stanowiska testowego, w którym wprowadzisz fikcyjne wartości i zobaczysz, czy kod zachowuje się tak, jak chcemy. Możesz zacząć od przetestowania każdego modułu, a jeśli wszystkie działają poprawnie, możesz przetestować moduł najwyższego poziomu.
Krok 8: Wypróbuj na sprzęcie
Po przetestowaniu kodu na komputerze możesz przetestować kod na prawdziwym sprzęcie. Musisz wprowadzić ograniczenie file na Vivado (.xdc file dla BASYS 3) do kontrolowania, które wejścia i wyjścia trafiają do których portów.
WAŻNA WSKAZÓWKA: Nauczyliśmy się na własnej skórze, że komponenty elektryczne mogą mieć maksymalną wartość prądu lub objętościtages. Pamiętaj, aby zapoznać się z arkuszem danych dla wartości. W przypadku PMOD HB5 upewnij się, że ustawiłeś głośnośćtage ze źródła zasilania o napięciu 12 woltów (ponieważ jest to wymagana objtage dla silnika), a prąd tak mały, jak potrzebny do ruchu silnika.
Krok 9: Połącz go z innymi częściami
Jeśli poprzednie kroki powiodły się, połącz kod z innymi grupami, aby ostateczny kod został przesłany do robota. Następnie voila! Udało ci się stworzyć robota poszukującego światła.
Krok 10: Współtwórcy
Od lewej do prawej:
- Antonius Gregorius Deaven Rivaldi
- Feliks Wiguna
- Mikołaj Sanjaya
- Ryszard Medyanto

Bardzo dobrze: Sterowanie prędkością silnika VHDL: Zdecyduj o kierunku i prędkości, lewy i prawy regulator prędkości: Strona 6
Dziękuję za ponowneviewing! Ten projekt jest w rzeczywistości tylko jedną częścią projektu klasowego (Light Seeking Robot z płytą BASYS 3 i kamerą OV7670), więc wkrótce dodam link do instrukcji klasy!
Wspaniały: Nie mogę się doczekać, aż wszystko zostanie złożone.
Dokumenty / Zasoby
![]() |
instructables Sterowanie prędkością silnika VHDL Decyduj o kierunku i prędkości Lewy i prawy regulator prędkości [plik PDF] Instrukcje Kontrola prędkości silnika VHDL Decyduj o kierunku i prędkości Kontroler prędkości w lewo iw prawo, Prędkość silnika VHDL, Sterowanie Decyduj o kierunku i prędkości Kontroler prędkości w lewo i w prawo |





