韓玉龍 趙 瑾 申忠宇 王欣然
(南京師范大學(xué)電氣與自動(dòng)化工程學(xué)院,江蘇 南京 210014)
?
競(jìng)賽機(jī)器人多舵機(jī)控制方法的研究與實(shí)現(xiàn)
韓玉龍趙瑾申忠宇王欣然
(南京師范大學(xué)電氣與自動(dòng)化工程學(xué)院,江蘇 南京210014)
摘要:針對(duì)競(jìng)賽機(jī)器人中多舵機(jī)的運(yùn)動(dòng)控制,研究了以Atmega128為主控芯片的多路舵機(jī)控制方法的設(shè)計(jì)與實(shí)現(xiàn)。通過(guò)單片機(jī)內(nèi)部定時(shí)器匹配中斷和分時(shí)復(fù)用的方法,實(shí)現(xiàn)了多路舵機(jī)精準(zhǔn)的位置控制,并實(shí)時(shí)優(yōu)化多路舵機(jī)的最小步長(zhǎng),滿(mǎn)足了多路舵機(jī)的速度控制要求。設(shè)計(jì)了AVR的Bootloader自引導(dǎo)程序,結(jié)合Visual Basic 6.0開(kāi)發(fā)了一款簡(jiǎn)易的多舵機(jī)可視化編程調(diào)試軟件,實(shí)現(xiàn)了PC機(jī)與AVR之間數(shù)據(jù)通信、下載、更新動(dòng)作庫(kù)等功能。該軟件被成功應(yīng)用于中國(guó)機(jī)器人大賽中。
關(guān)鍵詞:機(jī)器人多舵機(jī)單片機(jī)上位機(jī)PWM分時(shí)復(fù)用VB
0引言
直流伺服電機(jī),也稱(chēng)舵機(jī),是一種位置控制伺服直流電機(jī)。舵機(jī)的控制信號(hào)實(shí)際上是一種脈沖寬度調(diào)制信號(hào)(pulse width modulation,PWM)。對(duì)于中國(guó)機(jī)器人大賽中的具有10個(gè)自由度的自由體操機(jī)器人而言,10個(gè)舵機(jī)形成了體操機(jī)器人的10個(gè)不同運(yùn)動(dòng)關(guān)節(jié),那么對(duì)于多舵機(jī)的控制就要產(chǎn)生多路獨(dú)立的PWM信號(hào)[1-3]。利用AVR單片機(jī)內(nèi)部定時(shí)器匹配中斷和分時(shí)復(fù)用的方法,通過(guò)單片機(jī)普通的數(shù)字I/O口,實(shí)現(xiàn)了多路脈寬可調(diào)的PWM波形輸出,且精度高[4]、成本低、性能穩(wěn)定[5]。結(jié)合自由體操機(jī)器人的動(dòng)作要求,設(shè)計(jì)了一款競(jìng)賽機(jī)器人控制系統(tǒng)電路,以及基于Visual Basic6.0的簡(jiǎn)易編程調(diào)試軟件。
1競(jìng)賽機(jī)器人控制系統(tǒng)電路設(shè)計(jì)
AVR單片機(jī)控制系統(tǒng)普遍應(yīng)用于中國(guó)機(jī)器人大賽的自由體操機(jī)器人的比賽項(xiàng)目中。要完成比賽項(xiàng)目,首先必須通過(guò)AVR單片機(jī)產(chǎn)生10路PWM周期信號(hào),其次還要確保脈寬隨時(shí)可控可調(diào)。針對(duì)方波的畸變,增加了光耦抗干擾電路設(shè)計(jì),使得輸出的PWM精準(zhǔn)、可靠性高;結(jié)合現(xiàn)場(chǎng)比賽規(guī)則和AVR單片機(jī)的特點(diǎn),設(shè)計(jì)使用RS-232接口實(shí)現(xiàn)下位機(jī)與上位機(jī)的通信。競(jìng)賽型機(jī)器人控制器的硬件均采用模塊化和功能化的結(jié)構(gòu)設(shè)計(jì)方法??刂葡到y(tǒng)框圖如圖1所示。
圖1 控制系統(tǒng)框圖Fig.1 Block diagram of the control system
2電路設(shè)計(jì)
2.1系統(tǒng)電路設(shè)計(jì)
自由體操競(jìng)賽機(jī)器人的控制器采用ATMEL公司的Atmega128單片機(jī)作為主控芯片。該款單片機(jī)基于RISC結(jié)構(gòu),具有8位低功耗CMOS微控制器,最大具有48個(gè)可編程的I/O口,非常適合控制多自由度的微小型機(jī)器人。該單片機(jī)中具有2個(gè)16位定時(shí)器、2個(gè)8位定時(shí)器、任選2個(gè)定時(shí)器,可滿(mǎn)足舵機(jī)最大精度的轉(zhuǎn)角控制??刂破鞑捎猛饨幼罡?6 MHz的石英晶振來(lái)產(chǎn)生系統(tǒng)時(shí)鐘,使得系統(tǒng)定時(shí)更加精準(zhǔn)。
2.2光耦抗干擾電路
通過(guò)單片機(jī)輸出的PWM經(jīng)過(guò)光電耦合器,提高了抗干擾能力。但輸出的PWM波在傳輸?shù)倪^(guò)程中被反相了,因此從光耦出來(lái)的信號(hào)必須由反相器HEF40106施密特進(jìn)行反相。在施密特反相器中對(duì)光耦出來(lái)的反相PWM進(jìn)行恢復(fù)、整形,并消除上升沿和下降沿的畸變,產(chǎn)生標(biāo)準(zhǔn)的PWM方波信號(hào)。
2.3串口通信電路
AVR單片機(jī)接收上位機(jī)發(fā)送數(shù)據(jù),上傳、下載應(yīng)用層代碼,以此來(lái)完成機(jī)器人的動(dòng)作。內(nèi)部配有獨(dú)立的波特率發(fā)生率,能方便地與PC機(jī)實(shí)現(xiàn)串行通信。由于USART使用的是CMOS電平,須通過(guò)電平轉(zhuǎn)化才能實(shí)現(xiàn)RS-232通信。該電路采用MAX232電平轉(zhuǎn)換芯片。串行通信工作速率為19 200 bit/s,具體配置模式是1位起始位、8位數(shù)據(jù)位、1位停止位、無(wú)奇偶校驗(yàn)等。
2.4電源設(shè)計(jì)電路
自由體操機(jī)器人選用的舵機(jī)工作額定電壓為7.4 V。在額定電壓下,可發(fā)揮舵機(jī)的最大轉(zhuǎn)速和扭矩。AVR128單片機(jī)供電額定電壓為3.3 V,須對(duì)供電電源進(jìn)行降壓電路設(shè)計(jì)。本文采用三端穩(wěn)壓器1117。輸入端C1、C3電容用來(lái)抵消輸入、輸出線(xiàn)較長(zhǎng)的電感效應(yīng),防止電路產(chǎn)生自激振蕩;C2用來(lái)濾除輸入電壓的高頻紋波。
3競(jìng)賽機(jī)器人多舵機(jī)控制方法
對(duì)于多路舵機(jī)的同時(shí)運(yùn)動(dòng),必須考慮對(duì)普通I/O數(shù)字端口的擴(kuò)展,分時(shí)復(fù)用處理。首先利用了兩個(gè)定時(shí)器/計(jì)數(shù)器:一個(gè)是周期定時(shí)器,選用8位定時(shí)器/計(jì)數(shù)器T0;另一個(gè)是脈寬計(jì)數(shù)器,選用16位定時(shí)器T1。其中T1定時(shí)器定時(shí)周期設(shè)為10 μs,因?yàn)槎鏅C(jī)的每度轉(zhuǎn)角對(duì)應(yīng)脈寬為(2 500-500)/180=11.11 μs??梢源_定的是,采用10 μs定時(shí),可以確保舵機(jī)的精度在1°以?xún)?nèi)。
根據(jù)比賽現(xiàn)場(chǎng)的要求,實(shí)現(xiàn)了機(jī)器人的關(guān)節(jié)自由度速度配置,即在完成每個(gè)動(dòng)作過(guò)程中就可以對(duì)每路舵機(jī)進(jìn)行速度調(diào)節(jié)[6]。對(duì)AVR單片機(jī)進(jìn)行了高級(jí)應(yīng)用,對(duì)其程序區(qū)域固化,能適應(yīng)自編程更新機(jī)制,即進(jìn)行了自引導(dǎo)程序(bootloader)的實(shí)現(xiàn)和驗(yàn)證。另開(kāi)發(fā)了一款基于VB的可視化調(diào)試平臺(tái),便于PC機(jī)與AVR單片機(jī)實(shí)現(xiàn)上傳、下載、更新動(dòng)作庫(kù)等。
3.1舵機(jī)的組成及工作原理
模擬舵機(jī)由金屬外殼、一個(gè)小型直流電機(jī)、一組減速金屬齒輪組、一個(gè)旋轉(zhuǎn)電位器和一塊控制板組成。舵機(jī)的控制信號(hào)由PWM波決定。當(dāng)PWM信號(hào)輸入舵機(jī)內(nèi)部的解調(diào)電路,將會(huì)獲得一個(gè)直流偏置電壓。舵機(jī)內(nèi)部產(chǎn)生一個(gè)周期為20 ms,脈寬為1.5 ms的基準(zhǔn)信號(hào),將獲得的直流偏置電壓與電位器反饋的電壓進(jìn)行差運(yùn)算,得到差值Ue。將此電壓差Ue送入控制電路中,以驅(qū)動(dòng)電機(jī)的正反轉(zhuǎn)。通過(guò)級(jí)聯(lián)齒輪組降低轉(zhuǎn)速,獲得較大的扭矩,且級(jí)聯(lián)齒輪組末端連接電位器旋轉(zhuǎn),直到Ue等于0,舵機(jī)保持穩(wěn)定狀態(tài),勵(lì)磁停轉(zhuǎn)。
模擬舵機(jī)有三根導(dǎo)線(xiàn),分別是:電源正線(xiàn)、地線(xiàn)、信號(hào)線(xiàn)。電源正線(xiàn)、地線(xiàn)為舵機(jī)內(nèi)部直流電機(jī)供能,其電壓一般在4~7 V之間。方波的標(biāo)準(zhǔn)周期為20 ms。舵機(jī)的轉(zhuǎn)動(dòng)角度在0°~180°之間。脈寬的持續(xù)時(shí)間決定舵機(jī)的轉(zhuǎn)動(dòng)角度[7]。
3.2多路舵機(jī)分時(shí)復(fù)用控制方法
控制舵機(jī)從0°~180°轉(zhuǎn)角的脈寬為0.5~2.5 ms。出于舵機(jī)之間的差異性和安全性的考慮,控制舵機(jī)實(shí)際的脈寬在0.7~2.3 ms之間。由于其工作的脈寬小于周期的1/8,因此可以利用軟件定時(shí)和定時(shí)器硬件中斷產(chǎn)生8路穩(wěn)定的PWM。本方法實(shí)際相當(dāng)于把20 ms的MCU時(shí)間作為一個(gè)控制周期,將2.5 ms作為每一個(gè)時(shí)間區(qū)間,這樣就可以利用每一個(gè)時(shí)間區(qū)間來(lái)調(diào)整每一路PWM輸出的脈寬,從而實(shí)現(xiàn)了多舵機(jī)不同位置在同一周期的控制。
3.3多路舵機(jī)分時(shí)復(fù)用軟件設(shè)計(jì)
多路舵機(jī)分時(shí)控制軟件實(shí)現(xiàn)過(guò)程如下: T0定時(shí)器用來(lái)產(chǎn)生2.5 ms的周期,并且在每個(gè)周期到來(lái)時(shí),產(chǎn)生定時(shí)匹配中斷,在中斷程序中對(duì)應(yīng)端口配置成高電平;T1定時(shí)器用來(lái)產(chǎn)生10 μs的定時(shí)周期,在每個(gè)周期到來(lái)時(shí)發(fā)生匹配中斷,用count來(lái)計(jì)數(shù)10 μs的個(gè)數(shù)。在主程序中不斷檢測(cè)相對(duì)應(yīng)硬件端口脈寬數(shù)組中對(duì)應(yīng)的值是否與count相等。如果相等,則拉低該位電平,并完成該端口的脈寬控制,下一次的高電平將在8個(gè)2.5 ms之后出現(xiàn),即完成周期為20 ms的PWM。分時(shí)復(fù)用軟件流程圖如圖2所示。
圖2 分時(shí)復(fù)用軟件流程圖Fig.2 Flowchart of the time division multiplexing program
3.4多舵機(jī)速度控制軟件設(shè)計(jì)
對(duì)于多路舵機(jī)的速度控制,按照機(jī)器人動(dòng)作編排順序,數(shù)組a[i]代表每路舵機(jī)上一個(gè)動(dòng)作的位置,b[i]代表每路舵機(jī)本次動(dòng)作的位置,c[temp0]是找出舵機(jī)最大位置差,c[temp0]/vel的商作為速度控制中舵機(jī)所須分段執(zhí)行的段數(shù),c[i]/temp1為每路舵機(jī)最小步長(zhǎng),motion()子函數(shù)是調(diào)用舵機(jī)運(yùn)動(dòng)的相關(guān)指令。通過(guò)分解每個(gè)動(dòng)作中,每路舵機(jī)須變化的位移,等分地執(zhí)行最小步長(zhǎng),并加入延時(shí)函數(shù),以此來(lái)完成對(duì)多路舵機(jī)的速度控制。
void setspeed(unsigned int vel)
{
Signed int i,k,m,temp0=0,temp1=0;
For(i=0;i<10;i++)
{
c[i]=b[i]-a[i];
If (fabs(c[temp0]) fabs(c[i]))
temp0=j;
}
temp1=fabs(c[temp0]/vel);
temp1++
for(j=0;j<10;j++)
{c[j]=(c[j]*32)/temp 1;
d[j]=a[j]*32;}
for(j=0;j<10;j++)
{
d[j]=d[j]+c[j];
a[j]=(d[j]/32);
}
motion();啟動(dòng)多路舵機(jī)動(dòng)作
}
}
部分程序和流程圖如圖3所示。
圖3 程序流程圖Fig.3 Flowchart of the program
3.5多舵機(jī)可視化編程軟件設(shè)計(jì)
綜合自由體操機(jī)器人的比賽情況,分時(shí)復(fù)用的方法僅限于AVRstudio等編程環(huán)境,采用C語(yǔ)言編程,動(dòng)作修改難度大、耗時(shí)較長(zhǎng)。因此,設(shè)計(jì)了一款針對(duì)競(jìng)賽機(jī)器人的多舵機(jī)可視化編程軟件。這款可編程軟件是基于VisualBasic6.0環(huán)境下生成的可執(zhí)行文件,可在WindowsXP、Win7下運(yùn)行簡(jiǎn)易可編程軟件,能方便地實(shí)現(xiàn)PC機(jī)與AVR通信、下載動(dòng)作指令等。
3.5.1AVR自引導(dǎo)程序軟件設(shè)計(jì)
AVR具備引導(dǎo)加載支持的用戶(hù)程序自編程功能,它提供了一個(gè)真正的由MCU本身自動(dòng)下載和更新(采用讀/寫(xiě)同時(shí)“Read-While-Write”進(jìn)行的方式)程序代碼的系統(tǒng)程序自編程更新的機(jī)制[8]。利用AVR的這個(gè)功能,可以實(shí)現(xiàn)在應(yīng)用編程(IAP)以及系統(tǒng)程序的遠(yuǎn)程自動(dòng)更新。IAP的本質(zhì)就是,MCU可以靈活地運(yùn)行一個(gè)常駐Flash的引導(dǎo)加載程序,以實(shí)現(xiàn)對(duì)用戶(hù)應(yīng)用程序的在線(xiàn)自編程更新。如給出一個(gè)實(shí)際的BootLoader程序,可以使用RS-232的數(shù)據(jù)接口和相關(guān)的協(xié)議讀取代碼,或者從程序存儲(chǔ)器中讀取代碼,然后將代碼寫(xiě)入(編程)到Flash存儲(chǔ)器中。
3.5.2VB可編程軟件設(shè)計(jì)
VisualBasic6.0是一款可視化軟件開(kāi)發(fā)平臺(tái),利用VB提供的MSComm串行控件,可實(shí)現(xiàn)與AVR單片機(jī)的串口通信,參數(shù)初始化為“19 200,N,8,1”,即波特率為19 200,無(wú)奇偶校驗(yàn),8位數(shù)據(jù)位,1位停止位。水平滾動(dòng)條HScrollbar配置成舵機(jī)0°~180°的轉(zhuǎn)角。Timer定時(shí)器提供了各個(gè)舵機(jī)運(yùn)動(dòng)的延時(shí),整體控制時(shí)序。比如上位機(jī)代碼Axis[i](j)指令調(diào)用到上位機(jī)解析代碼,i解析成舵機(jī)號(hào),j解析成具體的位置控制。
4結(jié)束語(yǔ)
自由體操機(jī)器人控制系統(tǒng)是由ATmega128單片機(jī)來(lái)實(shí)現(xiàn)的,其充分利用了單片機(jī)內(nèi)部的定時(shí)器、USART等片內(nèi)資源模塊,將分時(shí)復(fù)用的方法引入到單片機(jī)控制中,實(shí)現(xiàn)了對(duì)多路舵機(jī)的變速控制。試驗(yàn)證明,該方法可行、穩(wěn)定,實(shí)現(xiàn)了對(duì)機(jī)器人的精準(zhǔn)控制。下一步是尋求精度更高的控制策略,引入舵機(jī)的新型
控制算法[9-10],實(shí)現(xiàn)舵機(jī)的最優(yōu)控制等。
參考文獻(xiàn):
[1] 紀(jì)浩,吳友強(qiáng),鄒力涵.一種輪式移動(dòng)機(jī)器人運(yùn)動(dòng)控制系統(tǒng)的實(shí)現(xiàn)[J],自動(dòng)化儀表,2013,34(11):26-29.
[2] 候華,馮波,宋彬.自適應(yīng)智能光電循跡系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J],自動(dòng)化儀表,2014, 35(3):77-81.
[3] 韓慶窯,洪草根,朱曉光,等.基于AVR單片機(jī)的多舵機(jī)控制系統(tǒng)設(shè)計(jì)及仿真[J].計(jì)算機(jī)測(cè)量與控制,2011:19(2):332-334.
[4] 蔣辰飛,劉子龍,胡少凱,等.基于AVR單片機(jī)的多舵機(jī)控制精度的研究[J].信息技術(shù),2014(3):35-37.
[5] 付麗,劉衛(wèi)國(guó),尹強(qiáng).單片機(jī)控制多路舵機(jī)用PWM波產(chǎn)生方法[J].微特電機(jī),2006(2):28-33.
[6] 柯文德,彭志平,蔡則蘇,等.防人機(jī)器人相似性運(yùn)動(dòng)軌跡跟蹤控制研究[J].自動(dòng)化學(xué)報(bào),2014,40(11):2404-2413.
[7] 李霞,蘇淵博.基于AVR單片機(jī)的電動(dòng)舵機(jī)控制器設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2013(5):63-69.
[8] 邵子揚(yáng).AVR單片機(jī)應(yīng)用專(zhuān)題精講[M].2版.北京:北京航空航天大學(xué)出版社,2013:76-92.
[9] 吳正興,喻俊志,蘇宗帥,等.仿生機(jī)器魚(yú)S形起動(dòng)的控制與實(shí)現(xiàn)[J].自動(dòng)化學(xué)報(bào),2013,39(11):1914-1922
[10]吳正興,喻俊志,譚明.兩類(lèi)仿鲹科機(jī)器魚(yú)倒游運(yùn)動(dòng)控制方法的對(duì)比研究[J].自動(dòng)化學(xué)報(bào),2013,39(12):2032-2042.
中圖分類(lèi)號(hào):TH-3;TP242
文獻(xiàn)標(biāo)志碼:A
DOI:10.16086/j.cnki.issn1000-0380.201607012
Research and Implementation of the Multiple Steering Engine Control Method for Competition Robot
Abstract:In view of the motion control of multi-steering engine in competition robots,the design and implementation of the control method with Atmega128 as the main control chip are studied for multi-steering engine.With the features of timer matching interrupt and time division multiplexing in single chip computer,the precise position control of multi-steering engine is realized,and the minimum step length of multi-steering engine is optimized in real time,which satisfies the speed control for multi-steering engine.The Bootloader for AVR is designed,and the visualized programming and debugging software is developed with help of Visual Basic 6.0 to meet the requirements of implementing functions of data communication between PC and AVR,download and update action library.The method has been applied in China Robocup.
Keywords:RobotMulti-steering engineSinglechipUpper computerPWMTime division multiplexingVB
修改稿收到日期:2015-12-29。
第一作者韓玉龍(1989—),男,現(xiàn)為南京師范大學(xué)控制理論與控制工程專(zhuān)業(yè)在讀碩士研究生;主要從事機(jī)器人控制方向的研究。