基于FPGA的步进电机细分控制.docx

上传人:b****2 文档编号:538619 上传时间:2023-04-29 格式:DOCX 页数:13 大小:457.48KB
下载 相关 举报
基于FPGA的步进电机细分控制.docx_第1页
第1页 / 共13页
基于FPGA的步进电机细分控制.docx_第2页
第2页 / 共13页
基于FPGA的步进电机细分控制.docx_第3页
第3页 / 共13页
基于FPGA的步进电机细分控制.docx_第4页
第4页 / 共13页
基于FPGA的步进电机细分控制.docx_第5页
第5页 / 共13页
基于FPGA的步进电机细分控制.docx_第6页
第6页 / 共13页
基于FPGA的步进电机细分控制.docx_第7页
第7页 / 共13页
基于FPGA的步进电机细分控制.docx_第8页
第8页 / 共13页
基于FPGA的步进电机细分控制.docx_第9页
第9页 / 共13页
基于FPGA的步进电机细分控制.docx_第10页
第10页 / 共13页
基于FPGA的步进电机细分控制.docx_第11页
第11页 / 共13页
基于FPGA的步进电机细分控制.docx_第12页
第12页 / 共13页
基于FPGA的步进电机细分控制.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于FPGA的步进电机细分控制.docx

《基于FPGA的步进电机细分控制.docx》由会员分享,可在线阅读,更多相关《基于FPGA的步进电机细分控制.docx(13页珍藏版)》请在冰点文库上搜索。

基于FPGA的步进电机细分控制.docx

基于FPGA的步进电机细分控制

实习目的(内容):

步进电机细分控制

实习时间:

自月日至月日

共天。

实习地点:

实习单位:

 

指导老师:

系主任:

一.实验目的

学习使用FPGA实现步进电机和细分控制,了解步进电机细分控制的原理。

二.实验内容

MagicSOPC实验箱上有1个四相步进电机。

本实验的内容是使用PMW方法来控制步进电机细分旋转,实验1/4细分(4.5度/步)控制和不细分控制(18度/步)。

用KEYI控制步进电机正/反(由LED1指示状态);KEY2控制电机正常运转/细分运行(LED2指示状态)。

利用Quartus2完成设计、仿真等工作,最后在MagicsSOPC实验箱上运行硬件测试。

三.实验原理

步进电动机是纯粹的数字控制电动机,它将电脉冲信号转变为角位移,即给一个脉冲,步进电机就转一个角度,可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。

步进电动机有如下特点:

1)步进电动机的角位移与输入脉冲数严格成正比。

因此,当它转一圈后,没有累计误差,具有良好的跟随性。

2步进电动机与驱动电路组成的开环数控系统,既简单、廉价,又非常可靠,同时,它也可以与角度反馈环节组成高性能的闭环数控系统。

3)步进电动机的动态响应快,易于启停、正反转及变速。

4)速度可在相当宽的范围内平稳调整,低速下仍能获得较大转距,因此一般可以不用减速器而直接驱动负载。

5)步进电机只能通过脉冲电源供电才能运行,不能直接使用交流电源和直流电源。

6)步进电机存在振荡和失步现象,必须对控制系统和机械负载采取相应措施。

步进电机具有和机械结构简单的优点,图1是四相六线制步进电机原理图,这类步进电机既可作为四相电机使用,也可以做为两相电机使用,使用灵活,因此应用广泛。

步进电机有两种工作方式:

整步方式和半步方式。

以步进角1.8度四相混合式步进电机为例,在整步方式下,步进电机每接收一个脉冲,旋转1.8度,旋转一周,则需要200个脉冲,在半步方式下,步进电机每接收一个脉冲,旋转0.9度,旋转一周,则需要400个脉冲。

控制步进电机旋转必须按一定时序对步进电机引线输入脉冲,以上述四相六线制步进电机为例,其半步工作方式和整步工作方式的控制时序如表1和表2所列。

步进电机在低频工作时,会有振动大、噪声大的缺点。

如果使用细分方式,就能很好的解决这个问题,步进电机的细分控制,从本质上讲是通过对步进电机励磁绕组中电流的控制,使步进电机内部的合成磁场为均匀的圆形旋转磁场,从而实现步进电机步距角的细分,一般情况下,合成磁场矢量的幅值决定了步进电机旋转力矩的大小,相邻两合成磁场矢量之间的夹角大小决定了步距角的大小,步进电机半步工作方式就蕴涵了细分的工作原理。

(1)四相反应式步进电机的工作方式

1)单四拍工作方式

四相反应式步进电机各相位A、B、C、D。

如果换相方式为A→B→C→D→A,测试电流切换四次,即将相四次时,磁场就会旋转一周,同时转子转动一个锯齿。

所谓“单”是指每次对单相通电;“四拍”是指切换相四次磁场旋转一周,转子转动一个锯齿。

2)双四拍工作方式

在步进电机的不仅控制中,如果每次都是两相通电,控制电流切换四次,磁场旋转一周,转子移动一个锯齿位置,则称为双四拍工作方式,在双四拍工作方式中,每拍通电的相磁极和转换情况如为:

AB→BC→CD→AB

3)八拍工作方式

对四相反应步进电机进行控制时,控制电流切换四次,磁场旋转一周,在步进电机的步进控制中,如果每次都是两相通电,控制电流切换四次,磁场旋转一周,转子移动一个锯齿位置,则称为双四拍工作方式。

在双四拍工作方式中,每拍通电的相磁极和转换情况为:

A→AB→B→BC→C→CD→D→DA→A

(2)步进电机细分驱动的工作原理

步进电机细分驱动的工作原理是通过对电机励磁绕组电流进行控制(这里绕组电流是呈阶梯波,电流分成多少个台阶)。

使步进电机定子的合成磁场成为按细分步距旋转的磁场,从而带动转子转动实现的。

当两相邻绕组同时通过不同大小的电流时,各相产生的转距之和为零的位置为新的平衡位置,所以通过控制各相的电流可以实现细分控制,要使电机按等步距转动,电流合成必须符合两个条件:

1)电流合成矢量旋转时每次变化的角度要均匀

2)电流合成矢量的大小或幅值要保持不变。

如图4.26所示的是四相步进电机4细分驱动的原理,设A相通是磁场方向为零度,如果以A相或B相单独通电时产生的磁场大小为半径(设半径为R)画圆,即可算出位置1时的两分量,A1=Rsina1,B1=Rcosa1,同理可以算出A2=Rsina2,B2=Rcosa;A3=singa3,B3=Rcosa3,一次可以算出各相在某一时刻的电流值,把各细分的电流参数记录下来,电机运行时以查表方式取出数据,即可做到细分控制。

如图4.27所示为四相双四拍4细分各绕组电流波形图,由图中也可以看出一般总有两相绕组通电,一相逐渐增大,一相逐渐减小。

对应一个步距角,电流可以分为N个台阶,也就是电机位置可以细分为N个小角度,实现N细分,从而可以驱动步进电机平滑运行。

本实验是用PWM信号来控制电机的,电机各相电流的大小取决于PMW信号的占空比,所以可通过调节PWM信号的占空比来控制电机的电流。

图4.26步进电机细分驱动原理

图4.27四相双四拍4细分各绕组电流波形图

四.实验步骤

1)启动Quartus2建立一个空白工程,然后命名为step_moto.qpf。

2)新建VarilogHDL源程序文件step_moto.v,写出程序代码并保存

3)选择目标器件并对相应的引脚进行锁定,在这里所选择的器件为Altera公司

Cyclone2系列的EP2C35F672C8芯片,引脚锁定方法如表4.9所列。

将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片)。

设置方法见3.1节。

表4.9引脚锁定方法

4)对该工程文件进行编译处理,若在编译过程中发现错误,则找出并更正,直至编译成功为止。

5)确保跳线短接帽跳接到JP5(步进电机源)的ON端口,把程序下载到FPGA器件中。

按KEY1-KEY2,观察步进电机的运行状态

五.实验参考程序

程序清单4.9步进电机控制模块

modulestep_moto(clock,key,led,pwm_out);

inputclock;//系统输入时钟

input[1:

0]key;//按键输入

output[1:

0]led;//LED指示输出

output[3:

0]pwm_out;//PWM输出

reg[3:

0]pwm_out_r;

reg[3:

0]p_out_r;

reg[23:

0]count;//时钟分频计数器

reg[3:

0]pwm_count;//PWM内部计数器

reg[3:

0]cnt4;//电机步进时序计数器

reg[15:

0]duty_cycle;//PWM占空比控制

regdir;//电机旋转方向控制

regmode;//电机控制模式

reg[1:

0]dout1,dout2,dout3,buff;//消抖寄存器

wire[1:

0]key_edge;//按键消抖输出

wirepwm_clk;//PWM计数时钟

wirespeed_clk;//电机转动速度控制

wirediv_clk;//消抖动时钟

//时钟分频部分

always@(posedgeclock)

begin

count<=count+1'b1;//时钟分频计数器加一

end

assignpwm_clk=(count[6:

0]==7'h7f);//PWM进行7分频(2.5us)

assigndiv_clk=(count[15:

0]==16'hffff);//消抖动时钟16分频(1.3ms)

assignspeed_clk=(count==24'hffffff);//转速控制24分频(335ms)

//按键消抖部分

always@(posedgeclock)

begin

if(div_clk)

begin

dout1<=key;//非阻塞,并行执行

dout2<=dout1;

dout3<=dout2;

end

end

//按键边沿检测部分

always@(posedgeclock)

begin

buff<=dout1|dout2|dout3;

end

assignkey_edge=~(dout1|dout2|dout3)&buff;

//按键操作部分

always@(posedgeclock)//按键1,控制电机正反转

begin

if(key_edge[0])

dir<=~dir;

end

always@(posedgeclock)//按键2,控制电机正常运转/细分运行

begin

if(key_edge[1])

mode<=~mode;

end

assignled=~{mode,dir};//输出LED指示

assignpwm_out=mode?

~pwm_out_r:

p_out_r;//输出模块选择(细分/正常)

always@(posedgeclock)//电机正/反转控制

begin

if(speed_clk)

begin

if(dir==1'b1)//按键1未按下,计数器加1,电机正转

cnt4<=cnt4+1'b1;

else//按键1按下,计数器减1,电机反转

cnt4<=cnt4-1'b1;

end

end

always@(posedgeclock)//PWM波计数器

begin

if(pwm_clk)

pwm_count<=pwm_count+1'b1;//PWM内部计数器加1

end

always@(posedgeclock)//PWMA通道

begin

if(pwm_count[3:

0]

12])//PWM内部计数器小于占空比的高4位的值

pwm_out_r[3]<=1'b1;

else

pwm_out_r[3]<=1'b0;

end

always@(posedgeclock)//PWMB通道

begin

if(pwm_count[3:

0]

8])//PWM内部计数器小于占空比的8~11位的值

pwm_out_r[2]<=1'b1;

else

pwm_out_r[2]<=1'b0;

end

always@(posedgeclock)//PWMC通道

begin

if(pwm_count[3:

0]

4])//PWM内部计数器小于占空比的4~7位的值

pwm_out_r[1]<=1'b1;

else

pwm_out_r[1]<=1'b0;

end

always@(posedgeclock)//PWMD通道

begin

if(pwm_count[3:

0]

0])//PWM内部计数器小于占空比的低4位的值

pwm_out_r[0]<=1'b1;

else

pwm_out_r[0]<=1'b0;

end

always@(posedgeclock)//步进电机控制时序

begin

if(speed_clk)

begin

case(cnt4[1:

0])

2'b00:

p_out_r=4'b1100;

2'b01:

p_out_r=4'b0110;

2'b10:

p_out_r=4'b0011;

2'b11:

p_out_r=4'b1001;

endcase

end

end

always@(cnt4)//步进电机4细分控制PWM波参数表

begin

case(cnt4)

4'h0:

duty_cycle=16'hf000;

4'h1:

duty_cycle=16'he600;

4'h2:

duty_cycle=16'hbb00;

4'h3:

duty_cycle=16'h6e00;

4'h4:

duty_cycle=16'h0f00;

4'h5:

duty_cycle=16'h0e60;

4'h6:

duty_cycle=16'h0bb0;

4'h7:

duty_cycle=16'h06e0;

4'h8:

duty_cycle=16'h00f0;

4'h9:

duty_cycle=16'h00e6;

4'ha:

duty_cycle=16'h00bb;

4'hb:

duty_cycle=16'h006e;

4'hc:

duty_cycle=16'h000f;

4'hd:

duty_cycle=16'h600e;

4'he:

duty_cycle=16'hb00b;

4'hf:

duty_cycle=16'he006;

endcase

end

endmodule

 

六.程序流程图

六.实验结果

1).下载测试仿真

KEYI按下时控制步进电机正/反同时LED1变亮;KEY2按下时电机进行正常运转/细分运行同时由LED2指示状态

实验结果和实验预期一致,试验成功

 

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

当前位置:首页 > 小学教育 > 小学作文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2