Tabla de contenido:

Parte 3: GPIO: Ensamblaje ARM: Seguidor de línea: TI-RSLK: 6 pasos
Parte 3: GPIO: Ensamblaje ARM: Seguidor de línea: TI-RSLK: 6 pasos

Video: Parte 3: GPIO: Ensamblaje ARM: Seguidor de línea: TI-RSLK: 6 pasos

Video: Parte 3: GPIO: Ensamblaje ARM: Seguidor de línea: TI-RSLK: 6 pasos
Video: Part 10 ARM Assembly MSP432 TI RSLK Lab 6 GPIO Using Pololu QTR 8RC Reflectance Sensor Array 2024, Mes de julio
Anonim
Image
Image
El hardware
El hardware

Hola. Esta es la próxima entrega en la que continuamos usando el ensamblaje ARM (en lugar de un lenguaje de nivel superior). La inspiración para este Instructable es el laboratorio 6 del kit de aprendizaje del sistema de robótica de Texas Instruments, o TI-RSLK.

Usaremos el microcontrolador del kit, la placa de desarrollo MSP432 LaunchPad, pero quizás encuentre algo útil para extraer de este Instructable incluso si no está usando el LaunchPad o siguiendo el T. I. plan de estudios.

Comenzamos con Instructable presentando ARM Assembly, el entorno de desarrollo y cómo hacer un proyecto.

El siguiente Instructable en ARM Assembly presentó cómo interactuar con la entrada / salida (GPIO).

Luego ampliamos nuestro conocimiento e introdujimos funciones, controlando LED e interruptores.

Ahora, con este Instructable, podemos usar lo que hemos aprendido para hacer algo más divertido, más útil: detectar una línea.

Esto puede ayudarnos más adelante cuando construyamos un robot seguidor de línea.

En el plan de estudios, la mayor parte de la programación se realiza en C o C ++, pero es útil familiarizarse con el ensamblaje, antes de comenzar a depender de lenguajes de nivel superior y bibliotecas.

Paso 1: el hardware

El hardware
El hardware
El hardware
El hardware
El hardware
El hardware

No quiero repetir el hardware en detalle, ya que ya hay fuentes, pero agregaremos explicaciones cuando sea necesario.

Para este Instructable, usaremos el sensor de reflectancia Arrray de Pololu, ya que viene como parte del TI-RSLK (el kit de robot). Es el que se utiliza en el curso y en el laboratorio 6 del plan de estudios.

Si no tiene eso, puede usar cualquier detector de infrarrojos (o una serie de ellos) que emita una señal digital, ALTA o BAJA, para presencia y ausencia.

El sensor de matriz es mejor porque puede ayudar a detectar si estamos justo en el centro de la línea o hacia un lado. Además, como veremos más adelante, puede ayudarnos a detectar el ángulo del robot con respecto a la línea.

La matriz de reflectancia tiene detectores muy próximos entre sí. Eso significa que deberíamos obtener múltiples señales de detección, dependiendo, por supuesto, del grosor de la línea.

Si es así, entonces si el robot no está directamente en línea con la línea, entonces debería devolver un resultado de que la línea es más ancha de lo que debería ser (porque estamos en un ángulo).

Para una mejor explicación de lo anterior, eche un vistazo al documento Lab 6.

Para obtener ayuda para cablear / conectar el sensor a la placa de desarrollo MSP432 LaunchPad, aquí hay algunas instrucciones útiles.

También agregué las mismas instrucciones en pdf (¿similares?) A este paso.

Si lee detenidamente los documentos de Pololu, estos explican el motivo de la "derivación de 3.3V", que querrá puentear si está usando 3.3V en lugar de 5V.

Dado que aún no estamos construyendo el robot, sino que solo estamos aprendiendo sobre el ensamblaje de ARM y también cómo interactuar con las piezas (subsistemas) del robot, no tenemos que seguir las instrucciones anteriores al pie de la letra.

Por ahora, conectar la matriz de sensores de línea simplemente se reduce / reduce a lo siguiente:

  • conecte 3.3V y GND desde la placa MSP432 a la matriz de sensores.
  • conecte un pin de puerto (sugiero P5.3) desde el MSP432 al pin de habilitación de LED en la matriz de sensores de línea. Ese pin en el sensor está entre 3.3V y GND.
  • conecte los ocho pines / bits de un solo puerto (sugiero P7.0 a P7.7) a los ocho pines de la matriz de sensores etiquetados "1" a "8". Estas son las líneas que irán HIGH o LOW dependiendo de lo que sientan.

Como pueden ver en las imágenes de este paso, y en el video, no conecté el sensor al chasis del robot, porque quería facilidad de programación, depuración, prueba, aprendizaje.

Entonces, con todo conectado, estamos listos para ingresar al software.

Paso 2: Seguimiento de línea

Seguimiento de línea
Seguimiento de línea
Seguimiento de línea
Seguimiento de línea

El sensor de matriz de reflectancia es bastante ingenioso porque puede ayudar de al menos dos formas.

  • Determine si el robot está centrado en la línea o se desvía hacia un lado.
  • ¿Está el robot alineado en la dirección de la línea o en ángulo?

Cada uno de los detectores de la matriz proporciona esencialmente un bit de información, ya sea ALTO o BAJO.

La idea es combinar todos esos bits en un solo número o un solo patrón de bits, y usar ese patrón para tomar decisiones (para moverse correctamente).

Paso 3: Antes de que podamos realmente comenzar…

.. necesitamos aprender algo nuevo sobre la programación de ensamblajes ARM. Y no me refiero solo a otra instrucción. Éstos tienden a ser menores.

Hasta ahora no hemos utilizado la "pila" en nuestros programas.

Nos hemos basado en el uso de la mayoría de los registros centrales de la CPU a nivel mundial en diferentes subrutinas.

Lo único que hicimos fue guardar y restaurar la dirección LR (registro de enlace) para una función, la que llamó a varias otras funciones. (Yo uso "función" y "subrutina" indistintamente aquí).

Lo que hemos estado haciendo no es bueno. ¿Qué pasa si queremos anidar otras funciones? ¿Qué pasa si tenemos más de un nivel de anidación?

En ejemplos anteriores, elegimos usar el registro R6 como almacenamiento para el LR o la dirección de retorno. Pero si queremos hacer un anidamiento más profundo / más profundo, no podemos continuar cambiando el valor de R6. Tendríamos que elegir otro registro. Y otro. Y luego se vuelve engorroso realizar un seguimiento de qué registro de CPU central contiene qué LR restaurar a qué función.

Así que ahora echemos un vistazo a la "pila".

Paso 4: la pila

Aquí hay material de lectura que explica la pila.

Soy un gran defensor de un par de ideas:

  • Solo la teoría necesaria, opte por la práctica rápidamente
  • aprenda según sea necesario, concéntrese en hacer algo y no solo en ejercicios o ejemplos sin propósito.

Hay mucha documentación de ARM y MSP432 en línea que habla sobre la pila, por lo que no voy a repetir todo eso. También voy a mantener el uso de la pila aquí al mínimo, guardando la dirección de retorno (el Registro de enlaces).

Básicamente, solo necesitamos instrucciones:

PUSH {lista de registro}

POP {lista de registros}

O, en nuestro caso, específicamente:

PRESIONE {LR}

POP {LR}

Entonces, una función / subrutina de ensamblaje se vería así:

funcLabel:.asmfunc

PUSH {LR}; esta probablemente debería ser una de las primeras instrucciones al ingresar.; hacer más código aquí..; bla, bla, bla…; ok, hemos terminado con la función, estamos listos para volver a la función de llamada POP {LR}, esto restaura la dirección de retorno correcta a la llamada; función. BX LR; volver.endasmfunc

El video muestra un ejemplo en vivo de varias funciones anidadas.

Paso 5: el software

El archivo adjunto con la etiqueta "MSP432_Chapter …" tiene mucha buena información sobre los puertos del MSP432, y de ese documento obtenemos los siguientes puertos, registros, direcciones, etc. Sin embargo, está un poco anticuado. Sin embargo, no vi las direcciones detalladas enumeradas para el puerto 5 en adelante. (solo "funciones alternativas"). Pero sigue siendo útil.

Usaremos dos puertos. P5, P7, P1 y P2.

La salida P5.3 (un solo bit) será para controlar la activación del LED IR en el sensor. Estamos usando P5.3 porque es un pin expuesto en el mismo encabezado que las otras conexiones MSP432 que van a la matriz de sensores.

P7.0 a P7.7 serán las ocho entradas que recopilan los datos del sensor; lo que "ve".

P1.0 es el único LED rojo y podríamos usarlo para darnos algunas indicaciones de los datos.

P2.0, P2.1, P2.2 es el LED RGB y también podemos usarlo, con sus diferentes posibilidades de color, para darnos una indicación de los datos del sensor.

Si ha revisado los Instructables anteriores relacionados con todo esto, entonces ya sabe cómo configurar el programa.

Solo tiene una sección de declaración para los puertos y bits, etc.

Tendrás una sección "principal".

Debería haber un bucle, donde leemos continuamente los datos de P7, tomamos una decisión sobre esos datos e iluminamos los dos LED en consecuencia.

Aquí nuevamente están las direcciones de registro de puertos:

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

Lo que está en negrita es lo que usaremos para este Instructable.

Pasos del programa para leer detectores de infrarrojos

El siguiente es un código psuedo para escribir el programa en C, pero sigue siendo útil, y lo seguiremos bastante de cerca en la versión ensambladora del programa.

programa principal 0) Inicializar // puertos mientras (1) {1) Establecer P5.3 alto (encender LED IR) 2) Hacer P7.0 una salida, y configurarlo alto (cargando el capacitor) 3) Esperar 10 us, Clock_Delay1us (10); 4) Convierta P7.0 en una entrada 5) Ejecute este bucle 10, 000 veces a) Lea P7.0 (convierte el voltaje en P7.0 en binario) b) Salida binaria a P1.0 (le permite ver binario en tiempo real) 6) Configure P5.3 bajo (apague el LED de infrarrojos, ahorrando energía) 7) Espere 10 ms, Clock_Delay1ms (10); } // repetir (volver a while ())

Paso 6: Mejoremos el código

El propósito o el uso de la matriz de LED IR Pololu es detectar una línea y saber si el robot (futuro) está directamente centrado en la línea o hacia un lado. Además, dado que la línea tiene un cierto grosor, si la matriz de sensores es directamente perpendicular a la línea, N número de sensores tendrá una lectura diferente al resto, mientras que si la matriz de LED IR está en algún ángulo (no perpendicular), entonces Los pares N + 1 o N + 2 de LED / detector IR ahora deberían dar una lectura diferente.

Así, dependiendo de cuántos sensores indiquen la presencia de la línea, deberíamos saber si estamos centrados y si estamos en ángulo o no.

Para este experimento final, veamos si podemos hacer que el LED rojo y el LED RGB nos brinden más información sobre lo que nos dice la matriz de sensores.

El video entra en todos los detalles. También se adjunta el código final.

Esto completa la serie de ensamblajes ARM relacionados con GPIO. Esperamos volver con más ARM Assembly más adelante.

Gracias.

Recomendado: