2022年步进电机定位控制系统方案.docx
精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用同学学号课程设计题目 步进电机定位掌握系统设计 学 院 信息工程学院 专业 班级 姓名 指导老师20222022 学年6 月20 日名师归纳总结 - - - - - - -第 1 页,共 17 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用课程设计任务书同学姓名:专业班级:指导老师:工作单位:题目:步进电机定位掌握系统设计初始条件:1. 具备电子电路的基础学问及查阅资料和手册的才能;2. 熟识 ISE 仿真软件的操作与运用;3. 把握步进电机的工作原理;要求完成的主要任务 : 1. 设计一个基于 FPGA 的 4 相步进电机定位掌握系统,包括步进电机方向设定电路模块、步进电机步进移动与定位掌握模块和编码输出模块;2.撰写符合学校要求的课程设计说明书;时间支配:1、2022 年 06 月 11 日,布置课设详细实施方案与课程设计报告格式的要求说明;2、2022 年 06月 12日 至 2022年 06 月 17 日,设计说明书撰写;3、2022年 06 月 18日,上交课程设计成果及报告,同时进行答辩;名师归纳总结 指导老师签名:年 月 日第 2 页,共 17 页系主任 <或责任老师)签名:年 月 日- - - - - - -精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用目录摘要 . II Abstract . II 1 设计目标及简介 . 1.1设计目标 . 1.2 步进电机简介 . 2 VHDL 语言介绍 . 3 Quartus 介绍 . 4 系统组成 . 4.1 四相步进电机工作原理 . 22 4.2 系统组成 . 5 模块设计 . 5.1 FPGA模块图及信号说明 . 44 5.2 系统模块构成 . 5.3 各模块间整体共享的电路内部传递信号. 555.4 电机方向设定电路模块 . 555.5 步进电机步进移动与定位掌握模块. 665.6 编码输出模块 . 6 程序设计与仿真 . 名师归纳总结 7 仿真结果 . 1010第 3 页,共 17 页8 试验总结 . 1212参考文献 . 1212- - - - - - -精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用摘要 在分析了步进电机工作原理的基础上,提出了步进电机定位掌握系统的模 块划分和实现方法;以步进电机四相四拍工作方式为例,用 Verilog 编程在Altera 公司的 FPGA 开发系统中实现了各功能模块和显示程序;在系统仿真的 基础上,进行了功能模块的掌握试验,试验结果和仿真一样,实现了对步进电 机模组的预定掌握;关键词:步进电机定位掌握 Verilog 硬件描述语言 FPGA Abstract On the basis of analysing stepping motors operational principle , we put forward modules division and realizing method of positioning control system which using stepping motor.Giving an example such as stepping motors which work in Four-phase-four-step mode , we use Verilog programming realized every foundational module and display routine in Altera s FPGA development system.On the basis of system simulation , we conduct a controlling experiment about foundational modules,the results are the same as simulation s results.We carried out the expected control about stepping motor.Keyword:stepping motor positioning control VHDL FPGA名师归纳总结 - - - - - - -第 4 页,共 17 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用1 设计目标及简介 1.1 设计目标 设计一个基于 FPGA 的 4 相步进电机定位掌握系统;1.2 步进电机简介 步进电机是将电脉冲信号转变为角位移或线位移的开环掌握元件;在非超 载的情形下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而 不受负载变化的影响,即给电机加一个脉冲信号,电机就转过一个步距角;这 一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点;使 得在速度、位置等掌握领域用步进电机来掌握变的特别的简洁;2 VHDL 语言介绍 VHDL 的 英 文 全 名 是Very-High-Speed Integrated Circuit Hardware Description Language,产生于 1982 年;1987 年底, VHDL 被 IEEE 和美国国防 部确认为标准硬件描述语言;VHDL 主要用于描述数字系统的结构,行为,功能和接口;除了含有很多具有硬件特点的语句外,VHDL 的语言形式和描述风格与句法是特别类似于一般的运算机高级语言;VHDL 的程序结构特点是将一项工程设计,或称设计实体<可以是一个元件,一个电路模块或一个系统)分成外部<或称可视部分,及端口)和内部 <或称不行视部分),既涉及实体的内部功能和算法完成部分;在 对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可 以直接调用这个实体;这种将设计实体分成内外部分的概念是 VHDL 系统设计的基本点;VHDL 语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必定具有很多其他硬件描述语言所不具备的优点;归纳起来,VHDL 语言主要具有功能强大,设计方式多样;硬件描述才能强大;具有很强的移植才能;设计描 述与器件无关程序易于共享和复用等优点;3 Quartus 介绍Quartus II 是 Altera 公司的综合性PLD/FPGA 开发软件,支持原理图、VHDL 、VerilogHDL 以及 AHDL<Altera Hardware Description Language )等多种 设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配 置的完整 PLD 设计流程;名师归纳总结 Quartus II 可以在 XP、Linux 以及 Unix 上使用,除了可以使用Tcl 脚本完第 5 页,共 17 页- - - - - - -精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用成设计流程外,供应了完善的用户图形界面设计方式;具有运行速度快,界面统一,功能集中,易学易用等特点;Quartus II 供应了完全集成且与电路结构无关的开发包环境,具有数字规律设计的全部特性,包括:可利用原理图、结构框图、VHDL 完成电路描述,并将其储存为设计实体文件;芯片VerilogHDL 、AHDL 和 <电路)平面布局连线编辑; LogicLock 增量设计方法,用户可建立并优化系统,然后添加对原始系统 的性能影响较小或无影响的后续模块;功能强大的规律综合工具;完备的电路功能仿真与时序规律仿真工具;定时/时序分析与关键路径延时分析;可使用SignalTap II 规律分析工具进行嵌入式的规律分析;支持软件源文件的添加和创 建,并将它们链接起来生成编程文件;使用组合编译方式可一次完成整体设计 流程;自动定位编译错误;高效的期间编程与验证工具;可读入标准的 EDIF 网表文件、 VHDL 网表文件和 Verilog 网表文件;能生成第三方 EDA 软件使用 的 VHDL 网表文件和 Verilog 网表文件;4 系统组成 4.1 四相步进电机工作原理 步进电机是利用数字信号掌握的电机装置,步进电机每次接收到一组脉冲 数字信号,便旋转一个角度,称为步进角;不同规格的步进电机的步进角不同,与电动机内部的线圈数量有关;线圈中的供应电流打算线圈所产生的磁场方向;4 相步进电机有两组线圈A 和 B,如图 4.1 所示, A、B 两组垂直摆放线圈的电流方向的排列组合,最多可以产生8 种磁场方向,分别是0o、45o、90o、135o、180o、225o、270o、315o;名师归纳总结 - - - - - - -第 6 页,共 17 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用图 4.1 四相步进电机由表 4.1 可以知,假设电动机转子刻度在 0o的位置,想让其转 180o,可以使端口信号依次按 0001,0011,0010,0110 到 0100 变化;留意:四相电动机有1 相激磁法、 2 相激磁法和 1-2 相混合激磁法 3 种激磁方式;不同的激磁方式,端口信号的次序是不同的;表 4.1 四相步进电机的8 个方向和电流以及电压信号的关系该步进电机为一四相步进电机,采纳单极性直流电源供电;只要对步进电 机的各相绕组按合适的时序通电,就能使步进电机步进转动;图 4.2 是该四相反应式步进电机工作原理示意图;图 4.2 四相步进电机步进示意图开头时,开关SB 接通电源, SA、SC、SD 断开, B 相磁极和转子0、3 号齿对齐,同时,转子的1、4 号齿就和 C、D 相绕组磁极产生错齿, 2、5 号齿就和 D、A 相绕组磁极产生错齿;当开关 SC接通电源, SB、SA、SD 断开时,由于 C 相绕组的磁力线和 1、4 号齿之间磁力线的作用,使转子转动,1、4 号齿和 C 相绕组的磁极对齐;而0、3 号齿和 A、B 相绕组产生错齿, 2、5 号齿就和 A、D 相绕组磁极产生错齿;名师归纳总结 依次类推, A、B、C、 D 四相绕组轮番供电,就转子会沿着A、B、C、D 方向第 7 页,共 17 页- - - - - - -精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用转动;四相步进电机根据通电次序的不同,可分为单四拍、双四拍、八拍三种工作方式;单四拍与双四拍的步距角相等,但单四拍的转动力矩小;八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高掌握精度;四相四拍运行方式即 AB-BC-CD-DA-AB ,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A;单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图 4.3 的 a、b、c 所示;图 4.3a 单四拍图 4.3b 双四拍图 4.3c 八拍4.2 系统组成图 4.4 系统组成5 模块设计5.1 FPGA 模块图及信号说明名师归纳总结 - - - - - - -第 8 页,共 17 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用图 5.1 FPGA 模块图reset:系统内部复位信号, 1时有效;dir:步进电机正反转的方向掌握开关,0:逆时针, 1:顺时针;clk:由 FPGA 内部供应的 4MHz 的时钟信号;ini: 赋初值的使能开关, 0时有效;manner:激磁方式的挑选开关两位>, 00:自动检测角度输入,打算激磁方式 01:1-相激磁; 10:2.相激磁; 11:1-2.相激磁 . angle:步进角的倍数设定输入键 . baba:将内部计数器的 count3 downto 0的数值编码输出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 2 2 angle=2n 时 0 名师归纳总结 01 0 2 2 第 9 页,共 17 页- - - - - - -精选学习资料 - - - - - - - - - 10 -1 2 个人资料整理仅限学习使用2 11 0 1 1 表 5.1 dir 为 0 时dir 为 1 时,步进电机工作于顺时针旋转模式,累加值为负数;manner 挑选激磁方式 00、01、10、11 分别对应默认激磁方式、1-相激磁方式、 2.相激磁方式和 1-2.相激磁方式;如表 5.2;manner cntini cntinc angledncntdec 00 angle=2n+1时1 -2 2 angle=2n 时 0 01 0 -2 2 10 -1 -2 2 11 0 -1 1 表 5.2 dir 为 1 时5.5 步进电机步进移动与定位掌握模块该模块的主要功能是利用赋初值ini 将数值传到该模块中并协作输入的clk作为同步掌握信号,进行步进电机的步进移动与定位掌握;步进电机定位功能通过一个减法器实现:在每个clk 脉冲上升缘,设定步进角倍数angledncount 减去不同激磁方式下设定的累减记数值angledncntdec,判定差值小于设定的累减记数时,步进电机旋转到预定角度停止输出驱动端口信号,实现步进电机的定位功能;驱动端口信号利用累加器实现;名师归纳总结 - - - - - - -第 10 页,共 17 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用5.6 编码输出模块该模块的功能是将count 与 angledncount 产生的数值经过编码,并通过baba3downto0输出到步进电机;6 程序设计与仿真 library IEEE ;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;entity step_motor is port reset:in STD_LOGIC; -系统复位信号 dir: in STD_LOGIC ; -方向掌握信号 clk: in STD_LOGIC ; -系统时钟信号 ini: in STD_LOGIC ; -初始化使能信号 manner: in STD_LOGIC_VECTOR 1 downto 0>; -激磁方式的挑选开关 angle: in INTEGER range 255 downto 0; -步进角的倍数设定输入 baBA: out STD_LOGIC_VECTOR 3 downto 0>> ; -步进电机状态输出 end step_motor;architecture stepmotor_arch of step_motor is signal count: INTEGER range 0 to 7; -计数器 signal cntInc: INTEGER range -2 to 2 ; -设定累加器所需的累 <加/减)计数 值signal cc : integer range 0 to 3;signal cntIni: INTEGER range -1 to 0; -设定累加器所需的计数初值 signal angleDnCount: INTEGER range 255 downto 0 ; - 运算已经转过的步 进角signal angleDnCntDec: INTEGER range 2 downto 1;begin processdir, manner, angle>-, ini> begin -if ini='1' then 名师归纳总结 - - - - - - -第 11 页,共 17 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用 cc<=conv_integermanner>; if dir='0' then case cc is when 1 => - 1- -count<=0; cntIni<=0; cntInc<=2; angleDnCntDec<=2;-"10"; when 2 => - 2- -count<=7; cntIni<=-1; cntInc<=2; angleDnCntDec<=2;-"10"; when 3 => - 1-2 -count<=0; cntIni<=0; cntInc<=1; angleDnCntDec<=1;-"01"; when 0 => -manner="00" autodetect if angle rem 2> =1 then - 2- -count<=7; cntIni<=-1; cntInc<=2; angleDnCntDec<=2;-"10" ; else - 1- -count<=0; cntIni<=0; cntInc<=2; angleDnCntDec<=2;-"10" ; end if; -angle end case; -manner else - if dir='1' case cc is when 1 => - 1- -count<=0;名师归纳总结 - - - - - - -第 12 页,共 17 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用 cntIni<=0; cntInc<=-2; angleDnCntDec<=2;-"10"; when 2 => - 2- -count<=7; cntIni<=-1; cntInc<=-2; angleDnCntDec<=2;-"10"; when 3 => - 1-2 -count<=0; cntIni<=0; cntInc<=-1; angleDnCntDec<=1;-"01"; when 0 => -manner="00" autodetect if angle rem 2> = 1 then - 2- cntIni<=-1; cntInc<=-2; angleDnCntDec<=2;-"10" ; else - 1- cntIni<=0; cntInc<=-2; angleDnCntDec<=2;-"10" ; end if; -angle end case; -manner end if; - else dir=0 -end if; - ini end process; counting_reset: processreset,ini , angle, clk> begin if reset='1' then count<=0; angleDnCount<=0; elsif clk'event and clk='1' then if ini='0' then 名师归纳总结 - - - - - - -第 13 页,共 17 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用 count<=0+cntIni; angleDnCount<=angle; else count <= count+cntInc; if angleDnCount > angleDnCntDec then angleDnCount <= angleDnCount-angleDnCntDec; else angleDnCount <= 0; end if; end if; end if; end process; baBA <="0000" when angleDnCount=0 else "0001" when count=0 else "0011" when count=1 else "0010" when count=2 else "0110" when count=3 else "0100" when count=4 else "1100" when count=5 else "1000" when count=6 else "1001";- when count>=7;end stepmotor_arch;7 仿真结果名师归纳总结 - - - - - - -第 14 页,共 17 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用图 7.1 编译结果图 7.2 时序仿真部分结果名师归纳总结 - - - - - - -第 15 页,共 17 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用图 7.3 时序仿真结果8 试验总结 本文所设计的步进电机掌握系统实现简洁,编程简洁,所设计系统实现了对电机模组的预定掌握,较好的完成了设计要求;采纳Verilog 和 FPGA 设计,能够缩短设计周期,并使设计易于调试、实现;在系统需升级时,仅需对 FPGA 模块再设计,成本较低;从仿真结果来看,利用FPGA 芯片严谨的基于硬件的编程语言和精确的时间掌握特点,精确地实现了精确定位功能,并利用直接频率合成理论中的相位 累加器的原理同时实现了对步进电机的运行速度的精确掌握;实践证明,这种方法定位精确,掌握速度精确,是一种行之有效的方案;参考文献名师归纳总结 1 通信原理樊昌信张甫翊徐炳祥吴成柯著国防工业出版社 2022.1 第 16 页,共 17 页2 EDA 技术使用教程 VHDL 版潘松黄继业编著科学出版社 2022.6 - - - - - - -精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用本科生课程设计成果评定表 姓名 性别 专业、班级 课程设计题目:步进电机定位掌握系统设计 课程设计答辩或质疑记录:1、步进电机的拍数是指什么?n 表示,或指电机转 答:拍数指完成一个磁场周期性变化所需脉冲数或导电状态用 过一个齿距角所需脉冲数;以四相电机为例,有四相四拍运行方式即 方式即 A-AB-B-BC-C-CD-D-DA-A;2、各个输入信号的作用是什么?答: reset:系统内部复位信号, 1时有效;AB-BC-CD-DA-AB ,四相八拍运行dir:步进电机正反转的方向掌握开关,0:逆时针, 1:顺时针;clk:由 FPGA 内部供应的 4MHz 的时钟信号;ini: 赋初值的使能开关, 0时有效;manner:激磁方式的挑选开关两位 >, 00:自动检测角度输入,打算激磁方式01:1-相激磁; 10:2.相激磁; 11:1-2.相激磁 . angle:步进角的倍数设定输入键 . 成果评定依据:最终评定成果 <以优、良、中、及格、不及格评定)指导老师签字:年月日名师归纳总结 - - - - - - -第 17 页,共 17 页