查看: 5877|回复: 3

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

[复制链接]
  • TA的每日心情
    奋斗
    2014-6-4 13:58
  • 签到天数: 188 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-8-8 16:37:49 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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所示。
    1.png

    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.png
    图2
    由仿真波形可见,满足设计的功能要求。
    生成RTL图如图3所示:
                                                                          3.jpg
    图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所示:
                                                              QQ截图20130406111146.jpg
    5
    由上图可以看出,实现了四相步调脉冲的输出以及正反转,复位功能。
       生成RTL图如图6所示:
                                                              QQ截图20130406111417.jpg

    图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所示:
                                                                 QQ截图20130406111749.jpg
    图7
    时序仿真图如下图

                                                                             QQ截图20130406193459.jpg

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

    4 结束语

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

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-11-4 19:13
  • 签到天数: 281 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-8-8 16:54:55 | 显示全部楼层
    图呢,无图无真相。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-6-4 13:58
  • 签到天数: 188 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2013-8-8 20:11:08 | 显示全部楼层
    小鸟愤怒 发表于 2013-8-8 16:54
    图呢,无图无真相。

    哈哈  我用那个 粘word 里 没粘进图啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-6-4 13:58
  • 签到天数: 188 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2013-8-8 20:34:09 | 显示全部楼层
    小鸟愤怒 发表于 2013-8-8 16:54
    图呢,无图无真相。

    有图  有真相啦      
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-23 12:37 , Processed in 0.138854 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.