You are on page 1of 3

Motor a pasos controlado con

tarjeta spartan 3

La prctica del motor a pasos tiene como objetivo mover un motor a pasos mediante una secuencia de
paso a paso hacia la derecha y hacia la izquierda con una frecuencia aproximadamente de 1s.

Para esta prctica se tuvo que ocupar un integrado uln2803 el cual ayuda a controlar el motor a pasos.
Este integrado tiene que ser alimentado con un rango de voltaje de 6-9 V, de lo contrario el motor a
pasos podra quemarse.

Cabe mencionar que el programa en VHDL nos ayudara a poder manipular los pasos de dicho motor
segn su estado anterior y la direccin a la que se debe de mover, para las salidas se tuvo que utilizar
los pines de la spartan y estos llevarlo a la protoboard para de esta manera poder manipularlos con el
integrado.

En el programa VHDL se tienen como entradas:

entity Motor_a_pasos is
Port ( StepDrive : out std_logic_vector(3 downto 0);
Direction : in std_logic;
StepEnable : in std_logic;
CLK : in std_logic);
end Motor_a_pasos;

La variable direction como su nombre lo indica es para indicar la direccin a la que va a girar el motor, el
StepEnable nicamente es un switch que activa o no el movimiento del motor , el reloj que es esencial
para llevar un conteo de pasos y finalmente las salidas de los 4 pines.
Para esto se requieren las siguientes variables temporales:

architecture Behavioral of Motor_a_pasos is


signal state : std_logic_vector(1 downto 0);
signal StepCounter : std_logic_vector(31 downto 0);
constant StepLockOut : std_logic_vector(31 downto 0) := "00000010011000100101101000000000";
begin

Estas variables temporales representan:


State: los posibles estados del motor.
Contador de pasos: contador que aumenta cada vez que se realiza un paso.
Steplock: indica la frecuencia a la cual el motor va a dar cada vuelta.
Finalmente se tiene que hacer el process con el reloj y manipular los estados del motor.

process(CLK)
begin
if ((CLK'event) and (CLK='1')) then
StepCounter <= StepCounter + 1;
Esto indica que cada vez que el reloj este en frente de subida se le aumentara en 1 al contador de
pasos.

if (StepCounter >= StepLockOut) then


StepCounter <= "00000000000000000000000000000000";
StepDrive <= "0000";

En esta parte solo se resetea el contador si es mayor a la frecuencia.

if (StepEnable = '1') then


if (Direction = '1') then state <= state + "01"; end if;
if (Direction = '0') then state <= state - "01"; end if;

En este apartado se menciona hacia donde va a girar el motor segn la variable direction.

case state is
when "00" =>StepDrive <= "1100";
when "01" =>StepDrive <= "0110";
when "10" =>StepDrive <= "0011";
when "11" =>StepDrive <= "1001";
when others => end case;
end if;
end if;
end if;
end process;
end Behavioral;

Para lograr el movimiento se implement la siguiente tabla de verdad:


Finalmente se tiene el case del estado que indica el valor de la salida segn cada movimiento posible
del motor.

You might also like