伺服電動(dòng)機(jī)是一種特殊的齒輪減速直流電動(dòng)機(jī),配備有用于控制電動(dòng)機(jī)軸的旋轉(zhuǎn)方向以及位置的電子電路。由于伺服電機(jī)允許其輸出軸的精確角度定位,因此它們廣泛用于機(jī)器人技術(shù)和無線電控制的汽車,飛機(jī)和船只中,以控制其各個(gè)零件的運(yùn)動(dòng)。在本實(shí)驗(yàn)課程中,我們將首先探討伺服電動(dòng)機(jī)的組成及其工作原理,然后說明如何將其與PIC微控制器接口。
伺服電動(dòng)機(jī)控制使用PIC微控制器
理論
伺服電動(dòng)機(jī)(或伺服)是一個(gè)小盒子,其中裝有一個(gè)直流電動(dòng)機(jī),通過一系列齒輪連接至電動(dòng)機(jī)的輸出軸(伺服臂)和控制該軸位置的電子電路。使用伺服的目的是實(shí)現(xiàn)對(duì)象的精確角度定位。
為了實(shí)現(xiàn)伺服功能,輸出軸的瞬時(shí)定位信息通過換能器反饋到控制電路。最簡(jiǎn)單的方法是將電位計(jì)連接到輸出軸或齒輪系中的某個(gè)位置??刂齐娮釉O(shè)備將電位計(jì)的反饋信號(hào)(包含軸的當(dāng)前位置)與控制輸入信號(hào)(包含軸的期望位置的信息)進(jìn)行比較,并將實(shí)際值和期望值之間的差(稱為誤差信號(hào))被放大并用于在減少或消除誤差所需的方向上驅(qū)動(dòng)直流電動(dòng)機(jī)。當(dāng)輸出軸到達(dá)所需位置時(shí),誤差為零。典型伺服電機(jī)的功能框圖如下所示。
伺服電機(jī)原理
伺服部件(來源:http://tutorial.cytron.com.my/2011/09/19/how-rc-servo-works/)
伺服是脈寬調(diào)制(PWM)信號(hào),通常頻率為50 Hz。這意味著脈沖應(yīng)每20ms重復(fù)一次。脈沖的寬度決定了輸出軸的角度位置。伺服器內(nèi)部的電子電路將PWM信號(hào)轉(zhuǎn)換為成比例的輸出電壓,并將其與電位計(jì)的反饋電壓進(jìn)行比較。如果兩者之間存在差異,則控制電路會(huì)沿適當(dāng)?shù)姆较蝌?qū)動(dòng)電動(dòng)機(jī),直到差異變?yōu)榱銥橹埂C}沖寬度的典型值在1.0到2.0毫秒(ms)的范圍內(nèi)。對(duì)于標(biāo)準(zhǔn)伺服器,脈沖寬度在1.0毫秒至1.5毫秒之間會(huì)使伺服器順時(shí)針旋轉(zhuǎn)(CW),在1.5毫秒至2.0毫秒之間使伺服器能夠逆時(shí)針旋轉(zhuǎn)(CCW),而1.5毫秒脈沖寬度會(huì)使伺服電動(dòng)機(jī)轉(zhuǎn)向它的中心。但是,這些值可能會(huì)因電機(jī)的品牌和制造而有所不同。建議閱讀伺服器的數(shù)據(jù)表,以找到將伺服器定位在不同角度所需的脈沖寬度的真實(shí)值。
大多數(shù)伺服器旋轉(zhuǎn)180°。然而。有些可以旋轉(zhuǎn)360°或更大角度。 Servos由于其精確的角度定位而被廣泛用作機(jī)器人手臂中的活動(dòng)關(guān)節(jié)。他們還發(fā)現(xiàn)了在無線電(RC)玩具中的應(yīng)用。例如,在RC汽車中,它們用于轉(zhuǎn)向機(jī)構(gòu),在RC船中用于控制舵。
伺服電機(jī)具有三根電線:兩根用于電源(Vcc和地面),第三根用于電源。 Vcc線通常是紅色的,接地線是黑色或棕色的??刂菩盘?hào)線為白色,黃色或橙色。本實(shí)驗(yàn)中使用的伺服電機(jī)來自iCircuit技術(shù),并具有分別用于Vcc,Gnd和控制信號(hào)的紅色,棕色和黃色導(dǎo)線。它以5.0 V電源供電,并提供180°的角度旋轉(zhuǎn)
典型的伺服電機(jī)
不同角度位置的伺服定時(shí)信息
伺服臂的不同角度位置
電路
此電路的電路圖實(shí)驗(yàn)如下所示。伺服器的控制輸入來自PIC16F628A微控制器的RB1引腳,該P(yáng)IC16F628A微控制器使用外部陶瓷諧振器以4.0 MHz的頻率工作。輕觸開關(guān)連接到RB0引腳,以提供用戶輸入來控制伺服臂的位置。該實(shí)驗(yàn)的操作部分在下面的軟件部分中進(jìn)行介紹。
用于伺服電機(jī)控制演示的電路圖
電路板上的電路設(shè)置
軟件
PIC16F628A的固件是用用于PIC編譯器的MikroC Pro編寫的。 Timer0模塊用作帶預(yù)分頻器1:256的定時(shí)器,以在兩個(gè)連續(xù)的PWM脈沖之間產(chǎn)生大約20 ms的間隔。請(qǐng)記住,時(shí)鐘頻率為4.0 MHz,這導(dǎo)致1 s的機(jī)器周期,從而簡(jiǎn)化了使用Timer0計(jì)算延遲的數(shù)學(xué)運(yùn)算。 MikroC提供了一個(gè)內(nèi)置的庫(kù)函數(shù)Delay_Cyc(),該函數(shù)生成可變的時(shí)鐘周期延遲。此功能用于將控制脈沖的寬度從0.7毫秒更改為2.3毫秒。當(dāng)電路第一次上電或復(fù)位時(shí),在RB1引腳上連續(xù)產(chǎn)生脈沖寬度為0.7 ms的50 Hz PWM信號(hào)。該控制信號(hào)一直沿順時(shí)針方向?qū)⑺欧垡恢币苿?dòng)到末端,該末端被視為0角位置。按下連接到RB0引腳的輕觸開關(guān)時(shí),脈沖寬度增加0.2 ms,這將使軸逆時(shí)針(CCW)旋轉(zhuǎn)大約22.5°。因此,每次按下開關(guān),脈沖寬度都會(huì)增加0.2 ms,并且軸將進(jìn)一步沿CCW方向旋轉(zhuǎn)。連續(xù)按下開關(guān)8次后,脈沖寬度變?yōu)?.3 ms,軸到達(dá)另一端(180°角位置)。在第9次按下時(shí),脈沖寬度被重置為0.7 ms,并且電機(jī)軸沿順時(shí)針方向旋轉(zhuǎn),直到回到0角位置。在程序中,變量“ i”存儲(chǔ)脈沖寬度信息(脈沖寬度= i * 10 * 10微秒),并以2為步長(zhǎng)從7變?yōu)?3。當(dāng)i = 7時(shí),脈沖寬度為7 * 10 * 10 = 700微秒(0.7 ms),當(dāng)i = 23時(shí),寬度為2.3 ms。
/*
Lab 21: Servo motor Control using PIC16F628A
MCU: PIC16F628A running at 4.0 MHz, MCLR enabled, WDT is OFF, Brown Out Detect
disabled
Written by: Rajendra Bhatt (www.embedded-lab.com)
2012/03/29
Description: User input switch is connected to RB0 and Servo Control signal
is generated from RB1 pin.
*/
sbit SW1 at RB0_bit;
sbit Control at RB1_bit;
unsigned short i=7, delay;
void interrupt() {
delay = i*10;
Control = 1;
Delay_Cyc(delay); // Generates delay equal to 10*delay clock cycles
Control = 0;
TMR0 = 180; // TMR0 returns to its initial value
INTCON.T0IF = 0; // Bit T0IF is cleared so that the interrupt could reoccur
}
void main() {
CMCON = 0x07; // Disable Comparators
TRISB = 0b00000001;
PORTB = 0;
OPTION_REG = 0x07; // Prescaler (1:256) is assigned to the timer TMR0
TMR0 = 180; // Timer T0 counts from 180 to 255 to create ~20 ms period
INTCON = 0xA0; // Enable interrupt TMR0 and Global Interrupts
do{
if(!SW1){ // Change pulse width when Switch is pressed
Delay_ms(300);
i = i+2;
if(i》23) i=7;
}
}while(1);
}
下載完整的源文件和HEX文件
輸出
將HEX文件加載到PIC16F628A微控制器之后,您可以觀察伺服控制器的運(yùn)行情況。觀看底部的演示視頻,以查看該實(shí)驗(yàn)的輸出。
責(zé)任編輯:wv
-
微控制器
+關(guān)注
關(guān)注
48文章
7454瀏覽量
150853 -
伺服電動(dòng)機(jī)
+關(guān)注
關(guān)注
0文章
50瀏覽量
3193
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論