Anda di halaman 1dari 5

UTFSM

Noviembre 2003

APLICACIN CON LOS KITS LEGO Y DRIVERS PARA LOS MOTORES DC DE ESTOS KITS CON LA TARJETA XS95

MINI PALANCA MECANICA


1. INTRODUCCIN En este documento se encuentra toda la informacin necesaria de cmo se implement con los kits lego (piezas y motores) una mini palanca mecnica cuyo movimiento es controlado por un teclado de computador. Con los kits lego se arm todo el sistema mecnico. Adems es necesario utilizar un sistema que permita manejar los motores DC en ambos sentidos. Para esto se tiene una tarjeta que posee los drivers que permitirn dicha operacin sin necesidad de utilizar alimentacin negativa. El sistema de control con el teclado se realiza mediante la CPLD de la tarjeta XS95. Bsicamente, se reconoce los scancodes de la tecla predefinida que haga mover cualquiera de los motores, y en base a cul sea, se enva una seal de control que habilite el motor correspondiente. 2. DIAGRAMA DE BLOQUES DEL FUNCIONAMIENTO
TECLADO

SISTEMA DE LA PALANCA MECANICA CPLD TARJETA DRIVERS MOTORES MOTORES

TARJETA XS95

3. ESQUEMA DE MOTORES En el siguiente diagrama se observa la ubicacin y notacin de los motores que controlan la palanca mecnica.

A: Dos motores que controlan movimiento en Y. B: Dos motores que controlan movimiento en X. C: Un motor que controla movimiento ascendente y descendente D: Un motor que controla movimiento de cierre y apertura de la tenaza.

4. SISTEMA DE CONTROL MEDIANTE EL TECLADO Cuando en el teclado se presiona alguna tecla este enva un dato en forma serial llamado scancode (el makecode cuando se presiona la tecla y el brakecode cuando se deja de presionar). Este dato es una palabra digital de 11 bits distribuida de la siguiente forma: un bit de inicio en bajo, ocho bits de datos (el scancode), un bit de paridad (impar) y un bit de trmino en alto. Estos 11 bits son almacenados en un registro de desplazamiento que almacena constantemente los bits que le llegan desde el teclado. Este registro tambin est controlado por los cantos de bajada reloj del teclado. De esta forma, cuando el contenido del registro sea igual al makecode de alguna tecla predefinida para mover algn motor, se setear algn pin disponible de la tarjeta (en este caso, los pines del led de 7 segmentos de la tarjeta) que estn conectados a las entradas de la tarjeta con los drivers. Despus se esperar el brakecode y all se inhabilitaran los pines anteriormente habilitados. Lo anteriormente descrito es implementado como una mquina de estados.

4.1 Diagrama de Estados de la Mquina controladora de los motores

k1 k2 k0 k7 k8 k9

Estado ko: La mquina recibe los bits de datos seriales y los almacena en un registro desplazamiento, comparando cada ves el contenido (antes de desplazar el registro) con el makecode predefinido para el movimiento de los motores. Si el contenido es igual a un scancode pasa al estado siguiente (k1..k8 dependiendo del scancode reconocido). De lo contrario se mantiene en k0. Estados k1..k8: Todos estos estados son prcticamente iguales, con la diferencia que cada uno habilita las seales para un motor diferente. Durante este estado se da un valor al bus MOTORES de forma que se habiliten solo las dos seales que controlen un motor. Se siguen recibiendo los bits de datos, almacenando, comparando y desplazando. Cuando el registro sea igual al brakecode (se deje de presionar la tecla) se pasa al estado k9, de lo contrario sigue en el mismo estado. Estado k9: Este estado es necesario porque despus del brakecode el teclado vuelve a enviar al makecode, y este debe ser reconocido, ya que de lo contrario si se pasar al estado k0 directamente, se interpretara como si se hubiera presionado la tecla otra ves y se pasara a cualquiera de los estados k1..k8, pero con la diferencia que ahora no se va a recibir nunca el brakecode y el motor quedara habilitado por siempre. Durante este estado se da al bus MOTORES el valor cero (inhabilitando todos los motores), se cuentan 11 ciclos de reloj (correpondientes a los 11 bits del makecode reenviado) y se luego se regresa al estado k0.

3. CDIGO ABEL PARA EL CPLD DE LA TARJETA XS95


MODULE keyboard KB_DATA PIN 70; KB_CLK PIN 26; // datos seriales desde el teclado PS/2 // reloj desde el teclado PS/2

SLAVE10..SLAVE0 NODE ISTYPE 'REG'; MASTER10 ..MASTER0 PIN ISTYPE 'REG'; Serial PIN istype 'REG'; Q0, Q1, Q2, Q3 NODE istype 'REG'; S3..S0 NODE istype 'REG'; //Salidas que controlan los motores A0, A1, B0, B1, C0, C1, D0, D1 PIN 21, 23, 19, 17, 18, 14, 15, 24 istype 'REG'; Count = [S3..S0]; MASTER = [MASTER10 ..MASTER0]; SLAVE = [SLAVE10..SLAVE0]; MOTORES = [A0 ,A1,B0,B1,C0,C1,D0,D1]; Q=[Q3,Q2,Q1,Q0];

//W,S,A,D,Q,E,X,Z

k0=0; k1=1; k2=2; k3=3; k4=4; k5=5; k6=6; k7=7; k8=8; k9=9; EQUATIONS MASTER.CLK = !KB_CLK; SLAVE.CLK = KB_CLK; Serial.CLk = !KB_CLK; Q.clk = KB_CLK; Count.clk = !KB_CLK; MOTORES.clk = KB_CLK; state_diagram Q; State k0: Count := Count + 1; MASTER := [KB_DATA,SLAVE10..SLAVE1]; SLAVE := MASTER; Serial := KB_DATA; if (MASTER == ^B11000111010) then k1 if (MASTER == ^B11001000010) then k2 if (MASTER == ^B10000111000) then k3 if (MASTER == ^B10001010100) then k4 if (MASTER == ^B10000101010) then k5 if (MASTER == ^B11001001000) then k6 if (MASTER == ^B11001000100) then k7 if (MASTER == ^B10000110100) then k8

else else else else else else else else

k0 k0 k0 k0 k0 k0 k0 k0

//Motor //Motor //Motor //Motor //Motor //Motor //Motor //Motor

A A B B C C D D

hacia hacia hacia hacia hacia hacia hacia hacia

delante ( tecla W - 1D) atrs (tecla C - 1B) delante ( tecla A - 1C) atrs (tecla V - 23) arriba (tecla Q - 15) abajo (tecla E - 24) dentro (tecla X - 22) fuera (tecla Z - 1A)

State k1: MOTORES := 128; Count := 0; Serial := 1; MASTER := [KB_DATA,SLAVE10..SLAVE1]; SLAVE := MASTER; if (MASTER == ^B11111100000) then k9 else k1 State k2: MOTORES := 64; Count := 0; Serial := 1; MASTER := [KB_DATA,SLAVE10..SLAVE1]; SLAVE := MASTER; if (MASTER == ^B11111100000) then k9 else k2

State k3: MOTORES := 32; Count := 0; Serial := 1; MASTER := [KB_DATA,SLAVE10..SLAVE1]; SLAVE := MASTER; if (MASTER == ^B11111100000) then k9 else k3 State k4: MOTORES := 16; Count := 0; Serial := 1; MASTER := [KB_DATA,SLAVE10..SLAVE1]; SLAVE := MASTER; if (MASTER == ^B11111100000) then k9 else k4 State k5: MOTORES := 8; Count := 0; Serial := 1; MASTER := [KB_DATA,SLAVE10..SLAVE1]; SLAVE := MASTER; if (MASTER == ^B11111100000) then k9 else k5 State k6: MOTORES := 4; Count := 0; Serial := 1; MASTER := [KB_DATA,SLAVE10..SLAVE1]; SLAVE := MASTER; if (MASTER == ^B11111100000) then k9 else k6 State k7: MOTORES := 2; Count := 0; Serial := 1; MASTER := [KB_DATA,SLAVE10..SLAVE1]; SLAVE := MASTER; if (MASTER == ^B11111100000) then k9 else k7 State k8: MOTORES := 1; Count := 0; Serial := 1; MASTER := [KB_DATA,SLAVE10..SLAVE1]; SLAVE := MASTER; if (MASTER == ^B11111100000) then k9 else k8 State k9: MOTORES := 0; Count := Count + 1; if(Count == 11) then k0 else k9

END keyboard

Anda mungkin juga menyukai