Servo Motor

Başlatan Pros_PektuS, 27 Kasım 2002, 22:58:41

Prof.EleCTroN

Arkadaşlar yukarıdaki açıklama ve program aslında james

arkadaşımızın yazısıdır. Ben sadece siteye ekledim.

askin

Piyasada birçok türde servo motor bulabilirsin,

kullanacağın yere göre türleri değişebilir. En basitleri 3 kablolu olan rc servolardır, dc brush ve dc brushless veya ac motorlar ise

torna tezgahlarında kullanılır.

mustafabayrak

Sene sonuı bitirm projem için motor arıyorum.Robot kol

yapmayı düşünüyorum.3 tane bağlantı kabosu olan hobi amaçlı faza yüksek güçlü olmayan servo motor arıyorum.Yardımcı

olursan sevinirim. :D
Mustafa BAYRAK Visual Basic 6.0 Enterprise Edition

askin

Size 3 kablolu servo yerine stepper motor kullanmanızı tavsiye ederim,

ben yaptığım robotta stepper motor kullandım ve kendi yazdığım software indexer'ı kullandım. Stepper motorlar adım atlasalar da

rc servolardan çok üstünler. Cpu fanları da rc servo tip motorlardır. Sürücü devresini denemek için kullanabilirsiniz. Rc servoları

da maket uçak satan yerlerden satın alabilirsiniz. Güçlü stepper motor satın almak isterseniz elimde az kullanılmış var, yardımcı

olabilirim.

james

ARAMIYORUM , BULUYORUM

akivanc75

abi ya bu servomotorun step motordan farkı var mı ya?
KA

mikimaus

step ile servo hep karıştırılır ama farkı var servo motor

aslında aynı şaft üzerinde bir potansiyometresi yada buna benzer bir durum bilriren elemanı oılan motordur .step motorda adım

sayabilirsiniz ama servo aslında düz bir motordur....

aster

Servo derken düz 2,4,6 kutuplu ac ve dc olarak çalışabilen

gerilim verildiğinde sürekli bir yöne dönebilen fırçalı fırçasız(kömürlü,kömürsüz) tork u zayıf motor olarak düşünün (özel devrelerle

torku(çevirme kuvveti) çok kuvvetli hale getirilebilir)
step de ise sadece dc 2,4 kutuplu gerilim verildiğinde sadece bir turda

kutup açısı (360/18 yani 20 de 1)kadar dönebilen tork u kuvvetli motor olarak düşünün
her ikiside uygulamalarda kullanılır

mesela yazıcı motorları steptir işlemci fan motoru
servodur ac ve dc çalışanı vardır gibi ama lazer yazıcı durum motoru tek

silindirli ateşlemeli bir motordur

Libertador

Peki 50kg gibi agir bir robotun hareketini iki servo motorla saglamaya kalkissak nasil bir servo motor almaliyiz. Ayrica bu motorlarin cekecekleri akimlarda bir degisiklik olur mu? Ornegin bizim projede iki motor iki ayri tekerlege baglaniyor. Biri digerinden fazla donerse robot da donmeye baslayacak. Bu durum servo motorda da gecerli mi?  Eger gecerliyse servo motorlara giden akimi kontrol etmek mumukun mu?

Erol YILMAZ

Selam;
50 kg. yukler icin basit oyuncak icin tasarlanan RC servo kullanamazsin !!!

50 kg hareket ettirilmesi kolay olmayan bir yuktur  Step motorlada olacagini hic zannetmiyorum. (Step motorlu sistemlerde motoru iyi sürebilecek maharetli sürücüler var tabii ki, fiyatlari aldigin step motorun fiyatının katlarca fazlası olabilir. www.rta.it )

Tavsiyem, otomobillerde kullanılan cam silecek motorudur. Hem devir sayisi dusurulmus (reduktörlü ) hem de torklari cok iyidir. Hem de fiyatlari düşüktür. Piyasa da tonlarca bulabilirsin.  12 ve 24 VDC olanlari var. Bunlarla sakat arabalari falan yaptıklarını duymuştum.  Buna bir de konum ile ilgili bir sensor koyarsin. Al sana mis gibi uzerinden amperlerce akım akıtabilip iyi torklar alabilecegin muthis bir servo. Kolay Gelsin.

salim ALTIN

selam.
Erol hocam bu konuda tecrübelisin sanırım...
tavsiye için teşekkürler.Sanırım genç arkadaşın ufkunu genişlettin silecek motoru ile. Gerçekten en kestirme çözüm bu sanırım.Eğer hareket sınırlı ise çok turlu potansiyometre ile basit pozisyon kontrolü yapılabilir. Fakat sürekli hareket için çözüm daha zor. Step motor amatör uğraşı için daha kullanışlı. Step motoru redüktöre uygulayabilirseniz işinizi görür. Aksi takdirde 50 kiloluk hareket eden bir nesneyi pozisyon kontrolü yapmak değil istediğin an durdurmak bile motor temin etmekten daha fazla ugraşı ve sürücü bilgisi istiyor. Sonu getirilememiş bir site var  www.rahmifiliz.freeservers.com  bir bakın yardımcı olabilirlermi...
İnsanlar 3 guruba ayrılırlar. 1- Birşeyler yapıp üretmeye çalışan küçük bir gurup. 2- Birşeyler yapanları hayranlıkla ve takdirle izleyen büyük bir gurup. 3- Hiç birşeyden haberi olmadan yaşayan devasa yığınlar....

byka

DWIN LCD Satış Türkiye email:info@kamantek.com  web:http://www.kamantek.com/shop/index.php

ferhat

servo için burada verilen bilgiler  gayet güzel ...
ben de kendi yaptığım hs-300 standart servo uygulamasının kodlarını ve servo motorun sürülürken kendi önemli gördüğüm notları sizlere aktaracağım

şu anda hs-300 üretilmiyor. hs-322 en ucuz olan hi-tec servo 13$
yer : MMY mühendislik seyrantepe-ist  212 270 91 27-28
*************************************************************
;servo2.asm
;ekim-03
;16f877/4
;
;ferhat yaldız   
;ferhatyaldiz@yahoo.com
;
;servo motorun sürülmesine yönelik programdır.
;basit servo rutinlerini ve zaman hesaplamalarını içermektedir.
;
;servo motor :
;      içlerinde potansiyometre ve pozisyon geri beslemesi bulun-
;maktadır. işareti 20ms de bir yenilenmesi gerkmektedir.yani 50 hertz
;servo darbelerin genişliğine göre ileri veya geri çalışmaktadır.
;kare dalganın tepede kalma süresi
;      ---1~1,5ms   = geri
;      ---1,5ms   = hareketsizdir
;      ---1,5~2ms  = ileri
;yönde hareket etmektedir. dalganın toplam süresinin 20 ms olacağı
;unutulmamalıdır.
;hitec hs-300 standart servo motor kullanılmıştır. ve aşağıdaki
;uygulama modifiye edilmemiş(no hacking) servo motor için yani
;-90~+90 derece arası dönebilen motor için geçerlidir.
;hs-300 özellikleri:
;   * 6v --->hız :60' - 0.16 sn --->tork :3,5kg/cm
;   * 4,8v-->hız :60' - 0.19 sn --->tork :3,0kg/cm
;   
;kırmızı = +V
;siyah   = toprak
;sarı    = signal   
;
;servo motorun signal ucu 877 nin portd0 nolu ucuna bağlanmıştır.
;
;program böylece daha modüler bir hale getirilmiştir. çünkü ana
;gecikme timer0 ile sağlandığından bu gecikme sürecince dünya kadar
;işlem mikrodenetleyiciye yaptırılabilir.
;
;servo motor ve gerekli rutinler hakkında servo1.asm'de bilgilere
;bakılabilir.
;                                                        0'
;                     |
;                                                        |
      -90'----------+90'
;
;timer0 kullanılmıştır. timer0 önyüklemesi sayesinde bize her 15ms de
;kesme yapacaktır. servo 20ms de bir yenilenmesi gerektiğinden bu
;süre 15ms olarak ayarlanmıştır. Kesmede ise ileri veya geri
;sinyalleri ile ileriden geriye ve geriden ileriye dönüşlerde bekleme
;süreleri oluşturulacak ve bu sürelerin kontrolleri kesme alt
;yordamında yapılacaktır
;
;servo motorun ilk pozisyonu -90' olduğu varsayılıp program buna göre
;yazılmıştır.
;program mplab 6,30 ile yazılmış olup aynı ortamda derlenmiştir.
; -- motor ileri veya geri gittikten sonra diğer pozisyonu alması
;için beklemesi yani signal=0 durumunda belli bir süre tutulması
;gerekiyor. aşağıda bazı sürelerde denemler verilmiştir. bekleme
;süresi motorun içindeki kontrol devresinin diğer yöne dönebilmesi
;gerektiğini anlayabilmesi için gereklidir.
;   ** 5ms  -- dönme yapmamakta
;   ** 120ms-- dönme sorunsuzca yapmakta
;   ** 50ms -- 10-15 dönmeden sonra -90 sınır bölgesinde tıkanmakta
;   ** 40ms -- 10-15   "        "    "    "       "        "
;
; --servo motorun bir özelliği görüldü.+90 derecesinden 150ms sola
;git denildiğinde önce belli bir açı(25~30 derece)gidiyor.bu noktayı
;kendisine satıh(girilmemesi gerken bölge)olarak alıyor ve daha sonra
;ileri ve geri giderken bu noktayı geçmemeye çalışıyor ancak -90
;derece sathını belirleyemediğinden o noktaya geldiğinde yazılımdan
;bağımsız olarak kendini o sınır noktasını geçmeye zorlayacaktır ve
;orada tıkanacaktır. bu durumda fazla akım çekecek ve ömrü
;kısalacaktır. bununla ilgili notlar servo1.bmp de verilmiştir.
;
;
;OK! 2nd week october
;
;OK! 2nd week october
;****************************************************************
         TITLE      "SERVO2.ASM"
         LIST      P=16F877
         INCLUDE      <P16F877.INC>
         ERRORLEVEL  -302
         ERRORLEVEL  -224
         __CONFIG   _WDT_OFF&_PWRTE_OFF&_XT_OSC&_CP_OFF
;****************************************************************
CBLOCK   20h      ;BANK0 general purpose ram area
   w_temp      ;kesme için
   delayC_1      ;gecikme rutini için   
   delayC_2
   cevrim      ;servo gecikme döngü sayısı
   coef1      ;gecikme rutin katsayıları
   coef2
   status_temp      ;kesme için
   pclath_temp      ;kesme için
ENDC
;
BANK0   MACRO      ;bank0 macro
      BCF    STATUS,RP0
      BCF     STATUS,RP1
      ENDM
BANK1   MACRO      ;bank1 macro
      BSF   STATUS,RP0
      BCF     STATUS,RP1
      ENDM
;
INT_giris   MACRO   ;kesme giriş macro
      MOVWF   w_temp   ;16f87x datasheet den
      SWAPF   STATUS,W      ;alınmıştır
      CLRF   STATUS
      MOVWF   status_temp
      MOVF   PCLATH,W
      MOVWF   pclath_temp
      CLRF   PCLATH      
      ENDM
;
INT_cikis   MACRO      ;kesme çıkış macro
      MOVF   pclath_temp,w
      MOVWF   PCLATH
      SWAPF   status_temp,w  ;16f87x datasheet den
      MOVWF   STATUS   ;alınmıştır
      SWAPF   w_temp,f
      SWAPF   w_temp,w      
      ENDM
;      
ser_ileri   MACRO      ;servo ileri +5v için
      MOVLW   D'30'
      MOVWF   coef1
      MOVLW   D'22'
      MOVWF   coef2
      ENDM
;
ser_geri   MACRO      ;servo geri +5v için
      MOVLW   D'10'
      MOVWF   coef1
      MOVLW   D'32'
      MOVWF   coef2
      ENDM
;
ser_neu   MACRO      ;servo neutral +5v için
      MOVLW   D'5'
      MOVWF   coef1
      MOVLW   D'100'
      MOVWF   coef2
      ENDM
;************************************************************
      ORG      0
      GOTO   MAIN
      ORG      4
      GOTO   SERVO
;************************************************************
MAIN
      CALL   init877
      CALL   dongu
;************************************************************
init877
      BANK1      ;bank 1 e geç
       CLRF   TRISD      ;portd çıkış
      MOVLW   B'10010111';rpbu=1 pull-up disable
            ;t0cs=0 internal cycle clock
            ;t0se=1 high-to-low ra4 clock
            ;psa=0  prescaler for timer0
            ;ps2:ps0=1/256
      MOVWF   OPTION_REG
                         BANK0
      MOVLW   B'10100000';gie=1 blobal int enable
            ;t0ie=1 enable tmr0 int
            ;t0if=0 tmr0 did not overflow
      MOVWF   INTCON
       CLRF    PORTD
       CLRF    delayC_1
       CLRF    delayC_2
      CLRF   coef1
      CLRF   coef2
      CLRF   w_temp
      CLRF   status_temp
      CLRF   cevrim
      MOVLW   D'197'             ;saymaya başla her 15,1ms de bir kesme
      MOVWF   TMR0   ;tmr0=1us*256*(256-197)=15,1ms
      BCF   PORTD,0   ;pd0 ="0"      
       RETURN
;***********************************************************
dongu
      BCF      PORTD,0
      GOTO   dongu
;************************************************************
;int subroutine
;
;cevrim = 0~20 arası servo_ileri   (~300ms)
;cevrim = 20~30 arası servo_wait1   (~150ms)
;cevrim = 30~50 arası servo_geri    (~300ms)
;cevrim = 50~60 arası servo_wait2   (~150ms)
SERVO      
      INT_giris
      INCF   cevrim,f   ;cevrim=cevrim+1
      MOVLW   D'20';ileri veya geri çarpanı =20 ayarlanır
      SUBWF   cevrim,w
      BTFSC   STATUS,C   ;cevrim < 20 ise servo_ileri ye atla
      GOTO   servo_wait1   ;cevrim >= 20 ise servo_wait
servo_ileri            ;----->ileri
      BSF      PORTD,0  ;pd0="1"
      ser_ileri
      CALL   Delay      ;1ms bekle
      BCF      PORTD,0
      GOTO   int_son_
servo_wait1
      BCF      PORTD,0
      MOVLW   D'30'
      SUBWF   cevrim,w   
      BTFSC   STATUS,C    ;cevrim 20~ 30 arasında  int_son_
      GOTO   servo_cont    ;cevrim >= 30 ise servo_ileri
      GOTO   int_son_
servo_cont
      BCF   PORTD,0
      MOVLW   D'50'      ;
      SUBWF   cevrim,w
      BTFSC   STATUS,C   ;cevrim 30~ 50 arasındaysa servo_geri
      GOTO   servo_wait2   ;cevrim >=50 ise bekle
servo_geri            ;<------ geri
      BSF      PORTD,0  ;pd0="1"
      ser_geri         
      CALL   Delay      ;2ms bekle
      BCF      PORTD,0
      GOTO   int_son_
servo_wait2
      BCF      PORTD,0
      MOVLW   D'60'
      SUBWF   cevrim,w   
      BTFSC   STATUS,C    ;cevrim 50~ 60 int_son_
      CLRF   cevrim      ;cevrim >=60 ise cevrim = 0
int_son_
      BCF      INTCON,T0IF;timer enable
      MOVLW   D'197'      ;saymaya başla her 15,1ms de bir kesme
      MOVWF   TMR0      ;tmr0=1us*256*(256-197)=15,1ms
      INT_cikis
RETFIE
;***********************************************************
;Delay         
;servo ileri
;coef1=30, coef2=22--->3*30*22 + 4*30 =2,1 ms   ---> +5v
;servo geri
;coef1=10, coef2=32 --->3*10*32 + 4*10 =1 ms   ----> +5v  
;servo neutral
;coef1=5, coef2=100   --->3*5*100 + 4*5  =1,52ms   ----> +5v
;
;coef1=200, coef2=200-->3*200*200 + 4*200 =120ms
Delay
      MOVF   coef1,w      
      MOVWF   delayC_1
Dongu1_
      MOVF   coef2,w      ;1*coef1
      MOVWF   delayC_2      ;1*coef1
Dongu2_
      DECFSZ   delayC_2,F      ;1*coef2*coef1
      GOTO   Dongu2_      ;2*coef2*coef1
      DECFSZ   delayC_1,F      ;1*coef1
      GOTO   Dongu1_      ;1*coef1
      RETURN
;***********************************************************
END

ferhat

servo için burada verilen bilgiler  gayet güzel ...
ben de kendi yaptığım hs-300 standart servo uygulamasının kodlarını ve servo motorun sürülürken kendi önemli gördüğüm notları sizlere aktaracağım

şu anda hs-300 üretilmiyor. hs-322 en ucuz olan hi-tec servo 13$
yer : MMY mühendislik seyrantepe-ist  212 270 91 27-28
*************************************************************
;servo2.asm
;ekim-03
;16f877/4
;
;ferhat yaldız   
;ferhatyaldiz@yahoo.com
;
;servo motorun sürülmesine yönelik programdır.
;basit servo rutinlerini ve zaman hesaplamalarını içermektedir.
;
;servo motor :
;      içlerinde potansiyometre ve pozisyon geri beslemesi bulun-
;maktadır. işareti 20ms de bir yenilenmesi gerkmektedir.yani 50 hertz
;servo darbelerin genişliğine göre ileri veya geri çalışmaktadır.
;kare dalganın tepede kalma süresi
;      ---1~1,5ms   = geri
;      ---1,5ms   = hareketsizdir
;      ---1,5~2ms  = ileri
;yönde hareket etmektedir. dalganın toplam süresinin 20 ms olacağı
;unutulmamalıdır.
;hitec hs-300 standart servo motor kullanılmıştır. ve aşağıdaki
;uygulama modifiye edilmemiş(no hacking) servo motor için yani
;-90~+90 derece arası dönebilen motor için geçerlidir.
;hs-300 özellikleri:
;   * 6v --->hız :60' - 0.16 sn --->tork :3,5kg/cm
;   * 4,8v-->hız :60' - 0.19 sn --->tork :3,0kg/cm
;   
;kırmızı = +V
;siyah   = toprak
;sarı    = signal   
;
;servo motorun signal ucu 877 nin portd0 nolu ucuna bağlanmıştır.
;
;program böylece daha modüler bir hale getirilmiştir. çünkü ana
;gecikme timer0 ile sağlandığından bu gecikme sürecince dünya kadar
;işlem mikrodenetleyiciye yaptırılabilir.
;
;servo motor ve gerekli rutinler hakkında servo1.asm'de bilgilere
;bakılabilir.
;                                                        0'
;                     |
;                                                        |
      -90'----------+90'
;
;timer0 kullanılmıştır. timer0 önyüklemesi sayesinde bize her 15ms de
;kesme yapacaktır. servo 20ms de bir yenilenmesi gerektiğinden bu
;süre 15ms olarak ayarlanmıştır. Kesmede ise ileri veya geri
;sinyalleri ile ileriden geriye ve geriden ileriye dönüşlerde bekleme
;süreleri oluşturulacak ve bu sürelerin kontrolleri kesme alt
;yordamında yapılacaktır
;
;servo motorun ilk pozisyonu -90' olduğu varsayılıp program buna göre
;yazılmıştır.
;program mplab 6,30 ile yazılmış olup aynı ortamda derlenmiştir.
; -- motor ileri veya geri gittikten sonra diğer pozisyonu alması
;için beklemesi yani signal=0 durumunda belli bir süre tutulması
;gerekiyor. aşağıda bazı sürelerde denemler verilmiştir. bekleme
;süresi motorun içindeki kontrol devresinin diğer yöne dönebilmesi
;gerektiğini anlayabilmesi için gereklidir.
;   ** 5ms  -- dönme yapmamakta
;   ** 120ms-- dönme sorunsuzca yapmakta
;   ** 50ms -- 10-15 dönmeden sonra -90 sınır bölgesinde tıkanmakta
;   ** 40ms -- 10-15   "        "    "    "       "        "
;
; --servo motorun bir özelliği görüldü.+90 derecesinden 150ms sola
;git denildiğinde önce belli bir açı(25~30 derece)gidiyor.bu noktayı
;kendisine satıh(girilmemesi gerken bölge)olarak alıyor ve daha sonra
;ileri ve geri giderken bu noktayı geçmemeye çalışıyor ancak -90
;derece sathını belirleyemediğinden o noktaya geldiğinde yazılımdan
;bağımsız olarak kendini o sınır noktasını geçmeye zorlayacaktır ve
;orada tıkanacaktır. bu durumda fazla akım çekecek ve ömrü
;kısalacaktır. bununla ilgili notlar servo1.bmp de verilmiştir.
;
;
;OK! 2nd week october
;
;OK! 2nd week october
;****************************************************************
         TITLE      "SERVO2.ASM"
         LIST      P=16F877
         INCLUDE      <P16F877.INC>
         ERRORLEVEL  -302
         ERRORLEVEL  -224
         __CONFIG   _WDT_OFF&_PWRTE_OFF&_XT_OSC&_CP_OFF
;****************************************************************
CBLOCK   20h      ;BANK0 general purpose ram area
   w_temp      ;kesme için
   delayC_1      ;gecikme rutini için   
   delayC_2
   cevrim      ;servo gecikme döngü sayısı
   coef1      ;gecikme rutin katsayıları
   coef2
   status_temp      ;kesme için
   pclath_temp      ;kesme için
ENDC
;
BANK0   MACRO      ;bank0 macro
      BCF    STATUS,RP0
      BCF     STATUS,RP1
      ENDM
BANK1   MACRO      ;bank1 macro
      BSF   STATUS,RP0
      BCF     STATUS,RP1
      ENDM
;
INT_giris   MACRO   ;kesme giriş macro
      MOVWF   w_temp   ;16f87x datasheet den
      SWAPF   STATUS,W      ;alınmıştır
      CLRF   STATUS
      MOVWF   status_temp
      MOVF   PCLATH,W
      MOVWF   pclath_temp
      CLRF   PCLATH      
      ENDM
;
INT_cikis   MACRO      ;kesme çıkış macro
      MOVF   pclath_temp,w
      MOVWF   PCLATH
      SWAPF   status_temp,w  ;16f87x datasheet den
      MOVWF   STATUS   ;alınmıştır
      SWAPF   w_temp,f
      SWAPF   w_temp,w      
      ENDM
;      
ser_ileri   MACRO      ;servo ileri +5v için
      MOVLW   D'30'
      MOVWF   coef1
      MOVLW   D'22'
      MOVWF   coef2
      ENDM
;
ser_geri   MACRO      ;servo geri +5v için
      MOVLW   D'10'
      MOVWF   coef1
      MOVLW   D'32'
      MOVWF   coef2
      ENDM
;
ser_neu   MACRO      ;servo neutral +5v için
      MOVLW   D'5'
      MOVWF   coef1
      MOVLW   D'100'
      MOVWF   coef2
      ENDM
;************************************************************
      ORG      0
      GOTO   MAIN
      ORG      4
      GOTO   SERVO
;************************************************************
MAIN
      CALL   init877
      CALL   dongu
;************************************************************
init877
      BANK1      ;bank 1 e geç
       CLRF   TRISD      ;portd çıkış
      MOVLW   B'10010111';rpbu=1 pull-up disable
            ;t0cs=0 internal cycle clock
            ;t0se=1 high-to-low ra4 clock
            ;psa=0  prescaler for timer0
            ;ps2:ps0=1/256
      MOVWF   OPTION_REG
                         BANK0
      MOVLW   B'10100000';gie=1 blobal int enable
            ;t0ie=1 enable tmr0 int
            ;t0if=0 tmr0 did not overflow
      MOVWF   INTCON
       CLRF    PORTD
       CLRF    delayC_1
       CLRF    delayC_2
      CLRF   coef1
      CLRF   coef2
      CLRF   w_temp
      CLRF   status_temp
      CLRF   cevrim
      MOVLW   D'197'             ;saymaya başla her 15,1ms de bir kesme
      MOVWF   TMR0   ;tmr0=1us*256*(256-197)=15,1ms
      BCF   PORTD,0   ;pd0 ="0"      
       RETURN
;***********************************************************
dongu
      BCF      PORTD,0
      GOTO   dongu
;************************************************************
;int subroutine
;
;cevrim = 0~20 arası servo_ileri   (~300ms)
;cevrim = 20~30 arası servo_wait1   (~150ms)
;cevrim = 30~50 arası servo_geri    (~300ms)
;cevrim = 50~60 arası servo_wait2   (~150ms)
SERVO      
      INT_giris
      INCF   cevrim,f   ;cevrim=cevrim+1
      MOVLW   D'20';ileri veya geri çarpanı =20 ayarlanır
      SUBWF   cevrim,w
      BTFSC   STATUS,C   ;cevrim < 20 ise servo_ileri ye atla
      GOTO   servo_wait1   ;cevrim >= 20 ise servo_wait
servo_ileri            ;----->ileri
      BSF      PORTD,0  ;pd0="1"
      ser_ileri
      CALL   Delay      ;1ms bekle
      BCF      PORTD,0
      GOTO   int_son_
servo_wait1
      BCF      PORTD,0
      MOVLW   D'30'
      SUBWF   cevrim,w   
      BTFSC   STATUS,C    ;cevrim 20~ 30 arasında  int_son_
      GOTO   servo_cont    ;cevrim >= 30 ise servo_ileri
      GOTO   int_son_
servo_cont
      BCF   PORTD,0
      MOVLW   D'50'      ;
      SUBWF   cevrim,w
      BTFSC   STATUS,C   ;cevrim 30~ 50 arasındaysa servo_geri
      GOTO   servo_wait2   ;cevrim >=50 ise bekle
servo_geri            ;<------ geri
      BSF      PORTD,0  ;pd0="1"
      ser_geri         
      CALL   Delay      ;2ms bekle
      BCF      PORTD,0
      GOTO   int_son_
servo_wait2
      BCF      PORTD,0
      MOVLW   D'60'
      SUBWF   cevrim,w   
      BTFSC   STATUS,C    ;cevrim 50~ 60 int_son_
      CLRF   cevrim      ;cevrim >=60 ise cevrim = 0
int_son_
      BCF      INTCON,T0IF;timer enable
      MOVLW   D'197'      ;saymaya başla her 15,1ms de bir kesme
      MOVWF   TMR0      ;tmr0=1us*256*(256-197)=15,1ms
      INT_cikis
RETFIE
;***********************************************************
;Delay         
;servo ileri
;coef1=30, coef2=22--->3*30*22 + 4*30 =2,1 ms   ---> +5v
;servo geri
;coef1=10, coef2=32 --->3*10*32 + 4*10 =1 ms   ----> +5v  
;servo neutral
;coef1=5, coef2=100   --->3*5*100 + 4*5  =1,52ms   ----> +5v
;
;coef1=200, coef2=200-->3*200*200 + 4*200 =120ms
Delay
      MOVF   coef1,w      
      MOVWF   delayC_1
Dongu1_
      MOVF   coef2,w      ;1*coef1
      MOVWF   delayC_2      ;1*coef1
Dongu2_
      DECFSZ   delayC_2,F      ;1*coef2*coef1
      GOTO   Dongu2_      ;2*coef2*coef1
      DECFSZ   delayC_1,F      ;1*coef1
      GOTO   Dongu1_      ;1*coef1
      RETURN
;***********************************************************
END

z

Arkadaslar aslında  kavram kargaşası var.

Servo uygulamalarında kullanılan motora servo motor denir. Bu

motor
DC, AC yada herşey olabilir.

Servo motorla yapılmış servo sistemine de kısaca servo denir.

Model uçaklarda vs gördüğünüz küçük kutucuk servo

sistemdir.

Giriş yapma açısından kısa  bilgiye www.geocities.com/pidpwm sayfasından erişebilirsiniz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com