You are on page 1of 2

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
"00000010011000100101101000000000";
begin

downto

0)

:=

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 <=
when "01" =>StepDrive <=
when "10" =>StepDrive <=
when "11" =>StepDrive <=
when others => end case;
end if;
end if;
end if;
end process;
end Behavioral;

"1100";
"0110";
"0011";
"1001";