李小闖 于 強(qiáng)
1(中國(guó)科學(xué)院國(guó)家空間科學(xué)中心 北京 100190)2(中國(guó)科學(xué)院大學(xué) 北京 100049)
在我國(guó)空間材料科學(xué)實(shí)驗(yàn)的研究中,傳動(dòng)結(jié)構(gòu)往往基于步進(jìn)電機(jī)進(jìn)行;步進(jìn)電機(jī)雖然控制方式較為簡(jiǎn)單,但往往難以獲得較大的轉(zhuǎn)矩,而隨著實(shí)驗(yàn)樣品體積的增大,步進(jìn)電機(jī)逐漸難以滿足實(shí)驗(yàn)需求。而永磁同步電機(jī)雖然控制較為復(fù)雜,但因其良好的轉(zhuǎn)矩特性使其擁有更好的應(yīng)用前景。在空間材料科學(xué)實(shí)驗(yàn)中,對(duì)樣品的移動(dòng)速度及準(zhǔn)確定位要求十分嚴(yán)格,這也對(duì)永磁同步電機(jī)的速度控制提出了較高的要求。傳統(tǒng)的M/T測(cè)速法雖然能夠有效地對(duì)電機(jī)轉(zhuǎn)速進(jìn)行測(cè)量,但其在低速范圍的實(shí)時(shí)性較差。而在空間材料科學(xué)實(shí)驗(yàn)中樣品的移動(dòng)速度跨度范圍較大(5 mm/天~2 mm/min),因此對(duì)M/T測(cè)速算法的改進(jìn)勢(shì)在必行。
本文針對(duì)永磁同步電機(jī)的測(cè)速問(wèn)題,結(jié)合FPGA特性,提出一種基于FPGA的變M/T的歸一化測(cè)速算法,從而在保持傳統(tǒng)M/T測(cè)速精度的同時(shí),改善測(cè)速的實(shí)時(shí)性。同時(shí)歸一化的設(shè)計(jì)思路能夠使得系統(tǒng)能夠適用于任何基于增量編碼器的永磁同步電機(jī)測(cè)速環(huán)境。針對(duì)設(shè)計(jì)中所需要的乘除運(yùn)算,引入Booth算法以降低設(shè)計(jì)對(duì)DSP的需求。
永磁同步電機(jī)轉(zhuǎn)速測(cè)量依靠在轉(zhuǎn)子上安裝的增量編碼器進(jìn)行速度檢測(cè)。增量編碼器采用光電轉(zhuǎn)換原理,輸出兩相正交脈沖信號(hào)A、B與一路零相信號(hào)Z:A、B兩相相差90°,若A相超前B相,則電機(jī)處于正轉(zhuǎn),否則處于反轉(zhuǎn);電機(jī)旋轉(zhuǎn)一圈零相信號(hào)Z輸出一個(gè)脈沖。增量編碼器輸出時(shí)序如圖1所示[1]。
圖1 增量編碼器時(shí)序圖
M/T法測(cè)速原理是M法(頻率法)和T法(周期法)的結(jié)合,其方式為在一定時(shí)間范圍內(nèi),同時(shí)對(duì)光電編碼器輸出脈沖個(gè)數(shù)M1和捕獲時(shí)鐘的個(gè)數(shù)M2進(jìn)行計(jì)數(shù),用M2計(jì)算出的時(shí)間替代定時(shí)器的時(shí)間進(jìn)行轉(zhuǎn)速的計(jì)算[1]。其測(cè)速原理如圖2所示。
圖2 M/T測(cè)速算法測(cè)速原理
假設(shè)時(shí)鐘脈沖頻率為fclk,編碼器分辨率為N,M1為時(shí)間Tc內(nèi)編碼器脈沖計(jì)數(shù),M2為時(shí)間Tc內(nèi)高頻時(shí)鐘周期計(jì)數(shù),則轉(zhuǎn)子的轉(zhuǎn)速v(單位:r/min)可表示為:
(1)
在進(jìn)行計(jì)數(shù)過(guò)程中,由于檢測(cè)時(shí)鐘脈沖計(jì)數(shù)可能出現(xiàn)±1個(gè)脈沖誤差[2],因此M/T法測(cè)得電機(jī)轉(zhuǎn)速誤差Δv為:
(2)
相對(duì)誤差為:
(3)
歸一化也稱(chēng)標(biāo)幺化。歸一值(標(biāo)幺值)是電力系統(tǒng)分析和工程計(jì)算中常用的數(shù)值標(biāo)記方法,表示各物理量及參數(shù)的相對(duì)值,單位為pu(也可以認(rèn)為其為無(wú)量綱)[3]。歸一化是相對(duì)于某一基準(zhǔn)值而言的。同一有名值,選取基準(zhǔn)不同,其歸一值也不同,其關(guān)系如下:
(4)
在伺服電機(jī)控制系統(tǒng)中,由于各種變量單位及范圍不同,在采用浮點(diǎn)類(lèi)型數(shù)據(jù)進(jìn)行表示時(shí)計(jì)算性能較差,同時(shí)耗時(shí)較長(zhǎng),也不便于算法的移植。在FPGA、DSP等設(shè)備中,往往采用定點(diǎn)數(shù)進(jìn)行數(shù)據(jù)的計(jì)算,這也就意味著采用實(shí)際值參與算法運(yùn)算的不可行性[4]。因而歸一化的引入有助于算法的定點(diǎn)化實(shí)現(xiàn),同時(shí)也便于算法移植,減少計(jì)算周期。以Q15格式(1位符號(hào)位,15位小數(shù)位)為例,變量定點(diǎn)化計(jì)算方式為:
(5)
基準(zhǔn)值的選取往往采用變量的額定值。經(jīng)過(guò)歸一化處理,變量取值范圍被約束在[-1,+1]區(qū)間之間,各變量運(yùn)算過(guò)程中不存在取值范圍不同的問(wèn)題。
M/T算法方法是統(tǒng)計(jì)一段時(shí)間內(nèi)編碼器脈沖計(jì)數(shù)與高頻時(shí)鐘計(jì)數(shù)來(lái)完成測(cè)速;為了兼顧算法在低速和高速時(shí)測(cè)量的可用性,其選取的統(tǒng)計(jì)時(shí)間往往較大,以確保無(wú)論在高速還是低速情況下測(cè)速時(shí)間窗口內(nèi)均有足夠的編碼器計(jì)數(shù)脈沖。正是由于這一點(diǎn)導(dǎo)致M/T算法在低速模式下實(shí)時(shí)性較差的不足。
結(jié)合M/T算法測(cè)速原理,當(dāng)伺服電機(jī)運(yùn)轉(zhuǎn)在低速模式下,為提高速度測(cè)量實(shí)時(shí)性,可采用縮短采樣時(shí)間的方法。假設(shè)電機(jī)轉(zhuǎn)速為v,增量編碼器分辨率為N,則增量編碼器單個(gè)脈沖周期時(shí)長(zhǎng)t(單位:s)為:
(6)
可見(jiàn),增量編碼器單個(gè)脈沖周期與電機(jī)轉(zhuǎn)速成反比。在低速情況下,可通過(guò)減少統(tǒng)計(jì)的編碼器脈沖個(gè)數(shù)來(lái)減少算法響應(yīng)時(shí)間。由此在系統(tǒng)運(yùn)行過(guò)程中可通過(guò)實(shí)時(shí)監(jiān)測(cè)編碼器脈沖時(shí)長(zhǎng)來(lái)動(dòng)態(tài)調(diào)節(jié)測(cè)速時(shí)間以加快系統(tǒng)響應(yīng)。
假定轉(zhuǎn)速測(cè)量周期為T(mén),則在測(cè)量周期內(nèi)通過(guò)的增量編碼器脈沖數(shù)M1為:
(7)
可見(jiàn),M1與轉(zhuǎn)速v成正比。通過(guò)針對(duì)不同轉(zhuǎn)速范圍設(shè)定不同的M1值可使得伺服電機(jī)無(wú)論高速運(yùn)行還是低速運(yùn)行均能有較高的測(cè)量精度以及較短的響應(yīng)時(shí)間。同時(shí)對(duì)伺服電機(jī)轉(zhuǎn)速測(cè)量歸一化[5],式(1)將變?yōu)椋?/p>
(8)
式中:vrated為伺服電機(jī)的額定轉(zhuǎn)速,該處采用Q15數(shù)據(jù)格式。
變M/T歸一化測(cè)速算法能夠在保證測(cè)量精度的同時(shí),有效改善傳統(tǒng)M/T測(cè)量算法低速實(shí)時(shí)性較差問(wèn)題,對(duì)速度的變化將更敏感,同時(shí)歸一化設(shè)計(jì)思路有利于定點(diǎn)化實(shí)現(xiàn)及算法移植。
在FPGA程序設(shè)計(jì)實(shí)現(xiàn)中,對(duì)于運(yùn)算中的乘除法操作往往基于片內(nèi)DSP運(yùn)算單元進(jìn)行。對(duì)于衛(wèi)星上設(shè)備而言,其所選用芯片型號(hào)往往資源受限較多,Booth算法[6]能夠有效降低算法對(duì)片上DSP單元的依賴。
Booth算法采用相加減的操作計(jì)算補(bǔ)碼數(shù)據(jù)的乘積,其對(duì)乘數(shù)從最低位開(kāi)始判斷,根據(jù)后兩個(gè)數(shù)據(jù)位的情況進(jìn)行加法、減法或僅僅進(jìn)行移位操作。判斷的兩個(gè)數(shù)據(jù)位為當(dāng)前位及其右邊的位(初始時(shí)需要增加一個(gè)輔助位0),移位操作是向右移動(dòng)。假定被乘數(shù)A及乘數(shù)B位寬為N,算法實(shí)現(xiàn)思路為:
(1) 乘數(shù)B“負(fù)一位”補(bǔ)零,乘積項(xiàng)P(2N+1位寬)寄存器清零;
(2) 乘數(shù)B填入P低N+1位;
(3) 按照表1對(duì)乘積項(xiàng)P低兩位進(jìn)行判定,根據(jù)判定結(jié)果對(duì)乘積項(xiàng)P高N位進(jìn)行+A、-A或無(wú)操作,無(wú)視符號(hào)位溢出;
表1 Booth算法累加規(guī)則
(4) 判定乘積項(xiàng)P最高位,若為0則P右移高位補(bǔ)零,反之右移一位補(bǔ)1;
(5) 重復(fù)步驟(2)-步驟(4)N次;
(6) 乘積項(xiàng)P前2N位即為乘積項(xiàng)計(jì)算結(jié)果。
Booth算法能夠有效利用FPGA的移位特性、簡(jiǎn)化乘法計(jì)算步驟、對(duì)于N位乘法計(jì)算其僅需N個(gè)時(shí)鐘周期。
同時(shí)針對(duì)式(8)中的常量乘數(shù)項(xiàng)借鑒Booth算法編碼規(guī)則可修改為:
(9)
通過(guò)將常量乘法轉(zhuǎn)換為移位操作能夠進(jìn)一步降低對(duì)乘法器的依賴。
為加快系統(tǒng)響應(yīng),算法設(shè)計(jì)基于FPGA平臺(tái)進(jìn)行實(shí)現(xiàn)。FPGA基于LUT+FF的結(jié)構(gòu)使得算法能夠高度并行化[7]。變M/T歸一化測(cè)速算法分為預(yù)處理模塊、速度區(qū)間預(yù)測(cè)模塊及速度測(cè)量模塊。其設(shè)計(jì)框圖如圖3所示。
圖3 變M/T歸一化測(cè)速算法設(shè)計(jì)框圖
預(yù)處理模塊包括信號(hào)同步、正交編碼、方向預(yù)測(cè)三部分功能。
在FPGA設(shè)計(jì)中,對(duì)于外部多比特信號(hào)的采樣牽涉到多比特信號(hào)跨時(shí)鐘域處理從而避免亞穩(wěn)態(tài)情況。但正如圖1所示,增量編碼器A、B兩相信號(hào)相差90°,在同一時(shí)間只有一個(gè)比特位發(fā)生信號(hào)跳轉(zhuǎn),類(lèi)似于格林編碼,故而信號(hào)同步邏輯可通過(guò)單比特信號(hào)跨時(shí)鐘域處理方式進(jìn)行信號(hào)的同步。相比于多比特信號(hào)跨時(shí)鐘域處理,單比特信號(hào)跨時(shí)鐘域處理采用寄存器打拍形式即可,資源消耗較少[8]。
增量編碼器A、B兩相信號(hào)在一個(gè)脈沖周期內(nèi)分別有兩個(gè)狀態(tài)、通過(guò)正交編碼的處理,可形成四個(gè)狀態(tài)。在此處設(shè)計(jì)中采用“異或”邏輯對(duì)兩相信號(hào)處理,可獲得更高的分辨率。而方向預(yù)測(cè)單元通過(guò)A、B兩相相位關(guān)系獲得電機(jī)轉(zhuǎn)速方向。
速度區(qū)間預(yù)測(cè)模塊包括脈沖計(jì)時(shí)單元、超時(shí)保護(hù)單元及速度預(yù)測(cè)單元。
由式(6)可知,增量編碼器單個(gè)輸出脈沖周期與轉(zhuǎn)子轉(zhuǎn)速成反比,據(jù)此可由編碼器單個(gè)脈沖周期來(lái)預(yù)判電機(jī)轉(zhuǎn)速區(qū)間范圍。
脈沖計(jì)時(shí)單元基于系統(tǒng)時(shí)鐘對(duì)由正交編碼輸出信號(hào)單個(gè)脈沖信號(hào)進(jìn)行計(jì)時(shí),獲取單個(gè)脈沖時(shí)間,同時(shí)在超時(shí)保護(hù)單元中設(shè)置計(jì)數(shù)閾值以避免在超低速情況下脈沖計(jì)時(shí)單元長(zhǎng)時(shí)間無(wú)有效輸出的情況。
速度預(yù)測(cè)單元根據(jù)編碼器單個(gè)脈沖時(shí)長(zhǎng)決定M/T測(cè)速法脈沖計(jì)數(shù)M1值,為節(jié)省資源開(kāi)銷(xiāo)及較少計(jì)算量,可根據(jù)脈沖時(shí)長(zhǎng)區(qū)間指定不同的M1值,而不必按照式(7)的線性關(guān)系確定。
速度測(cè)量模塊包括脈沖計(jì)數(shù)單元、時(shí)鐘計(jì)時(shí)單元、轉(zhuǎn)速計(jì)算單元及歸一化單元。
速度測(cè)量模塊每完成一次速度測(cè)量則從速度區(qū)間預(yù)測(cè)模塊獲取脈沖計(jì)數(shù)值M1作為下次速度檢測(cè)時(shí)脈沖計(jì)數(shù)。脈沖計(jì)數(shù)單元?jiǎng)t完成正交編碼單元脈沖計(jì)數(shù),并由時(shí)鐘計(jì)時(shí)單元基于系統(tǒng)時(shí)鐘統(tǒng)計(jì)M1個(gè)編碼脈沖所占用的時(shí)鐘節(jié)拍M2。
轉(zhuǎn)速計(jì)算單元與歸一化單元完成伺服電機(jī)轉(zhuǎn)速的計(jì)算及歸一化。系統(tǒng)運(yùn)行之前首先獲取電機(jī)的額定轉(zhuǎn)速值,通過(guò)式(7)完成電機(jī)的轉(zhuǎn)速歸一化化測(cè)量。
實(shí)驗(yàn)設(shè)計(jì)采用Xilinx A7系列芯片作為系統(tǒng)主控芯片,基于VIVADO完成算法的實(shí)現(xiàn)及仿真[9]。算法設(shè)計(jì)資源占用情況及部分仿真圖如圖4、圖5所示。系統(tǒng)時(shí)鐘頻率50 MHz,編碼器分辨率為2 048線,電機(jī)額定轉(zhuǎn)速4 500 r/min。
圖4 資源利用報(bào)告
圖5 算法仿真波形
從資源利用報(bào)告上看,整體設(shè)計(jì)上僅消耗2 260 LUT、5 609 FF及一個(gè)DSP運(yùn)算單元用于除法操作,相對(duì)于整體片上資源而言只占用了非常小的一部分,而B(niǎo)ooth算法的引入也極大降低了算法對(duì)DSP的依賴性。圖5顯示了當(dāng)測(cè)量轉(zhuǎn)速為+5 r/min、-5 r/min時(shí)的標(biāo)幺化輸出結(jié)果分別為0x24、0xffdc,與相應(yīng)轉(zhuǎn)速理論歸一值一致。
針對(duì)不同轉(zhuǎn)速輸入,實(shí)驗(yàn)仿真結(jié)果及其絕對(duì)誤差分別如表2、圖6所示。
表2 實(shí)驗(yàn)仿真結(jié)果
圖6 絕對(duì)誤差統(tǒng)計(jì)圖
從仿真結(jié)果來(lái)看,以歸一值表示時(shí)測(cè)量誤差在±2范圍之內(nèi),且在低速時(shí)有較高的準(zhǔn)確度。轉(zhuǎn)速測(cè)量值誤差最大不超過(guò)±0.4 r/min,而在低速范圍-200~200 r/min內(nèi),絕對(duì)誤差不超過(guò)0.1 r/min。誤差的存在主要由于:
(1) 歸一化量化誤差。歸一化由于采用定點(diǎn)數(shù),故在進(jìn)行轉(zhuǎn)換時(shí)會(huì)引入一定誤差,誤差范圍在:
(2) 由于定點(diǎn)化的實(shí)現(xiàn)方式,FPGA在運(yùn)算過(guò)程中會(huì)存在位寬截取情況,引入一定誤差。
變M/T歸一化測(cè)速算法及普通M/T測(cè)速算法(取M1值為128)不同轉(zhuǎn)速下的響應(yīng)時(shí)間對(duì)比結(jié)果如圖7所示。
圖7 響應(yīng)時(shí)間對(duì)比對(duì)數(shù)圖
根據(jù)圖7對(duì)比,當(dāng)電機(jī)處于低速運(yùn)行時(shí),變M/T歸一化算法在響應(yīng)時(shí)間上相比于M/T算法有極大的縮減,當(dāng)轉(zhuǎn)速低于50 r/min時(shí)響應(yīng)時(shí)間能縮短25倍以上。這對(duì)于電機(jī)在低速運(yùn)行時(shí)提高系統(tǒng)的靈敏度有極大的改善和幫助。
本文針對(duì)伺服電機(jī)的測(cè)速問(wèn)題提出了一種基于FPGA的變M/T歸一化測(cè)速算法。通過(guò)實(shí)驗(yàn)仿真表明,該算法無(wú)論在低速范圍內(nèi)還是高速范圍內(nèi)均有較高的測(cè)速精度,同時(shí)具有快速響應(yīng)的特點(diǎn)。歸一化的設(shè)計(jì)使得算法能夠針對(duì)不同參數(shù)型號(hào)編碼器及永磁同步電機(jī)均能有較高的測(cè)量精度,也廣泛適用于伺服電機(jī)控制系統(tǒng)中的速度控制應(yīng)用,避免因不同變量的單位數(shù)制問(wèn)題引入的計(jì)算精度與計(jì)算誤差。同時(shí)Booth算法的引入也極大降低了算法對(duì)DSP的依賴性。本文算法為空間材料科學(xué)實(shí)驗(yàn)裝置中永磁同步電機(jī)的速度檢測(cè)方式提供了一種參考設(shè)計(jì)思路。