連百萬,韓靜卜,周樂濤
(西京學院,陜西 西安 710123)
工業(yè)機器人技術(shù)迅速發(fā)展,越來越多地用于機械、電子、汽車等行業(yè)。在工業(yè)加工中使用機械臂不僅能提高生產(chǎn)率,而且還能降低工人的勞動密度[1]。
本文提出一種四自由度機械臂的設(shè)計,以Arduino為核心,通過按鍵模塊檢測用戶的控制信號,當Arduino對控制信號進行識別后,驅(qū)動舵機控制模塊來操作相應(yīng)的舵機轉(zhuǎn)動,從而帶動整個機械臂的運動[2]。硬件部分主要有Arduino UN3、PWM舵機(MG996R,MG90S)、舵機驅(qū)動模塊PCA9685、5V3A開關(guān)電源、輕觸按鍵。使用本文設(shè)計的基于Arduino的機械臂可以對機械臂進行多關(guān)節(jié)的控制,并且能夠利用按鍵控制其抓取一定體積的物體??傮w設(shè)計框架如圖1所示。
圖1 總體設(shè)計框架
本文基于Arduino的機械臂的設(shè)計,實現(xiàn)了機械臂的控制功能,完整的功能包括以下3點:
(1)按鍵控制功能。
基于Arduino的機械臂需要通過輸入器件(按鍵模塊)來獲取用戶的操作要求,再根據(jù)按鍵信號的種類驅(qū)動外圍電路進行控制。
(2)機械臂四自由度控制功能。
系統(tǒng)的機械臂采用4個舵機進行轉(zhuǎn)軸控制,可以實現(xiàn)機械臂的四自由度控制。
(3)抓取物體功能。
機械臂組件中頂部的舵機用于對金屬爪子進行控制,通過控制金屬爪子,對應(yīng)舵機轉(zhuǎn)動便可控制其抓取一定體積的物體。
本文設(shè)計的基于Arduino的四自由度機械臂無須進行復雜的算法運算,只需要檢測用戶的按鍵輸入信號以及輸出控制信號到舵機驅(qū)動電路。選用的Arduino主控模塊使用的單片機型號為ATmega328,采用最小系統(tǒng)實現(xiàn)基本的控制功能,包括主控芯片、時鐘電路、復位電路。其中復位電路如圖2所示。
圖2 復位電路
本文選用的是PWM舵機,控制舵機轉(zhuǎn)動時需要向舵機輸入PWM信號。常見的PWM舵機控制方式有兩種:
(1)處理器使用IO直接輸出PWM信號控制。
該方式需要處理器選擇具有信號輸出功能的IO連接PWM舵機的控制引腳,通過軟件編程輸出特定的PWM信號。
(2)使用舵機驅(qū)動模塊控制。
舵機驅(qū)動模塊內(nèi)部具有驅(qū)動器實現(xiàn)對舵機的精準控制,當控制PWM舵機時,PWM信號由舵機驅(qū)動模塊產(chǎn)生。當處理器通過舵機驅(qū)動模塊,間接對PWM舵機進行控制時,處理器無須與每一路的PWM舵機進行連接,舵機直接與舵機驅(qū)動模塊連接,處理器只需與舵機驅(qū)動模塊的數(shù)字通信接口連接,然后根據(jù)特定的控制協(xié)議向舵機驅(qū)動模塊發(fā)送控制指令,便可實現(xiàn)舵機的簡單控制。處理器通過舵機驅(qū)動模塊控制舵機轉(zhuǎn)動時,一個角度只需發(fā)送一次控制指令便可,無須持續(xù)發(fā)送占用系統(tǒng)資源。同時舵機驅(qū)動模塊由于主要工作是負責PWM舵機的控制,因此常常支持多路PWM舵機的控制。
本文選擇使用的是:舵機驅(qū)動模塊對PWM舵機進行控制,模塊使用的舵機驅(qū)動芯片為PCA9685。
PCA9685使用的通信協(xié)議是I2C,所以Arduino只需要使用兩個IO口與PCA9685芯片進行連接。PCA9685是一個最大輸出十六路PWM信號的驅(qū)動芯片[3],并且每一路的PWM信號分辨率都能達到12位。PCA9685舵機驅(qū)動電路的電源電路是為模塊提供穩(wěn)定電源的首要電路,主要包括兩部分電路,MP1584電路以及RT9193-33電路。其中MP1584電路如圖3所示。
圖3 MP1584電路
通過輕觸按鍵來獲取用戶的控制需求,由于需要控制4個舵機,每個舵機需要對機械臂進行順時針和逆時針的轉(zhuǎn)動控制,因此四自由度共需要8個輕觸按鍵來獲取用戶的控制信號。當按下輕觸按鍵時,只需要將其中一個按鍵觸點連接到處理器的IO口,同一自由度的另一個按鍵觸點連接到電源或者GND,通過軟件判斷處理器的IO電平高低,便可識別當前輕觸按鍵處于按下或是彈起的狀態(tài)。按鍵電路如圖4所示。
圖4 按鍵電路
作品包含了系統(tǒng)初始化軟件設(shè)計、主循環(huán)軟件設(shè)計、Arduino按鍵IO軟件設(shè)計、舵機控制軟件設(shè)計等,軟件設(shè)計流程如圖5所示。
圖5 軟件設(shè)計流程
本設(shè)計中系統(tǒng)軟件的初始化程序為輕觸按鍵初始化、舵機驅(qū)動模塊初始化和TTL串行口初始化。由于舵機驅(qū)動模塊(PCA9685)與Arduino使用I2C的協(xié)議來進行通信,因此舵機驅(qū)動模塊的初始化是將PCA9685芯片與I2C接口連接的,Arduino的接口設(shè)置為I2C模式,然后通過I2C通信協(xié)議來設(shè)定模塊的工作頻率,最后為了實現(xiàn)每次系統(tǒng)上電,機械臂可以恢復到初始化狀態(tài),將在舵機驅(qū)動模塊初始化中,為每一路舵機設(shè)置一個默認的初始擺動角度。為了方便整個系統(tǒng)的運行調(diào)試,本文為Arduino主控模塊編寫了串口調(diào)試信息輸出功能,因此在初始化軟件中需要設(shè)置調(diào)試的TTL串行接口。串行通信需要通信方均設(shè)置同樣的數(shù)據(jù)傳輸速率后,才能進行通信。在TTL串行口通信的數(shù)據(jù)傳輸速率稱為波特率。TTL串口初始化主要是將Arduino主控模塊的TTL串行口的通信波特率設(shè)置為與PC進行通信時相同波特率,而常用的通信波特率為9 600 bps,則Arduino主控模塊系統(tǒng)軟件的TTL串行口初始化,主要將串行口通信波特率設(shè)置為9 600 bps。
在整個軟硬件系統(tǒng)搭建完成后,需要測試每個舵機對機械臂的控制精度,從而了解整個機械臂的控制精準度[4]。具體測試時,實現(xiàn)使用8個輕觸按鍵分別控制4個舵機按特定角度進行轉(zhuǎn)動,記錄每個舵機的理論控制角度和實際控制角度,統(tǒng)計成表后對數(shù)據(jù)進行分析。其中一路舵機的測試數(shù)據(jù)如表1所示,實際控制角度為多組數(shù)據(jù)中的最大值。
表1 舵機精度測試
由表1可以看出,整個Arduino軟件的舵機控制精度均保持在95%以上。因此,本文設(shè)計的基于Arduino的機械臂,控制精準度較高,能夠滿足實際使用需求。