<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 步進(jìn)電機(jī)定位控制系統(tǒng)VHDL程序與仿真

          步進(jìn)電機(jī)定位控制系統(tǒng)VHDL程序與仿真

          作者: 時(shí)間:2012-03-21 來(lái)源:網(wǎng)絡(luò) 收藏

          與仿真
          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; --系統(tǒng)復(fù)位信號(hào)
          dir: in STD_LOGIC; --方向控制信號(hào)
          clk: in STD_LOGIC; --系統(tǒng)時(shí)鐘信號(hào)
          ini: in STD_LOGIC; --初始化使能信號(hào)
          manner: in STD_LOGIC_VECTOR (1 downto 0); --激磁方式的選擇開(kāi)關(guān)
          angle: in INTEGER range 255 downto 0; --步進(jìn)角的倍數(shù)設(shè)定輸入
          baBA: out STD_LOGIC_VECTOR (3 downto 0)); --狀態(tài)輸出
          end step_motor;
          architecture stepmotor_arch of step_motor is
          signal count: INTEGER range 0 to 7; --計(jì)數(shù)器
          signal cntInc: INTEGER range -2 to 2; --設(shè)定累加器所需的累(加/減)計(jì)數(shù)值
          signal cc : integer range 0 to 3;
          signal cntIni: INTEGER range -1 to 0; --設(shè)定累加器所需的計(jì)數(shù)初值
          signal angleDnCount: INTEGER range 255 downto 0; --計(jì)算已經(jīng)轉(zhuǎn)過(guò)的步進(jìn)角
          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-?相激勵(lì)
          --count=0;
          cntIni=0;
          cntInc=2;
          angleDnCntDec=2;--10;
          when 2 => -- 2-?相激勵(lì)
          --count=7;
          cntIni=-1;
          cntInc=2;
          angleDnCntDec=2;--10;
          when 3 => -- 1-2?相激勵(lì)
          --count=0;
          cntIni=0;
          cntInc=1;
          angleDnCntDec=1;--01;
          when 0 => --manner=00 autodetect
          if (angle rem 2) =1 then -- 2-?相激勵(lì)
          --count=7;
          cntIni=-1;
          cntInc=2;
          angleDnCntDec=2;--10;
          else -- 1-?相激勵(lì)
          --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-?相激勵(lì)
          --count=0;
          cntIni=0;
          cntInc=-2;
          angleDnCntDec=2;--10;
          when 2 => -- 2-?相激勵(lì)
          --count=7;
          cntIni=-1;
          cntInc=-2;
          angleDnCntDec=2;--10;
          when 3 => -- 1-2?相激勵(lì)
          --count=0;
          cntIni=0;
          cntInc=-1;
          angleDnCntDec=1;--01;
          when 0 => --manner=00 autodetect
          if (angle rem 2) = 1 then -- 2-?相激勵(lì)
          cntIni=-1;
          cntInc=-2;
          angleDnCntDec=2;--10;
          else -- 1-?相激勵(lì)
          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;

          本文引用地址:http://www.ex-cimer.com/article/190622.htm

          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;



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();