步进电机定位控制系统VHDL程序与仿真

来源:本站
导读:目前正在解读《步进电机定位控制系统VHDL程序与仿真》的相关信息,《步进电机定位控制系统VHDL程序与仿真》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《步进电机定位控制系统VHDL程序与仿真》的详细说明。
简介:步进电机定位控制系统VHDL程序与仿真

步进电机定位控制系统VHDL程序与仿真

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

process(dir, manner, angle)--, ini)

begin

--if ini='1' then

cc<=conv_integer(manner);

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;

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: process(reset,ini, angle, clk)

begin

if reset='1' then

count<=0;

angleDnCount<=0;

elsif clk'event and clk='1' then

if ini='0' then

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;

提醒:《步进电机定位控制系统VHDL程序与仿真》最后刷新时间 2024-03-14 01:20:09,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《步进电机定位控制系统VHDL程序与仿真》该内容的真实性请自行鉴别。