《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > 步進電機定位控制系統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;郵箱:[email protected]。
主站蜘蛛池模板: 日韩精品一区二区三区免费视频 | 热久久91| 亚洲国产天堂久久综合网站 | a级片在线 | 国产成人免费全部网站 | 午夜影院免费入口 | 国产成人精品亚洲一区 | 在线观看视频国产 | 日本午色www高清视频 | 曰本黄页 | 国产精品每日更新在线观看 | 久久草在线视频播放 | 大看蕉a在线观看 | 国产日韩一区二区三区在线播放 | fefe66免费毛片你懂的 | 久草网首页 | 国产精品午夜波多野结衣性色 | 国产一级在线观看www色 | 久久精品视频网站 | 日本久久久久久久久久 | 综合精品视频 | 午夜香蕉成视频人网站高清版 | a级免费| 国产成人亚洲综合91精品555 | 韩国视频一区 | 午夜毛片免费观看视频 | 中文字幕水野优香在线网在线 | 中文字幕乱码中文乱码51精品 | 成人中文字幕在线观看 | 美女张腿男人桶免费视频 | 一本色道久久88综合亚洲精品高清 | 久久国产精品亚洲 | 成年男女免费视频 | 精品国产一区二区三区免费看 | 中文字幕亚洲天堂 | 欧美午夜视频一区二区三区 | 国产成人女人视频在线观看 | 大学生一级一片第一次欧美 | 亚洲成a人片在线v观看 | avtom影院入口永久在线观看 | 欧美激情一区二区三区高清视频 |