⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bujindianjidingweikongzi.txt

📁 设计一个基于FPGA的四相步进电机定位控制系统。步进电机是利用数字信号控制的电机装置
💻 TXT
字号:
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
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<=1;--"01";
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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -