EDA步进电机控制设计Word文档下载推荐.docx

上传人:b****6 文档编号:19187363 上传时间:2023-01-04 格式:DOCX 页数:19 大小:178.32KB
下载 相关 举报
EDA步进电机控制设计Word文档下载推荐.docx_第1页
第1页 / 共19页
EDA步进电机控制设计Word文档下载推荐.docx_第2页
第2页 / 共19页
EDA步进电机控制设计Word文档下载推荐.docx_第3页
第3页 / 共19页
EDA步进电机控制设计Word文档下载推荐.docx_第4页
第4页 / 共19页
EDA步进电机控制设计Word文档下载推荐.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

EDA步进电机控制设计Word文档下载推荐.docx

《EDA步进电机控制设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《EDA步进电机控制设计Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。

EDA步进电机控制设计Word文档下载推荐.docx

5.AlanB.MarcovitzIntroductiontologicDesign.北京:

电子工业出版社,2003

指导教师签字:

年月日

步进电机控制

摘要

随着电子技术的发展,现场可编程门阵列FPGA和复杂可编程逻辑器件CPLD的出现,使得电子系统的设计者利用与器件相应的电子设计软件,在实验室里就可以设计自己的专用集成电路ASIC器件。

其中电子设计自动化(EDA)的关键技术之一就是可以用硬件描述语言(HDL)来描述硬件电路。

VHDL是用来描述从抽象到具体级别硬件的工业标准语言,它是由美国国防部在80年代开发的HDL,现在已成为IEEE承认的标准硬件描述语言。

VHDL支持硬件的设计、验证、综合和测试,以及硬件设计数据的交换、维护、修改和硬件的实现,具有描述能力强、生命周期长、支持大规模设计的分解和已有设计的再利用等优点。

利用VHDL这些优点和先进的EDA工具,根据具体的实际要求,将设计一个步进电机控制器电路。

步进电机是一种将电脉冲转化为角位移的执行机构。

也就是当步进驱动器接收到一个脉冲信号时,它就驱动步进电机按设定的方向转动一个固定的角度,它的旋转是以固定的角度一步一步运行的。

现场可编程门阵列(FPGA)是对步进电机实现一体化控制的理想选择。

目前,步进电机在控制系统中的应用越来越广泛,由此凸现了步进电机控制的重要性。

本文简单介绍了步进电机的原理和特点,并根据步进电机的特性设计了基于FPGA的控制电路:

以PWM变频来控制步进电机的转速。

关键字:

步进电机电机控制EDA技术

第一章绪论

§

1.1步进电机简介

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。

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

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

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

不过步进电机在控制的精度、速度变化范围、低速性能方面都不如传统的闭环控制的直流伺服电动机,在精度不是需要特别高的场合就可以使用步进电机.

1.2步进电机控制

步进电机能够直接将数字脉冲信号转化成为角位移,不需要A/D转换,所以被认为是理想的数控执行元件。

1.2.1.步进电机的起动:

步进电动机的最高起动频率(空载起动频率)一般为0.1KHz到3-4KHz,而最高运行频率则可以达到6KHz。

以超过最高起动频率的频率直接起动,将出现"

失步"

现象,甚至无法起动。

因此驱动步进电机时,应当先计算出电机不失步起动的最大频率,但其计算过程涉及参量复杂,鉴于我们对其具体理论了解有限,故不能精确计算出空载起动频率,实际应用对起动段的处理是采用按直线拟合的方法,即"

阶梯升速法"

可按两种情

图1.2.1阶梯升速起动

况处理,①已知突跳频率则按突跳频率分段起动,分段数n=f/fq。

②未知突跳频率,则按段拟合至给定的起动频率,每段频率的递增量(后称阶梯频率)△f=f/8,即采用8段拟合。

在运行控制过程中,将起始的速度(频率)分为n分作为阶梯频率,采用"

将速度连续升到所需要的速度,然后锁定,按预置的曲线运行。

如图所示。

速度从V1→V2如果是线性增加,则按给定的斜率升/降速;

如果是突变,则按"

处理。

在此过程中要处理好两个问题:

①速度转换时间应尽量短;

为了缩短速度转换的时间,可以采用建立数据表的方法,结合各曲线段的频率和各段间的阶梯频率便可以建立一个连续的数据表,并通过转换程序将其转换为脉冲速率。

通过在不同的阶段调用相应的脉冲速率,控制电机的运行。

②保证控制速度的精确性;

要从一个速度准确达到另外一个速度,就要建立一个校验机制,以防超过或未达到所需速度。

1.2.2.步进电机的换向:

步进电机通电换相这一过程称为脉冲分配。

例如:

四相步进电机的八拍工作方式,其各相通电顺序为A-AB-B-BC-C-CD-D-DA-A,通电控制脉冲必须严格按照这一顺序分别控制A、B、C、D相的通断。

如果按给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。

步进电机换向时,一定要在电机降速停止或降到突跳频率范围之内再换向,以免产生较大的冲击而损坏电机。

换向信号一定要在前一个方向的最后一个CP脉冲结束后以及下一个方向的第一个CP脉冲前发出。

对于CP脉冲的设计主要要求其有一定的脉冲宽度(一般不小于5μs)、脉冲序列的均匀度及高低电平方式.

图1.2.2换向信号起作用的时刻

1.2.3.步进电机的转速控制:

步进电机的加/减速控制,实际上就是控制触发脉冲的频率,两个脉冲的间隔长短,决定了步进电机的转速。

升速时,使脉冲频率增高,减速时,使脉冲频率降低。

调整触发脉冲频率,就可以对步进电机进行调速。

第二章总体设计

2.1步进电机驱动电路:

步进电机的驱动电路如图所示,其驱动电路原理很简单。

从FPGA出来的脉冲信

图2.1步进电机驱动电路

号从J1接入按一定的顺序分别接到晶体管Q7~Q10的基极,输出端则有四个相应的信号输出,并接到电机的1、4、3、6脚(注意:

电机引出了六根线,只有1、4、3、6才是真正接电机的四相输入,且分别接电机的A、B、C、D相)。

设脉冲信号Step1的输入信号是低电平,则输出就为高电平,相应的电机A相导通;

反之,则A相不导通。

以此类推,其余各相亦是如此。

则电机在脉冲序列信号的作用下按预定方向转动,通过改变脉冲序列信号的快慢即频率来控制步进电机转速。

2.2控制模块的设计:

总控制模块用VHDL语言对FPGA编程实现。

总控制模块其实质是一个按键控制程序,共有reset复位键、add累加键、sub递减键、start/stop启动/停止键、shift电机正反转控制键五个按键。

系统启动时,首先运行系统初始化程序,程序先转到步进电机控制模块,送复位信号使步进电机处于初始状态。

其间主控程序不断检测按键,只要有键被按下则启动相应的子模块实现实时控制。

具体程序代码见附录程序清单。

2.3程序流程图:

控制模块的程序流程图如图所示。

图2.3控制模块程序流程图

2.4步进电机控制模块的设计:

步进电机控制模块其程序设计共分按键去抖、变频、测频、步进、换向五个部分。

模块一接收到按键信号,则按键去抖部分先对按键信号进行处理,得到稳定的控制信号;

如果是变频信号则变频部分动作,通过相位累加模型,改变步进电机脉冲频率,并送给步进部分;

如果是换向信号,则换向部分动作,为了使电机降速停止或降到突跳频率范围之内再换向,先停送驱动脉冲一秒,再送反向脉冲给步进部分,驱动电机换向;

步进部分则是按照送来的脉冲频率和步进顺序信号驱动电机按预定的转速和转向转动;

测频部分通过测定所送脉冲频率,再利用四相电机八拍运行时步距角为θ=360度/(50*8)=0.9度的尺度则可以计算出步进电机的每分钟转速数据,再送给显示模块显示。

第三章系统程序及仿真

3.1总体设计电路

图3.1总体设计电路接线图

3.2程序、程序块及仿真波形

--/*ZTSD.VHD*/--换向模块

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYztsdIS

PORT(clk,key,rst:

inSTD_LOGIC;

--系统时钟/换向按键/复位信号

y:

outSTD_LOGIC;

--输出

sel:

outSTD_LOGIC);

ENDztsd;

ARCHITECTUREBehavioralOFztsdIS

SIGNALsel1:

STD_LOGIC;

BEGIN

PROCESS(key,clk,rst)--产生换向延时秒脉冲

VARIABLEcnt:

integerrange0to32000000;

IFrst='

0'

THENcnt:

=0;

ELSIFkey='

1'

ELSEIFrising_edge(clk)THEN

IFcnt<

32000000THENcnt:

=cnt+1;

y<

='

;

ELSEcnt:

=32000000;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(key,sel1,rst)

THENsel1<

ELSIFrising_edge(key)THEN

sel1<

=notsel1;

sel<

=sel1;

ENDPROCESS;

ENDBehavioral;

图3.2.1

图3.2.2

--/*STEP_MOTOR.VHD*/--步进电机控制脉冲产生模块

ENTITYstep_motorIS

PORT(clk,rst:

inSTD_LOGIC;

--系统时钟/复位信号

sel:

--正反转切换键

clkkk:

outSTD_LOGIC;

--步进电机步进脉冲

control:

outSTD_LOGIC_VECTOR(3DOWNTO0));

--步机电机四相输出

ENDstep_motor;

ARCHITECTUREBehavioralOFstep_motorIS

SIGNALclkk:

TYPEstepISarray(0to7)OFSTD_LOGIC_VECTOR(3DOWNTO0);

PROCESS(clk,rst)--电机运转脉冲分频模块

integerrange0to1499999;

ELSIFclk'

EVENTANDclk='

THEN

IFcnt>

=7THENclkk<

=notclkk;

cnt:

ELSEcnt:

clkkk<

=clkk;

PROCESS(clkk,sel,rst)--控制脉冲产生模块

VARIABLEindex:

integerrange0to7:

VARIABLEeight_step:

step;

eight_step(0):

="

0001"

eight_step

(1):

0011"

eight_step

(2):

0010"

eight_step(3):

0110"

eight_step(4):

0100"

eight_step(5):

1100"

eight_step(6):

1000"

eight_step(7):

1001"

THENindex:

ELSIFrising_edge(clkk)THEN

IFsel='

THEN

IFindex<

=6THEN

index:

=index+1;

ELSEindex:

ELSEIFindex>

=1THEN

=index-1;

=7;

control<

=eight_step(index);

图3.2.3

图3.2.4

--/*CEPIN.VHD*/--测频模块

ENTITYcepinIS

PORT(clk,clk1,rst:

--系统时钟/输入被测脉冲/复位信号

shift:

outSTD_LOGIC_VECTOR(3DOWNTO0);

--数码管位选信号

data_led:

outSTD_LOGIC_VECTOR(7DOWNTO0));

--七段数码管

ENDcepin;

ARCHITECTUREBehavioralOFcepinIS

SIGNALcount,d2:

STD_LOGIC_VECTOR(15DOWNTO0):

=(others=>

'

);

SIGNALclkkk:

STD_LOGIC:

SIGNALdata_ledin:

STD_LOGIC_VECTOR(3DOWNTO0);

cepin:

block--测频模块

PROCESS(clk,rst)

integerrange1to32000000;

=1;

ELSIFrising_edge(clk)THEN

=32000000THEN

clkk<

cnt:

ELSE

PROCESS(clkk,clk1,rst)

VARIABLEcnt1:

integerrange0to399;

cnt1:

ELSIFrising_edge(clk1)THEN

IFclkk='

IFcnt1<

399THENcnt1:

=cnt1+1;

ELSEcnt1:

IFcnt(3DOWNTO0)<

9THEN

cnt(3DOWNTO0):

=cnt(3DOWNTO0)+1;

ELSEcnt(3DOWNTO0):

="

0000"

IFcnt(7DOWNTO4)<

9THEN

cnt(7DOWNTO4):

=cnt(7DOWNTO4)+1;

ELSEcnt(7DOWNTO4):

IFcnt(11DOWNTO8)<

cnt(11DOWNTO8):

=cnt(11DOWNTO8)+1;

ELSEcnt(11DOWNTO8):

IFcnt(15DOWNTO12)<

cnt(15DOWNTO12):

=cnt(15DOWNTO12)+1;

ELSEcnt(15DOWNTO12):

ENDIF;

ENDIF;

ENDIF;

ENDIF;

);

count<

=cnt;

ENDblock;

PROCESS(clkk)

IFclkk'

EVENTANDclkk='

d2<

=count;

ENDIF;

integerrange0to79999:

IFcnt=79999THENclkkk<

=notclkkk;

ELSEcnt:

disp:

block--转速显示模块

PROCESS(clkkk,d2,rst)

VARIABLEcnt:

STD_LOGIC_VECTOR(1DOWNTO0):

00"

BEGIN

IFrst='

shift<

1111"

data_ledin<

ELSIFrising_edge(clkkk)THEN

casecntIS

WHEN"

=>

1110"

data_ledin<

=d2(3DOWNTO0);

cnt:

01"

1101"

=d2(7DOWNTO4);

10"

1011"

=d2(11DOWNTO8);

11"

0111"

=d2(15DOWNTO12);

WHENothers=>

ENDcase;

yima:

block

PROCESS(data_ledin)--译码

casedata_ledinIS

WHEN"

data_led<

11000000"

--0

11111001"

--1

WHEN"

10100100"

--2

10110000"

--3

10011001"

--4

0101"

10010010"

--5

10000010"

--6

11111000"

--7

10000000"

--8

10010000"

--9

WHENothers=>

11111111"

--NoSIGNAL;

ENDcase;

图3.2.5

图3.2.6

--/*BIANPIN.VHD*/--变频模块

ENTITYbianpinIS

PORT(rst,clk,sub,add:

--复位信号/系统时钟/减速输入/加速输入

count:

outSTD_LOGIC);

--已变频率输出

ENDbianpin;

ARCHITECTUREBehavioralOFbianpinIS

SIGNALcon:

integerrange1to100:

=50;

SIGNALcnt1:

integerrange0to1100;

PROCESS(clkk,add,sub,rst)--加减键处理模块

VARIABLEcon1:

THENcon1:

ELSIFclkk'

IFadd='

IFcon1<

=99THEN

con1:

=con1+1;

ELSIFsub='

IFcon1>

=2THEN

=con

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

当前位置:首页 > 自然科学 > 物理

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

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