關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于AT89C2051的多路舵機(jī)控制器設(shè)計(jì)

基于AT89C2051的多路舵機(jī)控制器設(shè)計(jì)

作者: 時(shí)間:2007-07-06 來源:網(wǎng)絡(luò) 收藏
摘要 舵機(jī)是機(jī)器人、機(jī)電系統(tǒng)和航模的重要執(zhí)行機(jī)構(gòu)。舵機(jī)為舵機(jī)提供必要的能源和控制信號(hào)。本文提出一種以外部中斷計(jì)數(shù)為基礎(chǔ)的PWM波形實(shí)現(xiàn)方法。該方法具有簡(jiǎn)單方便,成本低,可實(shí)現(xiàn)多路獨(dú)立PWM輸出的優(yōu)點(diǎn)。
關(guān)鍵詞 AT89(:205l 舵機(jī) 外部中斷PWM

舵機(jī)是一種位置伺服的驅(qū)動(dòng)器。它接收一定的控制信號(hào),輸出一定的角度,適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。在微機(jī)電系統(tǒng)和航模中,它是一個(gè)基本的輸出執(zhí)行機(jī)構(gòu)。

1 舵機(jī)的工作原理
以日本FUTABA-S3003型舵機(jī)為例,圖1是FUFABA-S3003型舵機(jī)的內(nèi)部電路。


舵機(jī)的工作原理是:PWM信號(hào)由接收通道進(jìn)入信號(hào)解調(diào)電路BA66881。的12腳進(jìn)行解調(diào),獲得一個(gè)直流偏置電壓。該直流偏置電壓與電位器的電壓比較,獲得電壓差由BA6688的3腳輸出。該輸出送人電機(jī)驅(qū)動(dòng)集成電路BA6686,以驅(qū)動(dòng)電機(jī)正反轉(zhuǎn)。當(dāng)電機(jī)轉(zhuǎn)速一定時(shí),通過級(jí)聯(lián)減速齒輪帶動(dòng)電位器R。,旋轉(zhuǎn),直到電壓差為O,電機(jī)停止轉(zhuǎn)動(dòng)。舵機(jī)的控制信號(hào)是PWM信號(hào),利用占空比的變化改變舵機(jī)的位置。

2 舵機(jī)的控制方法
標(biāo)準(zhǔn)的舵機(jī)有3條導(dǎo)線,分別是:電源線、地線、控制線,如圖2所示。

電源線和地線用于提供舵機(jī)內(nèi)部的直流電機(jī)和控制線路所需的能源.電壓通常介于4~6V,一般取5V。注意,給舵機(jī)供電電源應(yīng)能提供足夠的功率。控制線的輸入是一個(gè)寬度可調(diào)的周期性方波脈沖信號(hào),方波脈沖信號(hào)的周期為20 ms(即頻率為50 Hz)。當(dāng)方波的脈沖寬度改變時(shí),舵機(jī)轉(zhuǎn)軸的角度發(fā)生改變,角度變化與脈沖寬度的變化成正比。某型舵機(jī)的輸出軸轉(zhuǎn)角與輸入信號(hào)的脈沖寬度之間的關(guān)系可用圍3來表示。

3 舵機(jī)
(1)舵機(jī)控制器硬件電路
從上述舵機(jī)轉(zhuǎn)角的控制方法可看出,舵機(jī)的控制信號(hào)實(shí)質(zhì)是一個(gè)可嗣寬度的方波信號(hào)(PWM)。該方波信號(hào)可由FPGA、模擬電路或單片機(jī)來產(chǎn)生。采用FPGA成本較高,用模擬電路來實(shí)現(xiàn)則電路較復(fù)雜,不適合作多路輸出。一般采用單片機(jī)作舵機(jī)的控制器。目前采用單片機(jī)做舵機(jī)控制器的方案比較多,可以利用單片機(jī)的定時(shí)器中斷實(shí)現(xiàn)PWM。該方案將20ms的周期信號(hào)分為兩次定時(shí)中斷來完成:一次定時(shí)實(shí)現(xiàn)高電平定時(shí)Th;一次定時(shí)實(shí)現(xiàn)低電平定時(shí)T1。Th、T1的時(shí)間值隨脈沖寬度的變換而變化,但,Th+T1=20ms。該方法的優(yōu)點(diǎn)是,PWM信號(hào)完全由單片機(jī)內(nèi)部定時(shí)器的中斷來實(shí)現(xiàn),不需要添加外圍硬件。缺點(diǎn)是一個(gè)周期中的PWM信號(hào)要分兩次中斷來完成,兩次中斷的定時(shí)值計(jì)算較麻煩;為了滿足20ms的周期,單片機(jī)晶振的頻率要降低;不能實(shí)現(xiàn)多路輸出。也可以采用單片機(jī)+8253計(jì)數(shù)器的實(shí)現(xiàn)方案。該方案由單片機(jī)產(chǎn)生計(jì)數(shù)脈沖(或外部電路產(chǎn)生計(jì)數(shù)脈沖)提供給8253進(jìn)行計(jì)數(shù),由單片機(jī)給出8253的計(jì)數(shù)比較值來改變輸出脈寬。該方案的優(yōu)點(diǎn)是可以實(shí)現(xiàn)多路輸出,軟件較簡(jiǎn)單;缺點(diǎn)是要添加l片8253計(jì)數(shù)器,增加了硬件成本。本文在綜合上述兩個(gè)單片機(jī)舵機(jī)控制方案基礎(chǔ)上,提出了一個(gè)新的設(shè)計(jì)方案,如圖4所示。

該方案的舵機(jī)控制器以單片機(jī)為核心,555構(gòu)成的振蕩器作為定時(shí)基準(zhǔn),單片機(jī)通過對(duì)555振蕩器產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù)來產(chǎn)生PWM信號(hào)。該控制器中單片機(jī)可以產(chǎn)生8個(gè)通道的PWM信號(hào),分別由的P1.0~Pl.7(12~19引腳)端口輸出。輸出的8路PWM信號(hào)通過光耦隔離傳送到下一級(jí)電路中。因?yàn)樾盘?hào)通過光耦傳送過程中進(jìn)行了反相,因此從光耦出來的信號(hào)必須再經(jīng)過反相器進(jìn)行反相。方波信號(hào)經(jīng)過光耦傳輸后,前沿和后沿會(huì)發(fā)生畸變,因此反相器采用CD40106施密特反相器對(duì)光耦傳輸過來的信號(hào)進(jìn)行整形,產(chǎn)生標(biāo)準(zhǔn)的PWM方波信號(hào)。筆者在實(shí)驗(yàn)過程中發(fā)現(xiàn),舵機(jī)在運(yùn)行過程中要從電源吸納較大的電流,若舵機(jī)與單片機(jī)控制器共用一個(gè)電源,則舵機(jī)會(huì)對(duì)單片機(jī)產(chǎn)生較大的干擾。因此,舵機(jī)與單片機(jī)控制器采用兩個(gè)電源供電,兩者不共地,通過光耦來隔離,并且給舵機(jī)供電的電源最好采用輸出功率較大的開關(guān)電源。該舵機(jī)控制器占用單片機(jī)的個(gè)SCI串口。串口用于接收上位機(jī)傳送過來的控制命令,以調(diào)節(jié)每一個(gè)通道輸出信號(hào)的脈沖寬度。MAX232為電平轉(zhuǎn)換器,將上位機(jī)的RS232電平轉(zhuǎn)換成TTL電平。

(2)實(shí)現(xiàn)多路PWM信號(hào)的原理

在模擬電路中,PWM脈沖信號(hào)可以通過直流電平與鋸齒波信號(hào)比較來得到。在單片機(jī)中,鋸齒波可以通過對(duì)整型變量加1操作來實(shí)現(xiàn),如圖5所示。假定單片機(jī)程序中設(shè)置一整型變量SawVal,其值變化范圍為O~N。555振蕩電路產(chǎn)生的外部計(jì)數(shù)時(shí)鐘信號(hào)輸入到的INTO腳。每當(dāng)在外部計(jì)數(shù)時(shí)鐘脈沖的下降沿,單片機(jī)產(chǎn)生外部中斷,執(zhí)行外部中斷INT0的中斷服務(wù)程序。每產(chǎn)生一次外部中斷,對(duì)SawVal執(zhí)行一次加1操作,若SawVal已達(dá)到最大值N,則對(duì)SawVal清O。SawVal值的變化規(guī)律相當(dāng)于鋸齒波,如圖5所示。若在單片機(jī)程序中設(shè)置另一整型變量DutyVal,其值的變化范圍為O~N。每當(dāng)在SawVal清0時(shí),DulyVal從上位機(jī)發(fā)送的控制命令中讀入脈沖寬度系數(shù)值,例如為H(0≤H≤N)。若DutyVal≥SawVal,則對(duì)應(yīng)端口輸出高電平;若DutyValSawval,則對(duì)應(yīng)端口輸出低電平。從圖5中可看出,若改變DutyVal的值,則對(duì)應(yīng)端口輸出脈沖的寬度發(fā)生變化,但輸出脈沖的頻率不變,此即為PWM波形。

設(shè)外部計(jì)數(shù)時(shí)鐘周期為TINT0,鋸齒波周期(PWM脈沖周期)為TPWM,PWM脈沖寬度占空比為D,由圖5可得出如下關(guān)系:


由式(3)可知,PWM波形的周期TPWM一旦確定下來,只須選定計(jì)數(shù)最大值N,就可以確定外部時(shí)鐘脈沖所需周期(頻率)。外部時(shí)鐘脈沖周期TINT0顯然是PWM脈沖寬度變換的最小步距,即調(diào)節(jié)精度。由式(4)可知,N越大,步距所占PWM周期的百分比越小,精度越高。例如,若采用8位整型變量,最大值N=28-1=255,則精度為1/(255+1)=1/255;若采用16位整型變量,最大值N=216-1=65535,則精度為1/65536。文中計(jì)數(shù)變量SawVal采用8位整型變量,因此N=255。對(duì)于一般應(yīng)用,其精度已足夠。就舵機(jī)而言,要求TPWM=20ms,則可算得外部時(shí)鐘周期為:


因此,設(shè)計(jì)555振蕩電路時(shí),其輸出脈沖的頻率應(yīng)為:


當(dāng)有多個(gè)變量與SawVal比較,將比較結(jié)果輸出到多個(gè)端口時(shí)。就形成了多路PWM波形。各個(gè)變量的值可以獨(dú)立變化,因此各路PWM波形的占空比也可以獨(dú)立調(diào)節(jié),互不相干。多路PWM波形的產(chǎn)生如圖6所示。圖中以3路PWM波形為例。

4 舵機(jī)控制器軟件的設(shè)計(jì)
舵機(jī)控制器的控制核心為單片機(jī)AT89C2051。文中,程序用C5l編寫,工作方式為前后臺(tái)工作方式。單片機(jī)程序包括系統(tǒng)初始化程序、串口通信程序、上位機(jī)命令解釋與PWM脈寬生成程序和多路PWM波形輸出程序。串行通信程序和多路PWM波形輸出程序采用中斷方式。串口通信格式為渡特率9600bps、8位數(shù)據(jù)位、1位停止位、無校驗(yàn)、ASCII碼字符通信。串口通信程序用于接收上位機(jī)發(fā)送過來的控制命令??刂泼畈捎米远x文本協(xié)議,即協(xié)議內(nèi)容全部為ASCII碼字符。通信協(xié)議格式如圖7所示。

例如,要控制通道1的PWM脈寬,脈寬系數(shù)為25,則通信協(xié)議內(nèi)容為“#”“1”“0”“2”“5”“!”這6個(gè)字符。這時(shí)通道l的PWM占空比為25/256=O.098。一個(gè)通道號(hào)對(duì)應(yīng)一個(gè)PWM脈沖輸出端口。本設(shè)計(jì)為8個(gè)通道,號(hào)碼為l~8,對(duì)應(yīng)單片機(jī)的P1.o~P1.7。起始符和終止符起到幀同步的作用。串口通信程序流程如圖8所示。

圖8中,CHNo存放的是PWM通道號(hào)ASCII碼,Dutyl00、DutylO、Duoyl分別存放的是脈寬系數(shù)的百位數(shù)、十位數(shù)和個(gè)位數(shù)的ASCII碼(注意,若高位數(shù)為O,則該位的字符應(yīng)為“0”,不能省略。如25,完整字符應(yīng)為“O”“2”“5”。CharNo為信號(hào)量,用于對(duì)串口接收的字符順序以及串口中斷與上位機(jī)命令解釋程序之間進(jìn)行同步。


5 舵機(jī)控制器實(shí)驗(yàn)
圖9為舵機(jī)控制板輸出的其中一路PWM波形(帶舵機(jī)負(fù)載)。
從圖9中可看出,舵機(jī)控制器輸出的PWM波形穩(wěn)定、干凈,符合設(shè)計(jì)要求。

6 結(jié)論
本文提出的多控制器設(shè)計(jì)方法,以單片機(jī)AT89C2051為核心,由外部振蕩電路提供PWM脈沖的定時(shí)基準(zhǔn),控制部分與舵機(jī)驅(qū)動(dòng)部分由兩個(gè)電源供電,兩者電氣隔離。這種設(shè)計(jì)方案的優(yōu)點(diǎn)是:
①PWM波形由外部振蕩電路提供定時(shí)基準(zhǔn),與單片機(jī)內(nèi)部振蕩器的頻率無關(guān),不影響串口通信、定時(shí)器等參數(shù)的配置。
②PWM波形的調(diào)整精度可任意確定。
③本沒計(jì)思路可應(yīng)用于任意多路的PWM輸出,只要單片機(jī)能提供足夠多的輸出端口,例如將AT89C2051換成AT89S5l,就可以提供至少24路的PWM輸出(P0、Pl、P2)。
④控制參數(shù)由SCI串口輸入,適應(yīng)面廣,上位機(jī)可以是PC機(jī)、單片機(jī)或是PLC。
⑤本方法具有一般性,任何單片機(jī)只要能提供SCI中斷、外部中斷就可以應(yīng)用本方法。
編者注:本文為期刊縮略版,全文見本刊網(wǎng)站www.mesnet.com.cn。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉