步进电机角度控制系统的VHDL设计

  • 格式:docx
  • 大小:4.53 MB
  • 文档页数:11

步进电机角度控制系统的VHDL设计 20世纪80年代后期,美国国防部开发的VHDL语言(VHSIC硬件描写语言,VHSIC是非常高度迅速综合的电路的缩写)是IEEE标准化的硬件描述语言,并且已经成为系统描述的国际公认标准,得到众多EDA公司的支持。其设计描述可以是描述电路具体组成的结构描述,也可以是描述电路功能的行为描述.这些描述可以从最抽象的系统级直到最精确的逻辑级,甚至门级。 传统的电子设计技术通常是自底向上的,即首先确定构成系统的最底层的电

路模块或元器件的结构和功能,然后根据主系统的功能要求,将它们组合成更大的功能块,使它们的结构和功能满足高层系统的要求[10]。以此流程,逐步向上递推,直至完成整个目标系统设计。 而在“自顶向下”的设计中,首先需要进行行为设计。接着进行结构设计,根据该电子系统或芯片的特点,将其分解为接口清晰、相互关系明确、尽可能简单的子系统,得到一个总体结构。下一步是把结构转换成逻辑图,即进行逻辑设计。接着进行电路设计,逻辑图将进一步转化成电路图。在很多情况下,这时需进行硬件仿真,以最终确定逻辑设计的正确性。最后是进行版图设计,即将电路图转化成版图。 在本设计中采用的是自顶向下的设计方法,首先从系统功能设计开始,对系统高层模块进行行为描述和功能仿真.系统的功能验证完成后,将抽象的高层设计自顶向下逐级细化,直到与所用可编程逻辑器件相对应的逻辑描述。 在本设计中,具有4个模块: 1)单步运行模块:控制步进电机单步运行。实现的方式就是当按下单步运行按键时步进电机就转动一个角度,按两下转动两个角度,简明的说就按几下单步运行按键步进电机就转动几个角度。 2)角度定位控制模块:控制步进电机的角度,就是当你需要它转几个角度时,通过此程序能实现它就转几个角度。 3)正、反转控制模块:实现步进电机的能朝两个方向的运行。 4)转速控制模块:对步进电机运行快、慢的控制。 下面具体介绍各个部分的设计。 3.1单步运行模块 (1) 实体图

图3-1 单步运行实体图 danbu :控制单步运行的,当按下此键时,步进电机电机就转一步,不按时就停止不转。 clk :脉冲信号。 phase[3..0]:输出信号。

(2)单步运行的VHDL设计 为了实现步进电机的单步运行的要求,CPLD要能够产生一种信号,例如当danbu为‘1’时产生phase(3)→phase(2)→phase(1)→phase(0)依次为高电平之后使输出信号为零,当danbu 再次为‘1’时才产生信号。也就是当按下danbu键时,步进电机就转一个角度;反之,步进电机就停止不转。主要程序如下: ...... architecture arc1 of danbu is type states is (s0,s1,s2,s3,s4);--中间变量的定义 signal current_state:states; begin process(clk) begin if clk'event and clk='1' then if danbu='1' then current_state<=s0; --当danbu=’1’时将s0赋值给current_state else case current_state is when s0=> current_state<=s1; when s1 => current_state <=s2; when s2 => current_state <=s3; when s3 => current_state <=s4; when others => current_state <=s4; 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"; when s4=> phase<="0000"; end case; end process; end architecture arc1; (3)仿真波形图 图3-2 单步运行仿真波形 由此波形可知,当输入danbu为‘1’时,则分别给步进电机的A→B→C→D四相依次加一个脉冲,就能使步进电机转一个角度。满足我的设计要求。

3.2角度控制模块 (1)实体图

图3-3 角度控制实体图 clk2:时钟脉冲; d[4..0]:控制步进电机运行的角度; ena1:当ena1=’1’时,输入才有效; ena2:使能信号; dir:控制步进电机的运行方向; phase[3..0]:输出信号;

mai:U1的作用是产生逐个脉冲来控制步进电机,实现步进电机的角度控制。 stepmotor:U2的作用是产生能够使步进电机运行的信号。

(2)角度控制的VHDL设计 为了实现步进电机按照所要求的步数运行(角度控制),CPLD必须能够将连续的脉冲通过一定的实现将其化为逐个脉冲送出[11],此电路的具体实现方法如下: 当发送步进脉冲使能信号ena(上升沿有效)时,CPLD将设置的运行的步进脉冲数送入到二进制减法计数器的预置数端, 允许频率发生器的脉冲输出直接送到步进电机脉冲发生器的脉冲输出端上, 并对频率发生器输出的脉冲信号clk 进行减计数。当计数器计到零时, 产生一个封锁信号flag, 封锁频率发生器的输出脉冲, 使得此时的脉冲输出为低电平。当下一个启动命令到来时, 再次通过步进脉冲使能信号启动, 完成下一次的控制。 脉冲发生器的VHDL设计如下: entity mai is --实体端口定义 port ( d: in std_logic_vector(4 downto 0); ena,clk0 :in std_logic; clkout:out std_logic ); end mai; architecture one of mai is signal qout:std_logic_vector(4 downto 0);--中间变量的定义 signal flag:std_logic; begin process(clk0,ena) begin if ena='1' then qout<=d(4 downto 0); else if rising_edge(clk0) and(qout > 0 )then qout <=qout-1; elsif qout="00000" then qout <=qout; end if; end if; end process; process(qout) --产生封锁步进脉冲的信号 begin if qout="00000" then --当计数器减计数到0时封锁信号有效 flag <='0'; else flag<='1'; --到下一个预置数到来时解除封锁 clkout<= not clk0; end if; end process; end one;

(3)仿真波形

图3-4 脉冲发生器的仿真波形 此波形是在QuartusⅡ 仿真平台下进行的仿真,步进电机的频率为10KHZ,脉冲个数为四位二进制数,上图分别给出了脉冲个数为5、9时的仿真波形,当输入d[4..0]为5时,输出clkout就输出5个脉冲;当输入d[4..0]为9时,输出clkout就输出9个脉冲。由此可见,能实现设计的要求。

3.3 正、反转控制模块

(1) 实体框图

图3-5正、反转控制实体图 clk: 时钟信号 reset: 复位信号 dir:方向控制信号 phase[3..0]:输出信号给步进电机

(2) 正、反转控制的VHDL设计 为了使步进电机按照要求实现正、反两个方向运行,CPLD必须能够产生两个不同方向的信号,例如当dir为‘1’时产生的是phase(3)→phase(2)→phase(1)→phase(0)依次为高电平,当dir为‘0’时产生的是phase(0)→phase(1)→phase(2)→phase(3)依次为高电平,两者相反,将此信号送给步进电机A、B、C、D四相就能实现步进电机的正反转。 该控制电路的输入信号有3个:时钟信号clk、复位信号reset和方向控制信号dir。输出信号为phase[3..0],用来控制步进电机的动作[12]。 S4S2S3S1

1

0

10

1010

图3-6 步进电机控制器的状态图

S0S3S1S2状态 输出信号 phase[3..0]0001100000100100

图3-7步进电机状态与输出信号的对应关系 具体程序见附录。 (2) 仿真波形

图3-8 正、反转控制仿真波形