May 14, 2009

Servo motor nasil kontrol edilir?

Filed under: Tip & Tricks — Tags: , , , , , , , — admin @ 2:05 am

Bu yazimda size R.C. Modellerde kullanilmakta olan servo motorlarin nasil calistigini ve nasil surulecegini anlatmaya calisacagim.

Servo motorlar torsiyonu yuksek, devirleri dusuk, hassasiyetleri yuksek mekanik kontrol elemanlaridir.

Simdi gelelim bu motorlarin ozelliklerine.

Bu tip sistemler besleme terminallerine gerekli voltaj degeri verilir verilmez calismazlar. Calismlari icin ayrica besleme terminalleri disinda yer alan kontrol terminaline de PWM isaret yollamaniz gerekir.
PWM nin ne oldugunu burada anlatmayacagim internette zaten bu konuda istemediginiz kadar kaynak mevcut ancak burada onemli olan husus, PWM sinyalinin duty-cycle (darbe suresi/sinyal periyodu) nin servo konumunu degistirdigi, sinyal periyodunun da servo motorun calisma hizini degistirdigidir. PWM periyodu azaldikca servo daha hizli tepki verecek anacak bir o kadarda kararsiz olacaktir.


not: bu resim http://www.digitalnemesis.com/info/docs/rcservo/ adresinden alinmistir

Sekildende anlasilacagi uzere besleme terminalleri disindaki terminale kontrol icin gerekli PWM sinyanli uygulanmaktadir.

Simdi gelelim gerekli duzenegin devre semasina.

Devre PWM sinyalini uretmek icin bir mikrodenetleyici ve bir servo motordan olusmaktadir.
uC ni calismasi icin ayrica 4Mhz lik kristal (HS) rezonator baglanmistir. 13-14 numarali pinler.
uC nin TX ve RX pinleride TTL – RS232 cevrimi icin max232 ye baglanmistir.
Onemli not: Kullandiginiz rezonatorun uretmis oldugu sinyalin faz gurultusunun azaltmak icin 22pf lik kondansoterleri yuk olarak baglamayi unutmayin.

Servo Motor Kotrol

Devre semasindan da gorlecegi uzere uC nin RE0 pini Servo motorun kontrol terminaline baglanmistir.

Uygulamanin HI-TECH PICC’ de yazilmis programi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <pic.h>
#include <htc.h>
#include "delay.h"
#include "usart.h"
 
// Setup the configuration word for ise with ICD2
__CONFIG(HS & DEBUGEN & WDTEN & LVPDIS);
/*
 *	Interrupt demo for PIC; wait for button press on RB0/INT,
 *	turn on a relay on another port bit for a period of time.
 *	For simplicity here, literal constants are used, usually these
 *	should be calculated with compile-time arithmetic.
 */
 
bit bit_timer_first  = 0;
bit bit_timer_second = 0;
 
unsigned char uc_delay = 0;
 
void
main(void){
	TRISE &= 0b11111110;/*RE0 cikis olarak ayarli*/
	OPTION = 0b00000111;/*TMR0 ayarla PS:256*/
	RBPU   = 0; 
	T0IE   = 1;   /*TMR0 interrupti acik*/
	INTEDG = 1; 
	INTE = 1;   
	RCIE = 1;  /*Seri port alma interrupti acik*/
	TXIE = 1;  /*Seri port gonderme interrupti acik*/
	GIE  = 1; /*butun interruplar acik*/
 
	init_comms(); /*uarti baslat*/
 
	for(;;){
		if ( bit_timer_first ) { /*her PWM sinyali periyonu boyunca calis*/
			RE0 = 1;
			DelayUs(250);
			DelayUs(250);
			DelayUs(uc_delay);
			DelayUs(uc_delay);
			DelayUs(uc_delay);
			DelayUs(uc_delay);
			RE0 = 0;
			bit_timer_first = 0;
			CLRWDT();
		}	
		CLRWDT();
	}
}
 
static void 
interrupt isr(void){// Here be interrupt function - the name is unimportant.
	if(T0IF) {  // timer interrupt
		bit_timer_first = 1;
		TMR0 = 177;  /*freq = (FOSC/4)/(Prescaler*(255-TMR0))*/
		T0IF = 0;    // clear the interrupt flag
	}
 
	if(INTF) {    // did we see a button press?
		/*NULL*/
		INTF = 0;    // clear the interrupt
	}
 
	if(RCIF){
		uc_delay = RCREG;
		RCIF=0;
	}
 
	if(TXIF){
		/*NULL*/
		TXIF = 0;
	}
}

Program kodundan da anlasilacagi uzere 9600 8 N 1 seklinde gelen seriport verisi interrupt sekline ‘uc_delay’ degerini guncellemektedir. ‘uc_delay’ degeride PWM icin gerekli darbe suresini belirleyecek sekilde gecikme saglamaktadir. Bu programda uC in TMR0 birimi PWM sinyali icin gerekli periyodik gecikmeyi saglamak amaciyla frekansi (1/PWM periodu) ~50Hz olacak sekilde kurulmustur.

Simdi de uygulamanin resmine bakalim….

Servo Motor Kotrol

Umarim faidesi olmustur.

Iyi calismalar dilerim.

« Newer Posts

Powered by WordPress