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, Srpanj
Anonim
Image
Image
Hardver
Hardver

Zdravo. Ovo je sljedeći nastavak u kojem nastavljamo koristiti ARM sklop (umjesto jezika više razine). Inspiracija za ovaj Instructable je Lab 6 kompleta za učenje robotskog sustava 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 on ARM Assembly predstavio je način interakcije s ulazom/izlazom (GPIO).

Zatim smo proširili svoje znanje i uveli funkcije za upravljanje LED diodama i prekidačima.

Sada s ovim Instructable -om možemo iskoristiti ono što smo naučili kako bismo učinili nešto zabavnije, korisnije: otkrili 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 korisno je upoznati se sa montažom, prije nego što počnemo ovisno o jezicima i bibliotekama više razine.

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 kolegiju i u Lab 6 kurikuluma.

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 polja je najbolji jer može pomoći u otkrivanju jesmo li točno u središtu crte ili s jedne strane. Osim toga, kao što ćemo vidjeti kasnije, može nam pomoći otkriti 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 o 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 uputa za pomoć pri povezivanju / povezivanju senzora s razvojnom pločom MSP432 LaunchPad.

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

Ako pažljivo pročitate Pololu dokumente, oni objašnjavaju razlog za "3.3V zaobilaznicu", 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 montaži i načinu interakcije s dijelovima (podsustavima) robota, ne moramo se doslovno pridržavati gornjih uputa.

Za sada, povezivanje niza osjetnika voda samo vrije/smanjuje na sljedeće:

  • spojite 3,3 V i GND s ploče MSP432 na niz senzora.
  • spojite pin porta (predlažem P5.3) s MSP432 na pin za omogućavanje LED -a na nizu linijskog senzora. Taj pin na senzoru je između 3,3 V i GND.
  • spojite svih osam pinova/bitova jednog porta (predlažem P7.0 do P7.7) na osam pinova niza senzora označenih s "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 pogrešaka, testiranja, učenja.

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

Korak 2: Slijedi red

Red slijedi
Red slijedi
Red slijedi
Red slijedi

Senzor polja refleksije prilično je sjajan 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 VISOKU ili NISKU.

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

Korak 3: Prije nego što zaista možemo započeti…

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

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

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

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

Ovo što smo radili nije dobro. Što ako želimo ugnijezditi druge funkcije? Što ako imamo više od jedne razine 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 drugi. I tada postaje teško pratiti koji registar jezgre procesora ima koji LR vratiti na koju funkciju.

Pa sada bacimo pogled na "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 prijeđite na praktično
  • učiti po potrebi, usredotočiti se na to da stvarno nešto radite, a ne samo na besmislene vježbe ili primjere.

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

U biti, samo nam trebaju upute:

PUSH {register list}

POP {registarski popis}

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

GURNITE {LR}

POP {LR}

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

funcLabel:.asmfunc

PUSH {LR}; ovo bi vjerojatno trebalo biti jedno od prvih uputa pri ulasku.; ovdje napravite više koda..; bla bla bla…; u redu, završili smo s funkcijom, spremni za povratak na pozvanje funkcije POP {LR}; ovo vraća ispravnu povratnu adresu na pozivanje; funkcija. 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 priključcima MSP432, a iz tog dokumenta dobivamo sljedeće portove, registre, adrese itd. Međutim, malo je zastarjela. 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 upravljanje omogućavanjem IR LED 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 bit će osam ulaza koji prikupljaju podatke sa senzora; ono što "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 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 lučkog registra:

  • 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 IC 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ćuje vam da vidite binarni u stvarnom vremenu) 6) Postavite P5.3 na nisko (isključite IC LED, štedite energiju) 7) Pričekajte 10 ms, Clock_Delay1ms (10); } // ponavljanje (natrag na while ())

Korak 6: Poboljšajmo kod

Svrha ili uporaba Pololu IR LED niza je otkriti liniju i znati je li robot (budući) izravno 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 što nam niz senzora govori.

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

Time je završena serija ARM montaže vezana za GPIO. Nadamo se da ćemo se kasnije vratiti s više ARM montaže.

Hvala vam.

Preporučeni: