Obsah:

Časť 3: GPIO: Zostava ARM: Nasledovník linky: TI-RSLK: 6 krokov
Časť 3: GPIO: Zostava ARM: Nasledovník linky: TI-RSLK: 6 krokov

Video: Časť 3: GPIO: Zostava ARM: Nasledovník linky: TI-RSLK: 6 krokov

Video: Časť 3: GPIO: Zostava ARM: Nasledovník linky: TI-RSLK: 6 krokov
Video: BTT Manta M8P v2 - Basics with CB1 v2.2 2024, Júl
Anonim
Image
Image
Hardvér
Hardvér

Ahoj. Toto je ďalšia časť, v ktorej naďalej používame zostavu ARM (namiesto jazyka vyššej úrovne). Inšpiráciou pre tento Instructable je Lab 6 Texas Instruments Robotics System Learning Kit alebo TI-RSLK.

Budeme používať mikrokontrolér zo súpravy, vývojovú dosku MSP432 LaunchPad, ale možno nájdete niečo užitočné na extrahovanie z tohto Instructable, aj keď nepoužívate LaunchPad alebo sa riadite T. I. učivo.

Začali sme inštrukciami, ktoré predstavujú ARM Assembly, vývojové prostredie a spôsob, ako vytvoriť projekt.

Nasledujúci Instructable on ARM Assembly predstavil spôsob interakcie so vstupom/výstupom (GPIO).

Potom sme rozšírili svoje znalosti a predstavili funkcie, ovládanie LED a spínačov.

Teraz s týmto Instructable môžeme použiť to, čo sme sa naučili, na niečo zábavnejšie, užitočnejšie: zistiť čiaru.

To nám môže pomôcť neskôr, keď postavíme robota sledujúceho čiaru.

V učebných osnovách sa väčšina programovania vykonáva v jazyku C alebo C ++, ale je užitočné zoznámiť sa s montážou, skôr ako začneme v závislosti od jazykov vyššej úrovne a knižníc.

Krok 1: Hardvér

Hardvér
Hardvér
Hardvér
Hardvér
Hardvér
Hardvér

Nechcem podrobne prehodnocovať hardvér, pretože už existujú zdroje, ale podľa potreby pridáme vysvetlenia.

Na tento návod použijeme odrazový senzor od spoločnosti Pololu, pretože je súčasťou TI-RSLK (súpravy robota). Je to ten, ktorý sa používa v kurze a v laboratóriu 6 učebných osnov.

Ak to nemáte, môžete použiť akýkoľvek IR detektor (alebo ich sériu), ktorý vysiela digitálny signál, HIGH alebo LOW, na prítomnosť a neprítomnosť.

Senzor poľa je najlepší, pretože môže pomôcť zistiť, či sme priamo v strede čiary alebo mimo na jednu stranu. Navyše, ako uvidíme neskôr, môže nám to pomôcť zistiť uhol robota vzhľadom na čiaru.

Reflexné pole má detektory veľmi blízko seba. To znamená, že by sme mali dostať viac detekčných signálov, samozrejme v závislosti od hrúbky čiary.

Ak je to tak, potom ak robot nie je priamo v priamke s čiarou, mal by vrátiť výstup, v ktorom je čiara širšia, ako by mala (pretože sme pod uhlom).

Ak chcete lepšie vysvetliť vyššie uvedené, pozrite sa na dokument Lab 6.

Tu nájdete niekoľko užitočných pokynov, ktoré vám pomôžu pri zapojení / pripojení snímača k vývojovej doske MSP432 LaunchPad.

Do tohto kroku som tiež pridal rovnaké (podobné?) Pokyny vo formáte pdf.

Ak si pozorne prečítate dokumenty Pololu, vysvetlia dôvod „obtoku 3,3 V“, že budete chcieť prepojiť, ak namiesto 5 V použijete 3,3 V.

Pretože ešte nestaváme robota, ale namiesto toho sa len učíme o montáži ARM a tiež o tom, ako interagovať s časťami (subsystémami) robota, nemusíme vyššie uvedené pokyny do bodky dodržiavať.

Pripojenie poľa linkového senzora sa zatiaľ len varí/redukuje na nasledujúce:

  • pripojte 3,3 V a GND z dosky MSP432 k poli senzorov.
  • pripojte portový kolík (navrhujem P5.3) z MSP432 k kolíku na aktiváciu LED v poli snímača linky. Tento kolík na senzore je medzi 3,3 V a GND.
  • pripojte všetkých osem pinov/bitov jedného portu (navrhujem P7.0 až P7.7) k ôsmim pinom poľa senzorov označených „1“až „8“. Toto sú riadky, ktoré budú VYSOKÉ alebo NÍZKE v závislosti od toho, čo cítia.

Ako vidíte na obrázkoch tohto kroku a vo videu, snímač som nepripojil k podvozku robota, pretože som chcel jednoduchosť programovania, ladenia, testovania a učenia.

Takže so všetkým prepojeným sme pripravení pustiť sa do softvéru.

Krok 2: Nasledovanie riadku

Sledovanie riadku
Sledovanie riadku
Sledovanie riadku
Sledovanie riadku

Senzor odrazového poľa je celkom šikovný, pretože môže pomôcť najmenej dvoma spôsobmi.

  • Určte, či je robot vystredený na čiare alebo unášaný na jednu stranu.
  • Je robot zarovnaný v smere čiary alebo je šikmý.

Každý z detektorov poľa v zásade poskytuje jeden bit informácií, buď HIGH alebo LOW.

Cieľom je spojiť všetky tieto bity do jedného čísla alebo jedného bitového vzoru a použiť tento vzor na rozhodovanie (aby sa správne pohyboval).

Krok 3: Skôr ako budeme môcť začať …

.. musíme sa naučiť niečo nové o programovaní zostavy ARM. A nemyslím len ďalší pokyn. Tie bývajú menšie.

Doteraz sme „zásobník“v našich programoch nepoužívali.

Spoliehali sme sa na to, že globálne použijeme väčšinu základných registrov CPU v rôznych podprogramoch.

Jedna vec, ktorú sme urobili, bolo uložiť a obnoviť adresu LR (odkazový register) pre jednu funkciu - tú, ktorá volala niekoľko ďalších funkcií. (Tu používam zameniteľné „funkcie“a „podprogram“).

To, čo sme robili, nie je dobré. Čo keď chceme vnoriť ďalšie funkcie? Čo keď máme viac ako jednu úroveň vnorenia?

V predchádzajúcich príkladoch sme sa rozhodli použiť register R6 ako úložisko pre LR alebo spiatočnú adresu. Ale ak chceme vykonať ďalšie/hlbšie vnorenie, nemôžeme pokračovať v zmene hodnoty R6. Budeme musieť vybrať ešte jeden register. A ďalší. A potom je ťažké sledovať, ktorý register jadra CPU obsahuje ktorý LR obnoviť ktorú funkciu.

Teraz sa teda pozrieme na „stack“.

Krok 4: Stack

Tu je materiál na čítanie, ktorý vysvetľuje zásobník.

Som väčším zástancom niekoľkých myšlienok:

  • iba toľko teórie, koľko sa vyžaduje, rýchlo choďte do praxe
  • učte sa podľa potreby, zamerajte sa na to, aby ste skutočne niečo robili a nie len na bezúčelné cvičenia alebo príklady.

Na internete je k dispozícii množstvo dokumentácie k ARM a MSP432, ktorá hovorí o zásobníku, takže to všetko nebudeme prehodnocovať. Tiež tu obmedzím používanie zásobníka na nevyhnutné minimum - uložím spiatočnú adresu (Register odkazov).

V zásade potrebujeme iba pokyny:

PUSH {register list}

POP {register list}

Alebo v našom prípade konkrétne:

PUSH {LR}

POP {LR}

Funkcia/podprogram montáže by teda vyzerala takto:

funcLabel:.asmfunc

PUSH {LR}; toto by mal byť pravdepodobne jeden z prvých pokynov pri vstupe.; urobte viac kódu tu..; bla bla bla…; ok, skončili sme s funkciou, pripravení vrátiť sa späť k volajúcej funkcii POP {LR}; tým sa obnoví správna spiatočná adresa späť k volaniu; funkciu. BX LR; vrátiť.endasmfunc

Video prechádza živým príkladom niekoľkých vnorených funkcií.

Krok 5: Softvér

Priložený súbor s názvom „MSP432_Chapter …“obsahuje veľa dobrých informácií o portoch MSP432 a z tohto dokumentu získavame nasledujúce porty, registre, adresy atď. Je to však trochu zastarané. Nevidel som však podrobné adresy uvedené pre Port 5 a novší. (iba „alternatívne funkcie“). Ale stále je to užitočné.

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

Výstup P5.3 (jeden bit) bude ovládať aktiváciu IR LED na snímači. Používame P5.3, pretože je to exponovaný kolík na rovnakej hlavičke ako ostatné pripojenia MSP432 smerujúce do poľa senzorov.

P7.0 až P7.7 bude osem vstupov, ktoré zbierajú údaje zo senzora; čo „vidí“.

P1.0 je jediná červená LED dióda a mohli by sme ju použiť na to, aby sme nám poskytli určité údaje o údajoch.

P2.0, P2.1, P2.2 je RGB LED a môžeme ju použiť aj s rôznymi farebnými možnosťami, aby sme získali údaje o senzoroch.

Ak ste si prešli predchádzajúci návod s tým všetkým spojený, potom už viete, ako program nastaviť.

Stačí mať deklaračnú sekciu pre porty a bity atď.

Budete mať „hlavnú“sekciu.

Mala by existovať slučka, v ktorej priebežne čítame údaje z P7, rozhodujeme o nich a podľa toho rozsvietime dve diódy LED.

Tu sú opäť adresy registra prístavov:

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

To, čo použijeme pre tento návod, je vyznačené tučným písmom.

Programové kroky na čítanie IR detektorov

Nasleduje psuedo-kód na napísanie programu v jazyku C, ale je stále užitočný a vo verzii programu na zostavenie ho budeme celkom pozorne sledovať.

hlavný program0) Inicializujte // porty, kým (1) {1) Nastavte P5.3 vysoko (zapnite IR LED) 2) Nastavte výstup P7.0 a nastavte ho vysoko (nabíjanie kondenzátora) 3) Počkajte 10 hodín, Clock_Delay1us (10); 4) Vytvorte vstup P7.0 5) Spustite túto slučku 10 000 krát a) Načítajte P7.0 (prevádza napätie na P7.0 na binárne) b) Binárny výstup na P1.0 (umožňuje vidieť binárne údaje v reálnom čase) 6) Nastavte P5.3 na nízku hodnotu (vypnite IR LED, šetríte energiu) 7) Počkajte 10 ms, Clock_Delay1ms (10); } // opakovať (späť na while ())

Krok 6: Vylepšime kód

Účelom alebo použitím poľa Pololu IR LED je detekovať čiaru a zistiť, či je robot (budúcnosť) v strede priamo na linke alebo mimo nej. Pretože čiara má určitú hrúbku, ak je pole senzorov priamo kolmé na čiaru, N počet senzorov bude mať iný údaj ako ostatné, zatiaľ čo ak bude pole IR LED v určitom uhle (nie kolmé), potom Páry N+1 alebo N+2 IR LED/detektora by teraz mali poskytovať iné hodnoty.

Podľa toho, koľko senzorov indikuje prítomnosť priamky, by sme teda mali vedieť, či sme vycentrovaní a či sme uhloví alebo nie.

V prípade tohto záverečného experimentu sa pozrime, či môžeme získať červenú LED a RGB LED diódu, aby nám poskytli viac informácií o tom, čo nám pole snímačov hovorí.

Video ide do všetkých podrobností. Priložený je aj konečný kód.

Tým je séria zostavy ARM súvisiaca s GPIO dokončená. Dúfame, že sa neskôr vrátime s ďalším zhromaždením ARM.

Ďakujem.

Odporúča: