Spisu treści:

Część 3: GPIO: Montaż ramienia: Popychacz linii: TI-RSLK: 6 kroków
Część 3: GPIO: Montaż ramienia: Popychacz linii: TI-RSLK: 6 kroków

Wideo: Część 3: GPIO: Montaż ramienia: Popychacz linii: TI-RSLK: 6 kroków

Wideo: Część 3: GPIO: Montaż ramienia: Popychacz linii: TI-RSLK: 6 kroków
Wideo: Część 3 : Montaż MECHANICZNY - Budujemy rower elektryczny dla dziewczyny! :) 2024, Lipiec
Anonim
Image
Image
Sprzęt
Sprzęt

Dzień dobry. Jest to kolejna odsłona, w której nadal używamy asemblera ARM (zamiast języka wyższego poziomu). Inspiracją dla tego Instructable jest laboratorium 6 zestawu edukacyjnego Texas Instruments Robotics System Learning Kit lub TI-RSLK.

Będziemy używać mikrokontrolera z zestawu, płytki rozwojowej MSP432 LaunchPad, ale być może znajdziesz coś przydatnego do wyodrębnienia z tego Instructable, nawet jeśli nie używasz LaunchPada lub nie postępujesz zgodnie z T. I. program.

Zaczęliśmy od Instructable wprowadzającego ARM Assembly, środowiska programistycznego i sposobu tworzenia projektu.

Kolejny Instructable on ARM Assembly przedstawił sposób interakcji z wejściem/wyjściem (GPIO).

Następnie poszerzyliśmy naszą wiedzę i wprowadziliśmy funkcje sterujące diodami LED i przełącznikami.

Teraz dzięki tej instrukcji możemy wykorzystać to, czego się nauczyliśmy, aby zrobić coś zabawniejszego, bardziej użytecznego: wykryć linię.

Może nam to pomóc później, gdy zbudujemy robota podążającego za linią.

W programie nauczania większość programowania jest wykonywana w C lub C++, ale warto zapoznać się z asemblerem, zanim zaczniemy, w zależności od języków wyższego poziomu i bibliotek.

Krok 1: Sprzęt

Sprzęt
Sprzęt
Sprzęt
Sprzęt
Sprzęt
Sprzęt

Nie chcę szczegółowo przerabiać sprzętu, ponieważ istnieją już źródła, ale w razie potrzeby dodamy wyjaśnienia.

W tym Instructable użyjemy matrycy czujnika odbicia firmy Pololu, ponieważ jest ona częścią TI-RSLK (zestaw robota). Jest to ten, który jest używany w kursie oraz w laboratorium 6 programu nauczania.

Jeśli go nie masz, możesz użyć dowolnego detektora podczerwieni (lub serii takich), który wysyła sygnał cyfrowy, WYSOKI lub NISKI, informujący o obecności i nieobecności.

Czujnik macierzowy jest najlepszy, ponieważ może pomóc wykryć, czy jesteśmy w samym środku linii, czy z boku. Dodatkowo, jak zobaczymy później, może nam pomóc w wykryciu kąta robota względem linii.

Matryca odbiciowa ma detektory bardzo blisko siebie. Oznacza to, że powinniśmy otrzymać wiele sygnałów detekcji, oczywiście w zależności od grubości linii.

Jeśli tak, to jeśli robot nie jest bezpośrednio w linii, to powinien zwrócić wynik, że linia jest szersza niż powinna (ponieważ jesteśmy pod kątem).

Aby uzyskać lepsze wyjaśnienie powyższego, spójrz na dokument Lab 6.

Aby uzyskać pomoc w okablowaniu / podłączaniu czujnika do płytki rozwojowej MSP432 LaunchPad, oto kilka pomocnych instrukcji.

Dodałem również te same (podobne?) instrukcje pdf do tego kroku.

Jeśli uważnie przeczytasz dokumenty Pololu, wyjaśnią one przyczynę „obejścia 3,3 V”, że będziesz chciał skoczyć, jeśli używasz 3,3 V zamiast 5 V.

Ponieważ nie budujemy jeszcze robota, a jedynie uczymy się montażu ARM, a także interakcji z częściami (podsystemami) robota, nie musimy wykonywać powyższych instrukcji co do litery.

Na razie podłączenie matrycy czujników linii po prostu sprowadza się do następujących wartości:

  • podłącz 3,3 V i GND z płyty MSP432 do tablicy czujników.
  • podłącz pin portu (sugeruję P5.3) z MSP432 do pinu włączania LED na tablicy czujników linii. Ten pin na czujniku ma wartość między 3,3 V a GND.
  • podłącz wszystkie osiem pinów / bitów pojedynczego portu (sugeruję P7.0 do P7.7) do ośmiu pinów tablicy czujników oznaczonych "1" do "8". Są to linie, które będą wysokie lub niskie w zależności od tego, co wyczują.

Jak widać na zdjęciach z tego kroku i na filmie, nie podłączałem czujnika do obudowy robota, ponieważ zależało mi na łatwości programowania, debugowania, testowania, uczenia się.

Tak więc, gdy wszystko jest połączone, jesteśmy gotowi do wejścia do oprogramowania.

Krok 2: Podążanie za linią

Śledzenie linii
Śledzenie linii
Śledzenie linii
Śledzenie linii

Czujnik matrycy odbiciowej jest całkiem fajny, ponieważ może pomóc na co najmniej dwa sposoby.

  • Ustal, czy robot jest wyśrodkowany na linii, czy odpływa w bok.
  • Czy robot jest ustawiony w kierunku linii, czy pod kątem.

Każdy z detektorów tablicy zasadniczo dostarcza jeden bit informacji, albo WYSOKI, albo NISKI.

Pomysł polega na połączeniu wszystkich tych bitów w jedną liczbę lub pojedynczy wzór bitowy i użycie tego wzorca do podejmowania decyzji (aby poruszać się poprawnie).

Krok 3: Zanim naprawdę zaczniemy…

.. musimy nauczyć się czegoś nowego o programowaniu w asemblerze ARM. I nie chodzi mi tylko o kolejną instrukcję. Te wydają się być niewielkie.

Do tej pory nie używaliśmy w naszych programach „stosu”.

Polegaliśmy na używaniu większości rejestrów procesora podstawowego globalnie w różnych podprogramach.

Jedyną rzeczą, jaką zrobiliśmy, było zapisanie i przywrócenie adresu LR (rejestru linków) dla jednej funkcji - tej, która wywołała kilka innych funkcji. (Używam tu zamiennie "funkcji" i "podprogramu").

To, co robimy, nie jest dobre. A jeśli chcemy zagnieździć inne funkcje? Co jeśli mamy więcej niż jeden poziom zagnieżdżenia?

W poprzednich przykładach wybraliśmy użycie rejestru R6 jako magazynu dla LR lub adresu zwrotnego. Ale jeśli chcemy wykonać dalsze/głębsze zagnieżdżanie, nie możemy dalej zmieniać wartości R6. Musielibyśmy wybrać jeszcze jeden rejestr. I kolejny. A potem staje się uciążliwe, aby śledzić, który rejestr procesora głównego zawiera który LR przywrócić do której funkcji.

Więc teraz przyjrzyjmy się „stosowi”.

Krok 4: Stos

Oto kilka materiałów do czytania wyjaśniających stos.

Jestem większym zwolennikiem kilku pomysłów:

  • tylko tyle teorii, ile potrzeba, szybko idź na praktyczność
  • ucz się w razie potrzeby, skup się na robieniu czegoś, a nie tylko bezcelowych ćwiczeniach lub przykładach.

Istnieje mnóstwo dokumentacji ARM i MSP432 online, która mówi o stosie, więc nie zamierzam tego wszystkiego przerabiać. Zamierzam również ograniczyć użycie stosu do absolutnego minimum - zapisując adres zwrotny (Rejestr Linków).

Zasadniczo potrzebujemy tylko instrukcji:

PUSH {lista rejestrów}

POP{lista rejestrów}

Lub, w naszym przypadku, konkretnie:

NACIŚNIJ {LR}

POP {LR}

Tak więc funkcja/podprogram assemblera wyglądałaby tak:

funcLabel:.asmfunc

PUSH{LR};to prawdopodobnie jedna z pierwszych instrukcji przy wejściu.; zrób więcej kodu tutaj..; bla.. bla… bla…; ok, skończyliśmy z funkcją, gotową do powrotu do wywołania funkcji POP{LR};to przywraca poprawny adres powrotu z powrotem do wywołania; funkcjonować. BX LR; powrót.endasmfunc

Wideo przedstawia na żywo przykład kilku zagnieżdżonych funkcji.

Krok 5: Oprogramowanie

Załączony plik oznaczony "MSP432_Chapter…" zawiera wiele dobrych informacji o portach MSP432, a z tego dokumentu otrzymujemy następujące porty, rejestry, adresy itp. Jest jednak trochę przestarzały. Jednak nie widziałem szczegółowych adresów wymienionych dla Portu 5 i wyższych. (tylko "funkcje alternatywne"). Ale nadal się przydaje.

Będziemy używać dwóch portów. P5, P7, P1 i P2.

Wyjście P5.3 (jednobitowe) będzie sterować włączeniem diody podczerwieni na czujniku. Używamy P5.3, ponieważ jest to wyeksponowany pin na tym samym nagłówku, co inne połączenia MSP432 idące do matrycy czujników.

P7.0 do P7.7 to osiem wejść, które zbierają dane z czujnika; co „widzi”.

P1.0 to pojedyncza czerwona dioda LED i możemy jej użyć do wskazania danych.

P2.0, P2.1, P2.2 to dioda LED RGB i możemy ją również wykorzystać, z różnymi możliwościami kolorów, aby wskazać nam dane czujnika.

Jeśli przeszedłeś przez poprzednie instrukcje związane z tym wszystkim, to już wiesz, jak skonfigurować program.

Wystarczy mieć sekcję deklaracji dla portów i bitów itp.

Będziesz mieć sekcję „główną”.

Powinna istnieć pętla, w której stale odczytujemy dane z P7, podejmujemy decyzję o tych danych i odpowiednio zapalają się dwie diody LED.

Oto znowu adresy rejestru portów:

  • GPIO P1: 0x4000 4C00 + 0 (parzyste adresy)
  • GPIO P2: 0x4000 4C00 + 1 (adresy nieparzyste)
  • GPIO P3: 0x4000 4C00 + 20 (parzyste adresy)
  • GPIO P4: 0x4000 4C00 + 21 (adresy nieparzyste)
  • GPIO P5: 0x4000 4C00 + 40 (parzyste adresy)
  • GPIO P6: 0x4000 4C00 + 41 (adresy nieparzyste)
  • GPIO P7: 0x4000 4C00 + 60 (parzyste adresy)
  • GPIO P8: 0x4000 4C00 + 61 (adresy nieparzyste)
  • GPIO P9: 0x4000 4C00 + 80 (parzyste adresy)
  • GPIO P10: 0x4000 4C00 + 81 (adresy nieparzyste)

To, co jest pogrubione, to to, czego użyjemy w tym Instruktażowym.

Kroki programu do odczytu detektorów IR

Poniżej znajduje się pseudokod służący do pisania programu w C, ale nadal jest użyteczny i będziemy go dość dokładnie śledzić w wersji programu w asemblerze.

program główny0) Inicjalizuj porty while(1) { 1) Ustaw P5.3 na wysoki (włącz diodę IR) 2) Ustaw P7.0 jako wyjście i ustaw na wysoki (ładowanie kondensatora) 3) Odczekaj 10 us, Clock_Delay1us (10); 4) Ustaw P7.0 jako wejście 5) Uruchom tę pętlę 10 000 razy a) Odczytaj P7.0 (przekształca napięcie na P7.0 na binarne) b) Wyjście binarne na P1.0 (pozwala zobaczyć binarne w czasie rzeczywistym) 6) Ustaw P5.3 na niski (wyłącz diodę podczerwieni, oszczędzanie energii) 7) Odczekaj 10 ms, Clock_Delay1ms(10); } // powtórz (powrót do while())

Krok 6: Poprawmy kod

Celem lub zastosowaniem matrycy LED Pololu IR jest wykrycie linii i sprawdzenie, czy robot (przyszły) jest bezpośrednio wyśrodkowany na linii, czy z boku. Ponadto, ponieważ linia ma pewną grubość, jeśli matryca czujników jest prostopadła do linii, liczba N czujników będzie miała inny odczyt niż reszta, natomiast jeśli matryca diod podczerwieni jest pod pewnym kątem (nie prostopadle), to Pary LED/detektor podczerwieni N+1 lub N+2 powinny teraz dawać inny odczyt.

Tak więc, w zależności od tego, ile czujników wskazuje na obecność linii, powinniśmy wiedzieć, czy jesteśmy wyśrodkowani i czy jesteśmy pod kątem, czy nie.

W tym ostatnim eksperymencie zobaczmy, czy możemy uzyskać czerwoną diodę LED i diodę LED RGB, aby uzyskać więcej informacji o tym, co mówi nam tablica czujników.

Film zawiera wszystkie szczegóły. Załączony jest również ostateczny kod.

To kończy serię montażu ARM związanego z GPIO. Mamy nadzieję, że wrócimy z większą ilością montażu ARM w późniejszym czasie.

Dziękuję Ci.

Zalecana: