ImageVerifierCode 换一换
格式:DOC , 页数:37 ,大小:334.50KB ,
资源ID:11397261      下载积分:12 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/11397261.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(EDA步进电机控制设计.doc)为本站上传会员【快乐****生活】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

EDA步进电机控制设计.doc

1、EDA步进电机控制设计 河南科技大学 课 程 设 计 说 明 书 课程名称 EDA技术 题 目 步进电机控制 学 院 车辆与动力工程学院 班 级 学生姓名 指导教师 日 期

2、 EDA技术课程设计任务书 班级: 姓名: 学号: 设计题目: 步进电机控制 一、设计目的 进一步巩固理论知识,培养所学理论知识在实际中的应用能力;掌握EDA设计的一般方法;熟悉一种EDA软件,掌握一般EDA系统的调试方法;利用EDA软件设计一个电子技术综合问题,培养VHDL编程、书写技术报告的能力。为以后进行工程实际问题的研究打下设计基础。 二、设计任务 (1)控制步进电机的启动和停止; (2

3、控制步进电机的正转和反转; (3)电机速度可调并显示转速; 三、设计要求 (1)通过对相应文献的收集、分析以与总结,给出相应课题的背景、意义与现状研究分析。 (2)通过课题设计,掌握计算机组成原理的分析方法和设计方法。 (3)学习按要求编写课程设计报告书,能正确阐述设计和实验结果。 (4)学生应抱着严谨认真的态度积极投入到课程设计过程中,认真查阅相应文献以与实现,给出个人分析、设计以与实现。 四、设计时间安排 查找相关资料(1天)、设计并绘制系统原理图(2天)、编写VHDL程序(2天)、调试(2天)、编写设计报告(2天)和答辩(1天)。 1.江国强编著. EDA技术与实用(

4、第三版). 北京:电子工业出版社,2011. 2 .曹昕燕,周凤臣.EDA技术实验与课程设计.北京:清华大学出版社,2006.5 3.阎石主编.数字电子技术基础.北京:高等教育出版社,2003. 4.Mark Zwolinski. Digital System Design with VHDL.北京:电子工业出版社,2008 5.Alan B. Marcovitz Introduction to logic Design.北京:电子工业出版社,2003 指导教师签字: 年 月 日

5、 步进电机控制 摘要 随着电子技术的发展,现场可编程门阵列FPGA和复杂可编程逻辑器件CPLD的出现,使得电子系统的设计者利用与器件相应的电子设计软件,在实验室里就可以设计自己的专用集成电路ASIC器件。其中电子设计自动化(EDA)的关键技术之一就是可以用硬件描述语言(HDL)来描述硬件电路。VHDL是用来描述从抽象到具体级别硬件的工业标准语言,它是由美国国防部在80年代开发的HDL,现在已成为IEEE承认的标准硬件描述语言。VHDL支持硬件的设计、验证、综合和测试,以与硬件设计数据的交换、维护、修改和硬件的实现,具有描述能力强、生命周期长、支持大规模设计的分解和已有设计的再利用等

6、优点。利用VHDL这些优点和先进的EDA工具,根据具体的实际要求,将设计一个步进电机控制器电路。 步进电机是一种将电脉冲转化为角位移的执行机构。也就是当步进驱动器接收到一个脉冲信号时,它就驱动步进电机按设定的方向转动一个固定的角度,它的旋转是以固定的角度一步一步运行的。现场可编程门阵列(FPGA)是对步进电机实现一体化控制的理想选择。 目前,步进电机在控制系统中的应用越来越广泛,由此凸现了步进电机控制的重要性。本文简单介绍了步进电机的原理和特点,并根据步进电机的特性设计了基于FPGA的控制电路:以PWM变频来控制步进电机的转速。 关键字:步进电机 电机控制 EDA技术

7、 目录 第一章 绪论 - 4 - 1.1 步进电机简介 - 4 - 1.2 步进电机控制 - 4 - 1.2.1.步进电机的起动: - 4 - 1.2.2.步进电机的换向: - 5 - 1.2.3.步进电机的转速控制: - 6 - 第二章 总体设计 - 6 - 2.1 步进电机驱动电路: - 6 - 2.2 控制模块的设计: - 6 - 2.3 程序流程图: - 7 - 2.4 步进电机控制模块的设计: - 8 - 第三章 系统程序与仿真 - 9 - 3.1 总体设计电路 - 9 - 3.2 程序与仿真波形 - 9 - 第四章 设计结论 - 20 -

8、第五章 参考文献: - 20 - 第一章 绪论 §1.1 步进电机简介 步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。不过步进电机在控制的精度、速度变化范围、低速性能方面都不如传统的闭环控制的直流伺服电动机,在精度不是需要特别高

9、的场合就可以使用步进电机. §1.2 步进电机控制 步进电机能够直接将数字脉冲信号转化成为角位移,不需要A/D 转换,所以被认为是理想的数控执行元件。 §1.2.1.步进电机的起动: 步进电动机的最高起动频率(空载起动频率)一般为0.1KHz到3-4KHz,而最高运行频率则可以达到6KHz。以超过最高起动频率的频率直接起动,将出现"失步"现象,甚至无法起动。因此驱动步进电机时,应当先计算出电机不失步起动的最大频率,但其计算过程涉与参量复杂,鉴于我们对其具体理论了解有限,故不能精确计算出空载起动频率,实际应用对起动段的处理是采用按直线拟合的方法,即"阶梯升速法"。可按两种情

10、 图1.2.1 阶梯升速起动 况处理,①已知突跳频率则按突跳频率分段起动,分段数n=f/fq。②未知突跳频率,则按段拟合至给定的起动频率,每段频率的递增量(后称阶梯频率)△f=f/8,即采用8段拟合。在运行控制过程中,将起始的速度(频率)分为n分作为阶梯频率,采用"阶梯升速法"将速度连续升到所需要的速度,然后锁定,按预置的曲线运行。如图所示。 速度从V1→V2如果是线性增加,则按给定的斜率升/降速;如果是突变,则按"阶梯升速法"处理。在此过程中要处理好两个问题: ①速度转换时间应尽量短;为了缩短速度转换的时间,可以采用建立数据表的方法,结合各曲

11、线段的频率和各段间的阶梯频率便可以建立一个连续的数据表,并通过转换程序将其转换为脉冲速率。通过在不同的阶段调用相应的脉冲速率,控制电机的运行。 ②保证控制速度的精确性;要从一个速度准确达到另外一个速度,就要建立一个校验机制,以防超过或未达到所需速度。 §1.2.2.步进电机的换向: 步进电机通电换相这一过程称为脉冲分配。例如:四相步进电机的八拍工作方式,其各相通电顺序为A-AB-B-BC-C-CD-D-DA-A,通电控制脉冲必须严格按照这一顺序分别控制A、B、C、D相的通断。如果按给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。步进电机换向时,一定要在电机降速停

12、止或降到突跳频率范围之内再换向,以免产生较大的冲击而损坏电机。换向信号一定要在前一个方向的最后一个CP脉冲结束后以与下一个方向的第一个CP脉冲前发出。如图所示。对于CP脉冲的设计主要要求其有一定的脉冲宽度(一般不小于5μs)、脉冲序列的均匀度与高低电平方式. 图1.2.2 换向信号起作用的时刻 §1.2.3.步进电机的转速控制: 步进电机的加/减速控制,实际上就是控制触发脉冲的频率,两个脉冲的间隔长短,决定了步进电机的转速。升速时,使脉冲频率增高,减速时,使脉冲频率降低。调整触发脉冲频率,就可以对步进电机进行调速。 第二章 总体设计 §2.1 步进电机驱动电路:

13、步进电机的驱动电路如图所示,其驱动电路原理很简单。从FPGA出来的脉冲信 图2.1 步进电机驱动电路 号从J1接入按一定的顺序分别接到晶体管Q7~Q10的基极,输出端则有四个相应的信号输出,并接到电机的1、4、3、6脚(注意:电机引出了六根线,只有1、4、3、6才是真正接电机的四相输入,且分别接电机的A、B、C、D相)。设脉冲信号Step1的输入信号是低电平,则输出就为高电平,相应的电机A相导通;反之,则A相不导通。以此类推,其余各相亦是如此。则电机在脉冲序列信号的作用下按预定方向转动,通过改变脉冲序列信号的快慢即频率来控制步进电机转速。 §2.2 控制模块的设计: 总控制模

14、块用VHDL语言对FPGA编程实现。总控制模块其实质是一个按键控制程序,共有reset复位键、add累加键、sub递减键、start/stop启动/停止键、shift电机正反转控制键五个按键。系统启动时,首先运行系统初始化程序,程序先转到步进电机控制模块,送复位信号使步进电机处于初始状态。其间主控程序不断检测按键,只要有键被按下则启动相应的子模块实现实时控制。具体程序代码见附录程序清单。 §2.3 程序流程图: 控制模块的程序流程图如图所示。 图2.3 控制模块程序流程图 §2.4 步进电机控制模块的设计: 步进电机控制模块其程序

15、设计共分按键去抖、变频、测频、步进、换向五个部分。模块一接收到按键信号,则按键去抖部分先对按键信号进行处理,得到稳定的控制信号;如果是变频信号则变频部分动作,通过相位累加模型,改变步进电机脉冲频率,并送给步进部分;如果是换向信号,则换向部分动作,为了使电机降速停止或降到突跳频率范围之内再换向,先停送驱动脉冲一秒,再送反向脉冲给步进部分,驱动电机换向;步进部分则是按照送来的脉冲频率和步进顺序信号驱动电机按预定的转速和转向转动;测频部分通过测定所送脉冲频率,再利用四相电机八拍运行时步距角为θ=360度/(50*8)=0.9度的尺度则可以计算出步进电机的每分钟转速数据,再送给显示模块显示。 第三章

16、 系统程序与仿真 §3.1 总体设计电路 图3.1 总体设计电路接线图 §3.2 程序、程序块与仿真波形 --/*ZTSD.VHD*/--换向模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ztsd IS PORT (clk,key,rst:in STD_LOGIC; --系统时钟/换向按键/复位信号 y:out STD_LOGIC ; --输出

17、 sel:out STD_LOGIC); END ztsd; ARCHITECTURE Behavioral OF ztsd IS SIGNAL sel1:STD_LOGIC; BEGIN PROCESS(key,clk,rst) --产生换向延时秒脉冲 VARIABLE cnt:integer range 0 to 32000000; BEGIN IF rst='0' THEN cnt:=0; ELSIF key='1' THEN cnt:=0; ELSE IF rising_edge(clk) THEN IF cnt<32000000 TH

18、EN cnt:=cnt+1;y<='0'; ELSE cnt:=32000000;y<='1'; END IF; END IF; END IF; END PROCESS; PROCESS(key,sel1,rst) BEGIN IF rst='0' THEN sel1<='1'; ELSIF rising_edge(key) THEN sel1<=not sel1; END IF; sel<=sel1; END PROCESS; END Behavioral; 图3.2.1 图3.2.2 --/*STEP_MOTO

19、R.VHD*/--步进电机控制脉冲产生模块 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 ( clk,rst : in STD_LOGIC; --系统时钟/复位信号 sel : in STD_LOGIC; --正反转切换键 clkkk:out STD_LOGIC; --步进电机步进脉冲 control:out STD

20、LOGIC_VECTOR(3 DOWNTO 0)); --步机电机四相输出 END step_motor; ARCHITECTURE Behavioral OF step_motor IS SIGNAL clkk:STD_LOGIC; TYPE step IS array (0 to 7) OF STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(clk,rst) --电机运转脉冲分频模块 VARIABLE cnt:integer range 0 to 1499999; BEGIN IF rst='0' THEN cnt:=0;

21、 ELSIF clk'EVENT AND clk='1' THEN IF cnt>=7 THEN clkk<=not clkk;cnt:=0; ELSE cnt:=cnt+1; END IF; END IF; END PROCESS; clkkk<=clkk; PROCESS(clkk,sel,rst) --控制脉冲产生模块 VARIABLE index:integer range 0 to 7:=0; VARIABLE eight_step:step; BEGIN eight_step(0):= "0001"; eight_step(1):=

22、"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"; IF rst='0' THEN index:=0; ELSIF rising_edge(clkk) THEN IF sel='1' THEN IF index<=6 THEN index:=index+1; ELSE index:=0;

23、 END IF; ELSE IF index>=1 THEN index:=index-1; ELSE index:=7; END IF; END IF; control<=eight_step(index); END IF; END PROCESS; END Behavioral; 图3.2.3 图3.2.4 --/*CEPIN.VHD*/--测频模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE

24、STD_LOGIC_UNSIGNED.ALL; ENTITY cepin IS PORT (clk,clk1,rst:in STD_LOGIC; --系统时钟/输入被测脉冲/复位信号 shift:out STD_LOGIC_VECTOR(3 DOWNTO 0); --数码管位选信号 data_led:out STD_LOGIC_VECTOR(7 DOWNTO 0) ); --七段数码管 END cepin; ARCHITECTURE Behavioral OF cepin IS SIGNAL count,d2:STD_LOGIC_VECTOR(15

25、 DOWNTO 0):=(others=>'0'); SIGNAL clkkk:STD_LOGIC; SIGNAL clkk:STD_LOGIC:='0'; SIGNAL data_ledin:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN cepin:block --测频模块 BEGIN PROCESS(clk,rst) VARIABLE cnt:integer range 1 to 32000000; BEGIN IF rst='0' THEN cnt:=1; ELSIF rising_edge(clk) THEN IF c

26、nt>=32000000 THEN clkk<=not clkk; cnt:=1; ELSE cnt:=cnt+1; END IF; END IF; END PROCESS; PROCESS(clkk,clk1,rst) VARIABLE cnt:STD_LOGIC_VECTOR(15 DOWNTO 0):=(others=>'0'); VARIABLE cnt1:integer range 0 to 399; BEGIN IF rst='0' THEN cnt:=(others=>'0');cnt1:=0; ELSIF ris

27、ing_edge(clk1) THEN IF clkk='1' THEN IF cnt1<399 THEN cnt1:=cnt1+1; ELSE cnt1:=0; IF cnt(3 DOWNTO 0)<9 THEN cnt(3 DOWNTO 0):=cnt(3 DOWNTO 0)+1; ELSE cnt(3 DOWNTO 0):="0000"; IF cnt(7 DOWNTO 4)<9 THEN cnt(7 DOWNTO 4):=cnt(7 DOWNTO 4)+1; ELSE cnt(7 DOWNTO 4):

28、"0000"; IF cnt(11 DOWNTO 8)<9 THEN cnt(11 DOWNTO 8):=cnt(11 DOWNTO 8)+1; ELSE cnt(11 DOWNTO 8):="0000"; IF cnt(15 DOWNTO 12)<9 THEN cnt(15 DOWNTO 12):=cnt(15 DOWNTO 12)+1; ELSE cnt(15 DOWNTO 12):="0000"; END IF; END IF; END IF;

29、 END IF; END IF; ELSE cnt:=(others=>'0') ; END IF; END IF; count<=cnt; END PROCESS; END block; PROCESS(clkk) BEGIN IF clkk'EVENT AND clkk='0' THEN d2<=count; END IF; END PROCESS; PROCESS(clk,rst) VARIABLE cnt:integer range 0 to 79999:=0; BEGIN IF rst='0' THEN

30、 cnt:=0; ELSIF rising_edge(clk) THEN IF cnt=79999 THEN clkkk<=not clkkk;cnt:=0; ELSE cnt:=cnt+1; END IF; END IF; END PROCESS; disp:block --转速显示模块 BEGIN PROCESS(clkkk,d2,rst) VARIABLE cnt:STD_LOGIC_VECTOR(1 DOWNTO 0):="00"; BEGIN IF rst='0' THEN cnt:="00";shift<="1111";data_

31、ledin<="1111"; ELSIF rising_edge(clkkk) THEN case cnt IS WHEN "00"=>shift<="1110"; data_ledin<=d2(3 DOWNTO 0); cnt:=cnt+1; WHEN "01"=>shift<="1101"; data_ledin<=d2(7 DOWNTO 4); cnt:=cnt+1; WHEN "10"=>shift<="1011"; data_led

32、in<=d2(11 DOWNTO 8); cnt:=cnt+1; WHEN "11"=>shift<="0111"; data_ledin<=d2(15 DOWNTO 12); cnt:="00"; WHEN others=>shift<="1111";cnt:="00"; END case; END IF; END PROCESS; END block; yima:block BEGIN PROCESS (data_ledin) --译码 BEGI

33、N case data_ledin IS WHEN"0000"=>data_led<="11000000";--0 WHEN"0001"=>data_led<="11111001";--1 WHEN"0010"=>data_led<="10100100";--2 WHEN"0011"=>data_led<="10110000";--3 WHEN"0100"=>data_led<="10011001";--4 WHEN"0101"=>data_led<="10010010";--5 WHEN"0110"=>d

34、ata_led<="10000010";--6 WHEN"0111"=>data_led<="11111000";--7 WHEN"1000"=>data_led<="10000000";--8 WHEN"1001"=>data_led<="10010000";--9 WHEN others=>data_led<="11111111";--No SIGNAL; END case; END PROCESS; END block; END Behavioral; 图3.2.5 图3.2.6 --/*BIANPIN.VHD

35、/--变频模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY bianpin IS PORT (rst,clk,sub,add:in STD_LOGIC; --复位信号/系统时钟/减速输入/加速输入 count:out STD_LOGIC ); --已变频率输出 END bianpin; ARCHITECTURE Behavioral OF bianpin IS

36、 SIGNAL con:integer range 1 to 100:=50; SIGNAL clkk:STD_LOGIC:='0'; SIGNAL cnt1:integer range 0 to 1100; BEGIN PROCESS(clkk,add,sub,rst) --加减键处理模块 VARIABLE con1:integer range 1 to 100:=50; BEGIN IF rst='0' THEN con1:=1; ELSIF clkk'EVENT AND clkk='1' THEN IF add='0' THEN IF con1

37、<=99 THEN con1:=con1+1; END IF; ELSIF sub='0' THEN IF con1>=2 THEN con1:=con1-1; END IF; END IF; END IF; con<=con1; END PROCESS; PROCESS(clk,rst) --产生按键检测频率 VARIABLE cnt:integer range 0 to 1499999; BEGIN IF rst='0' THEN cnt:=0; ELSIF clk'EVENT AND clk='1' THEN

38、 IF cnt>=1499999 THEN clkk<=not clkk;cnt:=0; ELSE cnt:=cnt+1; END IF; END IF; END PROCESS; PROCESS(clk,con,cnt1,rst) --变频模块 BEGIN IF rst='0' THEN cnt1<=0; ELSIF rising_edge(clk) THEN IF cnt1>=1000 THEN cnt1<=0;count<='0'; ELSIF cnt1<=con THEN count<='1';cnt1<=cnt1+con;

39、 ELSE count<='0';cnt1<=cnt1+con; END IF; END IF; END PROCESS; END Behavioral; 图3.2.7 图3.2.8 --/*ANJIANQD.VHD*/--按键去抖模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY anjianqd IS PORT (clk,key:in STD_

40、LOGIC;--系统时钟/输入按键 keyo:out STD_LOGIC );--输出按键 END anjianqd; ARCHITECTURE Behavioral OF anjianqd IS SIGNAL clkk,dly,ndly,dIFf:STD_LOGIC; BEGIN PROCESS(clk) VARIABLE cnt:integer range 1 to 256000; BEGIN IF clk'EVENT AND clk='1' THEN IF cnt>=2 THEN cnt:=1; clkk<='1'; ELSE cnt:=c

41、nt+1;clkk<='0'; END IF; END IF; END PROCESS; debunce:block SIGNAL d0,d1,s,r:STD_LOGIC; BEGIN PROCESS(clk) BEGIN IF clk'EVENT AND clk='1' THEN IF clkk='1' THEN d1<=d0;d0<=key; s<=d0 and d1; r<=not d0 and not d1; END IF; END IF; END PROCESS; dly<=r nor ndly; n

42、dly<=s nor dly; END block; differetial:block SIGNAL d1,d0:STD_LOGIC; BEGIN PROCESS(clk) BEGIN IF clk'EVENT AND clk='1' THEN d1<=d0;d0<=dly; END IF; END PROCESS; diff<=d0 and not d1; END block; keyo<=diff; END Behavioral; 图3.2.9 图3.2.10 --/STEP_TOP.VHD*/--步进电机控制模块

43、LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY step_top IS PORT (clk,add,sub,sel,rst,startstop:in STD_LOGIC;--时钟/加键/减键/换向键/复位/起止键 step:out STD_LOGIC_VECTOR(3 DOWNTO 0); --步进电机四相输出 shift:out STD_LOGIC_VECTOR(3 DOWNTO

44、 0); --数码管位选 data_led:out STD_LOGIC_VECTOR(7 DOWNTO 0) );--七段数码管 END step_top; ARCHITECTURE Behavioral OF step_top IS component anjianqd IS PORT (clk,key:in STD_LOGIC; keyo:out STD_LOGIC ); END component anjianqd; component bianpin IS PORT (clk,sub,add,rst:in STD_LOGIC

45、 count:out STD_LOGIC ); END component bianpin; component step_motor IS PORT ( clk,rst : in STD_LOGIC; sel : in STD_LOGIC; clkkk:out STD_LOGIC; control:out STD_LOGIC_VECTOR(3 DOWNTO 0)); END component step_motor; component ztsd IS PORT (clk,key,rst:in ST

46、D_LOGIC; y:out STD_LOGIC ; sel:out STD_LOGIC); END component ztsd; component cepin IS PORT (clk,clk1,rst:STD_LOGIC; shift:out STD_LOGIC_VECTOR(3 DOWNTO 0); data_led:out STD_LOGIC_VECTOR(7 DOWNTO 0) ); END component cepin; SIGNAL sel1,ss,sel2,count1,y1,y2,startstop1:ST

47、D_LOGIC; SIGNAL step1,step2:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN u1:anjianqd PORT MAP (clk=>clk,key=>sel,keyo=>sel1); u2:bianpinPORTMAP(clk=>clk,sub=>sub,add=>add,count=>count1,rst=>rst); u3:step_motorPORTMAP(clk=>count1,sel=>sel2,clkkk=>y2,control=>step1,rst=>rst); u4:ztsd PORT MAP (clk=>clk

48、key=>sel1,y=>y1,sel=>sel2,rst=>rst); u5:cepinPORTMAP(clk=>clk,clk1=>y2,shift=>shift,data_led=>data_led,rst=>rst); u6:anjianqd PORT MAP (clk=>clk,key=>startstop,keyo=>startstop1); step2(3)<=step1(3) and y1; step2(2)<=step1(2) and y1; step2(1)<=step1(1) and y1; step2(0)<=step1(0) and y1; step(

49、3)<=step2(3) and ss; step(2)<=step2(2) and ss; step(1)<=step2(1) and ss; step(0)<=step2(0) and ss; PROCESS(rst,startstop1) --启动/停止模块 VARIABLE cnt:STD_LOGIC; BEGIN IF rst='0' THEN cnt:='0'; ELSIF rising_edge(startstop1) THEN cnt:=not cnt; END IF; case cnt IS WHEN '0'=>ss<='0';

50、 WHEN '1'=>ss<='1'; WHEN others=>null; END case; END PROCESS; END Behavioral; 图3.2.11 图3.2.12 正转运行波形仿真 图3.2.13 反转运行仿真波形 第四章 总结 本文介绍了用VHDL语言设计的一种步进电机控制器,根据仿真波形的分析,基本达到了设计初的要求,能完成步进电机两种工作模式的选择,实现步进电机正、反、停的要求,可以实现步进电机频率的控制。可见利用EDA软件可以缩短设计周期,是一种快捷方便的电路设计方法。 步进电机控制相对简单,但要处理好启动、换向时的加

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服