孟慶仙
(云南機(jī)電職業(yè)技術(shù)學(xué)院 云南省昆明市 650203)
在機(jī)器人控制系統(tǒng)設(shè)計(jì)中,目前大多數(shù)控制系統(tǒng)仍然采用單片機(jī)或者ARM 等比較簡單的控制器,而本文采用當(dāng)前比較流行的控制器件FPGA,對(duì)于多個(gè)I/O 控制也更加靈活方便。機(jī)器人在運(yùn)動(dòng)過程中的控制是由各個(gè)自由度由各種電機(jī)完成,而現(xiàn)在的最多的是伺服電機(jī)(舵機(jī))。舵機(jī)由直流電機(jī)、電機(jī)控制器、電位器和減速器等構(gòu)成,整體封裝在一個(gè)便于安裝的外殼里的伺服單元。能夠利用簡單的輸入信號(hào)比較精確的轉(zhuǎn)動(dòng)給定角度的電機(jī)系統(tǒng)。舵機(jī)安裝了一個(gè)電位器(或角度傳感器)檢測輸出軸轉(zhuǎn)動(dòng)角度,控制板根據(jù)電位器(或角度傳感器)的信息對(duì)輸出軸的角度進(jìn)行控制盒調(diào)節(jié),形成一個(gè)閉環(huán)的控制系統(tǒng)。為了降低成本,在本控制系統(tǒng)的設(shè)計(jì)中,驅(qū)動(dòng)各關(guān)節(jié)的電機(jī)均采用舵機(jī)。
機(jī)器人是一種多自由度的機(jī)械,傳統(tǒng)的控制系統(tǒng)占用控制I/O口較多,且實(shí)現(xiàn)舵機(jī)的速度調(diào)節(jié)也占用大量的CPU 時(shí)間。系統(tǒng)結(jié)構(gòu)如圖1所示。
機(jī)器人控制系統(tǒng)主要由FPGA 和舵機(jī)組成,F(xiàn)PGA 接收到來自于壓力傳感器傳遞過來的動(dòng)作指令信號(hào),將其轉(zhuǎn)化為能驅(qū)動(dòng)舵機(jī)的PWM 波,通過改變它的占空比,來改變舵機(jī)所轉(zhuǎn)的度數(shù),并且通過地址線的選擇來定位哪個(gè)舵機(jī)工作。FPGA 是整個(gè)控制系統(tǒng)的控制核心,也是整個(gè)系統(tǒng)最重要的組成部分??刂葡到y(tǒng)的軟件主要包括了通信模塊和動(dòng)作譯碼模塊。通信模塊主要用來接受上位機(jī)傳來的動(dòng)作定位信息,而動(dòng)作譯碼模塊主要是對(duì)接收到的信息進(jìn)行處理,根據(jù)定位信息來產(chǎn)生舵機(jī)的控制信號(hào),讓機(jī)器人的各個(gè)關(guān)節(jié)協(xié)調(diào)運(yùn)動(dòng),并且根據(jù)輸入信號(hào)的不同實(shí)時(shí)的調(diào)整舵機(jī)的角度。
基于FPGA 微處理器的仿人機(jī)器人控制系統(tǒng)與一般控制系統(tǒng)主要的差別是實(shí)現(xiàn)32 位的嵌入式系統(tǒng)操作,將存儲(chǔ)器、I/O 接口等外設(shè)嵌入到FPGA 中,組成一個(gè)可編程芯片系統(tǒng)。另外,利用SOPC設(shè)計(jì)中可復(fù)用的IP 核技術(shù),大大降低了系統(tǒng)的成本、體積和功耗,完全能滿足機(jī)器人控制系統(tǒng)的要求。
本文選擇的舵機(jī)主要參數(shù)如下:可控轉(zhuǎn)角范圍-90°~90°??刂泼}寬范圍0.5 ~2.5ms,周期20ms,最大扭矩/堵轉(zhuǎn)扭矩1.0kgcm,最大速度/空載速度10rad/s。舵機(jī)采用的驅(qū)動(dòng)信號(hào)是脈沖寬度調(diào)制信號(hào)(PWM),即在20ms 的周期內(nèi),輸入0.5 ~2.5ms 的脈沖寬度,對(duì)應(yīng)的轉(zhuǎn)角范圍從-90°~90°,脈沖寬度與轉(zhuǎn)角基本呈線性關(guān)系。
在本論文中將利用FPGA 的SOPC 技術(shù)自行定義實(shí)現(xiàn)PWM 功能的IP 核,來實(shí)現(xiàn)基于NiosII 軟核處理器對(duì)機(jī)器人各個(gè)關(guān)節(jié)舵機(jī)的控制。
圖1:仿人機(jī)器人控制系統(tǒng)結(jié)構(gòu)
圖2:下位機(jī)軟件設(shè)計(jì)流程
圖3
由壓力傳感器將驅(qū)動(dòng)信號(hào)輸出到相對(duì)應(yīng)的FPGA 引腳上,3 位地址線選擇控制9 個(gè)舵機(jī),2 位數(shù)據(jù)線控制相應(yīng)的動(dòng)作(即舵機(jī)角度的變化)。
下位機(jī)軟件設(shè)計(jì)主要針對(duì)fpga 控制器的編程,主要是在quartusII10.0 中開發(fā)的。征途設(shè)計(jì)流程分為設(shè)計(jì)輸入,設(shè)計(jì)編譯,設(shè)計(jì)定時(shí)分析,設(shè)計(jì)仿真,器件編程5 個(gè)過程,下位機(jī)軟件主要包括了通信模塊和動(dòng)作譯碼模塊。通信模塊主要用來接收上位機(jī)傳來的動(dòng)作定位信息,而動(dòng)作譯碼模塊主要是對(duì)接收到的信息進(jìn)行處理,根據(jù)定位信息來產(chǎn)生舵機(jī)的控制信號(hào),讓機(jī)器人的各個(gè)關(guān)節(jié)協(xié)調(diào)運(yùn)動(dòng),做出我們想要的或事先編排好的類人的動(dòng)作。下位機(jī)軟件設(shè)計(jì)程序主要流程如圖2所示。
上位機(jī)中壓力傳感器由于重力的變化引起了輸出電壓的變化,將電壓信號(hào)發(fā)送到下位機(jī)中。動(dòng)作譯碼模塊主要功能就是在接收到的編碼信號(hào)后,對(duì)信號(hào)進(jìn)行分析,判斷按鍵的動(dòng)作,并進(jìn)行舵機(jī)的選擇。根據(jù)動(dòng)作的不同產(chǎn)生了控制8 路舵機(jī)的PWM 波形變化,進(jìn)而控制機(jī)器人各個(gè)關(guān)節(jié)的運(yùn)動(dòng),進(jìn)行動(dòng)作的編排。
機(jī)器人的所有動(dòng)作都是根據(jù)重力變化不同而進(jìn)行實(shí)時(shí)的調(diào)整,它是在一定的時(shí)間與序列上的位置和姿態(tài)的組合,所以一旦選中某個(gè)舵機(jī)運(yùn)動(dòng),那么后面所有的操作都針對(duì)該選中的舵機(jī),直到有信號(hào)輸入顯示需要更換舵機(jī),復(fù)位操作除外。地址譯碼輸出控制選擇舵機(jī)動(dòng)作,作用是將舵機(jī)在當(dāng)前狀態(tài)下的基礎(chǔ)上轉(zhuǎn)動(dòng)相應(yīng)的度數(shù)。
系統(tǒng)實(shí)現(xiàn)對(duì)舵機(jī)輸出角度的控制,必須首先完成兩個(gè)任務(wù):首先是產(chǎn)生基本的PWM 周期信號(hào),此處是產(chǎn)生20ms 的周期信號(hào);其次是脈寬的調(diào)整,即模擬PWM 信號(hào)的輸出,并且調(diào)整占空比。
由于控制舵機(jī)脈沖寬度為0.5 ~2.5ms,對(duì)應(yīng)的轉(zhuǎn)角范圍從-90°~90°,脈沖寬度與轉(zhuǎn)角基本呈線性關(guān)系。通過程序控制,能使舵機(jī)勻速或變速轉(zhuǎn)動(dòng)。論文中運(yùn)用的時(shí)鐘信號(hào)為50MHZ,每次最小的角度變化量定義為0.9 度,其對(duì)應(yīng)的最小的脈寬變化量為0.01ms,
為了保證機(jī)器人在運(yùn)動(dòng)過程能夠勻速并且流暢的完成自己的動(dòng)作,根據(jù)式子(1):
即將舵機(jī)的滿量程180 度及其移動(dòng)時(shí)間分成250 等分,則舵機(jī)每移動(dòng)1 度需時(shí)100/9μs,每分步所需時(shí)間為8μs。從而得到公式(2):
將舵機(jī)分步為0.72°/步,令θ 為0.72 的整數(shù)倍,即k=θ/0.72(k=0,1,2,...,250),得公式(3):
由于將角度量化,該公式的簡化使控制器非常方便地控制舵機(jī)的動(dòng)作流暢性。
在程序中,主要是通過對(duì)PWM 的寄存器設(shè)置來產(chǎn)生不同占空比的PWM 信號(hào)的。PWM 波的寄存器主要有PWM 周期寄存器和占空比寄存器。我們需要20ms 的周期信號(hào)和占空比的各種信號(hào)。由于時(shí)鐘信號(hào)為50MHz,要得到20ms 的周期信號(hào)需將周期信號(hào)寄存器的值設(shè)為1000000,占空比寄存器的值分別設(shè)為25000 到125000 之間就能分得到脈沖寬度為0.5 ~2.5ms 占空比的PWM 信號(hào)。通過角度量化,將舵機(jī)的滿量程180 度及其移動(dòng)時(shí)間分成250等分,得到每一步0.9°改變占空比寄存器里的值為500。通過控制占空比寄存器里以500 為步長的遞增或遞減的時(shí)間間隔來達(dá)到舵機(jī)的速度調(diào)節(jié)。
本論文主要運(yùn)用的FPGA 控制舵機(jī),產(chǎn)生所需的脈沖信號(hào)。由于實(shí)驗(yàn)條件有限,為了清楚的看到仿真波形的變化,我們就把程序里所有的數(shù)字都除以500,那樣就可以縮短仿真時(shí)間。論文中一次45 度角的變化,是通過每次變化0.9 度,共50 次,每次變化中間間隔2 個(gè)周期(40ms)來完成的,所以,這個(gè)間隔應(yīng)該50 * 20000* 2 = 2 * 10^6ns = 2ms。所以,為了波形的完整性和可對(duì)比性,在波形變化之前,應(yīng)該保證有一個(gè)完整的波,即確認(rèn)操作之前,應(yīng)該留足一個(gè)完整的周期(20ms),但除以500 后,又因?yàn)镃LK 的周期改成10ns,所以應(yīng)該是20000ns。第二次確認(rèn)操作后也留足2ms。(這次是控制了多個(gè)舵機(jī))第三次操作是復(fù)原操作。(因?yàn)榍懊鏇]有針對(duì)同一個(gè)舵機(jī)兩次操作,所以2ms 也夠了。)
因此總共是6.02ms。
間隔:2,2,2,4,1990,4,200000,2,2,4,2,2,4,2,2,4,2,2,2,4,2,4,200000,2,4,200000 其中間隔的單位是周期的個(gè)數(shù)。
論文針對(duì)嵌入式機(jī)器人控制器諸多優(yōu)點(diǎn),設(shè)計(jì)了一個(gè)基于FPGA 微處理器的結(jié)構(gòu)開放、模塊化、實(shí)時(shí)性好、多任務(wù)處理機(jī)器人控制系統(tǒng),完成了PWM 信號(hào)程序設(shè)計(jì),實(shí)現(xiàn)了對(duì)機(jī)器人舵機(jī)的角度的精確控制。實(shí)現(xiàn)了仿人機(jī)器人精準(zhǔn)控制,達(dá)到了預(yù)期目標(biāo)。仿人機(jī)器人實(shí)物如圖3所示。