Indholdsfortegnelse:

Del 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 trin
Del 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 trin

Video: Del 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 trin

Video: Del 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 trin
Video: TI-RSLK Module 1 - Lecture video - Running code on the LaunchPad using CCS 2024, Juli
Anonim
Image
Image
Hardwareen
Hardwareen

Hej. Dette er den næste rate, hvor vi fortsætter med at bruge ARM-samling (i stedet for et sprog på højere niveau). Inspirationen til denne Instructable er Lab 6 i Texas Instruments Robotics System Learning Kit eller TI-RSLK.

Vi bruger mikrokontrolleren fra sættet, MSP432 LaunchPad -udviklingskortet, men måske finder du noget nyttigt at udtrække fra denne instruks, selvom du ikke bruger LaunchPad eller følger T. I. pensum.

Vi begyndte med en instruerbar introduktion af ARM Assembly, udviklingsmiljøet og hvordan man laver et projekt.

Den næste Instructable on ARM Assembly introducerede, hvordan man interagerer med input/output (GPIO).

Derefter udvidede vi vores viden og introducerede funktioner, styring af lysdioder og kontakter.

Nu med denne Instructable kan vi bruge det, vi har lært, til at gøre noget sjovere og mere nyttigt: opdage en linje.

Dette kan hjælpe os senere, når vi bygger en line-follower robot.

I pensum foregår det meste af programmeringen i C eller C ++, men det er nyttigt at blive fortrolig med samling, før vi begynder afhængigt af sprog på højere niveau og biblioteker.

Trin 1: Hardware

Hardwareen
Hardwareen
Hardwareen
Hardwareen
Hardwareen
Hardwareen

Jeg vil ikke genoprette hardware i detaljer, da der allerede er kilder, men vi tilføjer forklaringer, hvor det er nødvendigt.

Til denne instruktør vil vi bruge Reflectance Sensor Arrray fra Pololu, da den kommer som en del af TI-RSLK (robotsættet). Det er den, der bruges på kurset og i Lab 6 i studieordningen.

Hvis du ikke har det, kan du bruge en hvilken som helst IR -detektor (eller serie af dem), der udsender et digitalt signal, HIGH eller LOW, til tilstedeværelse og fravær.

Array -sensoren er bedst, fordi den kan hjælpe med at registrere, om vi er lige i midten af linjen eller ud til den ene side. Plus, som vi vil se senere, kan det hjælpe os med at registrere robotens vinkel i forhold til linjen.

Reflektansarrayet har detektorer meget tæt ved siden af hinanden. Det betyder, at vi bør få flere detektionssignaler afhængigt af linjens tykkelse.

Hvis ja, så hvis robotten ikke er direkte på linje med linjen, skal den returnere et output, at linjen er bredere end den burde være (fordi vi er i en vinkel).

For en bedre forklaring af ovenstående, tag et kig på Lab 6 -dokumentet.

For hjælp til ledninger / tilslutning af sensoren til MSP432 LaunchPad -udviklingskortet, er her nogle nyttige instruktioner.

Jeg har også tilføjet de samme (lignende?) Pdf -instruktioner til dette trin.

Hvis du læser Pololu -dokumenterne omhyggeligt, forklarer de årsagen til "3.3V bypass", som du ønsker at springe, hvis du bruger 3.3V i stedet for 5V.

Da vi endnu ikke bygger robotten, men i stedet bare lærer om ARM -samling og også hvordan man interagerer med stykker (undersystemer) af robotten, behøver vi ikke at følge ovenstående instruktioner til punkt og prikke.

For øjeblikket koger/reducerer forbindelsen af linjesensor -arrayet til følgende:

  • tilslut 3.3V og GND fra MSP432 -kortet til sensorarrayet.
  • tilslut en portnål (jeg foreslår P5.3) fra MSP432 til LED -aktiveringsstiften på linjesensormatrisen. Denne pin på sensoren er mellem 3,3V og GND.
  • tilslut alle otte ben/bits i en enkelt port (jeg foreslår P7.0 til P7.7) til de otte ben i sensormatricen mærket "1" til "8". Disse er de linjer, der går HØJ eller LAV afhængigt af, hvad de fornemmer.

Som du kan se på billederne af dette trin og i videoen, har jeg ikke knyttet sensoren til robotchassiset, fordi jeg ville have let programmering, fejlfinding, test, læring.

Så med alt tilsluttet er vi klar til at komme ind i softwaren.

Trin 2: Linjefølge

Linjefølge
Linjefølge
Linjefølge
Linjefølge

Reflektans array -sensoren er temmelig smart, fordi den kan hjælpe på mindst to måder.

  • Bestem er robotten centreret på linje eller driver af til den ene side.
  • Er robotten justeret i retning af linjen, eller er den på skrå.

Hver af detektorerne i arrayet giver i det væsentlige en bit information, enten HIGH eller LOW.

Ideen er at kombinere alle disse bits til et enkelt tal eller et enkelt bit-mønster og bruge dette mønster til at træffe beslutninger (for at bevæge sig korrekt).

Trin 3: Inden vi virkelig kan komme i gang…

.. vi skal lære noget nyt om programmering af ARM -samlinger. Og jeg mener ikke bare en anden instruktion. Disse har en tendens til at være mindre.

Indtil nu har vi ikke brugt "stakken" i vores programmer.

Vi har stolet på at bruge de fleste af kernecpu -registre globalt på tværs af forskellige underprogrammer.

Den eneste ting vi gjorde var at gemme og gendanne LR (link register) adressen til en funktion - den der kaldte flere andre funktioner. (Jeg bruger "funktion" og "underprogram" i flæng her).

Det, vi har gjort, er ikke godt. Hvad hvis vi vil indlejre andre funktioner? Hvad hvis vi har mere end ét niveau for indlejring?

I tidligere eksempler valgte vi at bruge register R6 som lager til LR eller returadresse. Men hvis vi vil foretage yderligere/dybere nesting, kan vi ikke fortsætte med at ændre værdien af R6. Vi skulle vælge endnu et register. Og en anden. Og så bliver det besværligt at holde styr på, hvilket kerne -cpu -register, der indeholder, hvilken LR der skal gendannes til hvilken funktion.

Så nu tager vi et kig på "stakken".

Trin 4: Stakken

Her er noget læsestof, der forklarer stakken.

Jeg er en større fortaler for et par ideer:

  • kun så meget teori som krævet, gå hurtigt til det praktiske
  • lær efter behov, fokuser på faktisk at gøre noget og ikke kun formålsløse øvelser eller eksempler.

Der er masser af ARM- og MSP432 -dokumentation online, der taler om stakken, så det kommer ikke til at gentage alt det. Jeg vil også holde brugen af stakken her til et absolut minimum - gemme returadressen (linkregistret).

Grundlæggende behøver vi kun instruktioner:

PUSH {register list}

POP {registerliste}

Eller, i vores tilfælde, specifikt:

SKYD {LR}

POP {LR}

Så en samlingsfunktion/underprogram ville se sådan ud:

funcLabel:.asmfunc

PUSH {LR}; dette skal sandsynligvis være en af de første instruktioner om indtastning.; lav mere kode her..; blah blah blah…; ok, vi er færdige med funktionen, klar til at vende tilbage til opkaldsfunktionen POP {LR}; dette gendanner den korrekte returadresse tilbage til opkald; fungere. BX LR; returnere.endasmfunc

Videoen gennemgår et levende eksempel på flere indlejrede funktioner.

Trin 5: Softwaren

Den vedhæftede fil mærket "MSP432_Chapter …" har en masse god information om havnene i MSP432, og fra det dokument får vi følgende porte, registre, adresser osv. Det er dog lidt dateret. Jeg kunne dog ikke se de detaljerede adresser, der er angivet for Port 5 og nyere. (kun "alternative funktioner"). Men det er stadig nyttigt.

Vi kommer til at bruge to havne. P5, P7, P1 og P2.

P5.3 (en enkelt bit) udgang vil være at styre IR LED-aktiveringen på sensoren. Vi bruger P5.3, fordi det er en synlig pin på samme header som de andre MSP432 -forbindelser, der går til sensorarrayet.

P7.0 til P7.7 vil være de otte input, der indsamler data fra sensoren; hvad den "ser".

P1.0 er den eneste røde LED, og vi kunne bruge den til at give os nogle indikationer af dataene.

P2.0, P2.1, P2.2 er RGB LED, og vi kan også bruge det med sine forskellige farve muligheder til at give os indikation af sensordata.

Hvis du har gennemgået de tidligere instruktioner relateret til alt dette, ved du allerede, hvordan du konfigurerer programmet.

Bare have en deklarationssektion for havne og bits osv.

Du har en "hoved" sektion.

Der bør være en loop, hvor vi løbende læser dataene fra P7, træffer beslutninger om disse data og tænder de to lysdioder i overensstemmelse hermed.

Her er igen havneregisteradresserne:

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

Hvad er med fed skrift, er hvad vi vil bruge til denne Instructable.

Programtrin til læsning af IR -detektorer

Følgende er psuedo-kode til at skrive programmet i C, men det er stadig nyttigt, og vi følger det ret tæt i samlingsversionen af programmet.

hovedprogram0) Initialiser // porte, mens (1) {1) Sæt P5.3 højt (tænd IR -lysdiode) 2) Gør P7.0 til en udgang, og sæt den høj (oplader kondensatoren) 3) Vent 10 os, Clock_Delay1us (10); 4) Gør P7.0 til et input 5) Kør denne loop 10.000 gange a) Læs P7.0 (konverterer spænding på P7.0 til binær) b) Output binær til P1.0 (giver dig mulighed for at se binær i realtid) 6) Indstil P5.3 lav (sluk IR -LED, sparer strøm) 7) Vent 10 ms, Clock_Delay1ms (10); } // gentag (tilbage til mens ())

Trin 6: Lad os forbedre koden

Formålet med eller anvendelsen af Pololu IR LED -array er at registrere en linje og vide, om robotten (fremtiden) er direkte centreret på linjen eller ud til den ene side. Da linjen også har en bestemt tykkelse, vil sensorens array, hvis sensorarrayet er direkte vinkelret på linjen, have en anden aflæsning end resten, hvorimod hvis IR LED -arrayet er i en eller anden vinkel (ikke vinkelret), så N+1 eller N+2 IR LED/detektorpar skulle nu give en anden måling.

Afhængigt af hvor mange sensorer, der angiver linjens tilstedeværelse, bør vi således vide, om vi er centreret, og om vi er vinklede eller ej.

For dette sidste eksperiment, lad os bare se, om vi kan få den røde LED og RGB LED til at give os flere oplysninger om, hvad sensorarrayet fortæller os.

Videoen går ind i alle detaljer. Den endelige kode er også vedhæftet.

Dette fuldender serien ARM Assembly relateret til GPIO. Vi håber at vende tilbage med mere ARM Assembly på et senere tidspunkt.

Tak skal du have.

Anbefalede: