《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > 步進電機定位控制系統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。
主站蜘蛛池模板: 国产一区二区三区播放| 欧美激情xxxx性bbbb| 国产女人18毛片水真多1| 中文字字幕码一二区| 最新免费jlzzjlzz在线播放| 亚洲热在线视频| 男人j进女人p免费动态图| 又湿又紧又大又爽a视频| 被公侵幕岬奈奈美中文字幕| 国产成人福利在线视频播放尤物| 18禁裸男晨勃露j毛免费观看| 多毛bgmbgmbgm胖在线| x8x8在线观看| 成人av电影网站| 中文字幕在线观看国产| 日本三级香港三级国产三级| 久久精品国产亚洲AV网站 | 国产狂喷潮在线观看| 182福利tv| 国产资源中文字幕| 97色伦图片97综合影院| 天堂新版8中文在线8 | 91手机看片国产福利精品| 在线看无码的免费网站| a在线观看欧美在线观看| 女女同恋のレズビアン漫画| 久久精品国产99久久久| 最近免费中文字幕大全高清10| 亚洲伊人色一综合网| 欧美日韩国产在线人成| 亚洲理论在线观看| 毛色毛片免费观看| 亚洲熟妇AV一区二区三区漫画| 特级黄一级播放| 伊人久久大香线| 特级西西人体444WWw高清大胆| 人人狠狠综合久久亚洲婷婷| 狠狠躁天天躁中文字幕| 人人澡人人澡人人看| 波多野结衣被绝伦强在线观看| 亚洲精品国产福利片|