《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > 步進電機定位控制系統VHDL程序與仿真

步進電機定位控制系統VHDL程序與仿真

2008-06-27
關鍵詞: 步進電機 定位控制

步進電機定位控制系統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;

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 一级毛片免费看 | 国精产品一区一区三区 | 国产小视频在线高清播放 | 欧美videosex性欧美成人 | 日本动漫看片黄a免费看 | 麻豆大豆行情一区 | 国产毛片在线看 | 97久久人人做人人爽人人澡 | 又黄又爽又色的视频在线看 | 日本福利视频一区 | 欧美日韩一本二本 | 欧美性猛交ⅹxxx乱大交免费 | 亚洲欧美国产精品久久久 | 天天干天天摸天天操 | 国产精品一在线观看 | 成年黄页网站大全免费动漫 | 99精彩视频 | 草草草视频在线观看 | 免费看三级黄色片 | 精品久久久久国产免费 | 日本一本在线视频 | 国产日韩欧美综合在线 | 中文字幕第九页 | 2022久久国产精品免费热麻豆 | 国产成人女人在线视频观看 | 日韩激情小说 | 黄色免费高清视频 | 日本妇丰满乱xxxxⅹ视频 | 新版天堂资源中文在线 | 五月婷婷狠狠干 | 成人韩免费网站 | 亚洲视屏一区 | 亚洲国产精品v在线播放 | 日本男女网站 | h视频在线网站 | 黄色的视频免费 | 国产综合在线播放 | 成人毛片在线观看 | 久久亚洲免费视频 | 野外一级毛片 | 欧美在线成人免费国产 |