基于FPGA的异步电机课程设计.docx

上传人:b****8 文档编号:30240922 上传时间:2023-08-13 格式:DOCX 页数:19 大小:125.22KB
下载 相关 举报
基于FPGA的异步电机课程设计.docx_第1页
第1页 / 共19页
基于FPGA的异步电机课程设计.docx_第2页
第2页 / 共19页
基于FPGA的异步电机课程设计.docx_第3页
第3页 / 共19页
基于FPGA的异步电机课程设计.docx_第4页
第4页 / 共19页
基于FPGA的异步电机课程设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

基于FPGA的异步电机课程设计.docx

《基于FPGA的异步电机课程设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的异步电机课程设计.docx(19页珍藏版)》请在冰豆网上搜索。

基于FPGA的异步电机课程设计.docx

基于FPGA的异步电机课程设计

学生学号

课程设计

题目

步进电机定位控制系统设计

学院

专业

班级

姓名

指导老师

2014~2015

学年

1月

7日

课程设计任务书

学生姓名:

专业班级:

指导教师:

工作单位

题目:

步进电机定位控制系统设计

初始条件:

1.熟悉QuartusII软件的操作与运用;

2.掌握步进电机的工作原理。

要求完成的主要任务:

1.设计一个基于FPGA的4相步进电机定位控制系统,包括步进电机方向设定

电路模块、步进电机步进移动与定位控制模块和编码输出模块。

2.撰写符合学校要求的课程设计说明书

时间安排:

1、年月日,布置课设具体实施计划与课程设计报告格式的要求说明。

2、年月日至年月日,设计说明书撰写。

3、年月日,上交课程设计成果及报告,同时进行答辩。

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

目录

摘要I

AbstractII

1设计目标及简介1

1.1设计目标1

1.2步进电机简介1

2VHDL语言介绍2

3QuartusⅡ介绍3

4系统组成4

4.1四相步进电机工作原理4

4.2系统组成5

5模块设计5

5.1FPGA模块图及信号说明5

5.2系统模块构成6

5.3各模块间整体共享的电路内部传递信号6

5.4电机方向设定电路模块6

5.5步进电机步进移动与定位控制模块7

5.6编码输出模块7

6程序设计与仿真8

7仿真结果12

8实验总结14

9参考文献15

摘要

在分析了步进电机工作原理的基础上,提出了步进电机定位控制系统的模块划分和实现方法。

以步进电机四相四拍工作方式为例,用Verilog编程在Altera公司的FPGA开发系统中实现了各功能模块和显示程序。

在系统仿真的基础上,进行了功能模块的控制实验,实验结果和仿真一致,实现了对步进电机模组的预定控制。

关键词:

步进电机定位控制Verilog硬件描述语言FPGA

Abstract

Onthebasisofanalysingsteppingmotor’soperationalprinciple,weputforwardmodulesdivisionandrealizingmethodofpositioningcontrolsystemwhichusingsteppingmotor.GivinganexamplesuchassteppingmotorswhichworkinFour-phase-four-stepmode,weuseVerilogprogrammingrealizedeveryfoundationalmoduleanddisplayroutineinAltera’sFPGAdevelopmentsystem.Onthebasisofsystemsimulation,weconductacontrollingexperimentaboutfoundationalmodules,theresultsarethesameassimulation’sresults.Wecarriedouttheexpectedcontrolaboutsteppingmotor.

Keyword:

steppingmotorpositioningcontrolVHDLFPGA

1设计目标及简介

1.1设计目标

设计一个基于FPGA的4相步进电机定位控制系统。

系统主要由步进电机方向设定电路模块、步进电机步进移动与定位控制模块和编码输出模块构成。

前两个模块完成电机旋转方向设定,激磁方式设定和定位角度的换算等工作,后一个模块用于对换算后的角度量编码输出。

1.2步进电机简介

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件,具有价格低廉、易于控制、无累积差错和与计算机接口方便等诸多优点,在机械、仪表、工业控制等领域中获得了广泛的应用。

在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。

这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。

使得在速度、位置等控制领域用步进电机来控制变的非常的简单。

2VHDL语言介绍

VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。

1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。

VHDL主要用于描述数字系统的结构,行为,功能和接口。

除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。

VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。

在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。

这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

VHDL语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必然具有很多其他硬件描述语言所不具备的优点。

归纳起来,VHDL语言主要具有功能强大,设计方式多样;硬件描述能力强大;具有很强的移植能力;设计描述与器件无关程序易于共享和复用等优点。

3QuartusⅡ介绍

QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。

具有运行速度快,界面统一,功能集中,易学易用等特点。

QuartusII提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:

可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;芯片(电路)平面布局连线编辑;LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块;功能强大的逻辑综合工具;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时分析;可使用SignalTapII逻辑分析工具进行嵌入式的逻辑分析;支持软件源文件的添加和创建,并将它们链接起来生成编程文件;使用组合编译方式可一次完成整体设计流程;自动定位编译错误;高效的期间编程与验证工具;可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。

4系统组成

4.1四相步进电机工作原理

步进电机是利用数字信号控制的电机装置,步进电机每次接收到一组脉冲数字信号,便旋转一个角度,称为步进角。

不同规格的步进电机的步进角不同,与电动机内部的线圈数量有关。

线圈中的供应电流决定线圈所产生的磁场方向。

4相步进电机有两组线圈A和B,如图4.1所示,A、B两组垂直摆放线圈的电流方向的排列组合,A线圈如果提供A点低电位而A′点高电位,电流由A′螺旋向上流到A,形成向上的磁场方向;同理,提供B点低电位而B′点高电位,电流由B′螺旋流到B,形成向左的磁场方向。

A和B这两组线圈形成的总磁场方向即为左上方。

如果将电动机的转子置于线圈所产生的磁场中,便会受到磁场的作用而产生与磁场方向一致的力,转子便开始转动,直到转子的磁场方向与线圈的磁场方向一致为止。

最多可以产生8种磁场方向,分别是0º、45º、90º、135º、180º、225º、270º、315º。

 

图4.1四相步进电机

由表4.1可以知,假设电动机转子刻度在0º的位置,想让其转180º,可以使端口信号依次按0001,0011,0010,0110到0100变化。

注意:

四相电动机有1相激磁法、2相激磁法和1-2相混合激磁法3种激磁方式。

不同的激磁方式,端口信号的顺序是不同的。

 

表4.1四相步进电机的8个方向和电流以及电压信号的关系

1-相激磁法:

当目标角度是90的整数倍时,采用这种方法。

例如要从0转到270,只要让端口信号的顺序为0000,0001,0010,0100,1000即可。

2-相激磁法:

当目标角度是45而非90的整数倍时,可采用这种方法。

例如要从0转到225,只要让端口信号的顺序为0000,0011,0110,1100即可。

1-2-相混合激磁法:

按照表中所列的信号顺序。

该步进电机为一四相步进电机,采用单极性直流电源供电。

只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。

4.2系统组成

 

图4.2系统组成

5模块设计

5.1FPGA模块图及信号说明

 

图5.1FPGA模块图

reset:

系统内部复位信号,’1’时有效;

dir:

步进电机正反转的方向控制开关,0:

逆时针,1:

顺时针;

clk:

由FPGA内部提供的4MHz的时钟信号;

ini:

赋初值的使能开关,’0’时有效;

manner:

激磁方式的选择开关(两位),00:

自动检测角度输入,决定激磁方式01:

1-相激磁;10:

2.相激磁;11:

1-2.相激磁.

angle:

步进角的倍数设定输入键.

baba:

将内部计数器的count[3downto0]的数值编码输出

5.2系统模块构成

系统主要由步进电机方向设定电路模块、步进电机步进移动与定位控制模块和编码输出模块构成。

前两个模块完成电机旋转方向设定,激磁方式设定和定位角度的换算等工作,后一个模块用于对换算后的角度量编码输出。

5.3各模块间整体共享的电路内部传递信号

count:

内部电路计数累加器,用来产生输出所需对应的状态;

cntinc:

设定累加器所需的累加/减计数值;

sntini:

设定累加器所需的计数初值;

angledncount:

设定步进角所需处理的次数;

Angledncntdec:

设定步进角所需累减计数值;

5.4电机方向设定电路模块

该模块设定了步进电机的旋转方向以及电机在任一方向上所需的初值与累加/减值。

dir为0时,步进电机工作于逆时针旋转模式,累加值为正数。

manner选择激磁方式00、01、10、11分别对应默认激磁方式、1-相激磁方式、2.相激磁方式和1-2.相激磁方式。

如表5.1。

manner

cntini

cntinc

angledncntdec

00

angle=2n+1时–1

angle=2n时0

2

2

01

0

2

2

10

-1

2

2

11

0

1

1

表5.1dir为0时

dir为1时,步进电机工作于顺时针旋转模式,累加值为负数。

manner选择激磁方式00、01、10、11分别对应默认激磁方式、1-相激磁方式、2.相激磁方式和1-2.相激磁方式。

如表5.2。

manner

cntini

cntinc

angledncntdec

00

angle=2n+1时–1

angle=2n时0

-2

2

01

0

-2

2

10

-1

-2

2

11

0

-1

1

表5.2dir为1时

5.5步进电机步进移动与定位控制模块

该模块的主要功能是利用赋初值ini将数值传到该模块中并配合输入的clk作为同步控制信号,进行步进电机的步进移动与定位控制。

步进电机定位功能通过一个减法器实现:

在每个clk脉冲上升缘,设定步进角倍数angledncount减去不同激磁方式下设定的累减记数值angledncntdec,判断差值小于设定的累减记数时,步进电机旋转到预定角度停止输出驱动端口信号,实现步进电机的定位功能。

驱动端口信号利用累加器实现。

5.6编码输出模块

该模块的功能是将count与angledncount产生的数值经过编码,并通过baBA[3downto0]输出到步进电机。

6程序设计与仿真

libraryIEEE;

useIEEE.std_logic_1164.all;

useIEEE.std_logic_arith.all;

useIEEE.std_logic_unsigned.all;

entitystep_motoris

port(reset:

inSTD_LOGIC;--系统复位信号

dir:

inSTD_LOGIC;--方向控制信号

clk:

inSTD_LOGIC;--系统时钟信号

ini:

inSTD_LOGIC;--初始化使能信号

manner:

inSTD_LOGIC_VECTOR(1downto0);--激磁方式的选择开关

angle:

inINTEGERrange255downto0;--步进角的倍数设定输入

baBA:

outSTD_LOGIC_VECTOR(3downto0));--步进电机状态输出

endstep_motor;

architecturestepmotor_archofstep_motoris

signalcount:

INTEGERrange0to7;--计数器

signalcntInc:

INTEGERrange-2to2;--设定累加器所需的累(加/减)计数值

signalcc:

integerrange0to3;

signalcntIni:

INTEGERrange-1to0;--设定累加器所需的计数初值

signalangleDnCount:

INTEGERrange255downto0;--计算已经转过的步进角

signalangleDnCntDec:

INTEGERrange2downto1;

begin

--步进电机方向设定电路模块

该模块的主要功能是设定步进电机的旋转方向(顺时针或逆时针),并设定电机在顺时针或逆时针转动时所需要初值与累加/减值。

process(dir,manner,angle)--,ini)

begin

--ifini='1'then

cc<=conv_integer(manner);

ifdir='0'then

caseccis

when1=>--1-相激励

--count<=0;

cntIni<=0;

cntInc<=2;

angleDnCntDec<=2;--"10";

when2=>--2-相激励

--count<=7;

cntIni<=-1;

cntInc<=2;

angleDnCntDec<=2;--"10";

when3=>--1-2相激励

--count<=0;

cntIni<=0;

cntInc<=1;

angleDnCntDec<=1;--"01";

when0=>--manner="00"autodetect

if(anglerem2)=1then--2-相激励

--count<=7;

cntIni<=-1;

cntInc<=2;

angleDnCntDec<=2;--"10";

else--1-相激励

--count<=0;

cntIni<=0;

cntInc<=2;

angleDnCntDec<=2;--"10";

endif;--angle

endcase;--manner

else--ifdir='1'

caseccis

when1=>--1-相激励

--count<=0;

cntIni<=0;

cntInc<=-2;

angleDnCntDec<=2;--"10";

when2=>--2-相激励

--count<=7;

cntIni<=-1;

cntInc<=-2;

angleDnCntDec<=2;--"10";

when3=>--1-2相激励

--count<=0;

cntIni<=0;

cntInc<=-1;

angleDnCntDec<=1;--"01";

when0=>--manner="00"autodetect

if(anglerem2)=1then--2-相激励

cntIni<=-1;

cntInc<=-2;

angleDnCntDec<=2;--"10";

else--1-相激励

cntIni<=0;

cntInc<=-2;

angleDnCntDec<=2;--"10";

endif;--angle

endcase;--manner

endif;--elsedir=0

--endif;--ini

endprocess;

--步进电机步进移动与定位控制电路模块

该模块的主要功能是利用ini(使能开关),将数值传到该模块中,并配合输入的clk(系统时钟)作为同步控制信号,进行步进机的步进移动与定位控制。

counting_reset:

process(reset,ini,angle,clk)

begin

ifreset='1'then

count<=0;

angleDnCount<=0;

elsifclk'eventandclk='1'then

ifini='0'then

count<=0+cntIni;

angleDnCount<=angle;

else

count<=count+cntInc;

ifangleDnCount>angleDnCntDecthen

angleDnCount<=angleDnCount-angleDnCntDec;

else

angleDnCount<=0;

endif;

endif;

endif;

endprocess;

--编码输出电路模块

该模块的功能是将count和angledncount产生的数值经过编码,并利用baBA输出连线信号,将结果输出显示。

baBA<="0000"whenangleDnCount=0else

"0001"whencount=0else

"0011"whencount=1else

"0010"whencount=2else

"0110"whencount=3else

"0100"whencount=4else

"1100"whencount=5else

"1000"whencount=6else

"1001";--whencount>=7;

endstepmotor_arch;

 

7仿真结果

图7.1编译结果

7.2RTL视图

图7.3时序仿真部分结果

图7.4局部时序仿真结果

结果分析:

1、从编译结果中可以看出片上资源使用情况。

Totallogicelements31/8256(<1%):

该芯片中共有8256个LE资源,其中有31个在这次编译中使用。

Totalcombinationalfunctions32/8256(<1%):

该芯片中共有8256个LE资源,有31个用于实现组合逻辑。

Dedicatedlogicredisters11/8256(1%):

该芯片中共有8256个LE资源,其中有11个用于实现寄存器,即时序逻辑。

也从上得出组合逻辑和时序逻辑的比例为31/11=2.8:

1。

2、从局部时序仿真结果中可以看出:

当ini无效时,dir=0表示逆时针方向转动,manner=10,决定2-相激磁方式,此时的baBA对应输出顺序为0011(45度)、0110(135度)、1100(225度)、1001(315度)再循环,满足2-相激磁方式的顺序结果正确。

 

8实验总结

本文所设计的步进电机控制系统实现简单,编程容易,所设计系统实现了对电机模组的预定控制,较好的完成了设计要求。

采用Verilog和FPGA设计,能够缩短设计周期,并使设计易于调试、实现。

在系统需升级时,仅需对FPGA模块再设计,成本较低。

从仿真结果来看,利用FPGA芯片严谨的基于硬件的编程语言和精确的时间控制特点,准确地实现了精确定位功能,并利用直接频率合成理论中的相位累加器的原理同时实现了对步进电机的运行速度的精确控制。

实践证明,这种方法定位准确,控制速度精确,是一种行之有效的方案。

9参考文献

[1]王紫婷,吴蓉,张彩珍,EDA技术与应用,兰州大学出版社,2003

[2]潘松,黄继业,EDA技术实用教程,北京科学出版社,2006

[3]崔葛,基于FPGA的数字电路系统设计,西安电子科技大学出版社,2008

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1