步进电机细分驱动控制系统设计Word文档下载推荐.docx

上传人:b****5 文档编号:17598171 上传时间:2022-12-07 格式:DOCX 页数:10 大小:425.37KB
下载 相关 举报
步进电机细分驱动控制系统设计Word文档下载推荐.docx_第1页
第1页 / 共10页
步进电机细分驱动控制系统设计Word文档下载推荐.docx_第2页
第2页 / 共10页
步进电机细分驱动控制系统设计Word文档下载推荐.docx_第3页
第3页 / 共10页
步进电机细分驱动控制系统设计Word文档下载推荐.docx_第4页
第4页 / 共10页
步进电机细分驱动控制系统设计Word文档下载推荐.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

步进电机细分驱动控制系统设计Word文档下载推荐.docx

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

步进电机细分驱动控制系统设计Word文档下载推荐.docx

>

clk0(本课设选clk0=4Hz,clk5=32768Hz)。

设步进电机的4相输入分别为A、B、C、D。

细分:

cnt32计数输出5位数据送rom32,rom32输出16位数据分别送new_comp:

moto5、moto6、moto7、moto8的a[3:

0]端口与cnt16计数送来的4位数据b[3:

0]比较。

如果a>

=b,则agb=1’b1;

反之agb=1’b0。

由于clk5>

clk0,从而agb能输出一段占空比稳定的信号(只持续1个或多个clk0周期),即产生1/4、2/4、3/4信号。

再如果s为高电平,则就能实现步进电机的细分输入。

不细分:

如果s为低电平,则mux2to1选通由dec2送来的非细分信号dataa[3:

0],从而实现步进电机的非细分输入。

具体模块源程序 

1.32进制可加可减计数器(cnt32)

modulecnt32(clk,en,u_d,cq);

inputclk,en,u_d;

output[4:

0]cq;

reg[4:

always@(posedgeclkorposedgeen)

begin

if(en)

cq<

=cq;

else 

if(u_d)

=cq+1'

b1;

else

cq=cq-1'

end

endmodule

2.16进制(自加)计数器(cnt16)

modulecnt16(clk,cq);

inputclk;

outputcq;

reg[3:

always@(posedgeclk)

Endmodule

3.4位输出选择器(dec2)

moduledec2(clk,a,d);

input[1:

0]a;

output[3:

0]d;

case(a[1:

0])

2'

b00:

d<

=4'

b1001;

b01:

b1100;

b10:

b0110;

b11:

b0011;

default:

bxxxx;

endcase

4.4位比较器(new_comp:

moto5、moto6、moto7、moto8)

modulenew_comp(a,b,agb);

input[3:

0]a,b;

outputagb;

regagb;

always@(aorb)

if(a>

=b)

agb<

=1'

else

b0;

5.查找表(rom32)

通过MIF文件调用LPM库中的ROM产生

MIF文件(文件名为PWM_1.MIF)为:

WIDTH=16;

DEPTH=32;

ADDRESS_RADIX=HEX;

DATA_RADIX=HEX;

CONTENTBEGIN

:

f000;

f600;

f900;

fc00;

ff00;

cf00;

9f00;

6f00;

0f00;

0f60;

0f90;

0fc0;

0ff0;

0cf0;

0af0;

06f0;

10 

00f0;

11 

00f6;

12 

00f9;

13 

00fc;

14 

00ff;

15 

00cf;

16 

009f;

17 

006f;

18 

000f;

19 

600f;

1a 

900f;

1b 

c00f;

1c 

f00f;

1d 

f00c;

1e 

f009;

1f 

f006;

END;

调用过程为:

生成的ROM模块为:

//synopsystranslate_off

`timescale1ps/1ps

//synopsystranslate_on

modulerom32(

address,

clock,

q);

input 

[4:

0] 

address;

clock;

output 

[15:

q;

wire[15:

0]sub_wire0;

0]q=sub_wire0[15:

0];

altsyncram 

altsyncram_component(

.clock0(clock),

.address_a(address),

.q_a(sub_wire0),

.aclr0(1'

b0),

.aclr1(1'

.address_b(1'

b1),

.addressstall_a(1'

.addressstall_b(1'

.byteena_a(1'

.byteena_b(1'

.clock1(1'

.clocken0(1'

.clocken1(1'

.data_a({16{1'

b1}}),

.data_b(1'

.q_b(),

.rden_b(1'

.wren_a(1'

.wren_b(1'

b0));

defparam

altsyncram_component.address_aclr_a="

NONE"

altsyncram_component.init_file="

PWM_1.MIF"

altsyncram_component.intended_device_family="

Cyclone"

altsyncram_component.lpm_hint="

ENABLE_RUNTIME_MOD=NO"

altsyncram_component.lpm_type="

altsyncram"

altsyncram_component.numwords_a=32,

altsyncram_component.operation_mode="

ROM"

altsyncram_component.outdata_aclr_a="

altsyncram_component.outdata_reg_a="

CLOCK0"

altsyncram_component.widthad_a=5,

altsyncram_component.width_a=16,

altsyncram_component.width_byteena_a=1;

6.4位输入4位输出2选1多路选择器(mux2to1)

modulemux2to1(dataa,datab,sel,result);

0]dataa,datab;

inputsel;

0]result;

always@(selordataaordatab)

if(sel)

result<

=datab;

=dataa;

7.顶层模块(setp_moto)

modulesetp_moto(clk0,u_d,clk5,en,s,y);

inputclk0,clk5,u_d,s,en;

0]y;

wire[4:

0]cq1;

wire[3:

0]cq2,d;

0]q;

wireagb1,agb2,agb3,agb4;

cnt32moto1(.clk(clk0),.en(en),.u_d(u_d),.cq(cq1));

cnt16moto2(.clk(clk5),.cq(cq2));

dec2moto3(.clk(clk0),.a(cq1[1:

0]),.d(d));

rom32moto4(.clock(clk0),.address(cq1),.q(q));

new_compmoto5(.a(q[15:

12]),.b(cq2),.agb(agb1));

new_compmoto6(.a(q[11:

8]),.b(cq2),.agb(agb2));

new_compmoto7(.a(q[7:

4]),.b(cq2),.agb(agb3));

new_compmoto8(.a(q[3:

0]),.b(cq2),.agb(agb4));

mux2to1moto9(.sel(s),.dataa(d),.datab({agb1,agb2,agb3,agb4}),.result(y));

结果与分析 

上图为不细分时的波形图。

由图可以看出,每次clk0上升沿输出y[3:

0]就会发生变化,从而实现步进电机的不细分输入(DA→AB→BC→CD→DA)。

由于细分时的时钟频率不能调太小(调太小的话,仿真时容易卡机;

但如果不调小的话,就产生不了比较好的波形。

),所以这里就不给出细分时的波形图了。

通过QuartusⅡ产生了正确的RTL级电路图(见附录),下到FPGA实验箱上步进电机实现了细分转动和非细分转动,以及正反转。

(本课设采用4细分)

心得与体会 

虽然我们做得晚,但由于我们理解了电路原理,并且给了我们VHDL的源程序,所以我们仅用了1天多一点的时间就把Verilog程序写出来了,并下载到实验箱上跑。

如果不给我们VHDL程序的话,我们做得就有可能吃力许多。

也有许多人就看不懂VHDL程序,幸亏当初我好好学了,那点程度的程序对我来说根本没压力。

这也是我们能把VHDL程序迅速翻译成Verilog程序的一个原因。

当然,Verilog的语法我已经忘了不少,我是边翻译边看书做的。

当初Verilog实验的时候我就做得很好,并且Modelsim也会用,所以我对QuartusⅡ和Modelsim很快就上手了。

我现在基本上不看书,多亏了本次课设,又让我回顾了以前学过的许多东西,也锻炼了我的动手和分析编程能力。

当然,我也学到了许多,认识到了自己知识的匮乏,自己还有很多要学的,所学的东西都是皮毛。

唯一感到吃力的是ROM模块的生成。

因为是第一次调用内部模块,我按照老师所给的例子操作总是不能成功,最后请教杨老师,原来是没建工程。

老师给的例子就没建工程,导致我也没建工程,究其原因是我太死板了,干什么事都太按部就班了,这点我应当改。

MIF文件是怎么产生的我也不清楚,老师给了我们MIF文件,我也就没深研究。

虽然不太清楚步进电机是怎么工作的,但我知道它的工作模式分为细分和不细分。

细分转得慢,不细分转得快。

只有在它的输入状态切换时它才会转过一定的角度,输入状态不变时它就不转。

附录:

QuartusⅡ综合产生的RTL级电路图 

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

当前位置:首页 > 高中教育 > 英语

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

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