基本上有接觸過自動控制架構(gòu)的每個人,幾乎都知道可以透過CPU、FPGA以及PLC來進(jìn)行複雜伺服馬達(dá)的運動控制,例如雙軸插值(Interpolation)、凸輪控制等。但是到目前為止,甚少發(fā)現(xiàn)利用PLC來負(fù)責(zé)這些動作的計算。
這時會有個疑問出現(xiàn),為什麼不利用PLC來控制?通常來說,這些由PLC進(jìn)行控制非常不錯,但是PLC大多是負(fù)責(zé)多工的(multi-tasking)處理,所以幾乎沒有餘力可以再負(fù)擔(dān)複雜的伺服馬達(dá)計算。
因此在進(jìn)行運動控制時,就需要採單一Tasking處理才能達(dá)到高速運算的作業(yè)目標(biāo)。另外,也不適合用PLC來編寫雙軸插值和凸輪控制等複雜的作業(yè),最好將伺服放大器和CPU組合一起作為伺服馬達(dá)的專用機(jī)制,即使以後進(jìn)行修改也可以降低成本。
不適合透過PLC單獨對伺服馬達(dá)高速控制
因此,透過CPU、FPGA與其他機(jī)構(gòu)的搭配可以減輕PLC程式的負(fù)擔(dān),另一方面,CPU具有高速計算能力適用於控制伺服馬達(dá),因此PLC可以專注擔(dān)任其他機(jī)器控制(感應(yīng)馬達(dá)等)和訊息控制來分配處理負(fù)載。
什麼是簡單運動單元(Simple Motion Unit)?簡單運動單元可以執(zhí)行與CPU相同的控制(雙軸插值、凸輪控制等),並且可以透過來自PLC的命令輕鬆進(jìn)行操作。
由於它是受限需要於PLC的命令輸出,因此在連續(xù)執(zhí)行伺服馬達(dá)時,CPU可以比簡單運動單元更快地完成操作。此外,簡單運動單元還有一個優(yōu)點就是比CPU便宜,並且可以使用常規(guī)MOV命令輕鬆控制PLC的程序。不過卻有一些情況,並不常利用這種廉價而又容易進(jìn)行操控,簡單運動單元來做為伺服馬達(dá)的馬達(dá),而是要使用麻煩的CPU呢?
這是因為在進(jìn)行高度運動控制時,又可以不受PLC掃描時間影響的一種高速系統(tǒng)架構(gòu)。PLC的掃描時間會受到程式容量的影響,因此伺服馬達(dá)的多軸控制無法避免增加PLC的程式量。如果CPU可以控制伺服馬達(dá)的操作模式和時序,就可以大幅減少PLC程序的負(fù)載。
運算單元的配置相當(dāng)重要
運動系統(tǒng)控制的過程包括在設(shè)備的智慧化和自動化中,具有離線(Off Line)計算能力以及智慧,並透過線上(On Line)計算實現(xiàn)功能的流程。由於離線計算沒有時間限制,因此即使運算單元的能力不佳也可以利用時間來彌補(bǔ),但是在即時的On Line計算中,運算單元的配置就變得相當(dāng)重要。
對於軟性即時(Soft Real Time)處理,可以採用具有高性能OS的CPU,但是當(dāng)需要FArm/硬性即時(Hard Real Time)處理,或許微處理器或FPGA會更易於使用。因為FPGA除了有高精緻的優(yōu)點,在需要即時處理的情況下更具有優(yōu)勢。
舉例來說,圖1是利用FPGA完成的一個採樣頻率為1 MHz的機(jī)器人運動控制系統(tǒng),在這樣的FPGA高精細(xì)執(zhí)行高速訊號處理的架構(gòu)下,可以獲得的控制性能非常好,可以輕鬆達(dá)到精確控制 (使用解析度為10 nm的光學(xué)編碼器進(jìn)行定位,並且誤差在1或2個脈衝之內(nèi))。還可以藉由FPGA的高精細(xì)度,透過高速訊號處理等方式消除運算系?中的噪訊,提高控制系?的增益。

圖1 : 利用FPGA完成1 MHz採樣頻率運動控制實驗(source:Increments) |
|
這樣一來,就可以不用受到像傳統(tǒng)的H∞最佳化控制理論的限制與約束,可以提高增益,使得系統(tǒng)性能得以大幅度提升。這樣的機(jī)制比起費盡心力的設(shè)計補(bǔ)償器更容易獲得更好的性能。
CPU與FPGA的互補(bǔ)與優(yōu)劣勢
就工業(yè)控制器的開發(fā)與使用而言,所有工程師都希望盡可能地降低控制器成本,微控制器已經(jīng)大量的使用,例如安川電機(jī)和三菱CPLD,由於物聯(lián)網(wǎng)的趨勢而被廣泛使用。現(xiàn)今由於缺乏通用介面(尤其是通訊系統(tǒng))的靈活性,而又回到了採用微控制器,或者導(dǎo)入SoC FPGA來實現(xiàn)Linux on ARM中的高階功能,同時在FPGA中進(jìn)行控制的例子。
雖說FPGA的優(yōu)勢性目前正在擴(kuò)大,如果不能在指令級確保並行性,與CPU相較之下就會顯得遜色,畢竟這樣的FPGA只能當(dāng)作運算工具,用來執(zhí)行向量運算的並行ALU。
實際上用於機(jī)器人運動控制的命令值生成與數(shù)據(jù)相關(guān),是循序運算或使用三角函數(shù)計算的,因此使用FPGA進(jìn)行效率非常低。反之,這會使得CPU被採用的頻率更高,即使非常努力的設(shè)計FPGA運用架構(gòu),相信也無法達(dá)到期望值。
另外,因為對於機(jī)器人的運動控制,在校正錯誤的反饋(Feedback)這一部分,包括從觀察(計算器輸入)到校正指令輸出(計算器輸出)的過程,當(dāng)然是愈快愈好。所以希望能獲得高速處理能力,而工程師就需要更高密度的設(shè)計I/O系統(tǒng)和電路,這也是FPGA將常被導(dǎo)入架構(gòu)應(yīng)用的原因之一。
如同人體的反射動作與思考判斷後動作
為了更容易理解上述的要求,在這裡以模擬的方式來說明該運算單元(圖2)。

圖2 : 訊號判斷的處理與傳輸架構(gòu) (source:Increments) |
|
就人體身體的感測機(jī)制而言,例如包括眼睛、耳朵和皮膚等生理感測器,從外界的刺激現(xiàn)象獲得感受訊號後,會將這些感受訊號傳遞至入體內(nèi)相關(guān)機(jī)制,有一些訊號會進(jìn)入大腦,有一些訊號會進(jìn)入脊髓,並對肌肉或骨骼系統(tǒng)等發(fā)出命令。
而進(jìn)入大腦的訊號通過間腦的中繼中心,隨後在顳葉和頂葉進(jìn)行判別,再透過顳葉和枕葉的感覺部分,在額葉做出決定並在小腦發(fā)出動作控制訊號,這些訊號再通過間腦進(jìn)入肌肉骨骼系統(tǒng)。
這樣的處理機(jī)制相當(dāng)類似於CPU的功能。因為利用FPGA中的平行算術(shù)邏輯單元(Arithmetic Logic Unit;ALU)來執(zhí)行的加速運算,等同於增加頂葉和額葉等結(jié)合區(qū)的面積並增加計算量。
另一方面,因為脊髓反射動作沒有經(jīng)過大腦,因此速度很快,這樣的反射中心類似於為FPGA上精心設(shè)計的I/O系統(tǒng)電路。由於肌肉骨骼系統(tǒng)是在腦以外勵起作用並反映,就像是效應(yīng)器,使用筆和紙進(jìn)行記錄和讀取等使用外部工具。
在使用SoC FPGA的設(shè)計中,就像需要利用大腦的訊號處理是透過CPU進(jìn)行運算,而脊髓所發(fā)生的反射動作則是經(jīng)過FPGA處理。CPU可以進(jìn)行運算程序來完成許多不同的事情,但是各種過程(中斷和匯流排控制)都需要時間等待,才能在CPU處理。
源於I/O所造成時間的延遲累加
透過以下的例子,就可以了解運算工作分配的重要性,如果不能善用類似脊髓可自發(fā)生反射動作的FPGA,解決一些即時性的Feedback或校正錯誤,而是無限度的將計算工作丟給CPU,就會出現(xiàn)不斷累加的計算時間延遲結(jié)果。
這個例子是測量每個程序所需的過程時間來了解反應(yīng)速度的區(qū)別。在此項實測中,採用ARM CPU與FPGA搭配,並用AXI4通訊協(xié)定來連接,對應(yīng)在Arm CPU上映射的I /O的寫/讀速度(圖3)。這個測試是執(zhí)行30000次所需的控制時間,每次讀寫100次所花費的時間除以100,而測量計時器放置在FPGA上。

圖3 : 利用ARM CPU上映射的I /O的寫/讀速度(source:Increments) |
|
執(zhí)行機(jī)器人運動控制所需的代碼,在此是採用了時鐘獲取時間(clock_gettime),由於時鐘獲取時間本身的負(fù)荷,會有1us左右的誤差。可以發(fā)現(xiàn)進(jìn)行第10000次之後,在計算三角函數(shù)時所需要的計算時間出現(xiàn)了增加的現(xiàn)象。

圖4 : 進(jìn)行第10000次之後,計算時間出現(xiàn)增加(source:Increments) |
|
從受體到效應(yīng)器的往返時間
結(jié)果是,從FPGA向Arm CPU發(fā)送出中斷,並使用FPGA上的計時器,測量了直到從Arm進(jìn)行I/O寫入為止的時間。同時也考慮到AXI4的速度和Arm計算時間,它花費了很長的時間。從往返時間中減去AXI4通訊時間和Arm操作時間,使用處理器的程序處理時間如下(圖5~6)。

圖5 : 3萬次的封包來回時間(source:Increments) |
|

圖6 : 3萬次的運算處理時間(source:Increments) |
|
從例子可以發(fā)現(xiàn),在處理中斷的過程中,可以發(fā)現(xiàn)有延遲的情況出現(xiàn),由於中斷使用UIO的速度很慢,所以應(yīng)該利用內(nèi)和運算來進(jìn)行處理,相信回應(yīng)速度會比較快(圖7)。

圖7 : 利用內(nèi)和運算進(jìn)行處理,相信回應(yīng)速度會比較快。(source:Increments) |
|
如果要在短時間內(nèi)使用Arm處理器進(jìn)行採樣,就必須管理時程。如果想利用Arm CPU進(jìn)行短時間採樣時,就不得不認(rèn)真考慮處理中斷這個動作時所耗費的時間。
而在控制方面,訊號處理系統(tǒng)會受到時間軸的抖動影響,可以對FPGA做精確時間的平均採樣,或許這非常有用。另外,還能透過FPGA本身的高精緻度特性,在電腦程式中建立很多執(zhí)行緒,每個執(zhí)行緒都有自己的時鐘,並且嚴(yán)格定時,相信這對於在執(zhí)行各種操作的機(jī)器人運動控制系統(tǒng)中是非常有用的。