Sadržaj:

Dio 3: GPIO: ARM sklop: Sljedbenik linije: TI-RSLK: 6 koraka
Dio 3: GPIO: ARM sklop: Sljedbenik linije: TI-RSLK: 6 koraka

Video: Dio 3: GPIO: ARM sklop: Sljedbenik linije: TI-RSLK: 6 koraka

Video: Dio 3: GPIO: ARM sklop: Sljedbenik linije: TI-RSLK: 6 koraka
Video: STM32. CMSIS #2. GPIO - создаем проект с нуля в ARM KEIL на CMSIS. 2024, Novembar
Anonim
Image
Image
Hardver
Hardver

Zdravo. Ovo je sljedeća rata u kojoj nastavljamo koristiti ARM sklop (umjesto jezika višeg nivoa). Inspiracija za ovaj Instructable je Lab 6 kompleta za učenje robotskih sistema Texas Instruments, ili TI-RSLK.

Koristit ćemo mikrokontroler iz kompleta, razvojnu ploču MSP432 LaunchPad, ali možda ćete pronaći nešto korisno za izdvojiti iz ovog Instructable -a čak i ako ne koristite LaunchPad ili slijedite T. I. nastavni plan i program.

Počeli smo s Instructable koji predstavlja ARM skupštinu, razvojno okruženje i način izrade projekta.

Sljedeći Instructable na ARM Assembly -u predstavio je način interakcije sa ulazom/izlazom (GPIO).

Zatim smo proširili svoje znanje i uveli funkcije za kontrolu LED dioda i prekidača.

Sada s ovim Instructable -om možemo koristiti ono što smo naučili da učinimo nešto zabavnije, korisnije: otkrijemo liniju.

To nam može pomoći kasnije kada izgradimo robota za praćenje linija.

U kurikulumu se većina programiranja izvodi na C ili C ++, ali je korisno upoznati se sa sastavljanjem, prije nego počnemo ovisno o jezicima i bibliotekama višeg nivoa.

Korak 1: Hardver

Hardver
Hardver
Hardver
Hardver
Hardver
Hardver

Ne želim detaljno ponavljati hardver, jer već postoje izvori, ali ćemo dodati objašnjenja gdje je to potrebno.

Za ovaj Instructable koristit ćemo niz senzora refleksije iz Pololua jer dolazi kao dio TI-RSLK (komplet robota). To je onaj koji se koristi u kursu i u Lab 6 nastavnog programa.

Ako to nemate, možete upotrijebiti bilo koji IC detektor (ili njihov niz) koji emitira digitalni signal, VISOKI ili NISKI, za prisutnost i odsutnost.

Senzor niza je najbolji jer može pomoći u otkrivanju jesmo li točno u središtu linije ili s jedne strane. Osim toga, kao što ćemo vidjeti kasnije, može nam pomoći da otkrijemo kut robota u odnosu na liniju.

Niz refleksije ima detektore vrlo blizu jedan do drugog. To znači da bismo trebali dobiti više signala detekcije, ovisno o, naravno, debljini linije.

Ako je tako, onda ako robot nije izravno u liniji, tada bi trebao vratiti izlaz koji je linija šira nego što bi trebala biti (jer smo pod kutom).

Za bolje objašnjenje gore navedenog, pogledajte dokument Lab 6.

Evo nekoliko korisnih uputstava za pomoć pri povezivanju / povezivanju senzora s razvojnom pločom MSP432 LaunchPad.

Takođe sam dodao iste (slične?) Pdf upute ovom koraku.

Ako pažljivo pročitate Pololu dokumente, oni objašnjavaju razlog za "3.3V premosnicu", koju ćete htjeti preskočiti ako koristite 3.3V umjesto 5V.

Budući da još ne izrađujemo robota, već samo učimo o ARM sastavljanju i načinu interakcije s dijelovima (podsustavima) robota, ne moramo se doslovno pridržavati gornjih uputstava.

Za sada, povezivanje niza linijskog senzora samo vrije/smanjuje do sljedećeg:

  • spojite 3.3V i GND s ploče MSP432 na niz senzora.
  • spojite iglu porta (predlažem P5.3) sa MSP432 na pin za omogućavanje LED -a na nizu linijskog senzora. Taj pin na senzoru je između 3.3V i GND.
  • spojite svih osam pinova/bitova jednog porta (predlažem P7.0 do P7.7) na osam pinova niza senzora označenih od "1" do "8". Ovo su linije koje će ići VISOKO ili NISKO, ovisno o tome što osjećaju.

Kao što možete vidjeti na slikama ovog koraka i u videu, nisam pričvrstio senzor na kućište robota, jer sam želio jednostavnost programiranja, otklanjanja grešaka, testiranja, učenja.

Dakle, sa svim povezanim, spremni smo za ulazak u softver.

Korak 2: Slijedi red

Line Follow
Line Follow
Line Follow
Line Follow

Senzor polja refleksije je prilično zgodan jer može pomoći na najmanje dva načina.

  • Utvrdite je li robot centriran na liniji ili skreće na jednu stranu.
  • Je li robot poravnat u smjeru linije ili je pod kutom.

Svaki od detektora niza u osnovi pruža jedan bit informacija, bilo VISOKI ili NISKI.

Ideja je kombinirati sve te bitove u jedan broj ili jedan bitni uzorak i koristiti taj uzorak za donošenje odluka (kako bi se pravilno kretali).

Korak 3: Prije nego što zaista počnemo…

.. moramo naučiti nešto novo o programiranju montaže ARM -a. I ne mislim samo na drugo uputstvo. Oni su obično manji.

Do sada nismo koristili "stog" u našim programima.

Oslanjali smo se na globalnu upotrebu većine osnovnih registara procesora u različitim potprogramima.

Jedino što smo učinili bilo je spremanje i vraćanje LR (link register) adrese za jednu funkciju - one koja je pozvala nekoliko drugih funkcija. (Ovdje koristim "funkciju" i "potprogram" naizmjenično).

Ovo što smo radili nije dobro. Šta ako želimo ugniježditi druge funkcije? Šta ako imamo više od jednog nivoa gniježđenja?

U prethodnim primjerima odabrali smo koristiti registar R6 kao spremište za LR ili povratnu adresu. Ali ako želimo dalje/dublje ugniježđenje, ne možemo nastaviti mijenjati vrijednost R6. Morali bismo izabrati još jedan registar. I još jedan. I tada postaje teško pratiti koji registar jezgre procesora ima koji LR da vrati na koju funkciju.

Dakle, sada ćemo pogledati "stog".

Korak 4: Snop

Evo nekoliko materijala za čitanje koji objašnjavaju hrpu.

Ja sam veći zagovornik nekoliko ideja:

  • samo onoliko teorije koliko je potrebno, brzo pređite na praktično
  • učite po potrebi, usredotočite se na to da zaista radite nešto, a ne samo na besmislene vježbe ili primjere.

Na internetu postoji dosta ARM i MSP432 dokumentacije koja govori o steku, pa nećemo sve to ponavljati. Također ću svesti upotrebu stoga ovdje na najmanju moguću mjeru - spremanje povratne adrese (Link Link).

U suštini, potrebno nam je samo uputstvo:

PUSH {register list}

POP {registarska lista}

Ili, u našem slučaju, konkretno:

PUSH {LR}

POP {LR}

Dakle, montažna funkcija/potprogram bi izgledala ovako:

funcLabel:.asmfunc

PUSH {LR}; ovo bi vjerovatno trebalo biti jedno od prvih uputstava pri ulasku.; ovdje napravite više koda..; bla bla bla…; ok, završili smo s funkcijom, spremni za povratak na funkciju poziva POP {LR}; ovo vraća ispravnu povratnu adresu na pozivanje; funkciju. BX LR; return.endasmfunc

Videozapis prolazi kroz primjer nekoliko ugniježđenih funkcija uživo.

Korak 5: Softver

Priložena datoteka s oznakom "MSP432_Chapter …" sadrži mnogo dobrih informacija o portovima MSP432, a iz tog dokumenta dobivamo sljedeće portove, registre, adrese itd. Međutim, malo je zastario. Međutim, nisam vidio detaljne adrese navedene za port 5 i noviji. (samo "zamjenske funkcije"). Ali i dalje je korisno.

Koristit ćemo dva porta. P5, P7, P1 i P2.

Izlaz P5.3 (jednobitni) bit će za kontrolu omogućavanja IC LED osvjetljenja na senzoru. Koristimo P5.3 jer je to otkriveni pin na istom zaglavlju kao i ostale MSP432 veze koje idu do niza senzora.

P7.0 do P7.7 će biti osam ulaza koji prikupljaju podatke sa senzora; šta "vidi".

P1.0 je pojedinačna crvena LED dioda i to bismo mogli upotrijebiti za neke naznake podataka.

P2.0, P2.1, P2.2 je RGB LED i to možemo upotrijebiti, s različitim mogućnostima boje, kako bismo dobili podatke o senzoru.

Ako ste prošli prethodne upute vezane za sve ovo, onda već znate kako postaviti program.

Samo ima odjeljak deklaracije za portove i bitove itd.

Imat ćete "glavni" odjeljak.

Trebala bi postojati petlja u kojoj neprestano čitamo podatke s P7, donosimo odluku o tim podacima i prema tome palimo dvije LED diode.

Evo opet adresa registra portova:

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

Podebljano je ono što ćemo koristiti za ovaj Instructable.

Programski koraci za čitanje IC detektora

Slijedi psuedo-kod za pisanje programa na C-u, ali je još uvijek koristan i mi ćemo ga prilično pomno pratiti u montažnoj verziji programa.

glavni program0) Inicijalizirajte // portove dok (1) {1) Postavite P5.3 na visoko (uključite IR LED) 2) Napravite P7.0 kao izlaz i postavite ga visoko (punjenje kondenzatora) 3) Čekajte 10 sati, Clock_Delay1us (10); 4) Učinite P7.0 ulazom 5) Pokrenite ovu petlju 10 000 puta a) Očitajte P7,0 (pretvara napon na P7,0 u binarni) b) Izlazni binarni u P1,0 (omogućava vam da vidite binarni u realnom vremenu) 6) Postavite P5.3 na nisko (isključite IC LED, štedite energiju) 7) Pričekajte 10 ms, Clock_Delay1ms (10); } // ponavljanje (nazad na while ())

Korak 6: Poboljšajmo kod

Svrha ili upotreba Pololu IR LED niza je da otkrije liniju i da zna je li robot (budući) direktno centriran na liniji ili s jedne strane. Također, budući da linija ima određenu debljinu, ako je niz senzora izravno okomit na liniju, N broj senzora će imati drugačija očitanja od ostalih, dok ako je niz IR LED pod nekim kutom (nije okomit), tada Parovi N+1 ili N+2 IR LED/detektor sada bi trebali dati drugačije očitanje.

Prema tome, ovisno o tome koliko senzora ukazuje na prisutnost linije, trebali bismo znati jesmo li centrirani i jesmo li pod kutom ili ne.

Za ovaj posljednji eksperiment, samo da vidimo možemo li dobiti crvenu LED i RGB LED da nam daju više informacija o tome šta nam niz senzora govori.

Videozapis ulazi u sve detalje. Konačni kod je takođe u prilogu.

Time je završena serija ARM montaže vezana za GPIO. Nadamo se da ćemo se kasnije vratiti sa još ARM skupštine.

Hvala ti.

Preporučuje se: