Taula de continguts:

Part 3: GPIO: Muntatge ARM: Seguidor de línia: TI-RSLK: 6 passos
Part 3: GPIO: Muntatge ARM: Seguidor de línia: TI-RSLK: 6 passos

Vídeo: Part 3: GPIO: Muntatge ARM: Seguidor de línia: TI-RSLK: 6 passos

Vídeo: Part 3: GPIO: Muntatge ARM: Seguidor de línia: TI-RSLK: 6 passos
Vídeo: Part 10 ARM Assembly MSP432 TI RSLK Lab 6 GPIO Using Pololu QTR 8RC Reflectance Sensor Array 2024, Juliol
Anonim
Image
Image
El maquinari
El maquinari

Hola. Aquesta és la següent entrega on continuem utilitzant el conjunt ARM (en lloc d’un llenguatge de nivell superior). La inspiració d’aquest Instructable és el laboratori 6 del Texas Instruments Robotics System Learning Kit, o TI-RSLK.

Utilitzarem el microcontrolador del kit, la placa de desenvolupament MSP432 LaunchPad, però potser trobareu alguna cosa útil per extreure d’aquest Instructable fins i tot si no esteu utilitzant LaunchPad o seguint el T. I. pla d’estudis.

Vam començar amb una versió instructiva que presenta ARM Assembly, l’entorn de desenvolupament i com fer un projecte.

El següent muntatge instructable sobre ARM va introduir com interactuar amb l'entrada / sortida (GPIO).

Després vam ampliar els nostres coneixements i vam introduir funcions, controlant els LED i els commutadors.

Ara, amb aquest instructiu, podem utilitzar allò que hem après per fer alguna cosa més divertida i útil: detectar una línia.

Això ens pot ajudar més endavant quan construïm un robot seguidor de línia.

Al currículum, la major part de la programació es fa en C o C ++, però és útil familiaritzar-se amb el muntatge, abans de començar a dependre dels llenguatges de nivell superior i de les biblioteques.

Pas 1: el maquinari

El maquinari
El maquinari
El maquinari
El maquinari
El maquinari
El maquinari

No vull fer una revisió detallada del maquinari, ja que ja hi ha fonts, però afegirem explicacions on calgui.

Per a aquesta instrucció, farem servir el sensor de reflexió de Pololu, ja que forma part del TI-RSLK (el kit de robots). És l’utilitzat al curs i al laboratori 6 del pla d’estudis.

Si no en teniu, podeu utilitzar qualsevol detector d’IR (o una sèrie d’ells) que emeti un senyal digital, ALT o BAIX, per a presència i absència.

El sensor de matriu és el millor perquè pot ajudar a detectar si estem al centre de la línia o bé cap a un costat. A més, com veurem més endavant, ens pot ajudar a detectar l’angle del robot respecte a la línia.

La matriu de reflectància té detectors molt a prop l'un de l'altre. Això significa que hauríem d'obtenir diversos senyals de detecció, depenent, per descomptat, del gruix de la línia.

Si és així, si el robot no està directament en línia amb la línia, hauria de retornar una sortida que la línia sigui més ampla del que hauria de ser (perquè estem en un angle).

Per obtenir una millor explicació de l’anterior, mireu el document de Lab 6.

Per obtenir ajuda per connectar / connectar el sensor a la placa de desenvolupament MSP432 LaunchPad, aquí teniu algunes instruccions útils.

També he afegit les mateixes instruccions (similars?) En pdf a aquest pas.

Si llegiu amb atenció els documents de Pololu, expliquen la raó de la "derivació de 3,3 V", que voldreu saltar si feu servir 3,3 V en lloc de 5 V.

Com que encara no estem construint el robot, sinó que només estem aprenent sobre el muntatge ARM i també com interactuar amb peces (subsistemes) del robot, no hem de seguir les instruccions anteriors al peu de la lletra.

De moment, connectar el conjunt de sensors de línia només bull / es redueix al següent:

  • connecteu 3.3V i GND des de la placa MSP432 a la matriu de sensors.
  • connecteu un pin de port (us suggereixo P5.3) des del MSP432 al pin d'activació del LED de la matriu del sensor de línia. Aquest pin del sensor està entre 3,3 V i GND.
  • connecteu els vuit pins / bits d'un sol port (us suggereixo P7.0 a P7.7) als vuit pins de la matriu de sensors etiquetats com a "1" a "8". Aquestes són les línies que aniran ALTA o BAIXA en funció del que percebin.

Com podeu veure a les imatges d’aquest pas i al vídeo, no vaig connectar el sensor al xassís del robot, perquè volia facilitar la programació, la depuració, les proves i l’aprenentatge.

Així doncs, amb tot el que està connectat, estem preparats per entrar al programari.

Pas 2: seguiment de línia

Seguiment de la línia
Seguiment de la línia
Seguiment de la línia
Seguiment de la línia

El sensor de matriu de reflectància és bastant enginyós, ja que pot ajudar de dues maneres com a mínim.

  • Determinar és el robot centrat en la línia o que es desvia cap a un costat.
  • El robot està alineat en la direcció de la línia o està inclinat.

Cadascun dels detectors de la matriu proporciona essencialment una mica d'informació, ja sigui ALTA o BAIXA.

La idea és combinar tots aquests bits en un sol nombre o en un sol patró de bits, i utilitzar aquest patró per prendre decisions (per tal de moure’s correctament).

Pas 3: Abans de començar realment …

.. necessitem aprendre alguna cosa nova sobre la programació de muntatges ARM. I no em refereixo només a una altra instrucció. Aquests solen ser menors.

Fins ara no hem utilitzat la "pila" als nostres programes.

Ens hem basat en l’ús de la majoria dels registres de CPU bàsics a nivell mundial en diferents subrutines.

L'única cosa que vam fer va ser desar i restaurar l'adreça LR (registre d'enllaços) per a una funció: la que anomenava diverses altres funcions. (Aquí utilitzo "funció" i "subrutina" indistintament).

El que hem estat fent no és bo. Què passa si volem niar altres funcions? Què passa si tenim més d’un nivell de nidificació?

En exemples anteriors, vam optar per utilitzar el registre R6 com a emmagatzematge per a l'adreça LR o de retorn. Però si volem fer nidificacions més profundes, no podem continuar canviant el valor de R6. Hauríem de triar un altre registre. I una altra. I, a continuació, es fa pesat fer un seguiment de quin registre central de la CPU conté quin LR ha de restaurar a quina funció.

Ara donem un cop d'ull a la "pila".

Pas 4: la pila

Aquí teniu un material de lectura que explica la pila.

Sóc un defensor més gran d'un parell d'idees:

  • només tanta teoria com sigui necessària, opteu per la pràctica ràpidament
  • aprendre si cal, centrar-se en fer alguna cosa i no només exercicis o exemples sense propòsit.

Hi ha molta documentació ARM i MSP432 en línia que parla de la pila, de manera que no es tornarà a revisar tot això. També mantindré l’ús de la pila aquí al mínim, desant l’adreça de retorn (el registre d’enllaços).

Bàsicament, només necessitem instruccions:

PUSH {llista de registres}

POP {llista de registres}

O, en el nostre cas, específicament:

PUSH {LR}

POP {LR}

Per tant, una funció / subrutina d’ensamblatge seria així:

funcLabel:.asmfunc

PUSH {LR}; probablement hauria de ser una de les primeres instruccions sobre l'entrada.; feu més codi aquí; bla, bla, bla…; d'acord, ja hem acabat amb la funció, a punt per tornar a fer una còpia de seguretat de la funció de trucada POP {LR}; així es restableix l'adreça de retorn correcta a la trucada; funció. BX LR; tornar.endasmfunc

El vídeo presenta un exemple en directe de diverses funcions imbricades.

Pas 5: el programari

El fitxer adjunt anomenat "MSP432_Chapter …" conté molta bona informació sobre els ports del MSP432 i, a partir d'aquest document, obtenim els següents ports, registres, adreces, etc. Tanmateix, està una mica datat. Tot i això, no vaig veure les adreces detallades que s’enumeren per al port 5 i posteriors. (només "funcions alternatives"). Però encara és útil.

Farem servir dos ports. P5, P7, P1 i P2.

La sortida P5.3 (un bit únic) serà per controlar l'activació del LED IR al sensor. Estem utilitzant P5.3 perquè és un pin exposat a la mateixa capçalera que les altres connexions MSP432 que van a la matriu de sensors.

P7.0 a P7.7 seran les vuit entrades que recopilaran les dades del sensor; el que "veu".

P1.0 és l'únic LED vermell i el podem utilitzar per donar-nos algunes indicacions de les dades.

P2.0, P2.1, P2.2 és el LED RGB i també el podem utilitzar, amb les seves diferents possibilitats de color, per indicar-nos les dades del sensor.

Si heu revisat les instruccions anteriors relacionades amb tot això, ja sabeu com configurar el programa.

Només cal tenir una secció de declaració per als ports i bits, etc.

Tindreu una secció "principal".

Hi hauria d’haver un bucle, on llegim contínuament les dades de P7, prenem decisions sobre aquestes dades i il·luminem els dos LED en conseqüència.

Aquí teniu de nou les adreces del registre de ports:

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

El que apareix en negreta és el que farem servir per a aquest instructiu.

Passos del programa per llegir detectors d’IR

El següent és un codi psuedo per escriure el programa en C, però encara és útil i el seguirem de prop a la versió de muntatge del programa.

programa principal 0) Inicialitzar // ports mentre que (1) {1) Configureu P5.3 a l'altura (activeu el LED IR) 2) Feu que P7.0 sigui una sortida i configureu-lo a l'altura (carregant el condensador) 3) Espereu-nos 10, Clock_Delay1us (10); 4) Feu de P7.0 una entrada 5) Executeu aquest bucle 10.000 vegades a) Llegiu P7.0 (converteix el voltatge de P7.0 en binari) b) Sortiu de binari a P1.0 (us permet veure binari en temps real) 6) Estableix P5.3 baix (apaga el LED IR, estalviant energia) 7) Espera 10 ms, Clock_Delay1ms (10); } // repetir (tornar a while ())

Pas 6: millorem el codi

El propòsit o l’ús de la matriu LED Pololu IR és detectar una línia i saber si el robot (futur) està directament centrat en la línia o cap a un costat. A més, atès que la línia té un gruix determinat, si la matriu de sensors és directament perpendicular a la línia, el nombre N de sensors tindrà una lectura diferent de la resta, mentre que si la matriu de LED IR està en algun angle (no perpendicular), llavors Els parells de LED / detector IR N + 1 o N + 2 ara haurien de fer una lectura diferent.

Així, segons quants sensors indiquin la presència de la línia, hauríem de saber si estem centrats i si estem inclinats o no.

Per a aquest experiment final, vegem si aconseguim que el LED vermell i el LED RGB ens proporcionin més informació sobre allò que ens explica la matriu de sensors.

El vídeo inclou tots els detalls. També s’adjunta el codi final.

D'aquesta manera es completa la sèrie d'assemblea ARM relacionada amb GPIO. Esperem tornar amb més ARM Assembly en un moment posterior.

Gràcies.

Recomanat: