Kazalo:

3. del: GPIO: ARM Montaža: Line Follower: TI-RSLK: 6 korakov
3. del: GPIO: ARM Montaža: Line Follower: TI-RSLK: 6 korakov

Video: 3. del: GPIO: ARM Montaža: Line Follower: TI-RSLK: 6 korakov

Video: 3. del: GPIO: ARM Montaža: Line Follower: TI-RSLK: 6 korakov
Video: doubling the drop every time the PC survives #shorts 2024, Julij
Anonim
Image
Image
Strojna oprema
Strojna oprema

Zdravo. To je naslednji obrok, kjer še naprej uporabljamo sklop ARM (namesto jezika višje ravni). Navdih za ta Instructable je Lab 6 učnega kompleta za robotske sisteme Texas Instruments ali TI-RSLK.

Uporabljali bomo mikrokrmilnik iz kompleta, razvojno ploščo MSP432 LaunchPad, vendar boste morda našli kaj koristnega za izvlečenje iz tega navodila, tudi če ne uporabljate LaunchPada ali sledite T. I. učni načrt.

Začeli smo z Instructable, ki je predstavil skupščino ARM, razvojno okolje in kako narediti projekt.

Naslednji Instructable on ARM Assembly je predstavil način interakcije z vhodom/izhodom (GPIO).

Nato smo razširili svoje znanje in uvedli funkcije za nadzor LED in stikal.

S tem Instructable -om lahko s tem, kar smo se naučili, naredimo nekaj bolj zabavnega in uporabnega: zaznamo črto.

To nam lahko pomaga kasneje, ko izdelamo robota za sledenje linijam.

V učnem načrtu je večina programiranja v jeziku C ali C ++, vendar je koristno, da se seznanimo s sestavljanjem, preden začnemo, odvisno od jezikov na višji ravni in knjižnic.

1. korak: Strojna oprema

Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema

Ne želim podrobno preoblikovati strojne opreme, saj že obstajajo viri, vendar bomo po potrebi dodali pojasnila.

Za ta Instructable bomo uporabili niz senzorjev refleksije iz Pololuja, saj je del TI-RSLK (komplet robotov). Je tisti, ki se uporablja v tečaju in v laboratoriju 6 učnega načrta.

Če tega nimate, lahko za prisotnost in odsotnost uporabite kateri koli IR detektor (ali njihovo serijo), ki oddaja digitalni signal, VISAK ali NIZK.

Senzor matrike je najboljši, ker lahko pomaga zaznati, ali smo točno na sredini črte ali na eni strani. Poleg tega nam bo, kot bomo videli kasneje, lahko v pomoč pri zaznavanju robotovega kota glede na črto.

Odbojna matrika ima detektorje zelo blizu enega poleg drugega. To pomeni, da bi morali dobiti več signalov za zaznavanje, odvisno seveda od debeline črte.

Če je tako, potem, če robot ni neposredno v liniji s črto, mora vrniti izhod, da je črta širša, kot bi morala biti (ker smo pod kotom).

Za boljšo razlago zgornjega si oglejte dokument Lab 6.

Tukaj je nekaj koristnih navodil za pomoč pri ožičenju / povezovanju senzorja z razvojno ploščo MSP432 LaunchPad.

Temu koraku sem dodal tudi enaka (podobna?) Navodila v pdf obliki.

Če pozorno preberete dokumente Pololu, pojasnijo razlog za "3.3V obvod", ki ga boste želeli premostiti, če namesto 5V uporabljate 3.3V.

Ker robota še ne gradimo, ampak se šele učimo o sestavljanju ARM -a in tudi o tem, kako komunicirati z deli (podsistemi) robota, nam ni treba dosledno upoštevati zgornjih navodil.

Za zdaj povezovanje matrike linijskih senzorjev le zavre/zmanjša na naslednje:

  • priključite 3,3 V in GND s plošče MSP432 na matrični senzor.
  • priključite vtič za vrata (predlagam P5.3) iz MSP432 na pin za omogočanje LED na nizu linijskih senzorjev. Ta pin na senzorju je med 3,3 V in GND.
  • povežite vseh osem zatičev/bitov enega vhoda (predlagam P7.0 do P7.7) na osem zatičev niza senzorjev z oznako "1" do "8". To so vrstice, ki bodo višje ali nizke, odvisno od tega, kaj čutijo.

Kot lahko vidite na slikah tega koraka in v videoposnetku, senzorja nisem pritrdil na ohišje robota, ker sem želel preprosto programiranje, odpravljanje napak, testiranje, učenje.

Tako smo z vsem povezanim pripravljeni vstopiti v programsko opremo.

Korak: Sledi vrstica

Sledi vrstica
Sledi vrstica
Sledi vrstica
Sledi vrstica

Senzor matrike odsevnosti je precej eleganten, ker lahko pomaga na vsaj dva načina.

  • Ugotovite, ali je robot centriran na liniji ali odmika na eno stran.
  • Ali je robot poravnan v smeri črte ali je pod kotom.

Vsak od detektorjev matrike v bistvu zagotavlja en bit informacij, bodisi VISOKO ali NIZKO.

Ideja je združiti vse te bite v eno samo številko ali en sam bitni vzorec in uporabiti ta vzorec za odločanje (za pravilno premikanje).

3. korak: Preden lahko resnično začnemo…

.. o programiranju montaže ARM se moramo naučiti nekaj novega. In ne mislim samo na drugo navodilo. Te so ponavadi manjše.

Doslej v svojih programih nismo uporabljali "sklada".

Zanašali smo se na uporabo večine glavnih registrov procesorjev po vsem svetu v različnih podprogramih.

Edino, kar smo naredili, je bilo, da smo shranili in obnovili naslov LR (register registra) za eno funkcijo - tisto, ki je poklicala več drugih funkcij. (Tu uporabljam "funkcijo" in "podprogram" zamenljivo).

To, kar smo počeli, ni dobro. Kaj pa, če želimo ugnezditi druge funkcije? Kaj pa, če imamo več kot eno stopnjo gnezdenja?

V prejšnjih primerih smo se za shranjevanje LR ali povratnega naslova odločili uporabiti register R6. Če pa želimo nadalje/globlje gnezdenje, ne moremo še naprej spreminjati vrednosti R6. Izbrati bi morali še en register. In še eno. In potem postane obremenjujoče spremljati, kateri register jedra procesorja ima, kateri LR obnoviti, na katero funkcijo.

Zato si zdaj oglejmo »sklad«.

4. korak: Niz

Tukaj je nekaj bralnega gradiva, ki pojasnjuje kup.

Sem večji zagovornik nekaj idej:

  • le toliko teorije, kolikor je potrebno, hitro pojdite na praktično
  • učite se po potrebi, osredotočite se na to, da dejansko nekaj delate, in ne le na neuporabne vaje ali primere.

Na spletu je veliko dokumentacije ARM in MSP432, ki govori o nizu, zato tega ne bomo ponavljali. Prav tako bom omejil uporabo sklada tukaj na najmanjšo možno mero - shranil bom naslov za vrnitev (Register Link).

V bistvu potrebujemo le navodila:

PUSH {register register}

POP {register list}

Ali v našem primeru posebej:

PUSTI {LR}

POP {LR}

Torej bi bila funkcija/podprogram montaže videti tako:

funcLabel:.asmfunc

PUSH {LR}; to bi moralo biti eno prvih navodil za vstop.; tukaj naredite več kode..; bla.. bla … bla …; ok, končali smo s funkcijo, pripravljeno za vrnitev nazaj k klicni funkciji POP {LR}; to povrne pravilen naslov za vrnitev klicanju; funkcijo. BX LR; return.endasmfunc

Video posnetek prikazuje v živo več ugnezdenih funkcij.

5. korak: programska oprema

Priložena datoteka z oznako "MSP432_Chapter …" vsebuje veliko dobrih informacij o vratih MSP432, iz tega dokumenta pa dobimo naslednja vrata, registre, naslove itd. Vendar je nekoliko zastarela. Podrobnih naslovov za vrata 5 in novejših pa nisem videl. (samo "nadomestne funkcije"). Je pa še vedno uporabno.

Uporabljali bomo dva porta. P5, P7, P1 in P2.

P5.3 (en bit) izhod bo za krmiljenje omogočanja IR LED na senzorju. Uporabljamo P5.3, ker je izpostavljen pin na isti glavi kot druge povezave MSP432, ki gredo v niz senzorjev.

P7.0 do P7.7 bo osem vhodov, ki zbirajo podatke iz senzorja; kaj "vidi".

P1.0 je enojna rdeča LED in to bi lahko uporabili za nekaj navedb podatkov.

P2.0, P2.1, P2.2 je LED RGB in to lahko z različnimi barvnimi možnostmi uporabimo tudi za prikaz podatkov senzorja.

Če ste šli skozi vse prejšnje Instructables, povezane z vsem tem, potem že veste, kako nastaviti program.

Samo oddelek za deklaracijo vrat in bitov itd.

Imeli boste "glavni" razdelek.

Morala bi obstajati zanka, kjer neprestano beremo podatke iz P7, se odločimo za te podatke in ustrezno prižgemo dve LED.

Tu so spet naslovi pristaniškega registra:

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

Krepko je tisto, kar bomo uporabili za ta Instructable.

Programski koraki za branje IR detektorjev

Sledi psuedo-koda za pisanje programa v jeziku C, vendar je še vedno uporabna, zato jo bomo precej natančno spremljali v montažni različici programa.

glavni program0) Inicializirajte // vrata, medtem ko (1) {1) Nastavite P5.3 visoko (vklopite IR LED) 2) Naredite P7.0 kot izhod in ga nastavite visoko (polnjenje kondenzatorja) 3) Počakajte 10 us, Clock_Delay1us (10); 4) Naj bo P7.0 vhod 5) To zanko izvedite 10.000 krat a) Preberite P7.0 (pretvori napetost na P7.0 v binarno) b) Izhodno binarno v P1.0 (omogoča ogled binarnega v realnem času) 6) P5.3 nastavite na nizko (izklopite IR LED, prihranite energijo) 7) Počakajte 10 ms, Clock_Delay1ms (10); } // ponovi (nazaj na while ())

6. korak: Izboljšajmo kodo

Namen ali uporaba niza Pololu IR LED je zaznati črto in ugotoviti, ali je robot (prihodnost) neposredno na sredini črte ali na eni strani. Ker ima linija določeno debelino, če je matrika senzorjev pravokotna na črto, bo število N senzorjev drugačno odčitano od ostalih, medtem ko je matrika IR LED pod nekim kotom (ne pravokotno), potem N+1 ali N+2 para IR LED/detektorja morata zdaj dati drugačen odčitek.

Tako bi morali glede na to, koliko senzorjev kaže na prisotnost črte, vedeti, ali smo centrirani in ali smo pod kotom ali ne.

Za ta zadnji poskus poglejmo, ali lahko dobimo rdečo LED in RGB LED, ki nam bodo dali več informacij o tem, kaj nam pove niz senzorjev.

Video vsebuje vse podrobnosti. Priložena je tudi končna koda.

S tem je zaključena serija sklopov ARM, povezanih z GPIO. Upamo, da se bomo kasneje vrnili z več skupščino ARM.

Hvala vam.

Priporočena: