標題: 舵機簡介及其單片機控制方法 [打印本頁]

作者: 51黑tt    時間: 2016-3-5 04:15
標題: 舵機簡介及其單片機控制方法
本帖最后由 51黑tt 于 2016-3-5 04:16 編輯

由于rock向本人提出希望了解有關舵機的知識,現(xiàn)將本人在航空模型運動中和機器人制作中積累的一點點經(jīng)驗寫出來,奉獻給大家,希望本文能起到拋磚引玉的作用。但由于時間倉促,難免有不正確的地方,熱情歡迎大家批評指教。

1、概述
舵機最早出現(xiàn)在航模運動中。在航空模型中,飛行機的飛行姿態(tài)是通過調(diào)節(jié)發(fā)動機和各個控制舵面來實現(xiàn)的。舉個簡單的四通飛機來說,飛機上有以下幾個地方需要控制:
1.發(fā)動機進氣量,來控制發(fā)動機的拉力(或推力);
2.副翼舵面(安裝在飛機機翼后緣),用來控制飛機的橫滾運動;
3.水平尾舵面,用來控制飛機的俯仰角;
4.垂直尾舵面,用來控制飛機的偏航角;
遙控器有四個通道,分別對應四個舵機,而舵機又通過連桿等傳動元件帶動舵面的轉(zhuǎn)動,從而改變飛機的運動狀態(tài)。舵機因此得名:控制舵面的伺服電機。
不僅在航模飛機中,在其他的模型運動中都可以看到它的應用:船模上用來控制尾舵,車模中用來轉(zhuǎn)向等等。由此可見,凡是需要操作性動作時都可以用舵機來實現(xiàn)。

2、結(jié)構(gòu)和控制
一般來講,舵機主要由以下幾個部分組成, 舵盤、減速齒輪組、位置反饋電位計5k、直流電機、控制電路板等。
工作原理:控制電路板接受來自信號線的控制信號(具體信號待會再講),控制電機轉(zhuǎn)動,電機帶動一系列齒輪組,減速后傳動至輸出舵盤。舵機的輸出軸和位置反饋電位計是相連的,舵盤轉(zhuǎn)動的同時,帶動位置反饋電位計,電位計將輸出一個電壓信號到控制電路板,進行反饋,然后控制電路板根據(jù)所在位置決定電機的轉(zhuǎn)動方向和速度,從而達到目標停止。
舵機的基本結(jié)構(gòu)是這樣,但實現(xiàn)起來有很多種。例如電機就有有刷和無刷之分,齒輪有塑料和金屬之分,輸出軸有滑動和滾動之分,殼體有塑料和鋁合金之分,速度有快速和慢速之分,體積有大中小三種之分等等,組合不同,價格也千差萬別。例如,其中小舵機一般稱作微舵,同種材料的條件下是中型的一倍多,金屬齒輪是塑料齒輪的一倍多。需要根據(jù)需要選用不同類型。
舵機的輸入線共有三條,紅色中間,是電源線,一邊黑色的是地線,這輛根線給舵機提供最基本的能源保證,主要是電機的轉(zhuǎn)動消耗。電源有兩種規(guī)格,一是4.8V,一是6.0V,分別對應不同的轉(zhuǎn)矩標準,即輸出力矩不同,6.0V對應的要大一些,具體看應用條件;另外一根線是控制信號線,F(xiàn)utaba的一般為白色,JR的一般為桔黃色。另外要注意一點,SANWA的某些型號的舵機引線電源線在邊上而不是中間,需要辨認。但記住紅色為電源,黑色為地線,一般不會搞錯。
舵機的控制信號為周期是20ms的脈寬調(diào)制(PWM)信號,其中脈沖寬度從0.5ms-2.5ms,相對應舵盤的位置為0-180度,呈線性變化。也就是說,給它提供一定的脈寬,它的輸出軸就會保持在一個相對應的角度上,無論外界轉(zhuǎn)矩怎樣改變,直到給它提供一個另外寬度的脈沖信號,它才會改變輸出角度到新的對應的位置上。舵機內(nèi)部有一個基準電路,產(chǎn)生周期20ms,寬度1.5ms的基準信號,有一個比較器,將外加信號與基準信號相比較,判斷出方向和大小,從而產(chǎn)生電機的轉(zhuǎn)動信號。由此可見,舵機是一種位置伺服的驅(qū)動器,轉(zhuǎn)動范圍不能超過180度,適用于那些需要角度不斷變化并可以保持的驅(qū)動當中。比方說機器人的關節(jié)、飛機的舵面等。
常見的舵機廠家有:日本的Futaba、JR、SANWA等,國產(chǎn)的有北京的新幻想、吉林的振華等,F(xiàn)舉Futaba S3003來介紹相關參數(shù),以供大家設計時選用。之所以用3003是因為這個型號是市場上最常見的,也是價格相對較便宜的一種(以下數(shù)據(jù)摘自Futaba產(chǎn)品手冊)。
尺 寸(Dimensions): 40.4×19.8×36.0 mm
重 量(Weight): 37.2 g
工作速度(Operating speed):0.23 sec/60°(4.8V)
0.19 sec/60°(6.0V)
輸出力矩(Output torque): 3.2 kg.cm (4.8V)
4.1 kg.cm (6.0V)

由此可見,舵機具有以下一些特點:
>體積緊湊,便于安裝;
>輸出力矩大,穩(wěn)定性好;
>控制簡單,便于和數(shù)字系統(tǒng)接口;
正是因為舵機有很多優(yōu)點,所以,現(xiàn)在不僅僅應用在航模運動中,已經(jīng)擴展到各種機電產(chǎn)品中來,在機器人控制中應用也越來越廣泛。

3、用單片機來控制
正是舵機的控制信號是一個脈寬調(diào)制信號,所以很方便和數(shù)字系統(tǒng)進行接口。只要能產(chǎn)生標準的控制信號的數(shù)字設備都可以用來控制舵機,比方PLC、單片機等。這里介紹利用51系列單片機產(chǎn)生舵機的控制信號來進行控制的方法,編程語言為C51。之所以介紹這種方法只是因為筆者用2051實現(xiàn)過,本著負責的態(tài)度,所以敢在這里寫出來。程序用的是我的四足步行機器人,有刪改。單片機并不是控制舵機的最好的方法,希望在此能起到拋磚引玉的作用。
2051有兩個16位的內(nèi)部計數(shù)器,我們就用它來產(chǎn)生周期20 ms的脈沖信號,根據(jù)需要,改變輸出脈寬;舅悸啡缦拢ㄕ垖φ障旅娴某绦颍
我用的晶振頻率為12M,2051一個時鐘周期為12個晶振周期,正好是1/1000 ms,計數(shù)器每隔1/1000 ms計一次數(shù)。以計數(shù)器1為例,先設定脈寬的初始值,程序中初始為1.5ms,在for循環(huán)中可以隨時通過改變a值來改變,然后設定計數(shù)器計數(shù)初始值為a,并置輸出p12為高位。當計數(shù)結(jié)束時,觸發(fā)計數(shù)器溢出中斷函數(shù),就是void timer0(void) interrupt 1 using1 ,在子函數(shù)中,改變輸出p12為反相(此時跳為低位),在用20000(代表20ms周期)減去高位用的時間a,就是本周期中低位的時間,c=20000-a,并設定此時的計數(shù)器初值為c,直到定時器再次產(chǎn)生溢出中斷,重復上一過程。


# include <reg51.h>
#define uchar unsigned char
#define uint unsigned int

uint a,b,c,d;

sbit p12=P1^2;
sbit p13=p1^3;
sbit p37=P3^7;

void timer0(void) interrupt 1 using 1
{p12=!p12;
c=20000-c;
TH0=-(c/256); TL0=-(c%256);
if(c>=500&&c<=2500)c=a;
else c=20000-a;
}


void timer1(void) interrupt 3 using 1
{p13=!p13;
d=20000-d;
TH1=-(d/256); TL1=-(d%256);
if(d>=500&&d<=2500)d=b;
else d=20000-b;
}


void main(void)
{TMOD=0x11;
p12=1;
p13=1;
a=1500;
b=1500;
c=a;d=b;
TH0=-(a/256); TL0=-(a%256);
TH1=-(b/256); TL1=-(b%256);
EA=1;
ET0=1; TR0=1;EX0=1;EX1=1;
ET1=1; TR1=1;
PX0=0;PX1=0;PT1=1;PT0=1;
for(;;)
{

}
}

因為在脈沖信號的輸出是靠定時器的溢出中斷函數(shù)來處理,時間很短,因此在精度要求不高的場合可以忽略。因此如果忽略中斷時間,從另一個角度來講就是主程序和脈沖輸出是并行的,因此,只需要在主程序中按你的要求改變a值,例如讓a從500變化到2500,就可以讓舵機從0度變化到180度。另外要記住一點,舵機的轉(zhuǎn)動需要時間的,因此,程序中a值的變化不能太快,不然舵機跟不上程序。根據(jù)需要,選擇合適的延時,用一個a遞增循環(huán),可以讓舵機很流暢的轉(zhuǎn)動,而不會產(chǎn)生像步進電機一樣的脈動。這些還需要實踐中具體體會。

舵機的速度決定于你給它的信號脈寬的變化速度。舉個例子,t=0試,脈寬為0.5ms,t=1s時,脈寬為1.0ms,那么,舵機就會從0.5ms對應的位置轉(zhuǎn)到1.0ms對應的位置,那么轉(zhuǎn)動速度如何呢?一般來講,3003的最大轉(zhuǎn)動速度在4.8V時為0.23s/60度,也就是說,如果你要求的速度比這個快的話,舵機就反應不過來了;如果要求速度比這個慢,可以將脈寬變化值線性到你要求的時間內(nèi),做一個循環(huán),一點一點的增加脈寬值,就可以控制舵機的速度了。當然,具體這一點一點到底是多少,就需要做試驗了,不然的話,不合適的話,舵機就會向步進電機一樣一跳一跳的轉(zhuǎn)動了,嘗試改變這“一點”,使你的舵機運動更平滑。還有一點很重要,就是舵機在每一次脈寬值改變的時候總會有一個轉(zhuǎn)速由零增加再減速為零的過程,這就是舵機會產(chǎn)生像步進電機一樣運動的原因。
請問一下,舵機轉(zhuǎn)動速度是如何控制的?


作者: keil    時間: 2016-11-6 20:01
好帖。。。。。。。。。。!
作者: hello_51    時間: 2018-4-4 10:53
優(yōu)質(zhì)帖

作者: whengfu    時間: 2019-4-14 00:37
講的很詳細,收藏了,謝謝樓主
作者: 阿鎏尼克    時間: 2019-4-24 21:11
學習了。
作者: ztzp    時間: 2020-1-5 22:09
謝謝,講得很詳細,找時間做一個試試。
作者: 好又快維修部    時間: 2021-3-18 17:04
好貼收藏了,謝謝




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1