徐操喜, 馮 建, 董斯特, 李成章
(廣東交通職業(yè)技術(shù)學(xué)院 信息學(xué)院, 廣州510800 )
在機(jī)械手控制系統(tǒng)中,工業(yè)計(jì)算機(jī)采用攝像頭對目標(biāo)物體進(jìn)行識別并三維定位,根據(jù)三維坐標(biāo)及每個(gè)機(jī)械臂長度,逆運(yùn)算出各控制舵機(jī)與水平面夾角[1]。 由于各機(jī)械手臂互相連接,上層只考慮每個(gè)機(jī)械臂相對于水平線的角度,而對于底層驅(qū)動(dòng),由于機(jī)械臂水平夾角互相影響,改變其中任何一個(gè)夾角,其余機(jī)械臂水平夾角也隨之牽連變化,從而要求底層驅(qū)動(dòng)要在控制上進(jìn)行調(diào)整,定位到設(shè)定的三維空間位置。
系統(tǒng)包括了軟件控制系統(tǒng)以及電路控制系統(tǒng)兩部分。
硬件系統(tǒng)包括MCU 核心控制系統(tǒng)、電源降壓模塊、多路舵機(jī)控制模塊。
MCU 采用宏晶公司的IAP15W4K58S4,此芯片采用8051 內(nèi)核,兼容傳統(tǒng)8051 指令系統(tǒng),一個(gè)時(shí)鐘周期可以執(zhí)行一條單字節(jié)指令,相比傳統(tǒng)12T,效率提高了12 倍,能滿足大部分小型系統(tǒng)控制要求,也完全能滿足本設(shè)計(jì)控制要求。
一個(gè)機(jī)械手有多個(gè)機(jī)械臂,每個(gè)機(jī)械臂由1 個(gè)舵機(jī)控制。 本控制機(jī)械手模型如圖1 所示。 由于每個(gè)舵機(jī)需要采用1 路PWM 控制,而MCU 本身資源有限,通過軟件產(chǎn)生多路PWM 難度比較大,因此本方案采用舵機(jī)控制專用芯片PCA9685,PCA9685 可以輸出16 路舵機(jī)控制信號,采用I2C 總線與MCU通信交換數(shù)據(jù),每路輸出頻率可編程配置,從40 Hz到1 KHz,占空比從0%到100%。
圖1 機(jī)械手模型Fig. 1 Manipulator model
為了隔離舵機(jī)電磁噪聲對MCU 的干擾,系統(tǒng)對舵機(jī)及MCU 獨(dú)立供電,舵機(jī)電源轉(zhuǎn)換芯片采用DCDC 轉(zhuǎn)換芯片LM2575-5.0,MCU 供電采用LM2576-5.0 降壓到5 V,再采用線性降壓芯片AS1117-3.3 V降到3.3 V 后提供給MCU。 LM2576 采用PWM 控制方式輸出電壓,轉(zhuǎn)換效率根據(jù)輸入電壓可達(dá)75%~88%,輸出電流3 A,滿足系統(tǒng)電源功率要求。 為了兼顧電源轉(zhuǎn)換效率以及電源紋波干擾對MCU 的影響,LM2576-5.0 穩(wěn)壓到5 V 之后,采用線性穩(wěn)壓芯片AS1117-3.3 V 將5 V 降低到3.3 V,一方面提高電源轉(zhuǎn)換效率,另一方面紋波也得到控制,電源供電方案如圖2 所示。
圖2 電源供電方案Fig. 2 Power supply scheme
軟件控制系統(tǒng)包括了串行通信程序設(shè)計(jì)、雙機(jī)通信協(xié)議設(shè)計(jì)、控制命令合理性檢測、各舵機(jī)夾角關(guān)系分析、舵機(jī)控制程序設(shè)計(jì)。
上位機(jī)與機(jī)械手模塊采用串行異步方式通信,上位機(jī)按雙方約定協(xié)議把控制參數(shù)傳到MCU,MCU收到數(shù)據(jù)后對數(shù)據(jù)進(jìn)行校驗(yàn),無誤后按控制參數(shù)對舵機(jī)進(jìn)行控制。
IAP15W4K58S4 串行通信配置步驟:
(1)通過寄存器P_SW1 配置使用IO 引腳;
(2)通過定時(shí)器配置串行通信口的波特率;
(3)開中斷;
初始配置代碼如下:
ACC = P_SW1;
ACC &= ~(S1_S0 | S1_S1); / /配置發(fā)送接收對應(yīng)IO 引腳 P_SW1 = ACC; / /通過ACC把配置參數(shù)寫入P_SW1
SCON = 0x50; / /數(shù)據(jù)位為8 位,可變波特率
AUXR = 0x40; / /定時(shí)器1 為1T 模式
TMOD = 0x20; / /定時(shí)器1 為模式2(8 位自動(dòng)重載)
TL1 = (256 - (FOSC/32/BAUD)); / /設(shè)置波特率重裝值
TH1 = (256 - (FOSC/32/BAUD));
TR1 = 1; / /定時(shí)器1 開始工作
ES = 1; / /使能串口中斷
EA = 1;/ /開總中斷
通信協(xié)議是兩個(gè)系統(tǒng)正確通信的基礎(chǔ),通信協(xié)議字長設(shè)置為10 個(gè)字節(jié),包括起始字節(jié)以及結(jié)束字節(jié)。 中間包括有效數(shù)據(jù)位12,一個(gè)CRC 校驗(yàn)位,其結(jié)構(gòu)如圖3 如示。
圖3 通信協(xié)議Fig. 3 Communication protocol
其中,start 位為起始位0x55,end 為結(jié)束位0xAA,CRC 為data1 ~data12 的CRC 校驗(yàn)位,data1、data2 為舵機(jī)1 的16 位水平夾角(高8 位為data1 ,低8 位為data2),其余類推為data3、data4 為舵機(jī)2的16 位水平夾角,……data11、data12 為舵機(jī)6 的16 位水平夾角。
機(jī)械手運(yùn)動(dòng)由6 個(gè)舵機(jī)控制[3], 實(shí)物如圖4 所示。 標(biāo)注1 為機(jī)械臂1,2 為機(jī)械臂2,3 為機(jī)械臂3,4 為機(jī)械臂4。 舵機(jī)1 控制機(jī)械手在Y 軸方向轉(zhuǎn)動(dòng),舵機(jī)2 控制機(jī)械臂2 繞機(jī)械臂1 轉(zhuǎn)動(dòng),舵機(jī)3 控制機(jī)械臂3 繞機(jī)械臂2 轉(zhuǎn)動(dòng),舵機(jī)4 控制機(jī)械臂4 原位置轉(zhuǎn)動(dòng),改變機(jī)械手姿態(tài),不改變空間坐標(biāo)。 舵機(jī)5 控制機(jī)械臂4 繞機(jī)械臂3 轉(zhuǎn)動(dòng)。 舵機(jī)6 改變機(jī)械手姿態(tài),不改變空間位置。
圖4 機(jī)械手實(shí)物Fig. 4 Manipulatormaterial object
對轉(zhuǎn)動(dòng)角度進(jìn)行測量標(biāo)定,得到數(shù)據(jù)如表1 所示。
表1 每個(gè)機(jī)械手測量標(biāo)定結(jié)果Tab. 1 Measurement and calibration results
機(jī)械手各機(jī)械臂是一個(gè)串連控制結(jié)構(gòu),由機(jī)械結(jié)構(gòu)分析可得知,它們水平夾角會傳遞影響,夾角α改變會引起夾角β、γ 改變,夾角β 改變會引起γ 改變。 MCU 在接收到上位機(jī)發(fā)送過來的角度時(shí),一方面需要考慮到夾角之間大小關(guān)系導(dǎo)致計(jì)算方法,另一方面需要考慮到水平夾角的傳遞影響。
設(shè)4 個(gè)夾角機(jī)械臂與水平面初始角度值為x,y,z,w,預(yù)定目標(biāo)角度為x1,y1,z1,w1,舵機(jī)2,舵機(jī)3,舵機(jī)5 實(shí)際所需要轉(zhuǎn)的角度為x2,y2,z2。 具體運(yùn)算方法如下:
MG996 舵機(jī)是一種位置伺服的驅(qū)動(dòng)器,需要周期為20msPWM 信號控制,適用于那些需要角度不斷變化并可以保持的控制系統(tǒng),1.5ms 為基準(zhǔn)信號[2]。 其信號控制要求如圖5 所示。 MG996 將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。 最后,電壓差的正負(fù)輸出到電機(jī)驅(qū)動(dòng)芯片,決定電機(jī)的正反轉(zhuǎn)。 當(dāng)電機(jī)轉(zhuǎn)速一定時(shí),通過級聯(lián)減速齒輪帶動(dòng)電位器旋轉(zhuǎn),使得電壓差為0,電機(jī)停止轉(zhuǎn)動(dòng)。
圖5 舵機(jī)的控制要求Fig. 5 Steering gear control
舵機(jī)控制芯片PCA9685 對6 個(gè)舵機(jī)進(jìn)行控制,PCA9685 可以控制16 路舵機(jī),與MCU 通信采用I2C 總線。 每路輸出頻率可編程配置,從40 Hz 到1 KHz,占空比從0%到100%。 其最小核心板如圖6所示。 其中板上A0~A5 為PCA9685I2C 地址設(shè)置,默認(rèn)設(shè)置(右上角A0~A5 都不焊)地址為0X80,OE引腳為使能腳,低電平有效,VCC 為芯片電源,3.3 V~5 V。
圖6 PCA9686 舵機(jī)控制電路板Fig. 6 Steering gear control circuit board
V +為舵機(jī)供電電源引腳,5 V ~5. 5 V。PCA9685 每個(gè)輸出通道擁有4 個(gè)控制寄存器LEDx_ON_L、LEDx_ON_H、LEDx_OFF_L、LEDx_OFF_H??刂萍拇嫫鳛? 位,儲存輸出通道高電平時(shí)間和低電平時(shí)間。
PCA9685 程序設(shè)計(jì)包括兩個(gè)關(guān)鍵步驟:
步驟1配置PCA9685 的PWM 輸出為50 Hz,此頻率剛好對應(yīng)MG996 的控制信號要求。 其關(guān)鍵代碼如下[3]:
f *= 0.92; / /頻率設(shè)置中的過沖校正
prescal= 25000000;
prescal/ = 4096;
prescal / =;
prescal -= 1;
pres = floor(prescal+0.5);
begin();
mode1 = I2C_read(PCA9685_M(jìn)ODE1);
mode2 = (mode1&0x7F) | 0x10;
I2C _write(PCA9685_M(jìn)ODE1, mode2);
I2C _write(PCA9685_PRESCALE, pres);
I2C _write(PCA9685_M(jìn)ODE1, mode1);delayms(2);
I2C _write(PCA9685_M(jìn)ODE1,mode1 | 0xa1);
步驟2編 寫 函 數(shù)PCA9685 _ SET _ PWM(unsigned int n, unsigned int on, unsigned int off)用于設(shè)定不同通道的占空比,方便主函數(shù)對其調(diào)用控制,其中n 為所要控制通道,on 為信號高電平時(shí)間,off 為信號低電平時(shí)間,其關(guān)鍵代碼如下所示:
I2C _write(LED0_ON_L+4*n,on&0xff);
I2C _write(LED0_ON_H+4*n,on>>8);
I2C _write(LED0_OFF_L+4*n,off&0xff);
I2C _write(LED0_OFF_H+4*n,off>>8);
程序運(yùn)行過程如下:開始運(yùn)行,控制機(jī)械臂轉(zhuǎn)到初始位置,記錄機(jī)械臂之間夾角。 等待上位發(fā)送控制命令,收到控制命令之后,計(jì)算得到實(shí)際轉(zhuǎn)動(dòng)角度,把實(shí)際轉(zhuǎn)動(dòng)角度與機(jī)械臂夾角進(jìn)行轉(zhuǎn)換運(yùn)算,判斷是否在機(jī)械臂夾角范圍內(nèi),如果在夾角允許范圍內(nèi),則輸出實(shí)際控制命令,如果不在允許范圍內(nèi),則返回錯(cuò)誤信息至上位機(jī)。 程序流程如圖7 所示。
圖7 程序流程圖Fig. 7 Programme flow diagram
測試前設(shè)置機(jī)械手初始位置,設(shè)機(jī)械臂初始水平角度為x=90,y=0,z=0。 機(jī)械臂1&2 夾角為o,機(jī)械臂2&3 夾角為p,機(jī)械臂3&4 夾角為q。 在初始位置數(shù)據(jù)如表2 所示。
表2 機(jī)械手初始值化各參數(shù)Tab. 2 Initial value of manipulator parameters
測試4 組數(shù)據(jù),如表3 所示。 前兩組數(shù)據(jù)是普通常規(guī)值測試,后兩組接近連界測試,測試結(jié)果機(jī)械手都達(dá)到了預(yù)定角度,驗(yàn)證了系統(tǒng)設(shè)計(jì)可行性。
表3 測試數(shù)據(jù)Tab. 3 Test result
本文討論了使用舵機(jī)的驅(qū)動(dòng)模塊設(shè)計(jì),舵機(jī)在應(yīng)用上具有低成本,控制簡單,在一些低端的AGV搬運(yùn)機(jī)器人、教學(xué)儀器、果園采摘上也有廣泛應(yīng)用,但由于設(shè)計(jì)局限,其精度低,難以適應(yīng)精度要求高的場合,在這些高精度要求場合一般要求步進(jìn)電機(jī)加上減速箱。