Obsah:

Část 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 Steps
Část 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 Steps

Video: Část 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 Steps

Video: Část 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 Steps
Video: Part 8 ARM Assembly MSP432 TI RSLK Lab 6 GPIO Brief Use of Stack, Nested Subroutines 2024, Listopad
Anonim
Image
Image
Hardware
Hardware

Ahoj. Toto je další splátka, kde nadále používáme sestavení ARM (namísto jazyka vyšší úrovně). Inspirací pro tento Instructable je Lab 6 Texas Instruments Robotics System Learning Kit nebo TI-RSLK.

Budeme používat mikrokontrolér ze sady, vývojovou desku MSP432 LaunchPad, ale možná najdete něco užitečného pro extrahování z tohoto Instructable, i když nepoužíváte LaunchPad nebo se řídíte T. I. osnovy.

Začali jsme Instructable představujícím ARM Assembly, vývojové prostředí a jak vytvořit projekt.

Následující Instructable on ARM Assembly představil způsob interakce se vstupem/výstupem (GPIO).

Poté jsme rozšířili své znalosti a představili funkce, ovládání LED a spínačů.

Nyní s tímto Instructable můžeme použít to, co jsme se naučili, dělat něco zábavnějšího, užitečnějšího: detekovat čáru.

To nám může později pomoci, když postavíme robota sledujícího linku.

V učebních osnovách se většina programování provádí v jazyce C nebo C ++, ale je užitečné seznámit se s montáží, než začneme v závislosti na jazycích vyšší úrovně a knihovnách.

Krok 1: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

Nechci podrobně přehodnocovat hardware, protože již existují zdroje, ale v případě potřeby přidáme vysvětlení.

Pro tento Instructable použijeme Reflectance Sensor Arrray od Pololu, protože je součástí TI-RSLK (robotické sady). Je to ten, který se používá v kurzu a v laboratoři 6 osnov.

Pokud to nemáte, můžete použít jakýkoli IR detektor (nebo jejich řadu), který vydává digitální signál, VYSOKÝ nebo NÍZKÝ, pro přítomnost a nepřítomnost.

Senzor pole je nejlepší, protože může pomoci zjistit, zda se nacházíme přímo ve středu čáry nebo mimo na jedné straně. Navíc, jak uvidíme později, nám to může pomoci detekovat úhel robota vzhledem k přímce.

Pole odrazivosti má detektory velmi blízko sebe. To znamená, že bychom měli dostat více detekčních signálů, samozřejmě v závislosti na tloušťce čáry.

Pokud ano, pak pokud robot není přímo v linii s linkou, pak by měl vrátit výstup, že linka je širší, než by měla být (protože jsme pod úhlem).

Pro lepší vysvětlení výše uvedeného se podívejte na dokument Lab 6.

Zde je několik užitečných pokynů, které vám pomohou při zapojení / připojení senzoru k vývojové desce MSP432 LaunchPad.

Do tohoto kroku jsem také přidal stejné (podobné?) Instrukce pdf.

Pokud si pečlivě přečtete dokumenty Pololu, vysvětlí důvod „obtoku 3,3 V“, že budete chtít propojit, pokud místo 5 V používáte 3,3 V.

Protože ještě nestavíme robota, ale místo toho se jen učíme o sestavení ARM a také o tom, jak komunikovat s částmi (subsystémy) robota, nemusíme do puntíku dodržovat výše uvedené pokyny.

Prozatím se připojení pole senzorů linek jen scvrkává/redukuje na následující:

  • připojte 3,3 V a GND z desky MSP432 k poli senzorů.
  • připojte portový pin (doporučuji P5.3) z MSP432 ke kolíku aktivujícímu LED na poli linkového snímače. Tento kolík na senzoru je mezi 3,3 V a GND.
  • připojte všech osm pinů/bitů jednoho portu (doporučuji P7.0 až P7.7) k osmi pinům pole senzorů označeným „1“až „8“. To jsou řádky, které budou VYSOKÉ nebo NÍZKÉ podle toho, co cítí.

Jak vidíte na obrázcích tohoto kroku a ve videu, nepřipojil jsem snímač k podvozku robota, protože jsem chtěl snadné programování, ladění, testování, učení.

Takže se vším, co je připojeno, jsme připraveni se dostat do softwaru.

Krok 2: Sledování řádku

Sledování řádku
Sledování řádku
Sledování řádku
Sledování řádku

Senzor odrazného pole je docela šikovný, protože může pomoci alespoň dvěma způsoby.

  • Determine je robot vystředěný na lince nebo unášený stranou.
  • Je robot zarovnán ve směru čáry, nebo je pod úhlem.

Každý z detektorů pole v podstatě poskytuje jeden bit informací, buď VYSOKÝ nebo NÍZKÝ.

Cílem je spojit všechny tyto bity do jednoho čísla nebo jednoho bitového vzoru a použít tento vzor k rozhodování (aby se pohyboval správně).

Krok 3: Než budeme moci opravdu začít…

.. musíme se naučit něco nového o programování sestavení ARM. A tím nemyslím jen další pokyn. Ty bývají drobné.

Doposud jsme „zásobník“v našich programech nepoužívali.

Spoléhali jsme na používání většiny hlavních registrů CPU globálně v různých podprogramech.

Jedna věc, kterou jsme udělali, bylo uložení a obnovení adresy LR (link register) pro jednu funkci - tu, která volala několik dalších funkcí. (Zde používám zaměnitelně „funkce“a „podprogram“).

To, co jsme dělali, není dobré. Co když chceme vnořit další funkce? Co když máme více než jednu úroveň vnoření?

V předchozích příkladech jsme se rozhodli použít registr R6 jako úložiště pro LR nebo zpáteční adresu. Pokud ale chceme provést další/hlubší vnoření, nemůžeme nadále měnit hodnotu R6. Museli bychom vybrat ještě jeden registr. A další. A pak je zatěžující sledovat, který registr cpu jádra uchovává, který LR obnovit do které funkce.

Nyní se tedy podíváme na „hromádku“.

Krok 4: Stack

Zde je nějaký materiál na čtení vysvětlující zásobník.

Jsem větším zastáncem několika myšlenek:

  • jen tolik teorie, kolik je potřeba, rychle se pusťte do praxe
  • učte se podle potřeby, soustřeďte se na to, abyste skutečně něco dělali, a ne jen na bezúčelná cvičení nebo příklady.

Existuje spousta dokumentace ARM a MSP432 online, která hovoří o zásobníku, takže to všechno nebudeme přehodnocovat. Rovněž zde omezím využití zásobníku na minimum - uložení zpáteční adresy (Link Register).

V zásadě potřebujeme pouze pokyny:

PUSH {register list}

POP {registrovat seznam}

Nebo v našem případě konkrétně:

PUSH {LR}

POP {LR}

Takže montážní funkce/podprogram by vypadal takto:

funcLabel:.asmfunc

PUSH {LR}; toto by měl být pravděpodobně jeden z prvních pokynů ke vstupu.; více kódu zde..; bla bla bla…; ok, jsme hotovi s funkcí, připraveni vrátit se zpět k volání funkce POP {LR}; tím se obnoví správná zpáteční adresa zpět k volání; funkce. BX LR; vrátit.endasmfunc

Video prochází živým příkladem několika vnořených funkcí.

Krok 5: Software

Připojený soubor s názvem „MSP432_Chapter …“má spoustu dobrých informací o portech MSP432 a z tohoto dokumentu získáváme následující porty, registry, adresy atd. Je to však trochu datované. Neviděl jsem však podrobné adresy uvedené pro Port 5 a vyšší. (pouze „alternativní funkce“). Ale i tak je to užitečné.

Budeme používat dva porty. P5, P7, P1 a P2.

Výstup P5.3 (jeden bit) bude ovládat povolení IR LED na senzoru. Používáme P5.3, protože je to odkrytý pin na stejném záhlaví jako ostatní připojení MSP432 směřující do pole senzorů.

P7.0 až P7.7 bude osm vstupů, které shromažďují data ze senzoru; co „vidí“.

P1.0 je jediná červená LED a mohli bychom ji použít k poskytnutí některých údajů o datech.

P2.0, P2.1, P2.2 je RGB LED a můžeme ji také použít s různými barevnými možnostmi, abychom získali údaje o senzorech.

Pokud jste prošli předchozími instruktážemi souvisejícími s tím vším, pak už víte, jak program nastavit.

Stačí mít deklarační sekci pro porty a bity atd.

Budete mít "hlavní" sekci.

Měla by existovat smyčka, kde průběžně čteme data z P7, rozhodujeme o těchto datech a podle toho rozsvítíme dvě LED diody.

Zde jsou opět adresy Registru přístavu:

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

Tučně je to, co pro tento Instructable použijeme.

Programové kroky ke čtení infračervených detektorů

Následuje kód psuedo pro psaní programu v jazyce C, ale stále je užitečný a ve verzi pro sestavení programu ho budeme docela pozorně sledovat.

hlavní program0) Inicializujte // porty, zatímco (1) {1) Nastavte P5.3 vysoko (zapněte IR LED) 2) Nastavte P7.0 jako výstup a nastavte jej vysoko (nabíjení kondenzátoru) 3) Počkejte 10 us, Clock_Delay1us (10); 4) Vytvořte P7.0 jako vstup 5) Spusťte tuto smyčku 10 000krát a) Přečtěte P7.0 (převádí napětí na P7.0 na binární) b) Výstupní binární na P1.0 (umožňuje vidět binární v reálném čase) 6) Nastavit P5.3 na nízkou úroveň (vypnout IR LED, šetřit energii) 7) Počkat 10 ms, Clock_Delay1ms (10); } // opakovat (zpět na while ())

Krok 6: Pojďme vylepšit kód

Účelem nebo použitím pole Pololu IR LED je detekovat čáru a zjistit, zda je robot (budoucnost) přímo vystředěn na lince nebo mimo ni. Vzhledem k tomu, že čára má určitou tloušťku, je -li pole senzorů přímo kolmé na řádek, N počet senzorů bude mít jiné hodnoty než ostatní, zatímco pokud bude pole IR LED v určitém úhlu (ne kolmé), pak Páry N+1 nebo N+2 IR LED/detektor by nyní měly poskytovat jiné hodnoty.

Podle toho, kolik senzorů indikuje přítomnost přímky, bychom tedy měli vědět, jestli jsme vystředěni a jestli jsme pod úhlem nebo ne.

Pro tento závěrečný experiment se podívejme, jestli můžeme získat červenou LED a RGB LED, aby nám poskytly více informací o tom, co nám pole senzorů říká.

Video jde do všech detailů. Konečný kód je také připojen.

Tím je řada ARM Assembly související s GPIO dokončena. Doufáme, že se později vrátíme s dalším shromážděním ARM.

Děkuji.

Doporučuje: