李洪濤
(華中光電技術(shù)研究所 光電技術(shù)研究部, 湖北 武漢 430223)
舵機(jī)具有廉價(jià)、易控和輕質(zhì)的特點(diǎn),越來越多地應(yīng)用于機(jī)器人設(shè)計(jì)領(lǐng)域[1],而一般的機(jī)器人并不是由單個(gè)舵機(jī)構(gòu)成,而是由多個(gè)舵機(jī)構(gòu)成的舵機(jī)組,由該組舵機(jī)協(xié)同完成一系列機(jī)器人的動(dòng)作。 本文提出一種利用ARM 控制器,通過串口實(shí)現(xiàn)機(jī)器人舵機(jī)組的控制方法。
機(jī)器人的本體結(jié)構(gòu)如圖1 所示,此機(jī)器人由腰部、手臂、手肘、手腕和手部組成[2,3]部分的旋轉(zhuǎn)運(yùn)動(dòng)均由舵機(jī)實(shí)現(xiàn), 各部分之間均通過支架或桿件實(shí)現(xiàn)它們之間的連接。 機(jī)器人的底座可通過螺栓固定下安裝裝置上,實(shí)現(xiàn)機(jī)器人的定位和固定。
圖1 機(jī)器人本體結(jié)構(gòu)圖Fig.1 Robot-body structure diagram
常用的舵機(jī)一般由三根線構(gòu)成,分別為電源線、地線和控制線。 電源線和地線用于提供舵機(jī)內(nèi)部直流電機(jī)所需能源,電壓通常介于4.8V~7.2V[4],控制線的輸入是一個(gè)周期固定為20ms, 脈沖寬度T 介于0.5ms~2.5ms 之間可調(diào)的PWM 信號(hào)如圖2(a)所示。舵機(jī)的旋轉(zhuǎn)角度與脈沖寬度成正比關(guān)系,兩者之間的具有線性關(guān)系如圖2(b)所示,當(dāng)輸入信號(hào)的脈沖寬度為0.5ms 時(shí), 舵機(jī)旋轉(zhuǎn)至0°;當(dāng)輸入信號(hào)的脈沖寬度為1.5ms 時(shí),舵機(jī)旋轉(zhuǎn)至90°;當(dāng)輸入信號(hào)的脈沖寬度為2.5ms 時(shí),舵機(jī)旋轉(zhuǎn)至180°。
圖2 舵機(jī)控制信號(hào)Fig.2 Rubber control signal
由上述的機(jī)器人本體可以看出,本機(jī)器人手臂一共有5 個(gè)舵機(jī),分別控制著機(jī)器人的腰部、手臂、肘部、腕部和手的動(dòng)作。 為了實(shí)現(xiàn)機(jī)器人手臂協(xié)調(diào)工作,利用TI 公司的TM4C123GH6PGE 芯片作為機(jī)器人的主控制芯片,該芯片是基于Cortex-M4 的系列微控制器, 利用此芯片所構(gòu)建的控制系統(tǒng)結(jié)構(gòu)框圖如圖3 所示。
各電機(jī)的電源和地分別與6V的直流電源連接,用于為舵機(jī)內(nèi)部的直流電機(jī)提供能源[5]。 MCU 的并行端口PD 端口與各5 個(gè)舵機(jī)的控制信號(hào)線相連接,用于為其提供各部分的控制信號(hào)。 電腦PC機(jī)通過串行通訊接口與MCU 相連, 利用電腦端設(shè)計(jì)的軟件實(shí)現(xiàn)機(jī)器人的控制[6]。
圖3 機(jī)器人控制系統(tǒng)結(jié)構(gòu)框圖Fig.3 Robot control system diagram
為了保證電腦PC 機(jī)實(shí)現(xiàn)對(duì)機(jī)器人的設(shè)計(jì),設(shè)計(jì)出一套控制協(xié)議可方便控制各機(jī)器人的動(dòng)作。 協(xié)議格式及其解釋如表1 所示。 如讓1 號(hào)機(jī)器人5 號(hào)電機(jī)以每秒750的脈寬從當(dāng)前位置旋轉(zhuǎn)0°,則命令可以寫成#15P1500S0750!;若讓1 號(hào)機(jī)器人電機(jī)1 和電機(jī)5 在2.5s 的時(shí)間內(nèi), 同步從當(dāng)前位置分別運(yùn)行至0°和180°,其命令則為#11P0500#5P2500T2500!
根據(jù)表1 所設(shè)計(jì)的舵機(jī)控制協(xié)議,MCU 根據(jù)PC 機(jī)提供的控制命令按照其協(xié)議的要求控制多個(gè)舵機(jī)的動(dòng)作。 根據(jù)上述的協(xié)議要求設(shè)計(jì)程序流程圖如圖4 所示。
為了實(shí)現(xiàn)機(jī)器人舵機(jī)組的控制,ARM 控制器的主程序如圖4(a)所示,程序開始后做好串口的初始化設(shè)計(jì),如串口的端口 號(hào)、 波 特率、奇偶校驗(yàn)等參數(shù),之后啟動(dòng)串口;同時(shí)設(shè)置定時(shí)器、定時(shí)初值、計(jì)數(shù)器初值等參數(shù), 之后啟動(dòng)定時(shí)器。 在主程序初始化參數(shù)設(shè)置完成之后,便進(jìn)入查詢循環(huán),如果數(shù)據(jù)處理標(biāo)志位被置位,則立刻進(jìn)行串口數(shù)據(jù)的解析與處理, 為定時(shí)器賦上新的計(jì)數(shù)值,以便生成新的PWM 波形。 串口中斷程序?qū)崟r(shí)地將串口接收到的數(shù)據(jù)存入內(nèi)存, 當(dāng)接收到命令的結(jié)束標(biāo)志符‘! ’時(shí),便認(rèn)為此次的串行命令行結(jié)束,立刻將數(shù)據(jù)處理標(biāo)志位置位,以便主程序能及時(shí)分析此命令行的操作指令。定時(shí)器PWM 脈沖生成程序利用定時(shí)器中斷實(shí)現(xiàn),定時(shí)器以1~2μs 的定時(shí)周期來中斷, 在中斷程序中設(shè)置一個(gè)計(jì)數(shù)器用來記錄進(jìn)入中斷的次數(shù),以便知道當(dāng)前的總定時(shí)時(shí)間, 每到20ms 的時(shí)間時(shí),計(jì)數(shù)器的值便清零,同時(shí)連接舵機(jī)的脈沖控制端口的電平也轉(zhuǎn)為高電平,以標(biāo)記一個(gè)新的PWM 周期開始; 在計(jì)數(shù)增加的過程中,由于主程序根據(jù)接收的命令已經(jīng)為每一個(gè)舵機(jī)設(shè)置了計(jì)數(shù)值,此時(shí)把總的計(jì)數(shù)值與每個(gè)舵機(jī)的計(jì)數(shù)值進(jìn)行比較,若達(dá)到該舵機(jī)的設(shè)定計(jì)數(shù)值, 便讓此舵機(jī)對(duì)應(yīng)端口的電平輸出為低,以此方法可完成各舵機(jī)的PWM 同步輸出。
表1 機(jī)器人控制協(xié)議格式Tab.1
圖4 ARM 程序設(shè)計(jì)Fig.4 ARM program design
本文針對(duì)目前應(yīng)用較為廣泛的機(jī)器人舵機(jī)組的控制,設(shè)計(jì)了機(jī)器人舵機(jī)組的控制器硬件結(jié)構(gòu),并提出一種利用計(jì)算機(jī)串口控制機(jī)器人舵機(jī)組的快速控制方法,設(shè)計(jì)了單個(gè)舵機(jī)運(yùn)行的協(xié)議和舵機(jī)組同步運(yùn)行的協(xié)議格式,并根據(jù)協(xié)議的格式設(shè)計(jì)了基于ARM 的程序解析和處理方法,可以較為便捷地實(shí)現(xiàn)機(jī)器人的各類控制動(dòng)作。此方法為機(jī)器人復(fù)雜的機(jī)械動(dòng)作奠定了基礎(chǔ), 機(jī)器人操作人員可利用此協(xié)議設(shè)計(jì)搬運(yùn)碼垛、模擬焊接、產(chǎn)品裝配等具體的動(dòng)作。本文所設(shè)計(jì)的協(xié)議結(jié)構(gòu),除了可以完成單個(gè)機(jī)器人的控制之外,在不增加任何硬件的基礎(chǔ)上,還可以多機(jī)器人協(xié)作, 利用一個(gè)電腦端可根據(jù)每個(gè)機(jī)器人的設(shè)備地址完成多個(gè)機(jī)器人協(xié)同操作。