www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > EDA > 電子設計自動化
[導讀]步進電機定位控制系統(tǒng)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; --系統(tǒng)

步進電機定位控制系統(tǒng)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; --系統(tǒng)復位信號
      dir: in STD_LOGIC; --方向控制信號
      clk: in STD_LOGIC; --系統(tǒng)時鐘信號
      ini: in STD_LOGIC; --初始化使能信號
      manner: in STD_LOGIC_VECTOR (1 downto 0); --激磁方式的選擇開關
      angle: in INTEGER range 255 downto 0; --步進角的倍數(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; --計數(shù)器
signal cntInc: INTEGER range -2 to 2; --設定累加器所需的累(加/減)計數(shù)值
signal cc : integer range 0 to 3;
signal cntIni: INTEGER range -1 to 0; --設定累加器所需的計數(shù)初值
signal angleDnCount: INTEGER range 255 downto 0;  --計算已經(jīng)轉(zhuǎ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-?相激勵
                  --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;
 

本站聲明: 本文章由作者或相關機構(gòu)授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

前不久,新思科技已經(jīng)正式對Ansys完成了整個收購。一家是IP和IC設計方面?zhèn)鹘y(tǒng)三強之一,一家是仿真與分析領域的老牌技術專家。雙方的結(jié)合也是呼應整個技術潮流,為客戶提供從硅片到系統(tǒng)的完整解決方案。而且,借助Ansys的強...

關鍵字: Synopsis 新思科技 Ansys 仿真 汽車 AI

一直以來,步進電機都是大家的關注焦點之一。因此針對大家的興趣點所在,小編將為大家?guī)聿竭M電機的相關介紹,詳細內(nèi)容請看下文。

關鍵字: 電機 步進電機

本文中,小編將對步進電機予以介紹,如果你想對它的詳細情況有所認識,或者想要增進對它的了解程度,不妨請看以下內(nèi)容哦。

關鍵字: 電機 步進電機

在這篇文章中,小編將為大家?guī)聿竭M電機的相關報道。如果你對本文即將要講解的內(nèi)容存在一定興趣,不妨繼續(xù)往下閱讀哦。

關鍵字: 電機 步進電機

今天,小編將在這篇文章中為大家?guī)聿竭M電機的有關報道,通過閱讀這篇文章,大家可以對它具備清晰的認識,主要內(nèi)容如下。

關鍵字: 電機 步進電機 相電流

步進電機將是下述內(nèi)容的主要介紹對象,通過這篇文章,小編希望大家可以對它的相關情況以及信息有所認識和了解,詳細內(nèi)容如下。

關鍵字: 電機 步進電機

在這篇文章中,小編將對步進電機的相關內(nèi)容和情況加以介紹以幫助大家增進對它的了解程度,和小編一起來閱讀以下內(nèi)容吧。

關鍵字: 電機 步進電機

在下述的內(nèi)容中,小編將會對步進電機的相關消息予以報道,如果步進電機是您想要了解的焦點之一,不妨和小編共同閱讀這篇文章哦。

關鍵字: 電機 步進電機

本文中,小編將對電機予以介紹,如果你想對它的詳細情況有所認識,或者想要增進對它的了解程度,不妨請看以下內(nèi)容哦。

關鍵字: 電機 步進電機

在當今高度 自動化的工業(yè)生產(chǎn)中 ,搬運機械手應用廣泛 ?,F(xiàn)對搬運機械手液壓系統(tǒng)展開研究 ,詳細闡述其結(jié)構(gòu)組 成、工作流程與基本原理 ,并基于Fluidsim仿真設計系統(tǒng)的液壓和電氣回路 ,設置仿真參數(shù)并進行仿真分析 。結(jié)...

關鍵字: Fluidsim 搬運機械手 仿真 液壓系統(tǒng)
關閉