Instituto Politécnico Nacional Unidad Profesional Interdisciplinaria de Ingeniería Campus Zacatecas (UPIIZ) Práctica Cinco (Dispositivos Lógicos Programables) Ingeniería Mecatrónica Profesor Fernando Olivera Domingo Jorge Luis Sifuentes Dávila Luis Mauricio Muro Díaz 16 de noviembre de 2018 Zacatecas, México OBJETIVO El objetivo es practicar el uso de periféricos y componentes externos a la FPGA, para comprender las diferentes aplicaciones que se pueden realizar. MARCO TEORICO La Spartan-3E incluye un circuito analógico de captura de dos canales, consistiendo de un preamplificador programable de escalada y un convertidor de analógico a digital. El circuito analógico de captura consiste en un LTC6912-1 Lineal Technology preamplificador programable eso escala la señal analógica. La producción de preamplificador conecta para un Technology LTC1407A Lineal 1 convertidor de análogo a digital. Ambos, el preamplificador y el convertidor de análogo a digital está en serie programado o controlado por la FPGA. Como se muestra en la figura: El circuito analógico de captura convierte el voltaje analógico en VINA o VINB y lo convierte para una representación digital de 14 pedacitos, D 13:0. La GANANCIA es el ajuste actual cargado en el preamplificador programable. Lo diversos los ajustes admisibles para GANANCIA y los voltajes admisibles para VINA y VINB se muestran a continuación. Problema planteado. Utilizando un potenciómetro externo y el ADC de la FPGA implementar un diseño que controle cuál de los 8 LEDS de la placa se encuentra iluminado. Sólo un LED estará prendido y esta luz se desplazará a la derecha al girar el potenciómetro a la derecha y a la izquierda al girar el potenciómetro a la izquierda. El LED de la derecha estará prendido cuando el potenciómetro esté totalmente a la derecha. El LED de la izquierda estará prendido cuando el potenciómetro esté totalmente a la izquierda. Procedimiento: El primer pasó a realizar fue el de configurar la ganancia que tendría el preamplificador programable, para esto se opto por elegir la ganancia de -1 debido a que cuenta con un rango de conversión más amplio, el cual va de 0.4 volts a 2.9 volts, con una referencia de 1.65 volts, con la que cuenta la tarjeta de desarrollo. Apoyándonos en el manual de usuario de la FPGA Spartan-3E, encontramos que el microcontrolador realiza una interpretación de voltaje en forma de 14 bits (D[13:0]) en valores de complemento a dos. Para esto se utilizó la siguiente formula: Para la comunicación y funcionamiento del preamplificador se usó como referencia la siguiente figura, la cual describe como se deben de ir activando cada señal, tenemos que la señal que activa y selecciona el slave se debe de dar cuando tiene un nivel bajo, la señal SPI_SCK es como el reloj que sincroniza la comunicación de master con el slave y viceversa , la señal de SPI_MOSI es la que lleva los bits del master a el slave, y se activa en cada flanco de subida del reloj. Para la preamplificación se trabajó con las señales que se pueden observar en el diagrama anterior. En primer lugar se muestra AD_CONV la cual es la línea encargada de seleccionar y a su vez habilitar un slave (esta habilitación es cuando AD_CONV tiene un nivel bajo), enseguida se tiene SPI_SCK es el encargado de mantener una sincronía a la hora de comunicar de master-slave así como de slavemaster, después se tiene SPI_MOSI está es la línea utilizada para llevar los bits que provienen del master hacia el slave, estas dos señales se asocian ya que la captura serial del amplificador se coloca sobre SPI_MOSI en cada flanco de subida de la señal SPI_SCK. Para la correcta activación del preamplificador y su ganancia, se realizó una máquina de estados en donde se conectan las señales antes descritas y los estados de activación: Amp_s1: Es el primer estado de esta secuencia, para ser activado se necesita que un switch habilite la secuencia. En este estado se tendrá activado el chip selector en nivel alto esto indica que aún no se está estableciendo la ganancia del preamplificador, el reloj igualmente estará en nivel bajo y se inicializará el vector que define la lectura de la ganancia desde su posición 7, para que así principalmente se tenga una lectura del bit más significativo. Amp_s2: Este estado cumple con la función de establecer a nivel bajo la señal AMP_CS , para poder asignar una ganancia de -1 a SPI_MOSI. Amp_s3: Este estado está trabajando dentro del estado s2 ya que se tiene un contador de 0 a 7 (bits que se requieren para configurar ganancia) en el que se tiene que en un retraso de 10 ciclos de reloj el reloj SPI_SCK se ponga en nivel alto para así poder asignar en la memoria la ganancia. Amp_s4: Después de pasar otros 10 ciclos de reloj la secuencia se pasa al estado s4 en el que se pone el reloj SPI_SCK en nivel bajo. Lo siguiente fue realizar la conversión analógica-digital para esto se sabe que existe una interacción entre el microcontrolador PicoBlaze (actuando como master) y el convertidor A/D LTC1407A-1 en el cual se tiene la comunicación mediante las siguientes señales. Igual que en la etapa de pre-amplificación se realiza el proceso mediante el protocolo de comunicación serial SPI, por lo que varias de las señales son las mismas que las anteriores las cuales ya se explicaron, solo queda mencionar que SPI_MISO es la línea utilizada para llevar los bits que provienen del slave hacia el master. En base a estas señales se realizó la siguiente máquina de estados: Adc_s1: Para comenzar la secuencia de esta máquina se tiene que establecer un enable igual a un uno lógico con esto se manda la señal AD_CONV a nivel alto. Si se tiene un enable con un cero lógico se mandará a la primera máquina la cual no saldrá de su estado inicial hasta que no reciba un uno lógico. Adc_s2: Ahora se muestra el estado en el que AD_CONV está en cero, comenzando así con la conversión, además se inicializa el vector que define las posiciones del voltaje de entrada en el canal 0 igual a 16 para con esto compensar el decremento que se tiene al inicio del estado 3, en total se envían 16 bits, de los cuales 2 son antes de enviar la trama de 14 bits en el canal 0. Adc_s3: En este tercer estado se pone un nivel bajo a SPI_SKC y se ponen los decrementadores de distintos contadores necesarios para el siguiente estado. Adc_s4: Por último se tiene este estado en el que SPI_SKC está en nivel alto para poder asignar el valor digital que está obteniendo SPI_MISO a una variable llamada vina y en base a esto poder realizar una comparación de estos valores obtenidos para encender leds de la manera que pide el problema. Para el control de leds y sabe en qué nivel de voltaje se encenderá cada uno se hizo lo siguiente. Como ya sabemos la representación del voltaje es en 14 bits en complemento a dos. Por lo que para los voltajes que son mayores a 1.65v que es la referencia de la tarjeta, el numero será un numero binario en complemento a dos ya que la ganancia es de -1. Si los valores son menores se representará como un numero ordinario en positivo. Teniendo claro lo anterior los daos estarán entre los números decimales de -8192 a 8192 que es la representación del voltaje. Como en la salida vina se cuenta con el voltaje muestreado mencionado anteriormente, se hace la comparación principalmente para saber si se trata de un número positivo o negativo. En caso de que el número fuera mayor a 1.65 volts se tratara de un número en complemento a 2 por lo que en este caso, se realizó la conversión negando el número vina y sumándole ‘1’. Para poder hacer la comparación normalmente. Acondicionamiento para el potenciómetro. Dado que en la ficha técnica nos especifica que el voltaje mínimo a la entrada debe ser de 0.4 V y el voltaje máximo en la salida debe ser 2.9 V, se tiene que acondicionar la señal de entrada, para no dañar el equipo, para ello es necesario realizar un divisor de voltaje con tres resistencias y así obtener un rango de operación adecuado. Como se utilizó la fuente Vcc de la Spartan que trabaja a 3.3 V y la diferencia entre 0.4 y 2.9 a 3.3V y 1.65V que es la referencia es la misma. En este caso se usó el simulador ORCAD para verificar que el voltaje se mantuviera en el rango adecuado. 3.0V 2.0V 1.0V 0V 0s 0.1us V(V1:+,R4:1) V(R5:2,0) 0.2us 0.3us 0.4us 0.5us Time Pruebas. Conclusiones. Jorge Luis Sifuentes Dávila. - Para poder resolver esta practica la verdad tuvimos que leer demasiado, tanto el manual de usuario de la tarjeta de desarrollo como en foros en internet para poder comprender como es que se trabaja con los protocolos de comunicación SPI. Además de que se tuvo que estar investigando sobre como es que se tiene que realizar la sincronización de las señales para realizar la conversión de analógico a digital. Debo aceptar que, si nos hizo falta mas conocimiento o bases para poder comprender mucho mejor como abordar la práctica, a pesar de que se logró dar solución a lo que se pedía en la práctica, aún quedaron algunas dudas, pero sobre la marcha se irán aclarando. Luis Mauricio Muro Díaz. - En conclusión, para esta última práctica del curso de Dispositivos Lógicos Programables, se hizo uso de otros periféricos en este caso del ADC, por lo que se tuvimos que estudiar las características de la tarjeta Spartan mediante su manual de usuario, para saber cómo trabaja el ADC, cuáles son sus respectivas medidas de seguridad para evitar el daño a la tarjeta. Así que es una buena práctica para saber el manejo de ADC en esta tarjeta de desarrollo y que se pueda implementar en algunos proyectos que así lo requieran.