首页   ┊   FPGA  ┊   CPLD   ┊  VHDL语法  ┊ VHDL程序  ┊ dsp builder ┊  BBS     联系我们 

vhdl步进电机控制器

vhdl步进电机控制器

以一个具体的双向步进电机控制的例子来讲述Moore型状态机的设计过程。该控制电路的输入信号有3个:时钟信号clk,复位信号reset和方向控制信号dir。输出信号为phase[3..0],用来控制步进电机的动作。当方向控制信号dir为1时,要求输出信号phase[3..0] 按照“0001”、“0010”、“0100”、“1000”、“0001”的顺序循环变化。当方向控制信号dir为0时,要求输出信号phase[3..0]按照“1000”、“0100”、“0010”、“0001”、“1000”的顺序循环变化。

根据控制器的功能要求,画出状态转换图和状态与输出信号的关系,分别如下图和表。

 

 

步进电机控制器的状态转换图

步进电机状态与输出信号的对应关系

状态

输出信号phase[3..0]

S0

0001

S1

0010

S2

0100

S3

1000

步进电机控制器VHDL程序。

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ;

ENTITY stepmotor IS

PORT(

clk,reset:IN STD_LOGIC;

dir:IN STD_LOGIC;

phase :OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END ENTITY stepmotor ;

ARCHITECTURE arc1 OF stepmotor IS

TYPE states IS (s0,s1,s2,s3);

SIGNAL current_state: states;

BEGIN

PROCESS(clk)

BEGIN

IF clk'EVENT AND clk='1' THEN

IF reset='1'THEN

current_state<=s0;

ELSE

CASE current_state IS

WHEN s0 =>

IF dir='1' THEN

current_state<=s1;

ELSE

current_state<=s3;

END IF;

WHEN s1 =>

IF dir='1' THEN

current_state<=s2;

ELSE

current_state<=s0;

END IF;

WHEN s2 =>

IF dir='1' THEN

current_state<=s3;

ELSE

current_state<=s1;

END IF;

WHEN s3 =>

IF dir='1' THEN

current_state<=s0;

ELSE

current_state<=s2;

END IF;

WHEN OTHERS =>

current_state<=s0;

END CASE;

END IF;

END IF;

END PROCESS;

PROCESS (current_state)

BEGIN

CASE current_state IS

WHEN s0 =>

phase<="0001";

WHEN s1 =>

phase<="0010";

WHEN s2 =>

phase<="0100";

WHEN s3 =>

phase<="1000";

END CASE;

END PROCESS;

END ARCHITECTURE arc1;



  硬件设计 

Copyright © 2005-2012 fpga-cpld.com All Rights Reserved
版权所有 FPGA技术网