miércoles, 3 de noviembre de 2010

Funcionamiento de un motor de pasos controlado par la Spartan

Con la tarjeta Spartan-3 se pueden controlar varios dispositivos externos, en esta ocasión se controlará un motor a pasos, para poder dar la utilidad que se requiera.

Un motor a pasos es un dispositivo electromecánico que convierte una serie de impulsos eléctricos en desplazamientos angulares discretos, es decir, que es capaz de avanzar una serie de grados (pasos) dependiendo de las entradas de control que este tenga. El motor se comporta paso a paso de la misma manera que un convertidor analógico digital como lo estudiamos en el curso de digitales I y puede ser controlado por impulsos que provengan de sistemas lógicos.

Un motor de pasos se define por su voltaje ya que tienen una tensión eléctrica de trabajo. Este valor normalmente se encuentra en la carcasa o en una hoja de especificaciones. En algunas ocasiones según el uso que se le quiera dar al motor es necesario aplicar un voltaje superior para lograr el torque deseado.

Los motores tienen una resistencia en los bobinados, esta determinará la corriente que consumirá el motor, y su valor afecta la curva de torque y su velocidad máxima de operación.

Finalmente para describir este tipo de motores un factor importante son los grados que desplaza por paso, es decir, define la cantidad de grados que rotará el eje para cada paso completo o semi-paso. Los grados por paso se calculan dividiendo 360 por la cantidad de pasos que se contaron (resolución del motor).

En la tarjeta Spartan-3 existen tres conectores de expansión los cuales poseen una tierra y un voltaje de 3.3V (medidos en la práctica con el multímetro para corroborar el dato). Y es aquí donde se pueden conectar los diferentes dispositivos que se pueden controlar con la tarjeta Spartan-3.

Para que el motor pueda tener el voltaje suficiente para su correcto funcionamiento es necesario utilizar el integrado ULN2803 contiene ocho transistores con emisores comunes e integrales de diodos de supresión para cargas inductivas. Cada integrado cuenta con una capacidad da carga de corriente de 600mA y puede soportar hasta 50V en el estado apagado. Es importante mencionar que en la entrada de voltaje se debe de conectar el voltaje que necesitara el dispositivo que se va a conectar.

Transmisión de datos digitales por los conectores de expansión

Se implementó un código el cual llevará tres variables en el entity, una es la que manda el dato a los conectores de expansión (B), una que es la que manda el dato a los leds (A) y el reloj integrado a la tarjeta (clk).

Se declara la variable clk que es el reloj, que será el que va a hacer que se vaya llevando la secuencia de los pasos y que el cambio se efectúe en un tiempo determinado (esto se puede variar).

La palabra clk’event es la instrucción para que el reloj comience su proceso con un flanco de subida (‘1’), y va a irse sumando a move uno a uno hasta llegar al tiempo de 90000000.

En un diferente proceso se debe de tener la variable “otro” la cual va a ir llevando la secuencia de los pasos dentro de un case con 4 variables que es la secuencia que tiene el motor para los pasos. “A” va a llevar la secuencia en los leds para que se pueda observar y “B” es la que va a llevar la expansión donde va a estar conectado el integrado que a su vez va a estar conectado al motor para que reciba el voltaje necesario para su funcionamiento.

Los números de encendido y apagado es la secuencia que se encuentra en el datasheet del motor utilizado, algo importante es que hay que fijarse con los diferentes hilos que tiene el motor cual es el orden de los pasos. Es recomendable ir probando uno por uno hasta encontrar como va ser la secuencia de los pasos. Una tabla con los colores de los cables y el orden en que se deben conectar resultó ser eficaz para poder llevar de una buena manera el desarrollo de la práctica.

Funcionamiento de un teclado en la transmición de datos

En la tarjeta Spartan-3 existe un conector tipo PS/2 el cual sirve para conectar teclados o ratones y tener una mayor interacción con los diferentes programas realizados por el usuario.La comunicación del PS/2 fue creada por IBM en 1987. La interacción que se tiene es serial y controlada por la tarjeta. Las interfaces de teclado y ratón son eléctricamente similares, solamente se diferencian en que en la interfaz de teclado se requiere en ambos lados un colector abierto para permitir la comunicación bidireccional.

La comunicación PS2 entre la computadora y teclado es una serie síncrona. Hay una señal de reloj y una de datos. La velocidad de comunicación se determina con la señal del reloj, puede ser unos 10Khz. La transmisión se da con 1 bit de comienzo, 8 bits de datos, 1 de paridad, 1 de stop y 1 ACK.

El teclado tras investigar sobre el código que maneja, observamos que no es el código ASCII, es un código único y este es el que se mostrara en la tarjeta, se presenta a continuación un diagrama de los diferentes comandos que tienen las teclas para mostrar al usuario.

El teclado utiliza controladores de colector abierto para que el teclado de la unidad pueda tener un bus de dos hilos. Si el host no envía datos al teclado, el usuario puede utilizar un código simple a la entrada. Un teclado PS/2 utiliza el escaneo de códigos para comunicar los datos. Cada tecla tiene un código único, también un único análisis que se envía cada vez que la tecla se presiona. Si la tecla se presiona y mantiene, el teclado envía repetidamente el código de la exploración cada 100 ms . Cuando se suelta una tecla envía un código llave, seguido por la espera de la siguiente tecla.

Transmisión de datos por el puerto PS/2 a través de un teclado.

El puerto PS/2 es importante ya que puede realizar la comunicación de la tarjeta con un teclado o ratón., en el caso de esta práctica se realizará con un teclado de computadora. Este puerto es transmisor de datos, se mostrara el código en los displays de siete segmentos y posteriormente se enlazara con el código del motor para lograr el objetivo establecido. Se implementó un código el cual llevará seis variables en el entity, el reloj (clk), el reset (rst), las entradas del puerto PS/2 (kd, kc), dos matrices que almacenen datos (an, sseg). Una es el ánodo y la otra el display de siete segmentos.

Se declara la variable clk que es el reloj, que será el que va a hacer que se almacenen los valores. La palabra clk’event es la instrucción para que el reloj comience su proceso con un flanco de subida (‘1’). Debemos tener en cuenta que el reloj de la tarjeta es de 50Mhz, se deben realizar los cálculos para saber cómo pasará la palabra de 8 bits más el bit de inicio y stop.

En diferentes procesos en el código implementado se irán agregando primeramente las condiciones de las señales que vienen desde el puerto PS/2.

Se multiplexan los datos que se obtuvieron en el proceso anterior y se mandan en dos partes a los displays de siete segmentos donde aparecerán los diferentes códigos de cada una de las teclas.

Finalmente se programa el ánodo para que puedan utilizarse solamente dos displays y no los cuatro, así mismo cada uno con datos diferentes, como ya se ha implementado en prácticas anteriores.

A continuación se mostrará un fotografía con el teclado conectado a la tarjeta y mostrando en los displays el código de algún botón.

Transmisión serial de la computadora a la tarjeta.

El puerto serial es una interfaz de comunicación que tiene la tarjeta spartan-3, donde la información que procesa la transmite bit a bit enviando un solo bit a la vez. Al establecer la comunicación se envía en primer lugar una señal inicial anterior a cada byte, al enviarse la palabra se detiene hasta esperar que exista otro bit de inicio, que sirve para preparar la recepción de la palabra mientras que el stop es para que se prepare para recibir una nueva palabra.
En el siguiente diagrama se muestra como es esta comunicación.

La transmisión más común que se realiza es por medio del código ASCII a través del puerto RS-232, en las computadoras este puerto aparece como COM más el número que se le asigne. La interfaz RS-232 está diseñada para distancias cortas, hasta 15 metros, y velocidades bajas de comunicación, hasta 20 kb/s. Esta práctica utiliza un canal simplex, es decir, los datos solo viajan en una dirección.

Los datos mandados por la computadora se pueden comprobar con diversos programas para observar que información es la que se está recibiendo. A su vez con otros lenguajes de programación se podrán mandar estos datos y hacer que la tarjeta lleve a cabo ciertos procesos ya programados en el fpga.

Transmisión de datos por el puerto serial.

La comunicación con la interface serial, que recibe y transmite datos es llamada UART (Universal Asynchronous Receiver-Transmitter). RxD es para recibir datos por serial (usada en esta práctica) y TxD es para transmitir los datos.

Se implementó un código el cual llevará tres variables en el entity, una es la que manda el dato al puerto serial (rxd), el reloj (clk) y en una matiz el número que se va a mostrar (shownumber).

Se declara la variable clk que es el reloj, que será el que va a hacer que se almacenen los valores.

La palabra clk’event es la instrucción para que el reloj comience su proceso con un flanco de subida (‘1’).

Debemos tener en cuenta que el reloj de la tarjeta es de 50Mhz, se deben realizar los cálculos para saber cómo pasará la palabra de 8 bits más el bit de inicio y stop.

En el mismo proceso se deben de tener dos variables que van a llevar el conteo del reloj (una de las que se están generando y otras las que se van almacenando), a su vez se guardara en una variable temporal tipo matriz, que al completarse el ciclo del reloj va a enviarla a los leds de la tarjeta. Al mandarla se va a refrescar los bits anteriores para esperar la nueva palabra generada por la computadora.

El bit queda almacenado en la variable temp y al completarse la matriz se mostrará al usuario a través de los les el número que se está mandando de la computadora a la tarjeta (shownumber).

En el último paso del proceso se da la instrucción para que se limpien las variables anteriores, el reloj se reinicia y está en espera del siguiente dato que arroje la computadora.

Una vez que el código ha sido compilado de manera correcta, mediante el uso de un programa llamado Terminal podemos seleccionar el COM Port por donde está ingresando la información al equipo junto con la velocidad y podemos observar en pantalla en código ASCII, hexadecimal, octal y binario cual es el dato que está saliendo de la spartan-3 y entrando a la computadora.

Finalmente la tarjeta se observa al terminar la programación de esta manera: