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

          關 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設計應用 > 基于Nios II步進電機控制器IP核的設計與實現

          基于Nios II步進電機控制器IP核的設計與實現

          作者: 時間:2012-03-09 來源:網絡 收藏

          摘要 根據 處理器的Avalon總線規(guī)范,了一款面向核。該定制核采用軟、硬件協(xié)同的方法,功能符合Avalon總線的讀寫傳輸時序,具有完備的驅動能力。仿真結果表明,該核具有很好的可重用性。利于開源共享提高開發(fā)效率。
          關鍵詞 SOPC;IP核;FPGA;

          隨著系統(tǒng)級芯片集成度越來越高,SOPC技術成為電子系統(tǒng)的熱點。它是利用FPGA器件的可編程性進行SOC設計,其最突出優(yōu)點是在提供豐富IP庫的情況下,用戶可以利用IP庫中的組件按需求來搭建系統(tǒng),有較大的靈活性。但是在供應商提供的IP庫中沒有用戶所需的IP核時,用戶只能根據需要自定義IP核。另外,FPGA的傳統(tǒng)應用是在通信、工業(yè)控制等領域。鑒于此,設計了一款步進電機IP核,它具有對步進電機的轉速、轉向及運轉節(jié)拍數進行控制的功能。

          1 步進電機驅動原理
          步進電機驅動是通過按一定順序切換每相線圈中的電流,以達到旋轉切換步進電機的過程。其中,步進電機的控制轉速與各繞組中輸入脈沖的頻率成正比,轉向則取決于控制繞組中的通電順序。步進電機按其勵磁相數可以分為三相、四相、五相、六相甚至八相制式。其中工業(yè)常用的是三相、四相勵磁制式。其中三相制式又包括單三拍(A—B—C—A)方式及雙三拍(AB—BC—CA—AB)方式,而四相制式則有三種常見方式,即雙四拍(AB—BC—CD—DA—AB)方式;單四拍(A—B—C—D—A)方式;單、雙八拍(A—AB—B—BC—C—CD—D—DA—A)方式。

          2 步進電機控制器IP核設計
          對于面向 處理器開發(fā)的所有IP核,包括從設備IP核和主設備IP核兩大類。文中設計的步進電機控制器IP核是一個受控對象,屬于從設備。 處理器通過Avalon總線對步進電機控制器IP核的寄存器進行參數設置,對步進電機的一系列操作。其中Avalon總線接口規(guī)范的功能是它定義了信號類型、信號的行為及傳輸類型等信息。
          一個典型的IP核由硬件文件、軟件文件及組件描述文件組成,步進電機控制器IP核也嚴格按照規(guī)范來編寫。它的硬件文件由多個HDL模塊組合完成硬件設計,其中包括邏輯任務模塊、寄存器模塊及接口模塊,其原理如圖1所示,軟件文件則由寄存器頭文件、驅動文件組成。Nios II開發(fā)工具自2006年公布新版本以后,軟件可以自動生成組件描述文件。

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

          a.jpg


          2.1 硬件文件設計
          IP核設計部分中的邏輯任務模塊根據寄存器模塊傳遞的參數產生步進電機控制所需的脈沖信號;寄存器模塊則用來存儲Avalon總線傳來的參數,包括步進電機的轉速、勵磁相數、正/反轉參數、節(jié)拍數等;接口模塊是一個符合Avalon規(guī)范的接口,起著連接Avalon總線與IP核寄存器模塊橋梁的作用。


          上一頁 1 2 3 4 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();