《2022年步进电机角度控制系统的VHDL设计 .pdf》由会员分享,可在线阅读,更多相关《2022年步进电机角度控制系统的VHDL设计 .pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、步进电机角度控制系统的VHDL 设计20世纪80年代后期,美国国防部开发的 VHDL 语言(VHSIC硬件描写语言,VHSIC是非常高度迅速综合的电路的缩写)是IEEE标准化的硬件描述语言,并且已经成为系统描述的国际公认标准,得到众多EDA 公司的支持。其设计描述可以是描述电路具体组成的结构描述,也可以是描述电路功能的行为描述.这些描述可以从最抽象的系统级直到最精确的逻辑级,甚至门级。传统的电子设计技术通常是自底向上的,即首先确定构成系统的最底层的电路模块或元器件的结构和功能,然后根据主系统的功能要求,将它们组合成更大的功能块,使它们的结构和功能满足高层系统的要求10。以此流程,逐步向上递推,
2、直至完成整个目标系统设计。而在“自顶向下”的设计中,首先需要进行行为设计。接着进行结构设计,根据该电子系统或芯片的特点,将其分解为接口清晰、相互关系明确、尽可能简单的子系统,得到一个总体结构。下一步是把结构转换成逻辑图,即进行逻辑设计。接着进行电路设计,逻辑图将进一步转化成电路图。在很多情况下,这时需进行硬件仿真,以最终确定逻辑设计的正确性。最后是进行版图设计,即将电路图转化成版图。在本设计中采用的是自顶向下的设计方法,首先从系统功能设计开始,对系统高层模块进行行为描述和功能仿真.系统的功能验证完成后,将抽象的高层设计自顶向下逐级细化,直到与所用可编程逻辑器件相对应的逻辑描述。在本设计中,具有
3、 4个模块:1)单步运行模块:控制步进电机单步运行。实现的方式就是当按下单步运行按键时步进电机就转动一个角度,按两下转动两个角度,简明的说就按几下单步运行按键步进电机就转动几个角度。2)角度定位控制模块:控制步进电机的角度,就是当你需要它转几个角度时,通过此程序能实现它就转几个角度。3)正、反转控制模块:实现步进电机的能朝两个方向的运行。4)转速控制模块:对步进电机运行快、慢的控制。下面具体介绍各个部分的设计。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 11 页 -3.1 单步运行模块(1)实体图图 3-1 单步运行实体图danbu:控制单步运行的,当按下此键时,步进电机电机
4、就转一步,不按时就停止不转。clk:脉冲信号。phase3.0:输出信号。(2)单步运行的 VHDL 设计为了实现步进电机的单步运行的要求,CPLD要能够产生一种信号,例如当danbu 为1时产生 phase(3)phase(2)phase(1)phase(0)依次为高电平之后使输出信号为零,当 danbu 再次为1时才产生信号。也就是当按下 danbu键时,步进电机就转一个角度;反之,步进电机就停止不转。主要程序如下:.architecture arc1 of danbu is type states is(s0,s1,s2,s3,s4);-中间变量的定义signal current_sta
5、te:states;begin 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 11 页 -process(clk)begin if clkevent and clk=1 then if danbu=1 then current_state current_state current_state current_state current_state current_state phase phase phase phase phase=0000;end case;end process;end architecture arc1;名师资料总结-精品资料欢迎下载-名师精心整理-第
6、 3 页,共 11 页 -(3)仿真波形图图 3-2 单步运行仿真波形由此波形可知,当输入danbu为1时,则分别给步进电机的ABCD四相依次加一个脉冲,就能使步进电机转一个角度。满足我的设计要求。3.2 角度控制模块(1)实体图图 3-3 角度控制实体图clk2:时钟脉冲;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 11 页 -d4.0:控制步进电机运行的角度;ena1:当 ena1=1时,输入才有效;ena2:使能信号;dir:控制步进电机的运行方向;phase3.0:输出信号;mai:U1 的作用是产生逐个脉冲来控制步进电机,实现步进电机的角度控制。stepmotor:
7、U2 的作用是产生能够使步进电机运行的信号。(2)角度控制的 VHDL 设计为了实现步进电机按照所要求的步数运行(角度控制),CPLD 必须能够将连续的脉冲通过一定的实现将其化为逐个脉冲送出11,此电路的具体实现方法如下:当发送步进脉冲使能信号ena(上升沿有效)时,CPLD 将设置的运行的步进脉冲数送入到二进制减法计数器的预置数端,允许频率发生器的脉冲输出直接送到步进电机脉冲发生器的脉冲输出端上,并对频率发生器输出的脉冲信号clk 进行减计数。当计数器计到零时,产生一个封锁信号flag,封锁频率发生器的输出脉冲,使得此时的脉冲输出为低电平。当下一个启动命令到来时,再次通过步进脉冲使能信号启动
8、,完成下一次的控制。脉冲发生器的 VHDL 设计如下:entity mai is-实体端口定义port(d:in std_logic_vector(4 downto 0);ena,clk0:in std_logic;clkout:out std_logic);end mai;architecture one of mai is signal qout:std_logic_vector(4 downto 0);-中间变量的定义signal flag:std_logic;begin process(clk0,ena)begin 名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 11 页
9、 -if ena=1 then qout 0)then qout=qout-1;elsif qout=00000 then qout=qout;end if;end if;end process;process(qout)-产生封锁步进脉冲的信号begin if qout=00000 then-当计数器减计数到0 时封锁信号有效flag=0;else flag=1;-到下一个预置数到来时解除封锁clkout=not clk0;end if;end process;end one;(3)仿真波形图 3-4 脉冲发生器的仿真波形此波形是在Quartus 仿真平台下进行的仿真,步进电机的频率为10K
10、HZ,名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 11 页 -脉冲个数为四位二进制数,上图分别给出了脉冲个数为5、9 时的仿真波形,当输入 d4.0为 5时,输出 clkout就输出 5 个脉冲;当输入 d4.0为 9 时,输出 clkout就输出 9 个脉冲。由此可见,能实现设计的要求。3.3 正、反转控制模块(1)实体框图图 3-5 正、反转控制实体图clk:时钟信号reset:复位信号dir:方向控制信号phase3.0:输出信号给步进电机(2)正、反转控制的VHDL 设计为了使步进电机按照要求实现正、反两个方向运行,CPLD必须能够产生两个不同 方向 的信号,例如 当
11、dir为 1 时产 生的是phase(3)phase(2)phase(1)phase(0)依次为高电平,当dir 为0时产生的是phase(0)phase(1)phase(2)phase(3)依次为高电平,两者相反,将此信号送给步进电机 A、B、C、D 四相就能实现步进电机的正反转。该控制电路的输入信号有3 个:时钟信号 clk、复位信号 reset和方向控制信号 dir。输出信号为 phase3.0,用来控制步进电机的动作12。名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 11 页 -S4S2S3S110101010图 3-6 步进电机控制器的状态图S0S3S1S2状态输出信
12、号 phase3.00001100000100100图 3-7 步进电机状态与输出信号的对应关系具体程序见附录。(2)仿真波形图 3-8 正、反转控制仿真波形名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 11 页 -由波形可知,当 dir 为 1 时,输出信号 phase3.0按照“0001”、“0010”、“0100”、“1000”、“0001”的顺序循环变化。当dir 为0时,输出信号phase3.0则按照“1000”、“0100”、“0010”、“0001”、“1000”的顺序循环变化。可以实现步进电机正、反转的要求。3.4 转速控制模块(1)实体图图 3-9 转速控制实
13、体图clk0:时钟信号ena:复位信号dir:方向控制信号dd1.0:控制速度的输入信号phase3.0:输出信号给步进电机(2)转速控制的 VHDL 的设计步进电机的速度与输入的脉冲频率成正比13,为了可以实现步进电机的加减速控制,只需要能够改变步进脉冲的频率。所以本课题设计了数控分频器来改变步进脉冲的频率。此数控分频器的具体实现如下:加法计数器在并行预置数的基础上进行加计数,当计数值溢出时产生预置数据置入控制信号,加载预置数据,名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 11 页 -并且将溢出信号作为分频器的输出信号,实现不同的分频信号输出14。数控分频器的 VHDL 设
14、计如下:entity dvf is port(clk:in std_logic;d:in std_logic_vector(1 downto 0);-定义预置数据输入端f:out std_logic);-定义输出端end dvf;architecture bhv of dvf is signal full:std_logic;-定义内部溢出标志信号begin process(clk)variable cnt1:std_logic_vector(1 downto 0);-内部变量,位宽同预置数端begin if clkevent and clk=1 then if cnt1=11 then full=1;-当计数计满时,产生溢出信号cnt1:=d;-同步加载预置数据d else cnt1:=cnt1+1;-否则进行加 1 计数full=0;end if;end if;end process;f=full;-将溢出信号赋予分频器的输出端end bhv;(3)仿真波形名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 11 页 -图 3-10 数控分频器的仿真波形由波形可知,当 d 为不同值时输出信号f 的脉宽也不一样,然后再用 f 来控制步进电机,就可以实现步进电机不同转速的要求。名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 11 页 -