Subido por Jorge Luis Sifuentes Dávila

Uso de perifericos y componentes externos en FPGA spartan 3E

Anuncio
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.
Descargar