收藏 分享(赏)

步进电机细分驱动控制系统设计.doc

上传人:gnk289057 文档编号:8182545 上传时间:2019-06-13 格式:DOC 页数:12 大小:536KB
下载 相关 举报
步进电机细分驱动控制系统设计.doc_第1页
第1页 / 共12页
步进电机细分驱动控制系统设计.doc_第2页
第2页 / 共12页
步进电机细分驱动控制系统设计.doc_第3页
第3页 / 共12页
步进电机细分驱动控制系统设计.doc_第4页
第4页 / 共12页
步进电机细分驱动控制系统设计.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、步进电机细分驱动控制系统设计 姓名: 张凯 学号: 20104977指导老师: 杨小平、杞宁组员: 张凯 20104977 (组长)张明 20104991王涛 20104978合肥工业大学电子科学与应用物理学院电子科学与技术系- 0 -概述 步进电机在输入状态发生变化时会转过一定的角度,输入状态不变时不会转动,且在不细分输入情况下每次转过较大的角度,再细分情况下每次转过较小的角度。本设计是利用 FPGA 实现四相步进电机细分驱动控制,并且系统既能实现步进电机的细分驱动又能实现不细分驱动,还能实现步进电机的正、反转控制。设计方案与实现 下图是通过 Quartus 综合产生的 RTL 级电路图。整

2、个电路共分为 6 大模块:32 进制可加可减计数器(cnt32) 、16 进制(自加)计数器(cnt16)、4 位输出选择器(dec2) 、4 个 4 位比较器(new_comp:moto5、moto6、moto7、moto8) 、查找表(rom32) 、4 位输入 4 位输出 2 选 1 多路选择器(mux2to1) 。其中,u_d 控制正反转,s 选择细分和不细分,en 控制停和转,y3:0接步进电机的 4 相输入,clk0 和 clk5 为时钟,且 clk5clk0(本课设选clk0=4Hz,clk5=32768Hz) 。设步进电机的 4 相输入分别为 A、B、C、D。细分: cnt32

3、 计数输出 5 位数据送 rom32,rom32 输出 16 位数据分别送new_comp:moto5、moto6、moto7、moto8 的 a3:0端口与 cnt16 计数送来的 4 位数据 b3:0比较。如果 a=b,则 agb=1b1;反之 agb=1b0。由于 clk5clk0,从而 agb 能输出一段占空比稳定的信号(只持续 1 个或多个 clk0 周期) ,即产生 1/4、2/4、3/4 信号。再如果 s 为高电平,则就能实现步进电机的细分输入。- 1 -不细分: 如果 s 为低电平,则 mux2to1 选通由 dec2 送来的非细分信号 dataa3:0,从而实现步进电机的非细

4、分输入。具体模块源程序 1.32 进制可加可减计数器(cnt32)module cnt32(clk,en,u_d,cq);input clk,en,u_d;output 4:0 cq;reg 4:0 cq;always (posedge clk or posedge en)beginif(en)cq=b)agb=1b1;else agb=1b0;Endmodule5.查找表(rom32)通过 MIF 文件调用 LPM 库中的 ROM 产生MIF 文件(文件名为 PWM_1.MIF)为:WIDTH = 16;DEPTH = 32;ADDRESS_RADIX = HEX;DATA_RADIX =

5、HEX;CONTENT BEGIN0 : f000;1 : f600;2 : f900;3 : fc00;4 : ff00;5 : cf00;6 : 9f00;7 : 6f00;8 : 0f00;9 : 0f60;a : 0f90;b : 0fc0;c : 0ff0;d : 0cf0;e : 0af0;f : 06f0;10 : 00f0;11 : 00f6;12 : 00f9;13 : 00fc;- 3 -14 : 00ff;15 : 00cf;16 : 009f;17 : 006f;18 : 000f;19 : 600f;1a : 900f;1b : c00f;1c : f00f;1d :

6、 f00c;1e : f009;1f : f006;END;调用过程为:- 4 - 5 - 6 -生成的 ROM 模块为:/ synopsys translate_offtimescale 1 ps / 1 ps/ synopsys translate_onmodule rom32 (address,clock,q);input 4:0 address;input clock;output 15:0 q;wire 15:0 sub_wire0;wire 15:0 q = sub_wire015:0;altsyncramaltsyncram_component (.clock0 (clock),

7、.address_a (address),.q_a (sub_wire0),.aclr0 (1b0),.aclr1 (1b0),.address_b (1b1),.addressstall_a (1b0),- 7 -.addressstall_b (1b0),.byteena_a (1b1),.byteena_b (1b1),.clock1 (1b1),.clocken0 (1b1),.clocken1 (1b1),.data_a (161b1),.data_b (1b1),.q_b (),.rden_b (1b1),.wren_a (1b0),.wren_b (1b0);defparamal

8、tsyncram_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_compone

9、nt.operation_mode = “ROM“,altsyncram_component.outdata_aclr_a = “NONE“,altsyncram_component.outdata_reg_a = “CLOCK0“,altsyncram_component.widthad_a = 5,altsyncram_component.width_a = 16,altsyncram_component.width_byteena_a = 1;endmodule6.4 位输入 4 位输出 2 选 1 多路选择器(mux2to1)module mux2to1(dataa,datab,sel

10、,result);input 3:0 dataa,datab;input sel;output 3:0 result;reg 3:0 result;always (sel or dataa or datab)if(sel)result=datab;else result=dataa;Endmodule7.顶层模块(setp_moto)module setp_moto(clk0,u_d,clk5,en,s,y);input clk0,clk5,u_d,s,en;output 3:0 y;- 8 -reg 3:0 y;wire 4:0 cq1;wire 3:0 cq2,d;wire 15:0 q;

11、wire agb1,agb2,agb3,agb4;cnt32 moto1(.clk(clk0),.en(en),.u_d(u_d),.cq(cq1);cnt16 moto2(.clk(clk5),.cq(cq2);dec2 moto3(.clk(clk0),.a(cq11:0),.d(d);rom32 moto4(.clock(clk0),.address(cq1),.q(q);new_comp moto5(.a(q15:12),.b(cq2),.agb(agb1);new_comp moto6(.a(q11:8),.b(cq2),.agb(agb2);new_comp moto7(.a(q7

12、:4),.b(cq2),.agb(agb3);new_comp moto8(.a(q3:0),.b(cq2),.agb(agb4);mux2to1 moto9(.sel(s),.dataa(d),.datab(agb1,agb2,agb3,agb4),.result(y);Endmodule结果与分析 上图为不细分时的波形图。由图可以看出,每次 clk0 上升沿输出 y3:0就会发生变化,从而实现步进电机的不细分输入(DAABBCCDDA) 。由于细分时的时钟频率不能调太小(调太小的话,仿真时容易卡机;但如果不调小的话,就产生不了比较好的波形。 ) ,所以这里就不给出细分时的波形图了。通过 Q

13、uartus 产生了正确的 RTL 级电路图(见附录) ,下到 FPGA 实验箱上步进电机实现了细分转动和非细分转动,以及正反转。 (本课设采用 4 细分)心得与体会 虽然我们做得晚,但由于我们理解了电路原理,并且给了我们 VHDL 的源程序,所以我们仅用了 1 天多一点的时间就把 Verilog 程序写出来了,并下载到实验箱上跑。如果不给我们 VHDL 程序的话,我们做得就有可能吃力许多。也有许多人就看不懂 VHDL 程序,幸亏当初我好好学了,那点程度的程序对我来说根本没压力。这也是我们能把 VHDL 程序迅速翻译成 Verilog 程序的一个原因。当然,Verilog 的语法我已经忘了不少

14、,我是边翻译边看书做的。当初 Verilog 实验的时候我就做得很好,并且 Modelsim 也会用,所以我对 Quartus 和Modelsim 很快就上手了。我现在基本上不看书,多亏了本次课设,又让我回顾了以前学过的许多东西,也锻炼了我的动手和分析编程能力。- 9 -当然,我也学到了许多,认识到了自己知识的匮乏,自己还有很多要学的,所学的东西都是皮毛。唯一感到吃力的是 ROM 模块的生成。因为是第一次调用内部模块,我按照老师所给的例子操作总是不能成功,最后请教杨老师,原来是没建工程。老师给的例子就没建工程,导致我也没建工程,究其原因是我太死板了,干什么事都太按部就班了,这点我应当改。MIF 文件是怎么产生的我也不清楚,老师给了我们 MIF 文件,我也就没深研究。虽然不太清楚步进电机是怎么工作的,但我知道它的工作模式分为细分和不细分。细分转得慢,不细分转得快。只有在它的输入状态切换时它才会转过一定的角度,输入状态不变时它就不转。附录: Quartus 综合产生的 RTL 级电路图 - 10 -

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报