Diseño y fabricación de Shield de Arduino para aplicaciones de audio

Arribas Guerrero, Patricia (2017). Diseño y fabricación de Shield de Arduino para aplicaciones de audio. Proyecto Fin de Carrera / Trabajo Fin de Grado, E.T.S.I. Industriales (UPM).

Descripción

Título: Diseño y fabricación de Shield de Arduino para aplicaciones de audio
Autor/es:
  • Arribas Guerrero, Patricia
Director/es:
  • Portilla Berrueco, Jorge
  • Torroja Fungairiño, Yago
Tipo de Documento: Proyecto Fin de Carrera/Grado
Grado: Grado en Ingeniería en Tecnologías Industriales
Fecha: 2017
Materias:
Escuela: E.T.S.I. Industriales (UPM)
Departamento: Automática, Ingeniería Eléctrica y Electrónica e Informática Industrial
Licencias Creative Commons: Reconocimiento - Sin obra derivada - No comercial

Texto completo

[img]
Vista Previa
PDF (Document Portable Format) - Se necesita un visor de ficheros PDF, como GSview, Xpdf o Adobe Acrobat Reader
Descargar (4MB) | Vista Previa

Resumen

En el último siglo la industria de la electrónica ha sufrido una gran revolución con motivo de la aparición del microcontrolador. A medida que este componente ha ido evolucionando, su tamaño ha disminuido y esto ha motivado la popularización de la PCB (printed circuit board), que es una tarjeta usada en circuitos y sirve como soporte para los componentes y las conexiones eléctricas de estos. Aunque su aparición es anterior a la del microcontrolador, la disminución del tamaño de los componentes y la aparición de la PCB multicapa impulsó el uso de ésta por parte de la industria. Pero ha sido a comienzos de este siglo, con la aparición del concepto de hardware libre y “Do It Yourself” (DIY), cuando el uso de la PCB se ha extendido fuera de la industria, llegando a las personas. Empresas como Arduino o Raspberry Pi Foundation han creado una comunidad libre y gratuita alrededor de las placas creadas por estas compañías, que ofrece un entorno de aprendizaje sencillo y que permite a personas sin formación específica desarrollar sus propias PCB. El objetivo de este proyecto es diseñar una shield para Arduino, esto es una placa que se pueda montar encima de la última y que permita añadir una funcionalidad extra. En el caso de este proyecto, la PCB va a posibilitar la reproducción de audio buscando como meta que la calidad alcanzada sea la máxima posible. Para esto se ha propuesto una estructura básica para la placa, que deberá contar con un códec que permita codificar/decodificar el mayor número de formatos posibles y un amplificador que debe ser seleccionado con atención para asegurar que se obtiene la mayor eficiencia del circuito. En cuanto a las entradas y salidas, solo se han propuesto dos requisitos que la placa debe cumplir. En primer lugar la salida de audio tiene que poder realizarse a través de altavoces, el número de estos componentes así como el tamaño se decidirá durante el desarrollo del proyecto. El segundo es que la Arduino, mediante un programa que la convierte en un sintetizador, debe poder servir como entrada de audio, por lo tanto la comunicación entre esta placa y la shield ha de permitirlo. El resto de componentes quedan pendientes de decidir hasta después de la investigación que es la que puede aportar opciones. El modo de proceder ha consistido en dividir el trabajo en tres fases: en primer lugar la investigación del estado del arte, posteriormente el diseño hardware de la placa y por último el desarrollo del software. La primera fase consistió en la investigación de las placas existentes en el mercado. Gracias al concepto ya mencionado de hardware libre, esta indagación permitió obtener gran cantidad de información de las shield existentes tanto para Arduino como para Raspberry Pi, lo que posibilitó evaluar los componentes más comúnmente usados. Esta indagación será útil para la elección de los componentes definitivos que se hizo posteriormente. Una vez obtenida toda la información necesaria, se dio comienzo a la siguiente etapa de este proyecto, que consistió en el diseño del hardware de la placa, para lo cual se utilizó el programa CircuitMaker, que es el software gratuito ofrecido por Altium. Se comenzó por la elaboración del esquemático, que es un plano que muestra los componentes de un circuito y sus conexiones mediante símbolos estandarizados y simplificados. Para poder realizar este documento, fue necesario elegir los elementos que componen la placa, situarlos en el plano y conectarlos entre ellos de la manera adecuada. Tras la investigación realizada, se propusieron como entradas de audio la propia Arduino (para así poder cumplir con el objetivo propuesto para el proyecto), un micrófono y una tarjeta SD, y como salidas un jack y un único altavoz, ya que se prefirió poder situar uno de mayor tamaño, que asegura una mejor calidad, que dos de menor dimensión y que puedan conseguir un sonido en estéreo. Además se decidió añadir un potenciómetro para permitir controlar el volumen de la salida de audio. También se añadieron dos reguladores de tensión (LDO) para la alimentación de la placa que permiten convertir el voltaje ofrecido por la Arduino a otros valores necesarios para el códec. Así mismo, dada la importancia de separar correctamente la zona analógica de la digital con el objetivo de evitar que el ruido se filtre y disminuya la calidad del audio, también se incluyó una ferrita separando los dos tipos de alimentación, así como una resistencia de cero ohmios para las masas. Para realizar las conexiones entre los componentes fue necesario seguir las recomendaciones de los fabricantes propuestas en las hojas de características de cada elemento. Así mismo se siguió la recomendación de añadir filtros, compuestos por resistencias y condensadores, que disminuyen la cantidad de ruido que se filtra en el circuito y que afecta la calidad de la salida de audio. Una vez que el esquemático se finalizó el siguiente paso fue realizar el diseño de la PCB. En primer lugar se delineó la superficie de la placa y por lo tanto fue necesario decidir la forma que tendría esta. En este proyecto la shield tiene las mismas dimensiones que la Arduino usada. Posteriormente se realizó la distribución de los componentes en la superficie disponible y dibujada anteriormente. En primer lugar se optó por definir y adoptar una estrategia que permitiera asegurar el orden con el objetivo de minimizar el ruido filtrado en el circuito. En este proyecto se procedió a separar los componentes según su tipología: puramente digital, puramente analógico o mixto, colocando los primeros cerca de los pines de alimentación y los segundos lo más lejos posible. Además se intentó minimizar la distancia que separa componentes de tipo analógico conectados eléctricamente entre ellos, dado que estas líneas son muy vulnerables a las interferencias. Así mismo se trató de evitar que corrientes digitales atravesaran componentes analógicos por el mismo motivo. Finalmente se decidió que aquellos componentes que deben ser manipulados constantemente se deben situar en los bordes de la placa, consiguiendo así facilitar el manejo de la shield. El último paso consistió en realizar el rutado de la placa, y para esta tarea se dispuso de cuatro capas buscando reducir el ruido. Tal y como recomienda la hoja de características del códec, se decidió usar una de estas superficies para la alimentación, otra para la masa, dividiéndolas en tantas partes como diferentes valores existan, y las dos restantes para el cableado. Estas dos últimas capas se utilizaron de tal manera que una contiene todo el cableado horizontal y la otra todo el vertical. Terminada esta tarea, se finalizó el diseño de la PCB, y se pudieron obtener los documentos que requeridos para la impresión de la placa. La última fase del proyecto consistió en el desarrollo del software que permite implementar las funcionalidades de la placa. Dado que la shield se va a conectar a una Arduino, el entorno de programación que se ha usado es la propia interfaz (IDE) ofrecida por esta empresa, y el lenguaje utilizado para desarrollar el código es C o C++. Una de las ventajas que ofrece esta IDE es que cuenta con una API con un conjunto de subrutinas, funciones y procedimientos reunidos en librerías que permiten controlar, por ejemplo, la comunicación SPI o el uso de la tarjeta SD y posibilita la abstracción de ciertas tareas, lo que agiliza la tarea de creación de código. El desarrollo del software se dividió, a su vez, en tres fases: el trato de la comunicación entre componentes, la inicialización del códec y por último el desarrollo del código en sí. En primer lugar, es necesario establecer el tipo de comunicación que se iba a usar entre los componentes de la placa. La hoja de características del códec propone el uso del SPI (serial peripherical interface), que es un protocolo maestro-esclavo síncrono en el que un único dispositivo, que debe ser inteligente, ejerce de maestro y es el que controla quién manda o recibe datos, y el resto son esclavos. Según la hoja de características, el códec escucha el bus SPI como elemento esclavo, y por esto se decidió que el microcontrolador de Arduino sea el maestro, teniendo la tarjeta SD como esclavo también. Esta comunicación requiere de la conexión de cuatro pines: MISO (master input, slave output), MOSI (master output, slave input), CLK (reloj de la comunicación) y SS (slave select), teniendo en cuenta que cada componente esclavo debe tener su propio SS. Dado que el códec cuenta con dos buses SPI, se conectaron el mismo número de SS, uno para el SDI (serial data interface) y otro para SCI (serial control interface). Además se cuenta con otro pin DREQ, que indica cuando el códec está preparado para recibir datos a través del bus SDI. La API de Arduino procura una biblioteca que permite controlar este protocolo de comunicación, pero es necesario facilitar las funciones que ejecutan la transferencia de datos entre el microcontrolador y el códec. Por tanto, al inicio de cada programa se incluyó el código que inicializa esta comunicación y deja fijados ciertos parámetros, como la velocidad de transferencia o que bit se traspasa primero. A continuación se implementaron dos funciones necesarias para el funcionamiento de la placa, una encargada de la inicialización del códec otra que ejecuta un test que asegure la correcta actividad del componente. En estas rutinas se configuran los valores de ciertos registros, que controlan el modo de funcionamiento del códec, el volumen de salida o el reloj interno, y se comprueba que la comunicación SPI entre este dispositivo y el maestro se realice de manera adecuada. Además para asegurar que no existe un problema de hardware, también se implementó un test, propuesto por el propio fabricante del códec, que permite reproducir una señal sinodal durante un tiempo determinado. Una vez que ambas pruebas fueron superadas con éxito y una de las salidas, bien el altavoz o el Jack, fue capaz de reproducir audio, cualquier error que se presente será debido al código y no a los componentes o conexiones. Tras la inicialización del códec y del SPI, se puede comenzar a desarrollar el código que implementa las funcionalidades de la placa. En este proyecto se ha decidido alcanzar dos objetivos: reproducir música almacenada en la tarjeta SD y tener como salida el audio producido por el sintetizador implementado en la Arduino. Independientemente del caso que se esté afrontado, el esquema de transferencia de datos entre componentes es similar. La estrategia consiste en almacenar los datos a trasmitir, sin tener en cuenta si provienen de la tarjeta SD o del sintetizador de la placa Arduino, en un buffer cuyo tamaño máximo es igual que la palabra del bus SDI. Cada vez que el pin DREQ confirme que el códec está preparado para recibir datos, la información guardada en esta cadena se envía, mediante las funciones de transferencia de SPI, a este componente. En caso de que el archivo de música esté almacenado en la tarjeta SD, se empleó la librería SD brindada por la API de Arduino, que contiene una función que permite crear un objeto fichero referido al de la SD, y de este se puede transferir los datos al buffer anteriormente mencionado. Para afrontar la tarea de trazar el código principal del programa, existe la posibilidad de buscar software ya existente y disponible para la IDE de Arduino. En este proyecto se utilizó una librería procurada por la empresa Adafruit, concebida para el códec VS1053 usado en esta shield. Esto permitió simplificar la labor en el caso del programa de la reproducción de audio desde la SD, pero para el sintetizador, fue necesario crear el código en su totalidad. Al llegar al final del proyecto ambos objetivos se han logrado alcanzar, y al analizar la calidad del audio reproducido se ha advertido que, a pesar del hándicap que supone el tamaño del altavoz, que limita la pureza del sonido y su volumen, la salida lograda cumple con la expectativa, dando por finalizado con éxito el trabajo de fin de grado. Sin embargo, quedan abiertas futuras líneas de trabajo para efectuar mejoras en la placa. En primer lugar, se han encontrado ciertos problemas de hardware en la shield que en caso de repararlos, pueden contribuir a la mejora en la calidad de sonido. Es necesario ajustar los valores de ciertos filtros, lo que permitirá poder controlar con más facilidad los cambios de volumen del potenciómetro. Así mismo, existe la posibilidad de implementar nuevas funcionalidades a la placa mediante la creación de nuevo software, lo que podrá permitir grabar audio con el micrófono y almacenarlo en la tarjeta SD o implementar nuevos formatos de reproducción.

Más información

ID de Registro: 47935
Identificador DC: http://oa.upm.es/47935/
Identificador OAI: oai:oa.upm.es:47935
Depositado por: Biblioteca ETSI Industriales
Depositado el: 02 Oct 2017 06:49
Ultima Modificación: 02 Oct 2017 06:49
  • Open Access
  • Open Access
  • Sherpa-Romeo
    Compruebe si la revista anglosajona en la que ha publicado un artículo permite también su publicación en abierto.
  • Dulcinea
    Compruebe si la revista española en la que ha publicado un artículo permite también su publicación en abierto.
  • Recolecta
  • e-ciencia
  • Observatorio I+D+i UPM
  • OpenCourseWare UPM