Envío Gratis en compras mínimas de $1200 mxn Enviamos a toda la Republica Mexicana
Buscar

Avanxe 7 – Aplicación 3: Lectura de los 7 canales del ADC

 

Aplicación demostrativa en donde se explica cómo hacer lecturas del ADC integrado en el FPGA Artix 7.

 

El proyecto requiere de un circuito adicional el cual consiste en un arreglo de 7 potenciómetros que se utilizan para variar el voltaje de entrada de cada uno de los canales P del ADC. El esquemático es el siguiente:

 

 

IMPORTANTE:

  • La entrada no debe exceder los 3.3V.
  • Los canales CH0_N – CH6_N deberán ir conectados a tierra.

Para la transferencia de datos se utilizó el protocolo RS232 con los siguientes parámetros:

  • 9600 baudios
  • 1 bit de inicio
  • 8 bits de datos
  • 1 bit de paro
  • Sin paridad

El proyecto se divide en dos partes: El código en VHDL y el código en C#. Para el código en VHDL se modeló una máquina de estados que se encarga de controlar la recepción y transmisión de datos así como de controlar la librería del ADC. Esta máquina se encuentra en el archivo TOP.vhd

 

  • Estado 0: se recibe un byte donde se especifica el canal a leer.
  • Estado 1: Se espera a que el ADC termine de realizar la conversión indicada con la bandera dato_listo.

Cuando el ADC termina de hacer la conversión se deben mandar 12 bits repartidos en 2 bytes

  • Estado 2: Manda los primeros 4 bits más significativos de la conversión.
  • Estado 3: Se espera un tiempo de 100us para que C# haya recibido el dato.
  • Estado 4: Se envían los 8 bits restantes.

Configuración sugerida del IP XADC en Vivado

1.- Seleccionamos el IP “XADC” desde el catálogo.

 

 

2.- En la pestaña Basic seleccionamos Channel Sequencer.

 

 

3.- En la pestaña ADC Setup verificamos que en Sequencer mode esté en Continuous.

 

 

4.- En la pestaña Alarms quitamos la selección a todas las alarmas

 

 

5.- En la pestaña Channel Sequencer seleccionamos los canales 4,5,6,7,12,14 y 15.

 

 

6.- Por último damos clic en OK y en la ventana emergente clic en Generate.

 

 

Una vez creado el IP se agrega la librería LIB_ADC_AVANXE7_VIVADO_REVA, de tal forma que puedas utilizar la librería como si fuera un componente de tu diseño.

 

 

Configuración sugerida del IP XADC en ISE Design Suite

Para utilizar la librería en ISE sólo se agregan los dos archivos .vhd al proyecto, la configuración es exactamente igual que la mencionada anteriormente.

Si se desea cambiar algún parámetro entonces se debe hacer desde el CORE Generator.

 

 

1.- Creamos un proyecto nuevo seleccionando el FPGA que vayamos a utilizar (sólo funciona con Avanxe 7 100T). Deja el nombre que trae por default.

 

 

2.- Seleccionamos y damos doble clic a XADC Wizard del catálogo.

 

 

3.- Ya en el wizard configuramos el IP.

 

 

5.- Ya terminada la configuración del IP se creará un archivo .vhd, ese archivo se añade al proyecto. Después se añade el archivo “LIB_ADC_AVANXE7_ISE_REVA.vhd”

 

 

El código en C# utiliza un Thread que se ejecuta en segundo plano, manda un byte especificando el canal del ADC y recibe como respuesta del FPGA 2 bytes con el valor digital de la conversión, después se concatenan los valores de cada byte para formar un valor entero de 0 a 4095 y ser mostrado en la etiqueta correspondiente a cada canal.

 

public void metodo()
    {
        int MSB = 0;   //Byte más significativo
        int LSB = 0;   //Byte menos significativo
        int canal = 0; //Selecciona canal de ADC
        byte[] f = new byte[2]; //Array para concatenar los 2 bytes que se reciben
        while (true)
        {
            //Buffer de transmisión de datos
            byte[] s = new byte[1];
            //Selección de canal 1
            canal = 0x01;
            s[0] = (byte)canal;
            m.sp.Write(s,0,1);
            //Recepción de 2 bytes
            MSB = m.sp.ReadByte();
            LSB = m.sp.ReadByte();
            //Concatenación de los dos bytes para formar valor y mostrarlo en la etiqueta
            f[1] = (byte)MSB;
            f[0] = (byte)LSB;
            canal = BitConverter.ToUInt16(f, 0);
            m.labelADCN1.Text = "ADC 1: "+ canal.ToString();
            //Delay de 1ms
            Thread.Sleep(1);
...
...
...

 

El proceso se repite seis veces más para el resto te canales.

Para ISE Design Suite: Crea un proyecto nuevo y añade los archivos del comprimido.

¡DESCARGA EL PROYECTO DE C#!