FPGA|CPLD|ASIC论坛
直播中

抽什么风

13年用户 90经验值
擅长:基础元器件
私信 关注
[经验]

FPGA Verilog HDL 设计实例系列连载------步进电机驱动控制

` 本帖最后由 抽什么风 于 2012-3-20 09:56 编辑

Verilog HDL 之 步进电机驱动控制
  步进电机的用途还是非常广泛的,目前打印机,绘图仪,机器人等等设备都以步进电机为动力核心。那么,下面我们就了解下什么是步进电机,它是怎么控制的。
一、步进电机相关知识简介
1、步进电机概述
  步进电机是一种能够将电脉冲信号转换成角位移或线位移的机电元件,它实际上是一种单相或多相同步电动机。单相步进电动机有单路电脉冲驱动,输出功率一般很小,其用途为微小功率驱动。多相步进电动机有多相方波脉冲驱动,用途很广。使用多相步进电动机时,单路电脉冲信号可先通过脉冲分配器转换为多相脉冲信号,在经功率放大后分别送入步进电动机各相绕组。每输入一个脉冲到脉冲分配器,电动机各相的通电状态就发生变化,转子会转过一定的角度(称为步距角)。正常情况下,步进电机转过的总角度和输入的脉冲数成正比;连续输入一定频率的脉冲时,电动机的转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。由于步进电动机能直接接收数字量的输入,所以特别适合于微机控制。
2、步进电机的种类
  目前常用的步进电机有三类:
  (1)反应式步进电动机(VR):它的结构简单,生产成本低,步距角可以做的相当小,但动态性能相对较差。
  (2)永磁式步进电动机(PM):它的出力大,动态性能好;但步距角一般比较大。
  (3)混合步进电动机(HB):它综合了反应式和永磁式两者的优点,步距角小,出力大,动态性能好,是性能较好的一类步进电动机。
  如果还想做更深入的了解,自行查找相关资料。
3、步进电机控制的实现
  我们实验中所使用的步进电机为四相步进电机。转子小齿数为64。系统中采用四路I/O进行并行控制,FPGA直接发出多相脉冲信号,在通过功率放大后,进入步进电机的各相绕组。这样就不再需要脉冲分配器。脉冲分配器的功能可以由纯软件的方法实现。
步进电机驱动控制
  四相步距电机的控制方法有四相单四拍,四相单、双八拍和四相双四拍三种控制方式。步距角的计算公式为:
步进电机驱动控制

其中:m为相数,控制方法是四相单四拍和四相双四拍时C为1,控制方法是四相单、双八拍时C为2,Zk为转子小齿数。本系统中采用的是四相单、双八拍控制方法,所以步距角为360°/512。但步进电机经过一个1/8的减速器引出,实际的步距角应为360°/512/8。
  试验中使用EXI/O的高四位控制四相步进电机的四个相。按照四相单、双八拍控制方法,电机正转时的控制顺序为A→AB→B→BC→C→CD→D→DA。EXI/O的高四位的值参见表1.1。
步进电机驱动控制
                          表1.1 电机正转时,FPGA四位IO口的值
反转时,只要将控制信号按相反的顺序给出即可。
  步进电机的频率不能太快,也不能太慢。在200Hz附近最好。频率太快是转动不起来的。
注:为什么步进电机高于一定速度就无法启动:
  步进电机有一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。在有负载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。
二、实验平台
  Quartus II 7.2 集成开发环境、SOPC-MBoard板、ByteBlaster II 下载电缆
三、实验实现
1、在设计文件中输入Verilog代码。
  1. //--------------------------------------------------------------------------------------------------
  2. // title       : StepMotorPorts
  3. // Author      : wangliang
  4. // Generated   : 2011.08.16
  5. //-------------------------------------------------------------------------------------------------

  6. module StepMotorPorts (StepDrive, clk, Dir, StepEnable, rst);
  7.      
  8.      input clk;
  9.      input Dir;
  10.      input StepEnable;
  11.      input rst;
  12.    
  13.      output[3:0] StepDrive;
  14.      
  15.      reg[3:0] StepDrive;
  16.      reg[2:0] state;
  17.      reg[31:0] StepCounter = 32'b0;
  18.      parameter[31:0] StepLockOut = 32'd200000;             //250HZ
  19.      reg InternalStepEnable;

  20.      always @(posedge clk or negedge rst)
  21.      begin
  22.          if ( !rst)   
  23.          begin
  24.              StepDrive      <= 4'b0;
  25.              state    <= 3'b0;
  26.              StepCounter <= 32'b0;
  27.             end

  28.          else  
  29.          begin
  30.              if (StepEnable == 1'b1)    InternalStepEnable <= 1'b1 ;
  31.             
  32.              StepCounter <= StepCounter + 31'b1 ;
  33.              if (StepCounter >= StepLockOut)
  34.              begin
  35.                  StepCounter <= 32'b0 ;
  36.             
  37.                  if (InternalStepEnable == 1'b1)
  38.                  begin
  39.                      InternalStepEnable <= StepEnable ;
  40.                      if (Dir == 1'b1)           state <= state + 3'b001 ;
  41.                      else if (Dir == 1'b0)       state <= state - 3'b001 ;
  42.                      case (state)
  43.                          3'b000 :    StepDrive <= 4'b0001 ;
  44.                          3'b001 :    StepDrive <= 4'b0011 ;
  45.                          3'b010 :    StepDrive <= 4'b0010 ;
  46.                          3'b011 :    StepDrive <= 4'b0110 ;
  47.                          3'b100 :    StepDrive <= 4'b0100 ;
  48.                          3'b101 :    StepDrive <= 4'b1100 ;
  49.                          3'b110 :    StepDrive <= 4'b1000 ;
  50.                          3'b111 :    StepDrive <= 4'b1001 ;  
  51.                      endcase
  52.                  end
  53.              end
  54.          end     
  55.      end
  56. endmodule
注:
  (1)第19行,此处的数值为200000,因为实验中所使用的晶振时钟频率是50MHz,这样我们为步进电机提供了250Hz的频率,使之能正常工作。
  (2)第43、44行是选择正转还是反转。
  (3)第45行~第54行:就是根据表1.1而来的,配置步进电机的IO口值。
2、由设计文件生成的.bsf文件,其外接接口如图1.2所示。  
步进电机驱动控制
3、引脚分配
  clk接时钟;Dir接按键,控制正转还是反转;StepEnable接按键,表示开关;rst接复位信号;StepDrive接步进电机的4个引脚。
4、实验结果
  烧写到FPGA上以后,通过拨动开关就可以使步进电机正转反转了。

` 步进电机驱动控制

回帖(24)

flexman

2012-5-26 08:12:17
沙发。fpga好高级。
举报

CRJ

2012-5-26 09:08:02
你说你跳进黄河也洗不清,我看你跳下十八层高楼也摔不死,真是脸皮厚,哪里都厚。

顶上去
举报

shao

2012-5-27 20:57:42
顶一个
举报

刘超

2012-7-28 16:55:42
学习  学习了   超牛
举报

潘长义

2012-8-6 20:38:07
{:soso_e179:}
举报

弓波

2012-9-11 10:40:47
学习了,以后自己要好好努力了!
举报

lovebao

2012-10-7 13:45:12
学习学习  感谢分享
举报

tpj

2012-10-17 20:58:19
good!
举报

张威

2012-11-3 23:11:53
多谢分享     {:soso_e113:}
举报

杨礼斌

2012-11-5 12:44:18
看看学习下。。
举报

dalianmao502

2012-11-9 20:19:34
谢谢诶分享啊
举报

greenleefs

2012-11-12 21:00:09
gooodgoood
举报

sgwway

2013-4-6 02:50:27
学习学习,好好
举报

haoxuan

2013-4-11 22:39:03
{:23:}
举报

纪强

2013-4-12 09:39:28
得好好学习啊
举报

sgwway

2013-4-19 16:22:36
很好,学习学习
举报

wy448436087

2013-4-27 11:07:55
更进一步,其实可以做细分的!!!
举报

x5675602

2013-7-11 19:59:47

更进一步,其实可以做细分的!!!
举报

x5675602

2013-7-11 20:10:47
谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢文稿
举报

更多回帖

发帖
×
20
完善资料,
赚取积分