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

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 基于PCI總線和DSP的步進電機運動控制卡的設(shè)計和實現(xiàn)

          基于PCI總線和DSP的步進電機運動控制卡的設(shè)計和實現(xiàn)

          ——
          作者::夏勇 韓春林 何子述 時間:2006-05-15 來源: 收藏

          摘    要:本文針對數(shù)控系統(tǒng)的工作特點和要求,通過對TI公司DSP芯片TMS320LF2407A和Cypress公司PCI接口芯片CY7C09449PV-AC的功能和特點進行深入分析,設(shè)計了一種基于PCI局部總線的步進電機運動控制卡。該卡能夠較好地滿足數(shù)控系統(tǒng)對運動控制部件的實時性和控制精度的苛刻要求。

          關(guān)鍵詞:PCI;DSP;運動控制卡

          引言
          當(dāng)今,開放式數(shù)控系統(tǒng)正在工業(yè)領(lǐng)域得到廣泛應(yīng)用。其中,工控機通過PCI總線連接專用運動控制卡的數(shù)控系統(tǒng)最為流行。在運動控制卡中,由于DSP采用多總線哈佛結(jié)構(gòu)使得處理指令和數(shù)據(jù)可以同時進行,因此相比傳統(tǒng)控制中的單片機具有更多的優(yōu)勢。同時,運動控制卡與PC機通過PCI局部總線通信,能夠達到很高的數(shù)據(jù)傳輸速率,從而還保證了數(shù)控系統(tǒng)的實時性。

          圖1運動控制系統(tǒng)功能框圖

          系統(tǒng)概述
          系統(tǒng)的功能框圖如圖1所示。該系統(tǒng)的核心是TI公司的16位定點DSP芯片TMS320LF2407A。DSP芯片負責(zé)接收PCI局部總線的命令和參數(shù),然后經(jīng)過特定的運動控制算法,如系統(tǒng)位置、速度調(diào)節(jié)、插補算法等,從而完成對步進電機的精確運動控制。同時DSP芯片還負責(zé)將反饋信息傳輸給PCI局部總線,并且控制系統(tǒng)外圍I/O模塊。DSP芯片與計算機的通信通過PCI橋接芯片CY09449實現(xiàn)。

          DSP模塊
          DSP芯片TMS320LF2407A采用高性能靜態(tài)CMOS工藝,供電電壓僅3.3V;指令周期縮短到33ns。
          作為系統(tǒng)的核心,TMS320LF 2407A主要完成復(fù)雜的運動控制算法,比如升降頻控制、插入補償?shù)?。本設(shè)計主要是完成雙軸步進電機控制,故插入補償采用經(jīng)典的DDA算法。由于本設(shè)計對步進電機采用無反饋控制,這樣對步進電機的升降頻控制就顯得格外重要,這也成了整個系統(tǒng)設(shè)計的一個難點。根據(jù)步進電機變速過程動力學(xué)特性,以指數(shù)曲線前段規(guī)律作為前后沿的近似梯形波,進而確定升降頻特性,這樣既能保證步進電機運行過程不會失步,又充分發(fā)揮了步進電機的固有性能,使升頻過程達到時間最短的要求。下面討論一下升降頻控制的算法實現(xiàn)。

          升降頻控制
          為實現(xiàn)所確定的運行頻率—時間函數(shù),通常是將其離散化,即將其轉(zhuǎn)換為脈沖時間間隔對脈沖個數(shù)的函數(shù)。另一種方法是按升降頻過程所走過的脈沖步數(shù)通過定步中斷來變頻。但是離散化方法既會引起頻率突跳和失步,又要進行復(fù)雜的迭代運算,而定步法同樣需要進行迭代。這兩種方法在DSP上都不易實現(xiàn)且靈活性較差。為此本文研究了一種稱為定時的方法。
          設(shè)最高運行頻率為fh(電機恒速段的速度),升頻段總時間為ts。則根據(jù)步進電動機指數(shù)型升頻過程的頻率—時間關(guān)系:
          f(t)=fM-(fM-fb)*exp(-t/T)                 (1)
          式中fb為步進電動機起動頻率;fM為極限運行頻率;T為驅(qū)動系統(tǒng)時間常數(shù)
          則有fh=f(ts)=fM-(fM-fb)*exp(-ts/T)                               
          從而得到
          ts=T*ln((fM-fb)/(fM-fh))                    (2)
          將ts等分為N段,得到各段時間為:ta=ts/N
          則在第i個等分段ta內(nèi)脈沖切換頻率和要送出的脈沖數(shù)分別為:
          f[i]=f(i*ta)=fM-(fM-fb)*exp(-i*ta/T)(3)
          X[i]=ta*f[i]                                    (4)
          故升頻段的總步數(shù)為:
          P=X[0]+X[1]+…+X[N-1]             (5)
          將脈沖間隔1/f[i]轉(zhuǎn)換為DSP內(nèi)部16位定時器的時間常數(shù)K[i]。轉(zhuǎn)換關(guān)系式為
          K[i]=f_DSP/f[i], i=0,1,2…, N-1    (6)
          由于降頻段特性變化規(guī)律與升頻段相反,可知降頻序列是升頻序列的逆序列。
          電機在恒速步進階段,以fh的換相頻率步進。因此對應(yīng)的定時器時間常數(shù)為:
          K[N]=f_DSP/fh                             (7)                                                 
          恒速段總步數(shù)為:
          X_h=X_total-2*P                          (8)
          式中X_total為步進電機運動的總步數(shù)。
          電機運行前,由主程序計算出升頻段和恒速段定時器時間常數(shù)序列K[i](i=0, …,N-1),存放于DSP的SARAM中,形成一個K-P升速表格。當(dāng)電機運行時,在線查表,并取出K[i]用于設(shè)置DSP的PWM中周期寄存器的值,從而不斷改變PWM波形的周期,實現(xiàn)對電機的速度調(diào)節(jié)。根據(jù)升速、降速或高頻恒速,決定升速表地址指針增1、減1或不變。通過這種定時的方法,一方面提高了系統(tǒng)的靈活性,可根據(jù)輸入的最高頻率、起動頻率等參數(shù)改變升降速表,另一方面升降速表的求取不占用運行時間,從而提高了運行效率。

          系統(tǒng)的部分軟件流程
          圖2為升降頻控制子程序流程圖,其中:p_SARAM為指向電機升降速時間常數(shù)表的指針,采用DSP的內(nèi)部SARAM來存放該表;X_up、X_con、X_down分別代表電機在升速段、恒速段、降速段要走的總步數(shù);up_flag、con_flag、down_flag分別代表當(dāng)前電機的運動狀態(tài)(升速、恒速、降速)。

          DSP與PC機的通信
          DSP與PC機的通信通過CY09449連接,CY09449內(nèi)部帶有128KB雙向靜態(tài)SRAM,為了在工作中,使PC機和DSP對SRAM的訪問不會發(fā)生沖突,本設(shè)計中把SRAM均分為兩個單元A和B, PC機和DSP對這兩部分的操作采用乒乓操作模式。由于DSP具有外部數(shù)據(jù)存儲器擴展能力,所以該SRAM完全可以作為DSP的外擴數(shù)據(jù)存儲器,這樣在設(shè)計中便采用DSP的外部數(shù)據(jù)存儲器有效信號/DS來作為CY09449的片選信號/SELECT。

          圖2 升降頻控制子程序流程圖



          DSP的編碼接口
          本設(shè)計也考慮到如果需要對電機進行高級精確控制時,就需要對電機進行閉環(huán)控制。一般情況下,會運用光電編碼器作為系統(tǒng)的閉環(huán)反饋元件。由于本設(shè)計是針對雙軸步進電機的運動,而單軸的光電編碼器就輸出兩相相差為90



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

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