齊子昂 韓元真 吳真昱 袁嘉惠
摘 要:隨著社會的進步和人類水平的提高,工廠生產智能化的趨勢越來越明顯。而隨著工廠生產自動化的不斷發展,電機的多軸聯動控制也逐漸被人們所注意到,我們一般常見的運動軸可以分為X、Y、Z、Pitch和Yaw軸,而對于多軸聯動的控制方法也是多種多樣。本文著重敘述一種基于步進電機的多軸聯動控制系統,該系統主要由STM32單片機作為主要處理器,步進電機作為動力裝置,再由脈沖信號的脈沖數和脈沖的周期來控制步進電機的轉動角度和轉動速度,而每個軸的速度和位置數據都通過串口發送至上位機實現數據可視化,而每個軸的運動都是獨立的,也就是說多個軸可以同時運動,我們將控制三個電機同時運作,同時朝著目標方向運動,但是考慮到該機構不與其他機構產生碰撞即每兩點之間不能簡單地按照直線路徑,因此需要使用Floyd算法計算出各個點之間的最短路徑,大幅度縮短了時間,達到最好的效果。
關鍵詞:多軸聯動;串口通信;上位機;Floyd算法;最短路徑
0 引言
為了能將電機運動的時間縮短到最少時間,我們計劃采用多軸聯動的方式對步進電機進行控制。對于X、Y、Z、Pitch、Yaw幾個運動軸,若只是采取單方向直線運動的話時間無疑將會是非常長的,于是我們將控制三個電機同時運作,同時朝著目標方向運動,同時還要考慮該機構不與其他機構產生碰撞,從而計算出其最短路徑,大幅度縮短了時間,達到最好的效果。
STM32單片機為控制系統的核心,處理輸入模擬信號和對外部輸出控制信號都需要它來實現。它可以提供控制步進電機運動的脈沖信號,同時還可以將電機的各種狀態數據通過串口傳輸給上位機,將各個運動軸的數據直觀的展現出來,同時可以發送控制命令給單片機來控制它的運動。
Floyd算是最常用的求兩點間最短路徑的方法,應用在很多領域,送貨員送貨,郵遞員送信都需要事先考慮路途長短[1],在本系統中選擇最短路徑的方法既可以根據此算法來設計。
1 系統整體設計
為了實現步進電機多軸聯動的效果,需要單片機同時發出多個獨立的脈沖信號,以達到聯動的目的,然后單片機通過記錄脈沖數計算出當前各個運動軸的當前的位置,再通過數據的拆分進行串口發送,上位機進行數據的接收和還原來實現各種數據的可視化以及控制指令的發送,更加方便操作者的使用,在設定完目標位置后,系統先通過Floyd算法進行最短路徑的計算,從而規劃出最優路徑,然后在多軸聯動的情況下向著目標方向前進。
2 單片機的信號輸出與串口通信
2.1 硬件連接
本次設計所用的為57步進電機和MD542步進電機驅動器,我們采用步進電機常用的共陰極接線法即將驅動器的地線接在一起,再由單片機的三個控制引腳來對其進行控制,這三個引腳通常為ENA、DIR和PUL,分別控制電機的使能、方向和脈沖信號。將步進電機的A,B兩相線接到驅動上面對應的接線口,即可完成步進電機與驅動器的硬件連接。而對于單片機和驅動器之間的連線還需要有信號升壓模塊作為中介來完成連接,由于STM32單片機的控制信號通常為3.3V,而MD542步進電機驅動器的信號電壓一般為5V,所以單片機直接連接驅動器是無法驅動電機的。
2.2 脈沖信號的輸出
按照步進電機的一般控制邏輯來說,輸出脈沖信號就會用到STM32單片機的定時器的PWM輸出功能,而且還需要分別設置定時器的通道輸入捕獲功能來精準的控制脈沖數,這種控制方式較為麻煩。本系統中我們采用的是利用IO口來模擬脈沖信號的產生,即通過定時器中斷來使IO口的電平以一定頻率變換,從而產生脈沖信號驅動電機的轉動,此方法控制簡單易操作,而且脈沖數的設定可以用一個變量存放,改動方便,脈沖的周期也可以隨意的控制和改變。以下為脈沖信號的輸出程序邏輯圖:
2.3 上位機的設計
本系統的上位機是基于軟件Visual Studio的Windows窗體的應用程序工程平臺來編寫的,并使用C#語言編程,創建一個典型的Windows的應用程序應該包括以下幾個基本步驟:創建一個適當的窗體;向窗體中增加控件;最后增加響應用戶事件代碼[2]。單片機在收集到各個步進電機的數據后將數據拆分成一個一個的字節,打包成數據包在通過串口傳輸給上位機,而上位機在接收到數據后將數據進行處理計算即可以得出各個運動軸的位置以及電機的轉速信息,并將這些數據傳遞到各個控件中,使操作者通過上位機就可以獲得該系統中各個運動軸的數據信息。同時操作者也可以通過上位機修改各個軸的數據,這些數據將通過串口發給單片機從而實現對各個步進電機的控制,更方便的達到控制目的。
3 基于Floyd算法的最短路徑計算
在該系統中,當步進電機多軸聯動朝著目標點移動的過程中,在其運動路徑中可能會有其他機構的阻擋而造成機構之間的碰撞,即在兩個節點之間不一定存在直達的道路。當然在這種時候為了避免碰撞的發生,我們需要找到一條最短的線路來最快的到達目標位置。這是我們想到了Floyd算法,這是一種常用的最短路徑算法,具體操作方法如下。
我們先將該系統中需要到達的位置劃分成N個目標節點,我們需要做的是找出這N個目標節點之間任意兩個位置之間的最短路線,考慮到并不是每兩點之間都存在道路故不能簡單地將兩點之間的直線距離來當做最短路徑。我們令任意的節點i到節點j之間的最短距離為Wij,可以列出一個距離矩陣dis=(Wij)N×N,其中若是兩點之間沒有直接的道路即用inf代替即表示無窮大。同時我們再令任意的節點i到節點j之間的最短距離為dij。Floyd算法的基本步驟如下圖所示:
由上圖的邏輯計算過后,可以計算出最短距離矩陣D=(dij)N×N以及任意兩個目標節點之間的最短路徑所經過的節點。
4 結語
本系統利用單片機對步進電機的控制和上位機數據的采集以及最短運動路線的計算,為工業智能生產提供了一種簡潔、高效、可靠的控制方式。
參考文獻:
[1] 呂靜毅, 常賽賽, 聶佳琦, 等. 基于Floyd算法的交巡警服務平臺管轄范圍設計[J]. 電腦知識與技術, 2017, 13(10): 202-203.
[2] 董忠, 尤良方. C#Windows應用程序開發實例[J]. 天水師范學院學報, 2003(02): 59-60+62.
[3]陳香, 李璞, 劉嘯澤. 交巡警服務平臺的設置與調度[J].電子測試, 2014(04): 155-157.
*基金項目:本文是桂林電子科技大學2020年自治區級大學生創業訓練項目“一種基于視覺匹配的智能鞋柜”的項目成果,項目編號:202010595077