李小闖 于 強
1(中國科學院國家空間科學中心 北京 100190)2(中國科學院大學 北京 100049)
在我國空間材料科學實驗的研究中,傳動結構往往基于步進電機進行;步進電機雖然控制方式較為簡單,但往往難以獲得較大的轉矩,而隨著實驗樣品體積的增大,步進電機逐漸難以滿足實驗需求。而永磁同步電機雖然控制較為復雜,但因其良好的轉矩特性使其擁有更好的應用前景。在空間材料科學實驗中,對樣品的移動速度及準確定位要求十分嚴格,這也對永磁同步電機的速度控制提出了較高的要求。傳統的M/T測速法雖然能夠有效地對電機轉速進行測量,但其在低速范圍的實時性較差。而在空間材料科學實驗中樣品的移動速度跨度范圍較大(5 mm/天~2 mm/min),因此對M/T測速算法的改進勢在必行。
本文針對永磁同步電機的測速問題,結合FPGA特性,提出一種基于FPGA的變M/T的歸一化測速算法,從而在保持傳統M/T測速精度的同時,改善測速的實時性。同時歸一化的設計思路能夠使得系統能夠適用于任何基于增量編碼器的永磁同步電機測速環境。針對設計中所需要的乘除運算,引入Booth算法以降低設計對DSP的需求。
永磁同步電機轉速測量依靠在轉子上安裝的增量編碼器進行速度檢測。增量編碼器采用光電轉換原理,輸出兩相正交脈沖信號A、B與一路零相信號Z:A、B兩相相差90°,若A相超前B相,則電機處于正轉,否則處于反轉;電機旋轉一圈零相信號Z輸出一個脈沖。增量編碼器輸出時序如圖1所示[1]。

圖1 增量編碼器時序圖
M/T法測速原理是M法(頻率法)和T法(周期法)的結合,其方式為在一定時間范圍內,同時對光電編碼器輸出脈沖個數M1和捕獲時鐘的個數M2進行計數,用M2計算出的時間替代定時器的時間進行轉速的計算[1]。其測速原理如圖2所示。

圖2 M/T測速算法測速原理
假設時鐘脈沖頻率為fclk,編碼器分辨率為N,M1為時間Tc內編碼器脈沖計數,M2為時間Tc內高頻時鐘周期計數,則轉子的轉速v(單位:r/min)可表示為:
(1)
在進行計數過程中,由于檢測時鐘脈沖計數可能出現±1個脈沖誤差[2],因此M/T法測得電機轉速誤差Δv為:
(2)
相對誤差為:
(3)
歸一化也稱標幺化。歸一值(標幺值)是電力系統分析和工程計算中常用的數值標記方法,表示各物理量及參數的相對值,單位為pu(也可以認為其為無量綱)[3]。歸一化是相對于某一基準值而言的。同一有名值,選取基準不同,其歸一值也不同,其關系如下:

(4)
在伺服電機控制系統中,由于各種變量單位及范圍不同,在采用浮點類型數據進行表示時計算性能較差,同時耗時較長,也不便于算法的移植。在FPGA、DSP等設備中,往往采用定點數進行數據的計算,這也就意味著采用實際值參與算法運算的不可行性[4]。因而歸一化的引入有助于算法的定點化實現,同時也便于算法移植,減少計算周期。以Q15格式(1位符號位,15位小數位)為例,變量定點化計算方式為:

(5)
基準值的選取往往采用變量的額定值。經過歸一化處理,變量取值范圍被約束在[-1,+1]區間之間,各變量運算過程中不存在取值范圍不同的問題。
M/T算法方法是統計一段時間內編碼器脈沖計數與高頻時鐘計數來完成測速;為了兼顧算法在低速和高速時測量的可用性,其選取的統計時間往往較大,以確保無論在高速還是低速情況下測速時間窗口內均有足夠的編碼器計數脈沖。正是由于這一點導致M/T算法在低速模式下實時性較差的不足。
結合M/T算法測速原理,當伺服電機運轉在低速模式下,為提高速度測量實時性,可采用縮短采樣時間的方法。假設電機轉速為v,增量編碼器分辨率為N,則增量編碼器單個脈沖周期時長t(單位:s)為:
(6)
可見,增量編碼器單個脈沖周期與電機轉速成反比。在低速情況下,可通過減少統計的編碼器脈沖個數來減少算法響應時間。由此在系統運行過程中可通過實時監測編碼器脈沖時長來動態調節測速時間以加快系統響應。
假定轉速測量周期為T,則在測量周期內通過的增量編碼器脈沖數M1為:
(7)
可見,M1與轉速v成正比。通過針對不同轉速范圍設定不同的M1值可使得伺服電機無論高速運行還是低速運行均能有較高的測量精度以及較短的響應時間。同時對伺服電機轉速測量歸一化[5],式(1)將變為:
(8)
式中:vrated為伺服電機的額定轉速,該處采用Q15數據格式。
變M/T歸一化測速算法能夠在保證測量精度的同時,有效改善傳統M/T測量算法低速實時性較差問題,對速度的變化將更敏感,同時歸一化設計思路有利于定點化實現及算法移植。
在FPGA程序設計實現中,對于運算中的乘除法操作往往基于片內DSP運算單元進行。對于衛星上設備而言,其所選用芯片型號往往資源受限較多,Booth算法[6]能夠有效降低算法對片上DSP單元的依賴。
Booth算法采用相加減的操作計算補碼數據的乘積,其對乘數從最低位開始判斷,根據后兩個數據位的情況進行加法、減法或僅僅進行移位操作。判斷的兩個數據位為當前位及其右邊的位(初始時需要增加一個輔助位0),移位操作是向右移動。假定被乘數A及乘數B位寬為N,算法實現思路為:
(1) 乘數B“負一位”補零,乘積項P(2N+1位寬)寄存器清零;
(2) 乘數B填入P低N+1位;
(3) 按照表1對乘積項P低兩位進行判定,根據判定結果對乘積項P高N位進行+A、-A或無操作,無視符號位溢出;

表1 Booth算法累加規則
(4) 判定乘積項P最高位,若為0則P右移高位補零,反之右移一位補1;
(5) 重復步驟(2)-步驟(4)N次;
(6) 乘積項P前2N位即為乘積項計算結果。
Booth算法能夠有效利用FPGA的移位特性、簡化乘法計算步驟、對于N位乘法計算其僅需N個時鐘周期。
同時針對式(8)中的常量乘數項借鑒Booth算法編碼規則可修改為:
(9)
通過將常量乘法轉換為移位操作能夠進一步降低對乘法器的依賴。
為加快系統響應,算法設計基于FPGA平臺進行實現。FPGA基于LUT+FF的結構使得算法能夠高度并行化[7]。變M/T歸一化測速算法分為預處理模塊、速度區間預測模塊及速度測量模塊。其設計框圖如圖3所示。

圖3 變M/T歸一化測速算法設計框圖
預處理模塊包括信號同步、正交編碼、方向預測三部分功能。
在FPGA設計中,對于外部多比特信號的采樣牽涉到多比特信號跨時鐘域處理從而避免亞穩態情況。但正如圖1所示,增量編碼器A、B兩相信號相差90°,在同一時間只有一個比特位發生信號跳轉,類似于格林編碼,故而信號同步邏輯可通過單比特信號跨時鐘域處理方式進行信號的同步。相比于多比特信號跨時鐘域處理,單比特信號跨時鐘域處理采用寄存器打拍形式即可,資源消耗較少[8]。
增量編碼器A、B兩相信號在一個脈沖周期內分別有兩個狀態、通過正交編碼的處理,可形成四個狀態。在此處設計中采用“異或”邏輯對兩相信號處理,可獲得更高的分辨率。而方向預測單元通過A、B兩相相位關系獲得電機轉速方向。
速度區間預測模塊包括脈沖計時單元、超時保護單元及速度預測單元。
由式(6)可知,增量編碼器單個輸出脈沖周期與轉子轉速成反比,據此可由編碼器單個脈沖周期來預判電機轉速區間范圍。
脈沖計時單元基于系統時鐘對由正交編碼輸出信號單個脈沖信號進行計時,獲取單個脈沖時間,同時在超時保護單元中設置計數閾值以避免在超低速情況下脈沖計時單元長時間無有效輸出的情況。
速度預測單元根據編碼器單個脈沖時長決定M/T測速法脈沖計數M1值,為節省資源開銷及較少計算量,可根據脈沖時長區間指定不同的M1值,而不必按照式(7)的線性關系確定。
速度測量模塊包括脈沖計數單元、時鐘計時單元、轉速計算單元及歸一化單元。
速度測量模塊每完成一次速度測量則從速度區間預測模塊獲取脈沖計數值M1作為下次速度檢測時脈沖計數。脈沖計數單元則完成正交編碼單元脈沖計數,并由時鐘計時單元基于系統時鐘統計M1個編碼脈沖所占用的時鐘節拍M2。
轉速計算單元與歸一化單元完成伺服電機轉速的計算及歸一化。系統運行之前首先獲取電機的額定轉速值,通過式(7)完成電機的轉速歸一化化測量。
實驗設計采用Xilinx A7系列芯片作為系統主控芯片,基于VIVADO完成算法的實現及仿真[9]。算法設計資源占用情況及部分仿真圖如圖4、圖5所示。系統時鐘頻率50 MHz,編碼器分辨率為2 048線,電機額定轉速4 500 r/min。

圖4 資源利用報告

圖5 算法仿真波形
從資源利用報告上看,整體設計上僅消耗2 260 LUT、5 609 FF及一個DSP運算單元用于除法操作,相對于整體片上資源而言只占用了非常小的一部分,而Booth算法的引入也極大降低了算法對DSP的依賴性。圖5顯示了當測量轉速為+5 r/min、-5 r/min時的標幺化輸出結果分別為0x24、0xffdc,與相應轉速理論歸一值一致。
針對不同轉速輸入,實驗仿真結果及其絕對誤差分別如表2、圖6所示。

表2 實驗仿真結果

圖6 絕對誤差統計圖
從仿真結果來看,以歸一值表示時測量誤差在±2范圍之內,且在低速時有較高的準確度。轉速測量值誤差最大不超過±0.4 r/min,而在低速范圍-200~200 r/min內,絕對誤差不超過0.1 r/min。誤差的存在主要由于:
(1) 歸一化量化誤差。歸一化由于采用定點數,故在進行轉換時會引入一定誤差,誤差范圍在:
(2) 由于定點化的實現方式,FPGA在運算過程中會存在位寬截取情況,引入一定誤差。
變M/T歸一化測速算法及普通M/T測速算法(取M1值為128)不同轉速下的響應時間對比結果如圖7所示。

圖7 響應時間對比對數圖
根據圖7對比,當電機處于低速運行時,變M/T歸一化算法在響應時間上相比于M/T算法有極大的縮減,當轉速低于50 r/min時響應時間能縮短25倍以上。這對于電機在低速運行時提高系統的靈敏度有極大的改善和幫助。
本文針對伺服電機的測速問題提出了一種基于FPGA的變M/T歸一化測速算法。通過實驗仿真表明,該算法無論在低速范圍內還是高速范圍內均有較高的測速精度,同時具有快速響應的特點。歸一化的設計使得算法能夠針對不同參數型號編碼器及永磁同步電機均能有較高的測量精度,也廣泛適用于伺服電機控制系統中的速度控制應用,避免因不同變量的單位數制問題引入的計算精度與計算誤差。同時Booth算法的引入也極大降低了算法對DSP的依賴性。本文算法為空間材料科學實驗裝置中永磁同步電機的速度檢測方式提供了一種參考設計思路。