Tabla de contenido:

Cómo hacer a Ernie: 11 pasos
Cómo hacer a Ernie: 11 pasos

Video: Cómo hacer a Ernie: 11 pasos

Video: Cómo hacer a Ernie: 11 pasos
Video: ERNIE BALL REGULAR SLINKY CAMBIO DE CUERDAS A GUITARRA ELECTRICA YAMAHA EG122 C2 2024, Noviembre
Anonim
Cómo hacer a Ernie
Cómo hacer a Ernie

Este es un tutorial sobre cómo construir Ernie, su robot de seguimiento de sonido autónomo, usando una placa Zybo. Cubrirá cómo: crear un proyecto en Vivado, crear controladores de servomotor tipo PWM en la FPGA, interactuar con dos sensores de sonido, crear una diferencia de tiempo de IP de llegada, usar freeRTOS y ejecutar el zybo con una batería. Este fue nuestro proyecto final para una clase de sistemas operativos en tiempo real (CPE 439) en Cal Poly SLO.

Lista de equipo:

  • 1 - Placa de desarrollo ZYBO Zynq 7000
  • 2 - Servo de rotación continua Parallax
  • 2 - Sensor de sonido (detector de sonido SparkFun)
  • 1 - Paquete de baterías USB de iones de litio de 5v (para placa)
  • 4 - pilas AA (para servos)
  • 1 - Paquete de baterías AA (con 4 ranuras para baterías)
  • 1 - Cable micro USB
  • 1 - Tablero de pruebas
  • muchos - Cables macho a macho
  • 1 - Chasis servo

Requisitos de Software:

  • Xilinx Vivado Design Suite 2016.2
  • Adepto Digilent 2.16.1

Paso 1: Configurar un proyecto en Vivado para Ernie

Configurar un proyecto en Vivado para Ernie
Configurar un proyecto en Vivado para Ernie
Configurar un proyecto en Vivado para Ernie
Configurar un proyecto en Vivado para Ernie
Configurar un proyecto en Vivado para Ernie
Configurar un proyecto en Vivado para Ernie
  1. Aparecerá un asistente
  2. Haga clic en Siguiente
  3. Siguiente nombre del proyecto

    1. ¡Nunca use un nombre de proyecto o una ruta de directorio que tenga espacios!
    2. Este será un proyecto RTL.
  4. No queremos especificar fuentes.
  5. Al hacer clic en Siguiente, llegamos a la página Pieza. Estamos utilizando un ZYNQ XC7Z010-1CLG400C.

    1. Vivado no tiene el Zybo listado como uno de sus tableros predefinidos. Seleccione: "partes" y luego busque xc7z010clg400-1.
    2. Si elige la pieza equivocada por error, puede cambiar fácilmente los chips: Herramientas -> Configuración del proyecto -> General y haga clic en los puntos a la derecha de "Dispositivo del proyecto"
  6. Haga clic en Crear diseño de bloque.

    Nómbralo design_1 por ahora

  7. Verá una barra verde que dice Agregar IP, haga clic en ella.
  8. Busque Zynq.

    1. Haga doble clic en Sistema de procesamiento ZYNQ7,
    2. Este bloque aparecerá en nuestro diseño de bloque.
  9. Verá una barra verde que dice Ejecutar automatización de bloques, haga clic en ella.
  10. Descargue zybo_zynq_def.xml a continuación.
  11. En Vivado, haga clic en "Importar configuración de XPS" y seleccione "zybo_zynq_def.xml"

    Esto rellena previamente la configuración del bloque Vivado con todos los periféricos incorporados y asignaciones de pines de la placa Zybo

  12. Haga doble clic en el bloque ZYNQ.

    1. Configuración MIO

      1. Habilitar el temporizador 0 (en Unidad de procesador de aplicaciones - img 1)
      2. Habilitar Watchdog (en Unidad de procesador de aplicaciones - img 1)
      3. Habilite GPIO-> GPIO MIO (en Unidad de procesador de aplicaciones - img 2)
      4. Habilite GPIO-> ENET Reset (en Periféricos de E / S- img 2)
    2. Configuración del reloj

      Desactivar FCLK0 (debajo de PL Fabric Clocks - img 3)

  13. Haga clic en Aceptar.
  14. "Ejecutar automatización de bloques" ahora.

    Habrá algunas preguntas sobre las señales, diga OK

  15. Haga clic en "Generar contenedor HDL".

    Querremos copiar el contenedor generado para permitir las ediciones del usuario

  16. Haga clic en Aceptar.

Paso 2: Creación de PWM de Ernie en Vivado

Creando PWM de Ernie en Vivado
Creando PWM de Ernie en Vivado
Creando PWM de Ernie en Vivado
Creando PWM de Ernie en Vivado

Este paso generará una IP PWM con entradas enviadas a través de la biblioteca AXI.

  1. Cree un bloque AXI GPIO haciendo clic con el botón derecho en el fondo y haciendo clic en "agregar IP"

    escriba "AXI_GPIO" en la barra de búsqueda y seleccione este paquete

  2. Vuelva a personalizar la IP haciendo doble clic en el nuevo bloque axi_gpio_0

    1. en GPIO, establezca el ancho de GPIO en 2. Estos bits serán la señal PWM_ON para controlar cada instancia de módulo PWM.
    2. haga clic en "habilitar doble canal"
    3. en GPIO 2, establezca el ancho de GPIO en 2. Estos bits serán la señal PWM_FW para establecer la dirección de cada instancia de módulo PWM.
  3. Haga clic derecho en el puerto de salida axi_gpio_0 etiquetado GPIO y seleccione "Hacer externo"

    1. Haga clic en la nueva salida etiquetada GPIO, navegue hasta la pestaña "propiedades" en la barra de herramientas izquierda y cambie el nombre a PWM_ON
    2. Haga clic en la nueva salida etiquetada GPIO2, navegue hasta la pestaña "propiedades" en la barra de herramientas izquierda y cambie el nombre a PWM_FW
  4. Seleccione Ejecutar automatización de conexión en el banner verde sobre el diagrama de bloques.

    Si conecta manualmente los puertos, es posible que las direcciones AXI no se configuren, lo que provocará problemas de comunicación más adelante

  5. En el panel Flow Navigator, seleccione administrador de proyectos -> Agregar fuentes para crear un nuevo bloque de IP personalizado

    1. elija "agregar o crear fuentes de diseño" y presione siguiente
    2. haga clic en "crear archivo", cambie el tipo de archivo a "SystemVerilog" y escriba "pwm" en el campo del nombre del archivo, luego haga clic en Aceptar
    3. haga clic en Finalizar
    4. ignore la ventana Definir módulo presionando OK (los sobrescribiremos más adelante)

      si te pregunta si estás seguro, haz clic en Sí

  6. En la pestaña de fuentes, haga doble clic en pwm.sv (ubicado en "Design Sources / design_1_wrapper")

    Copie / pegue todo el código SystemVerilog del archivo pwm.txt adjunto a continuación

Paso 3: Creación de TDOA de Ernie en Vivado

Creando el TDOA de Ernie en Vivado
Creando el TDOA de Ernie en Vivado
Creando el TDOA de Ernie en Vivado
Creando el TDOA de Ernie en Vivado

Este paso generará una IP TDOA cuya salida se puede leer a través de la biblioteca AXI

  1. Cree un bloque AXI GPIO haciendo clic con el botón derecho en el fondo y haciendo clic en "agregar IP"

    escriba "AXI_GPIO" en la barra de búsqueda y seleccione este paquete

  2. Vuelva a personalizar la IP haciendo doble clic en el nuevo bloque axi_gpio_1

    1. en GPIO, marque la casilla "Todas las entradas" y configure el ancho de GPIO en 32. Este bus será la diferencia de tiempo de llegada entre los dos sensores.
    2. dentro del bloque axi_gpio_1, haga clic en + junto al puerto GPIO para revelar gpio_io_i [31: 0].
  3. Haga clic derecho en el puerto de salida axi_gpio_1 etiquetado gpio_io_i [31: 0] y seleccione "Hacer externo"

    Haga clic en la nueva entrada etiquetada gpio_io_i [31: 0], navegue hasta la pestaña "propiedades" en la barra de herramientas izquierda y cambie el nombre a TDOA_val

  4. Seleccione Ejecutar automatización de conexión en el banner verde sobre el diagrama de bloques.

    Si conecta manualmente los puertos, es posible que las direcciones AXI no se configuren, lo que provocará problemas de comunicación más adelante

  5. En el panel Flow Navigator, seleccione administrador de proyectos -> Agregar fuentes para crear un nuevo bloque de IP personalizado

    1. elija "agregar o crear fuentes de diseño" y presione siguiente
    2. haga clic en "crear archivo", cambie el tipo de archivo a "SystemVerilog" y escriba "tdoa" en el campo del nombre del archivo, luego haga clic en Aceptar
    3. haga clic en Finalizar
    4. ignore la ventana Definir módulo presionando OK (los sobrescribiremos más adelante)

      si te pregunta si estás seguro, haz clic en Sí

  6. En la pestaña de fuentes, haga doble clic en tdoa.sv (ubicado en "Design Sources / design_1_wrapper")

    Copie / pegue todo el código SystemVerilog del archivo tdoa.txt adjunto a continuación

Paso 4: Envolver y exportar a Ernie

Embalaje y exportación de Ernie
Embalaje y exportación de Ernie
  1. Verifique que el diagrama de bloques se parezca a la captura de pantalla adjunta
  2. En la pestaña de fuentes, haga clic con el botón derecho en design_1.bd y seleccione "Crear contenedor HDL …"

    1. Seleccione "Copiar la salida generada para permitir las ediciones del usuario", luego presione "Aceptar"
    2. Copie el código de design_1_wrapper.txt adjunto a continuación y péguelo en lugar del código design_1_wrapper.v generado
    3. guardar design_1_wrapper.v
  3. En la pestaña de fuentes, haga doble clic en el archivo ZYBO_Master.xdc en Restricciones / constrs1

    1. Copie el código de ZYBO_Master.txt adjunto a continuación y péguelo en lugar del código ZYBO_Master.xdc existente
    2. Tenga en cuenta los siguientes pines de entrada / salida:

      1. L15: señal PWM para el motor izquierdo (Pmod JA2 en el Zybo)
      2. L14: señal PWM para el motor derecho (Pmod JA8 en el Zybo)
      3. V12: entrada de puerta del sensor de sonido 1 (Pmod JE1 en el Zybo)
      4. K16: entrada de puerta del sensor de sonido 2 (Pmod JE2 en el Zybo)
  4. En el panel del navegador de flujo, haga clic en "Generar flujo de bits" en Programa y depuración

    si cree que está hecho de inmediato, probablemente no lo esté. en serio, haz un poco de té

  5. Haga clic en Archivo-> Exportar-> Generar hardware

    Marque "Incluir Bitstream" y presione Aceptar

  6. Haga clic en Archivo-> Iniciar SDK

Paso 5: Construyendo a Ernie

Edificio Ernie
Edificio Ernie
Edificio Ernie
Edificio Ernie
  1. Monte los servos en el chasis del servo.
  2. Siguiendo la hoja de datos de los servos, haga lo siguiente:

    1. conecte la tierra de los servos a los pines de tierra en el JA Pmod de Zybo (vea la imagen de pines adjunta)
    2. conecte el pin de alimentación de los servos a la batería AA

      Descubrimos que cuando los servos están conectados al Vdd de Zybo, la placa consume demasiada corriente, lo que hace que la placa se reinicie continuamente

    3. conecte los pines de señal de entrada a los pines de salida apropiados del Zybo (izquierda: JA2, derecha: JA8)
  3. Monte los sensores de sonido en la parte delantera del chasis, mirando hacia adelante, manteniéndolos lo más juntos posible.
  4. use la guía de conexión del sensor de sonido para integrar los sensores de sonido

    1. Conecte los pines de tierra y Vdd de cada sensor de sonido a tierra y los pines Vdd en el JE Pmod de Zybo (vea la imagen de pines adjunta)
    2. Conecte el pin Gate del sensor de sonido izquierdo a JE1
    3. Conecte el pin Gate del sensor de sonido derecho a JE2

Paso 6: primer BSP de Ernie

El primer BSP de Ernie
El primer BSP de Ernie
El primer BSP de Ernie
El primer BSP de Ernie
  1. Cree un BSP para resumir la plataforma que acabamos de crear.

    Puede obtenerlo a través de Archivo -> Nuevo -> Paquete de soporte de placa

  2. Aparecerá un asistente para ayudarlo a crear el BSP.

    1. Queremos vincular este BSP con nuestra Plataforma que acabamos de crear, por lo que
    2. La plataforma de hardware debe alinearse con la que acabamos de crear (ver imagen 1)
    3. Nuestra CPU será la CPU _0.
    4. Haga clic en Finalizar
    5. Asegúrese de marcar lwip141 para su inclusión con su bsp en la ventana que aparece (ver img 2)

Paso 7: FreeRTOS'ing Ernie

  1. Descargue la última versión de FreeRTOS de Sourceforge.

    Si la descarga es un ejecutable, ejecútelo para extraer los archivos FreeRTOS en el directorio de su proyecto

  2. Mantenga ese SDK abierto y haga clic en Archivo -> Importar.
  3. Queremos hacer clic en General-> Desde un espacio de trabajo existente, y luego querremos navegar hasta donde descargamos FreeRTOS.
  4. Nuestra demostración estará ubicada en FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702. Al seleccionar esta carpeta, deberíamos ver tres proyectos emergentes (nuestro código (SO), es BSP y la plataforma HW).

    SÓLO Importa RTOSDemo a tu espacio de trabajo actual

  5. En todos los proyectos de carpeta "azul", cambie el BSP al que se hace referencia
    1. Haga clic derecho y seleccione "Cambiar BSP referenciado".
    2. Seleccione el BSP que acaba de crear para su Zybo
    3. La edición de código en las carpetas azules del SDK de Xilinx son los proyectos de código reales.

Paso 8: Importación del código C de Ernie

  1. En el directorio RTOSDemo / src, sobrescriba el archivo main.c existente con el archivo main.c adjunto aquí.
  2. Copie el archivo main_sound.c en el directorio RTOSDemo / src.

Paso 9: depurar Ernie

  1. Seleccione Ejecutar -> Configuraciones de depuración
  2. En el panel izquierdo, cree una nueva ejecución del depurador del sistema
  3. En la pestaña Configuración de destino,

    seleccione "Restablecer todo el sistema" para que se seleccionen tanto eso como ps7_init

  4. Ahora seleccione la pestaña Aplicación.

    1. Seleccione "descargar aplicación"
    2. Configure el núcleo de cortexa9_0 en "detener en la entrada del programa"
    3. Haga clic en Aplicar y depurar.
  5. Verifique que no haya errores en el proceso de depuración
  6. Manteniendo una estrecha vigilancia sobre el robot, presione el botón Reanudar hasta que el programa se ejecute sin llegar a ningún punto de interrupción
  7. El robot ahora debería girar y moverse hacia ruidos fuertes. ¡Hurra!

Paso 10: Hacer que Ernie sea autónomo

  1. Una vez que su proyecto esté listo para funcionar (puede ejecutarlo sin problemas a través del depurador), estará listo para cargarlo en la memoria flash de su placa.
  2. Cree lo que se llama el proyecto de “cargador de arranque de primera etapa” (FSBL) y contiene todas las instrucciones que su placa necesitará para cargar los archivos de su proyecto (el flujo de bits y el sistema operativo) al inicio.

    1. Seleccione: Archivo-> Nuevo-> Proyecto de aplicación y debería aparecer la siguiente ventana.
    2. Nómbrelo como desee (es decir, "FSBL")
    3. Asegúrese de que la plataforma de hardware sea con la que está trabajando
    4. Presione siguiente (no presione Finalizar)
    5. Seleccione la plantilla Zynq FSBL
    6. Haga clic en finalizar.
  3. Una vez que se complete el proceso de creación, sabrá si todo funcionó si ve las siguientes dos carpetas nuevas en la ventana del Explorador de proyectos.
  4. Crear una imagen de arranque Ahora deberá crear la imagen de arranque.

    1. Haga clic derecho en la carpeta de su proyecto (en este caso el mío se llama "RTOSDemo")
    2. Haga clic en "Crear imagen de arranque" en el menú desplegable.
    3. Si todo está vinculado correctamente, el proyecto sabrá qué archivos necesita y la siguiente ventana se verá como se ve a continuación (la clave es que tiene 3 particiones en la sección Imagen de arranque, el gestor de arranque, su archivo de bits y el archivo.elf de sus proyectos.).

      Si este no es el caso, es posible que haya algún problema con la vinculación de su proyecto. Asegúrese de que las carpetas del proyecto estén vinculadas a sus respectivos BSP

    4. Haga clic en el botón "Crear imagen".
  5. El último paso a realizar en el software es ahora flashear su imagen creada previamente en la memoria de la placa.

    1. Seleccione de la barra de herramientas principal del SDK, seleccione Xilinx Tools-> Program Flash Memory
    2. Asegúrese de seleccionar la plataforma de hardware correcta y de que la ruta del archivo de imagen apunte correctamente al archivo. BIN creado en el paso anterior.
    3. Seleccione "qspi single" en el tipo de Flash.
    4. Marque "Verificar después del flash" para asegurar la integridad, pero no es necesario
  6. Configure su placa Por último, debe asegurarse de que el puente del modo de programación de la placa (JP5) esté configurado correctamente para seleccionar arrancar desde la qspi (que contiene lo que acaba de flashear) cuando se ejecuta BootROM.
  7. Ahora simplemente apague y encienda el dispositivo y asegúrese de que el “LED de configuración lógica finalizada” (LED 10) esté encendido en verde.

Paso 11: Hacer que Ernie sea lindo

  1. Piel
  2. Mucha piel
  3. ¡Ojos grandes!
  4. … sombrero de copa

Recomendado: