Ecualizador digital con display LCD

From Qi-Hardware
Jump to: navigation, search

Contents

[edit] Calificación

Porcentaje Presentación 20% Informe 30% Funcionamiento 50%
1 Entrega 10% 0.5 0.5 0.5
2 Entrega 30% 0 0 0
3 Entrega 40% 0 0 0 NO ASISTIERON A LA ENTREGA OCTUBRE 27


[edit] INTRODUCCIÓN

Se propone la realización de un filtro digital para señales de audio, para lo cual se utilizará una FPGA y dentro de esta se implementará el procesador plasma controlando algunos periféricos y almacenando un programa creado con el fin de manejar dichos periféricos , a partir de los datos obtenidos de un conversor análogo digital (ADC) se obtendrá una nueva señal digital con ayuda de módulos de suma, multiplicación y corrimiento que se diseñarán e implementarán para operar sobre los datos de acuerdo a una ecuación de diferencias. Dentro de los periféricos que deberá manejar el plasma están el de adquisición de datos provenientes del ADC, el de entrega de datos a un conversor digital analógico (DAC) el del control de ganancia, el de display LCD en donde se mostrará el valor de la ganancia y la duración de la señal adquirida y el filtro que constará de multiplicadores sumadores y registros de corrimiento como ya se mencionó. Luego la señal filtrada se amplifica para ser escuchada. En la siguiente figura se observa un diagrama de entrada salida.

Entrada.png

En términos generales el sistema digital descrito anteriormente funciona de la siguiente manera: se pretende realizarlo en tiempo real, se van tomando muestras y se almacenan en el espacio de memoria asignado al ADC, estas muestras se van pasando al filtro para que se procesen y se van reemplazando con nuevas muestras continuamente, posteriormente se procede a pasar el resultado del filtro al espacio asignado al DAC, a la conversión DAC y a la reproducción de la señal filtrada, la ganancia del filtro podrá ser ajustada manualmente. En el display se observará la variación el valor actual de la ganancia y la duración en segundos de la señal.

[edit] ESPECIFICACIONES DEL SISTEMA

[edit] Descripción funcional

Como podemos observar en el diagrama de flujo de la figura 2, definimos las señales principales que controla el sistema: RD determina si se reciben datos o no, GINC permite incrementar la ganancia, GDEC decrementarla, GAIN es una variable global del sistema que almacena la ganancia del filtro, CONT es un contador de muestras a partir del cual se obtendrá el valor en segundos de acuerdo a la frecuencia de muestro para así indicar la duración de la señal se almacenarán alrededor de 5 muestras en el espacio asignado en memoria al ADC que se irán procesando y reemplazando continuamente, RST es una señal que permite reiniciar el sistema en cualquier momento. Inicialmente el sistema toma 5 muestras del ADC y las almacena en memoria cuando la señal de habilitación RD esté en alto, cuando no está en alto, se procede entonces a leer los datos de la memoria y se verifica si GINC o GDEC está en alto para aumentar o disminuir ganancia según corresponda, si ninguna de las dos está en alto, entonces se procesa el dato en el módulo de filtro y se envía al DAC para convertirse y reproducirse. Luego se comprueba si hay mas datos para procesar (después de cada 5) y si no entonces se procede a la conversión DAC y a la reproducción. La idea es que continuamente se tomen muestras y reproduzcan las que ya están procesadas, en tiempo real.

[edit] Diagrama de bloques

En la figura 3 vemos un diagrama de bloques en el marco de la arquitectura del procesador y su interacción con los periféricos, mientras que en la figura 4 vemos un diagrama de bloques que describe el sistema de manera más general. En la figura 3 vemos entonces los componentes principales del procesador plasma en color verde que son la CPU, la memoria ROM donde se almacenan las instrucciones para el sistema y el control de periféricos, el decodificador de direcciones y el controlador de interrupciones. En color naranja se observan los periféricos que se pretenden agregar para el proyecto, que son el conversor AD el cual recibe señales de control (en este caso la señal RD) para habilitar la entrega de datos, conversor DA el cual recibe datos y señales de control, el filtro que recibe y entrega datos, el control de ganancia entrega datos y recibe señales de control y el contraldor LCD recibe datos y señales de control. En la figura 4 está el diagrama de bloques que muestra el plasma como un bloque y su interacción con los demás periféricos.

[edit] PARTICIONAMIENTO HW - SW

Este proyecto se puede dividir entre los siguientes módulos:

  1. Adquisición de datos: Este módulo se encargaría de recibir datos de ADC y almacenar algunas muestras en memoria que serán procesadas y reemplazadas continuamente, sería un módulo netamente de hardware.
  2. Entrega de datos: Este módulo se encargaría de entregar los datos al DAC para construir la señal análoga filtrada y luego reproducirla, también sería hardware.
  3. Filtrado: En este módulo se hará una tratamiento a los datos de acuerdo a una ecuación de diferencias, utilizando para ello sumadores, multiplicadores y registros de corrimiento principalmente, será un módulo Hardware.
  4. Control de ganancia: Mediante este módulo se controlará la ganancia del filtro, será un módulo hardware pero su funcionamiento afectará la parte del software, ya que deberá alterar valores almacenados en memoria que van a ser leídos por el programa.
  5. Controlador y manejo de periféricos: Mediante este módulo se manejan los distintos periféricos para ejecutar la funcionalidad deseada, se usará un programa escrito en lenguaje C que se implementará en el procesador plasma, será un módulo software.
  6. Controlador de display: En este módulo se maneja el display para que muestre el tiempo que dura la señal obtenida y el valor de la ganancia. del filtro.

[edit] Descripción tareas hardware

[edit] Adquisición de datos (ADC)

Para la adquisición de datos se utilizará el ADC TLV1548 que está integrado en la SAKC, con el cual se puede lograr un tiempo de conversión cercano a los 10 us que equivale a una frecuencia de muestro cercana a los 100 KHz que lo hace adecuando para trabajar con audio. Este conversor utiliza comunicación serial SPI para la trasnmisión de datos Y posee una resolución de 10 bits. El datasheet de TLV1548 lo podemos encontrar en el siguiente link:

http://projects.qi-hardware.com/index.php/p/nn-usb-fpga/source/tree/master/Datasheet

Se operará en modo normal con interfaz para microprocesador. En este modo se manejan 5 señales, CS, I/Oclk, Data in, Data out y EOC.

Moduloadc.jpg

Su funcionamiento es simple, cuando cs pasa de alto a bajo, se comienza la transmisión de datos del procesador al ADC, durante los primeros cuatro ciclos se transmiten serialmente 4 bits por medio de Data in, estos 4 bits son para la multiplexación entre los diferentes canales de entrada análoga y algunos modos de operación del dispositivo, también desde el instante de flanco de bajada de CS paralelamente el procesador recibe por medio de Data out los datos del ciclo de conversión anterior, en los próximos 6 ciclos se realiza el muestreo y luego en los 6 siguientes se realiza la conversión, periodo durante el cual la señal EOC debe ser 0, luego los datos quedan disponibles para ser transmitidos en el siguiente ciclo de CS.

[edit] Entrega de datos (DAC)

El conversor digital análogo se implementara como un modulo discreto independiente, se montará sobre una tarjeta (PCB), el objetivo es conectar este modulo como un periférico al procesador PLASMA, se recibirán los datos correspondientes a la señal de audio procesada y se convertirán a una señal análoga para que de esta manera se pueda posteriormente amplificar y escuchar en un parlante. La señal CONV habilita la conversión.

Dacm.jpg

Ya que este modulo es netamente discreto solo se mostrará el esquemático tentativo del circuito con el cual se implementará el conversor.


Utilizando el circuito integrado DAC0808 se implementará el siguiente circuito.


DAC.png


El circuito se encuentra en el siguiente link junto con la hoja de especificaciones: http://www.datasheetcatalog.org/datasheet/nationalsemiconductor/DS005687.PDF

[edit] Control de ganancia

Para este módulo aumentará o disminuirá la ganancia del filtro para ello se definirá una variable que se almacenará en un espacio de memoria y tendrá en valor de la ganancia, esta variable se manejará en forma global, aunque la van a utilizar el módulo de control de ganancia y el módulo del filtro. El módulo de control de ganancia aumentará o disminuirá este valor, y el filtro lo leerá para realizar las multiplicaciones que necesita.

[edit] Controlador de display

[edit] Filtrado

Para el diseño de el filtro se partió de un filtro continuo Butterworth pasa banda de segundo orden, cuya función de transferencia es:

    H(s)= 1000s/(s²+1000s+9.87e008)

Para una frecuencia de 5KHz y un ancho de banda de 1 KHz. Usando la transformación bilineal se obtiene la función en z (sistema discreto):

    H(z)= (0.004856z²-0.004856)/(z²-1.894z+0.9903) 

Y la correspondiente ecuación de diferencias

    y[n] = 0.004856x[n-2] - 0.004856x[n] +y[n-2] - 1.894y[n-1] + 0.9903y[n] 

En donde y[n] es la muestra de la señal filtrada y x[n] las muestra de la señal de entrada.

La idea es implementar un módulo Hardware, que reciba unos 3 datos de la señal de entrada entrada, los multiplique por los coeficientes que acompañan a las x, luego sumarlos junto con algunas muestras anteriores de salida que se hayan almacenado anteriormente y así obtener un nuevo dato de salida, la ganancia multiplica a los coeficientes que acompañan a las x y se lee de un valor en memoria, en la siguiente figura se observa un diagrama del módulo

Perif filtro.jpg

En la siguiente figura vemos el diagrama de flujo de este módulo, en donde se utilizan 6 registros para almacenar las entradas y las salidas anteriores y los datos se van corriendo de registro y sobre escribiendo periódicamente, durante los 3 primeros ciclos del contador, se corren los datos entre los registros al llegar un nuevo dato, y el dato más antiguo se borra, esto ocurre para los datos de entrada (3 primeros registros) y las salidas anteriores (3 últimos registros), en el cuarto ciclo se multiplican los registros por los correspondientes coeficientes y en el quinto ciclo se suman los valores obtenidos para dar un nuevo dato de salida

[edit] Descripción tareas software

[edit] Manejo de periféricos

Se utilizará un programa escrito en lenguaje C y se implementará para ser ejecutado por el plasma y manejar de esta manera los periféricos. Para ello se utilizarán las herramientas de la carpeta plasma, junto con GCC MIPS, ghdl e ISE.

Se añadirán 5 periféricos al plasma que son: ADC, DAC, filtro, control de ganancia y Control de Display, el siguiente es el código resultante para el decodificador de direcciones con estos 5 periféricos.

cpu_address(1 downto 0)  <= "00";

   addr_decoder: process (cpu_address)
     variable addr_dec : std_logic_vector(6 downto 0);
   begin
     addr_dec   := cpu_address(30 downto 28) & cpu_address(7 downto 4);
     case addr_dec is
       when "0100000"=> cs_uart <= '1'; cs_pic <= '0'; cs_adc <= '0'; cs_dac <= '0'; cs_filt <= '0'; cs_gain <= '0'; cs_disp <= '0';
       when "0100001"=> cs_uart <= '0'; cs_pic <= '1'; cs_adc <= '0'; cs_dac <= '0'; cs_filt <= '0'; cs_gain <= '0'; cs_disp <= '0';
       when "0100010"=> cs_uart <= '0'; cs_pic <= '1'; cs_adc <= '0'; cs_dac <= '0'; cs_filt <= '0'; cs_gain <= '0'; cs_disp <= '0';
       when "0100011"=> cs_uart <= '0'; cs_pic <= '0'; cs_adc <= '1'; cs_dac <= '0'; cs_filt <= '0'; cs_gain <= '0'; cs_disp <= '0';
       when "0100100"=> cs_uart <= '0'; cs_pic <= '0'; cs_adc <= '0'; cs_dac <= '1'; cs_filt <= '0'; cs_gain <= '0'; cs_disp <= '0';
       when "0100101"=> cs_uart <= '0'; cs_pic <= '0'; cs_adc <= '0'; cs_dac <= '0'; cs_filt <= '1'; cs_gain <= '0'; cs_disp <= '0';
       when "0100110"=> cs_uart <= '0'; cs_pic <= '0'; cs_adc <= '0'; cs_dac <= '0'; cs_filt <= '0'; cs_gain <= '1'; cs_disp <= '0';
       when "0100111"=> cs_uart <= '0'; cs_pic <= '0'; cs_adc <= '0'; cs_dac <= '0'; cs_filt <= '0'; cs_gain <= '0'; cs_disp <= '1';
       when others   => cs_uart <= '0'; cs_pic <= '0'; cs_adc <= '0'; cs_dac <= '0'; cs_filt <= '0'; cs_gain <= '0'; cs_disp <= '0';
     end case;
   end process;

El mapeo de memoría se realizo'de la siguiente manera:

- Memory Map:
--   0x00000000 - 0x0000ffff   Internal RAM (8KB)
--   0x10000000 - 0x100fffff   External RAM (1MB)
--   Access all Misc registers with 32-bit accesses
--   0x20000000  Uart Write (will pause CPU if busy)
--   0x20000000  Uart Read
--   0x20000010  IRQ Mask
--   0x20000020  IRQ Status
--   0x20000030  ADC
--   0x20000040  DAC
--   0x20000050  FILTRO
--   0x20000060  GANANCIA
--   0x20000070  DISPLAY
--   IRQ bits:
--      1  ^UartWriteBusy
--      0   UartDataAvailable

Y en el archivo plasma.h :

/*********** Hardware addesses ***********/
#define RAM_INTERNAL_BASE 0x00000000 //8KB
#define RAM_EXTERNAL_BASE 0x10000000 //1MB
#define RAM_EXTERNAL_SIZE 0x00100000
#define UART_BASE         0x20000000
#define UART_WRITE        0x20000000
#define UART_READ         0x20000000
#define UART_STATUS       0x20000010
#define IRQ_MASK          0x20000010
#define IRQ_STATUS        0x20000020
#define ADC_BASE          0x20000030
#define DAC_BASE          0x20000040
#define FILTRO_BASE       0x20000050
#define GAIN_BASE         0x20000060
#define DISP_BASE         0x20000070
#define FLASH_BASE        0x30000000
/*********** Global Data******************/
#define GAIN_VALUE        0x10000002

Nótese aquí la definición de la variable global GAIN_VALUE en la dirección 0x10000002, es decir que en esta dirección se guardará el valor de la ganancia.

[edit] ESQUEMÁTICOS Y PCB DE LA TARJETA HIJA

[edit] HERRAMIENTAS A UTILIZAR

Para el desarrollo del proyecto se utilizarán las siguientes herramientas:

Hardware

  • Placa SIE
  • Display LCD de caracteres.
  • Conversores AD y DA
  • Parlante o reproductor de audio externo

software

  • Simuladores HDL como GHDL, FREEHDL, MODELSIM y otros
  • ISE Webpack de Xilinx
  • KiCad

[edit] CRONOGRAMA DE ACTIVIDADES

Se propone seguir el siguiente cronograma de actividades a lo largo de todo el semestre para cumplir con los objetivos del proyecto:

  • Semana 3 Presentación propuesta proyecto (primera entrega)
  • semana 4 Simulaciones necesarias con el procesador plasma
  • semana 5 Diseño periféricos ADC
  • semana 6 Diseño periféricos DAC
  • semana 7 Diseño periféricos filtro
  • semana 8 Diseño periféricos filtro
  • semana 9 Diseño periféricos LCD
  • semana 10 Diseño periféricos LCD
  • semana 11 Tarjeta hija funcional, demostración de conmutaciòn con la tarjeta madre
  • Semana 12 Funcionalidad básica (segunda entrega), Acople periféricos con Plasma
  • semana 13 Acople periféricos con plasma
  • semana 14 Proyecto finalizado, funcionalidad completa
  • semana 15 Análisis de costos
  • semana 16 Entrega final


INTEGRANTES

  • Andrés Ramos código 260940
  • Alexander Quintero código 261141
  • David Giraldo código 261393
Personal tools
Namespaces
Variants
Actions
Navigation
interactive
Toolbox
Print/export