【连载】 FPGA Verilog HDL 系列实例

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 下载电缆

三、实验实现

  详细实现步骤请参考  【连载】 FPGA Verilog HDL 系列实例--------8-3编码器

1、在设计文件中输入Verilog代码。

 1 //--------------------------------------------------------------------------------------------------
2 // Title : StepMotorPorts
3 // Author : wangliang
4 // Generated : 2011.08.16
5 //-------------------------------------------------------------------------------------------------
6
7 module StepMotorPorts (StepDrive, clk, Dir, StepEnable, rst);
8
9 input clk;
10 input Dir;
11 input StepEnable;
12 input rst;
13
14 output[3:0] StepDrive;
15
16 reg[3:0] StepDrive;
17 reg[2:0] state;
18 reg[31:0] StepCounter =32'b0;
19 parameter[31:0] StepLockOut =32'd200000; //250HZ
20 reg InternalStepEnable;
21
22 always @(posedge clk or negedge rst)
23 begin
24 if ( !rst)
25 begin
26 StepDrive <=4'b0;
27 state <=3'b0;
28 StepCounter <=32'b0;
29 end
30
31 else
32 begin
33 if (StepEnable ==1'b1) InternalStepEnable <= 1'b1 ;
34
35 StepCounter <= StepCounter +31'b1 ;
36 if (StepCounter >= StepLockOut)
37 begin
38 StepCounter <=32'b0 ;
39
40 if (InternalStepEnable ==1'b1)
41 begin
42 InternalStepEnable <= StepEnable ;
43 if (Dir ==1'b1) state <= state + 3'b001 ;
44 elseif (Dir ==1'b0) state <= state - 3'b001 ;
45 case (state)
46 3'b000 : StepDrive <= 4'b0001 ;
47 3'b001 : StepDrive <= 4'b0011 ;
48 3'b010 : StepDrive <= 4'b0010 ;
49 3'b011 : StepDrive <= 4'b0110 ;
50 3'b100 : StepDrive <= 4'b0100 ;
51 3'b101 : StepDrive <= 4'b1100 ;
52 3'b110 : StepDrive <= 4'b1000 ;
53 3'b111 : StepDrive <= 4'b1001 ;
54 endcase
55 end
56 end
57 end
58 end
59 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上以后,通过拨动开关就可以使步进电机正转反转了。

FPGA Verilog HDL 系列实例--------步进电机驱动控制的更多相关文章

  1. xilinx 赛灵思fpga verilog hdl 教程

    http://www.eefocus.com/article/08-03/37231s.html http://wenku.baidu.com/link?url=5mdkMmm4BGGi7gRdgSk ...

  2. fpga Verilog hdl 按键消抖 部分程序讲解

    module debounce(clk_in,rst_in,key_in,key_pulse,key_state); input clk_in;//system clock input rst_in; ...

  3. Verilog HDL基础语法讲解之模块代码基本结构

    Verilog HDL基础语法讲解之模块代码基本结构   本章主要讲解Verilog基础语法的内容,文章以一个最简单的例子"二选一多路器"来引入一个最简单的Verilog设计文件的 ...

  4. 基于Verilog HDL 的数字时钟设计

    基于Verilog HDL的数字时钟设计 一.实验内容:     利用FPGA实现数字时钟设计,附带秒表功能及时间设置功能.时间设置由开关S1和S2控制,分别是增和减.开关S3是模式选择:0是正常时钟 ...

  5. 流水线技术原理和Verilog HDL实现(转)

    源:流水线技术原理和Verilog HDL实现 所谓流水线处理,如同生产装配线一样,将操作执行工作量分成若干个时间上均衡的操作段,从流水线的起点连续地输入,流水线的各操作段以重叠方式执行.这使得操作执 ...

  6. 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)

    本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...

  7. 浅谈Verilog HDL代码编写风格

    消失了好久,没有写文章,也没有做笔记,因为最近再赶一个比赛,时间很紧,昨天周六终于结束了,所以趁着周末这会儿有时间,写点东西,记录下来.首先我学习FPGA才一年多,我知道自己没有资格谈论一些比较深层次 ...

  8. verilog HDL -模块代码基本结构

    1--verilog HDL 语言的预编译指令作用:指示在编译verliog HDL源代码前,需要执行哪些操作. 2--模块内容是嵌在module 和endmodule两个语句之间.每个模块实现特定的 ...

  9. Verilog HDL的程序结构及其描述

    这篇博文是写给要入门Verilog HDL及其初学者的,也算是我对Verilog  HDL学习的一个总结,主要是Verilog HDL的程序结构及其描述,如果有错,欢迎评论指出. 一.Verilog ...

随机推荐

  1. 从0到1---“保多多”APP的开发(二)

    今天继续记录宝多多开发过程中的一些值得注意的知识点: 1.验证车牌格式的正则表达式函数: //车牌号验证 - (BOOL)validateCarNo:(NSString *)carNo { NSStr ...

  2. Python框架、库以及软件资源汇总

    转自:http://developer.51cto.com/art/201507/483510.htm 很多来自世界各地的程序员不求回报的写代码为别人造轮子.贡献代码.开发框架.开放源代码使得分散在世 ...

  3. 服务器自己用户名下编译gcc

    要点: 1.上传gcc 学习命令 scp 具体格式: scp local_file remote_username@remote_ip:remote_folder scp /home/linux/so ...

  4. net_device 结构体分析

    /* * The DEVICE structure. * Actually, this whole structure is a big mistake. It mixes I/O * data wi ...

  5. Android应用程序“R文件”消失

    其实Android自己维护这一个 public final class R类主要是跟新资源文件,这个R.java无需我们自己去修改,如果你不了解千万不要去修改它,它定义的每个资源值都是唯一的,不会和系 ...

  6. Map/Reduce 工作机制分析 --- 作业的执行流程

    前言 从运行我们的 Map/Reduce 程序,到结果的提交,Hadoop 平台其实做了很多事情. 那么 Hadoop 平台到底做了什么事情,让 Map/Reduce 程序可以如此 "轻易& ...

  7. find 命令的参数详解

    使用name选项 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用. 可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来.不管当前路径是什么,如果想要在自 ...

  8. IE6 IE7 不支持 JSON

    最近发现ie6.7不支持json,解决方法:引入json2.js     <script type="text/javascript" src="json2.js& ...

  9. unity, 由scriptableObject创建.asset

    由继承自scriptableObject的类X创建.asset文件. 假设类X的定义为: [System.Serializable] public class X : ScriptableObject ...

  10. python string module

    String模块中的常量 >>> import string >>> string.digits ' >>> string.letters 'ab ...