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程序与仿真