江豪杰,周 鋒,陸欣云,王培楠,朱 寧,姜翟躍
(南京工程學院 信息與通信工程學院,江蘇 南京 211167)
機械臂是現代工業革命變革、現代工業水平高度提高催生的一種新技術產品,從較高層次來說,機械臂是集機械設計、計算機程序控制等多領域知識和多種設計方法于一身的一種新型自動化裝備,特別是近年來互聯網、大數據的發展和應用機械臂已開始從自動化向智能化領域邁進。FPGA技術應用于步進電機控制領域的技術優勢在于FPGA控制實時性高,單片機實時控制能力弱。并且FPGA內部有集成鎖相環,可實現外部時鐘的倍頻,適合高速場合,單片機的運行速度是比不上FPGA的。
圖1主控芯片采用Alter公司的EP4CE10F17C8芯片和勘智公司的K210芯片。實現根據由K210芯片驅動攝像頭識別指定顏色物體后將其坐標通過串口發送給FPGA,使其產生相應的PWM波驅動電機以使機械臂抓取相應顏色的物體。

圖1 系統框圖
通過UG軟件設計整個機械臂的結構,通過激光切割機加工制作。機械臂為三自由度關節構成。
建模分析:
圖2便是在CAD作的三維建模前的準備。

圖2 三維建模前的準備
首先,選擇三自由度機械臂的側視圖為分析面。分別以軸承底座,關節1,關節2,末端執行機構建立坐標系,量出各個需要的角度以及長度,為在solidworks中三維建模以及后續進行機械臂的運動學分析做好準備。
其次,在solidworks根據CAD作的平面圖完整詳細地建模出這個機械臂的整體結構,以便于后續分析。雖然在solidworks中建模能夠很好地表示出整個三自由度機械臂的外形結構,但是仍然無法觀察到機械臂的內部結構,于是便只能選擇作機械臂的爆炸圖。當我們作完機械臂的爆炸圖之后便可以清楚地觀察到整個三自由度機械臂的具體組成:軸承底座,支撐關節1的外殼,支撐關節2的外殼,末端執行機構,以及最核心的凸輪四桿機構。
此時,便可以發現軸承底座的作用是對整個機械臂進行旋轉運動,但最核心的仍然是這個凸輪四桿機構,我們需要對其再次分析,重新建模才能更清楚地了解機械臂的運動原理。由于關節2的外殼僅僅是與三角件連接機構鉸接并無其他作用,于是便可以把它簡化成一個長度相同、質量相同的桿。
硬件電路主要由電機驅動模塊以及K210板卡模塊組成,在電機驅動模塊的設計中加入了光電感應開關以及限位開關。電機驅動模塊通過輸入端的坐標從而控制FPGA產生相應的PWM波來控制電機的輸出狀態。K210板卡模塊則是負責顏色識別與所要識別目標的坐標的發送功能。傳感系統由光電感應開關和限位開關構成,輔助機械臂可以更加穩定地抓取目標物體。
機械臂的動作采用步進電機驅動,步進電機采用PL42B010B的型號,驅動電流為0.7A,步進電機驅動芯片采用Allegros公司出品的A4988雙極型微步電動機驅動器。該驅動器具有可調限流、過流、過熱保護,以及五種不同的細分(最低為1/16步)。它的工作電壓為8-35V,在沒有散熱片或有空氣流通的時候,每相最高可提供約為1A的電流(在有足夠冷卻的情況下,每相最高可提供約為2A的電流)。根據FPGA產生的不同的PWM波驅動電機以不同方式的轉動,來達到抓取不同位置的物體。
顏色識別部分采用勘智公司的以K210為主控芯片的Maix py bit產品來驅動OV7725來進行物體顏色的識別及物體坐標的發送。Maix py bit是基于microPython的嵌入式機器視覺模塊,目標是成為機器視覺界的“Arduino”。它成本低易拓展,開發環境友好,除了用于圖像處理外,還可以用microPython調用其硬件資源,進行I/O控制,與現實世界進行交互。實現顏色識別的過程中,首先在軟件中的機器視覺欄中根據當前環境的亮度進行閾值編輯,從而實現對指定顏色的識別與追蹤。將Maix py bit上的15腳作為串口數據發送端口,接到FPGA上的串口數據接收端口,同理,將Maix py bit上的17腳作為接收端口并與FPGA上的數據發送端口相連。同時將兩塊芯片進行共地以確保數據準確實時的傳輸。
串口發送坐標中在有效數據之前加上B3、B4作為起始標志符,有效數據之后加上B5、B6作為末尾標志符,以方便通過串口將數據傳輸至FPGA進行處理的時候,防止意外狀況從而處理錯誤的坐標。
3.3.1 限位開關
在機械臂三個軸的起始位置裝配了機械限位開關,它一方面對每一個軸的運動極限進行保護,另一方面將所有軸回歸到限位開關的位置對應的機械臂末端執行機構的位置定義為原點,從而可以對后續機械臂的位置控制建立參考原點。
3.3.2 光電感應開關
傳感器采用光電感應開光來檢測物體是否到來,檢測到物體后發送信號到芯片從而給電機驅動模塊。
圖3為電機驅動原理圖。

圖3 電機驅動原理圖
4.1.1 顏色識別
使用find_blobs函數來查找顏色圖像中的顏色色塊。為了使色彩追蹤效果好應當在非常受控制的照明環境中進行實驗。圖像選擇色彩圖RGB565的格式,選用QVGA的速度來進行識別。實驗中關閉白平衡,白平衡是默認開啟的,在顏色識別實驗中需要將其關閉。
設置顏色閾值:設置在當前穩定光照環境下所要追蹤的顏色的閾值,其語法句式如下Colour_threshold=(minL,maxL,minA,maxA,minB,maxB),括號中的數值分別為L、A、B的最大值和最小值,L、A、B的值可以在軟件maix IDE圖像左側三個坐標圖中獲得。設置blobs作為判定變量,當找到顏色時即對其使能,否則不使能,語法句式如下blobs=img.find_blobs([colour_threshold])。
4.1.2 坐標定位
通過迭代找到目標顏色區域,并將具體數據賦給變量b,相應語法句式見下:for b in blobs:此句的作用就是從blobs進行迭代取值,每次把值賦給b,而這里的blobs即為顏色識別部分的blobs,通過顏色識別中的blobs=img.find_blobs([colour_threshold]);即可將所要查找色塊對象的列表信息全部賦給blobs,此處數據很多但是通過對庫函數imag.find_blobs的學習可以知道b[5],b[6]分別對應著所要識別色塊中心坐標的x和y坐標。從而進行賦值x=b[5],y=b[6]即可實現對識別顏色對象的中心x和y坐標了。
4.1.3 坐標發送
這里我們使用串口通信的方式將所要識別顏色對象的中心x和y坐標發送給FPGA。這里我們將K210上的15腳作為數據發送腳,17腳作為數據接收腳,其對應的例化程序如下:
fm.register(board_info.PIN15,fm.fpioa.UART1_TX)
fm.register(board_info.PIN17,fm.fpioa.UART1_RX)
這里串口發送用庫函數uart_A.write()來實現,其中括號里面就是要發送的數據,這里我們將FH賦值為0作為前校驗位,以防實際應用時出現干擾。如果直接將采集到的坐標數據作為有效數據發送出去就會產生錯誤。x與y就是上面通過x=b[5],y=b[6](所賦值得到的識別顏色對象的中心x和y坐標)。
此次電機驅動部分采用DDA插補控制實現方案,本文在設計積分插補器模塊中采用了有限狀態機的方法。積分累加的過程分為三個狀態:空閑狀態(Idle)、累加狀態(ADD)和溢出狀態(Full)。在空閑狀態Idle,如果還沒有啟動信號start,則保持處于空閑等待狀態,直到啟動信號start為1有效時,則從空閑狀態讀入被積函數寄存器和累加器的初始值,轉入累加狀態(ADD)。在累加狀態(ADD),置工作忙信號Busy為1,將被積函數寄存器的值和累加器的值進行累加,累加的結果存在累加器中,如果累加有溢出,則轉入溢出狀態(Full|)。在溢出狀態(Full|),輸出插補脈沖,計數器的值(為被積函數寄存器的終點坐標值)減1,然后繼續累加,直至計數器的值減為0,返回到空閑狀態。
以下為狀態轉移代碼部分:
if(x[16]==1'b1)//x[16]作為x軸進位標志,如果為1,進入狀態2,
S=2;
if(y[16]==1'b1)//y[16]作為y軸進位標志,如果為1,進入狀態3,
S=3;
if(z[16]==1'b1)//z[16]作為z軸進位標志,如果為1,進入狀態4,
S=4;
if((counter_A==16'b0)&(counter_B==16'b0))//如果計數器為0就回到空閑狀態,
begin Busy﹤=1'b0;S=0;end
主程序流程圖見圖4。

圖4 主程序流程圖
通過對顏色識別、物體抓取進行測試,可以看到機械臂可以實現對不同顏色物體的準確抓取。其具體實物圖如圖5。

圖5 機械臂實物圖