3回答

0收藏

基于FPGA和Verilog的多用途步进电机的设计(原创)

FPGA/DSP FPGA/DSP 6762 人阅读 | 3 人回复 | 2013-08-08

本帖最后由 zwj108 于 2013-8-8 20:33 编辑

1 引 言

步进电机是一种将数字信号转换为角位移或线性位移的控制驱动装置。它的速度和控制脉冲严格同步,响应速度极快,有较高的重复定位精度,大量应用在精密控制的场合。常用的步进电机控制系统,采用微机控制,用软件实现其步进脉冲的产生。这种方法程序量大,占用CPU时间较多,限制了步进电机速度的进一步提高,而且软件方式的抗干扰性能较差,在EMI较严重的场合其可靠性不如纯硬件电路。在硬件中,环形分配器逻辑关系复杂,用传统的分立元件实现,电路规模大,连接线复杂,灵活性差,功耗较大,其系统可靠性也不尽人意。
在传统的系统设计流程中,通常采用MCS-51单片机作为整个系统的主控制器,MCS-51单片机实现整个系统外设的管理和控制功能。但是从工程设计角度看,51单片机的I/O端口数量较少资源有限,而且单片机程序执行具有顺序性,因此51单片机只能通过外接端口扩展芯片,并采用分时操作的方式来实现对整个外设的控制和管理。相对于51单片机而言,FPGA器件具有硬件速度快、I/O端口数目更多、并行处理能力更强的优点,能够利用丰富的可编程资源针对不同的外设构造相应的逻辑电路,从而实现对外设接口的管理及控制。

2 芯片设计思想概述

2. 1 总体架构
整个芯片采用模块化设计方式,实现“手动”控制电机的“运转/停止”;当电机处于“运转”状态时,可“动态调节”电机的转速和方向;当步进电机每次接受到一组脉冲信号,便旋转一个角度。
2. 2 各部分功能分析
时钟分频控制部分:该部分实际上是用按键KeysEN输入控制FPGA输出频率从而实现电机转速快慢的。
驱动逻辑控制部分:该部分包括模式选择,复位控制,方向控制。

3 各模块的设计

    根据各部分的功能,将全系统分为时钟分频控制模块、驱动逻辑控制模块和顶层模块三部分。
各模块关系如图1所示。


3. 1 时钟分频控制电路的设计
通过按键KeysEN输入控制FPGA输出频率多少从而实现电机转速快慢的目的。根据步进电机时钟频率的要求,尤其是空载时的启动频率很低大约为300HZ左右,而该FPGA系统板的时钟为28MHZ,所以在系统上电时的频率就应该在300HZ左右,修改下面的NMtemp2参数就可以设定系统上电时的输出频率
在该模块中,包含两个进程,分别将时钟信号上升沿以及按键上升沿设置为触发的敏感事件。当EN=1,按动Keys加快电机转速;当EN=0,按动Keys减缓电机转速。每个Verilog 模块以module开头, endmodule 结束。下面给出时钟分频控制模块源程序:
   module FreDiv(CLK,CLKOUT,EN,RST,KeyS);
   input CLK,RST,KeyS,EN;
   output CLKOUT;
   parameter N=32000000,M=48000 ; // 计数器二进制位数
   integer temp1=0,temp2=96000;
   always @(posedge CLK)
   begin
    if (!RST)
     begin
       if (temp1>=temp2-1)temp1<=0;
       else temp1<=temp1+1;
    end
   end
   always @(posedge KeyS)
                 begin
                    if (KeyS & EN)
                      begin
                           if(temp2==N-1)temp2<=N/2;                    
                           else temp2<=temp2+1000;
                         end
                       if (KeyS & ~EN)
                      begin
                           if(temp2==0)temp2<=N/2;                       
                           else temp2<=temp2-1000;
                         end
                 end                        
   assign CLKOUT=(temp1<M)?1:0;  
endmodule
endmodule
为验证以上程序是否满足设计要求,我们在Active-HDL仿真平台下进行了时序功能验证。其仿真波形如图2所示。
  
                                                                  

图2
由仿真波形可见,满足设计的功能要求。
生成RTL图如图3所示:
                                                                     

图3
3. 2 驱动逻辑控制模块电路设计
本电路是驱动电机转动和控制电机转向及复位的模块。
电机驱动模块用L298N电路图
   源程序如下:
     module Motor(Out, Clk, Dir,Enable, Rst);
     input Clk;
     input Dir;
     input Enable;
     input Rst;
     output[3:0]Out;
     reg[3:0] Out;
     reg[2:0] state;
     always @(posedge Clk or negedge Rst)
        begin
       if ( !Rst)        //低电平复位,初始化设置
          begin
             Out<= 4'b0;
             state<= 3'b0;
           end
      else  
         begin
           if(Enable == 1'b1)  
                     if (Dir == 1'b1)   state = state + 3'b001 ;     //正转
                     else if (Dir == 1'b0)  state = state-3'b001 ;   //反转
                      case (state)
                         3'b000 :    Out = 4'b0001 ;
                         3'b001 :    Out = 4'b0011 ;
                         3'b010 :    Out = 4'b0010 ;
                         3'b011 :    Out = 4'b0110 ;
                         3'b100 :    Out = 4'b0100 ;
                         3'b101 :    Out = 4'b1100 ;
                         3'b110 :    Out = 4'b1000 ;
                         3'b111 :    Out = 4'b1001 ;  
                      endcase
                end
           end
       endmodule
   仿真波形如图5所示:
                                                         

5
由上图可以看出,实现了四相步调脉冲的输出以及正反转,复位功能。
   生成RTL图如图6所示:
                                                         


图6
3. 3 顶层模块设计
    顶层模块就是把前面的时钟分频模块和电机驱动模块综合。其中包括有复位控制,方向控制及转速控制。因此,根据系统控制要求,调用上述所有的模块,是顶层模块的主要任务。
顶层设计源程序如下:
module StepMotor(CLKm,ENm,KeySm,Outm,Dirm,Enablem,RSTm,Rstm);
input CLKm,ENm,KeySm,Dirm,Enablem,RSTm,Rstm;
output[3:0] Outm;
wire clk;
Motor u1(Outm,clk,Dirm,Enablem,RSTm);
FreDiv u2(CLKm,clk,ENm,Rstm,KeySm);
endmodule
生成RTL图如图7所示:
                                                            

图7
时序仿真图如下图

                                                                        


由于各模块的独立性,在物理测试过程中可对各模块分开综合调试,以此确保硬件电路能同时满足预期的功能和逻辑约束条件。

4 结束语

    本系统在硬件设计上采用了模块化设计,通过数字示波器检测FPGA各输出的频率及输出波形,均达到目的要求。
    本方案已完全实现, 系统运行良好。
         

QQ截图20130406103246.jpg (33.52 KB, 下载次数: 56)

QQ截图20130406103246.jpg
心中有曲自然嗨!!!
分享到:
回复

使用道具 举报

回答|共 3 个

倒序浏览

沙发

小鸟_愤怒

发表于 2013-8-8 16:54:55 | 只看该作者

图呢,无图无真相。
静心  简单  认真  专注
板凳

MMzhang-319191

发表于 2013-8-8 20:11:08 | 只看该作者

小鸟愤怒 发表于 2013-8-8 16:54
图呢,无图无真相。

哈哈  我用那个 粘word 里 没粘进图啊
心中有曲自然嗨!!!
地板

MMzhang-319191

发表于 2013-8-8 20:34:09 | 只看该作者

小鸟愤怒 发表于 2013-8-8 16:54
图呢,无图无真相。

有图  有真相啦      
心中有曲自然嗨!!!
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条