Picproje Elektronik Sitesi

ENDÜSTRiYEL OTOMASYON => Motorlar & Sürücüler => Konuyu başlatan: Pros_PektuS - 27 Kasım 2002, 22:58:41

Başlık: Servo Motor
Gönderen: Pros_PektuS - 27 Kasım 2002, 22:58:41
Servo motorların çalışma mantığı hakkında

Türkçe kaynak nerde bulabiliriz ?
Başlık: Servo Motor
Gönderen: james - 27 Kasım 2002, 23:02:52
www.antrak.org.tr/gazete
burda vardı bişeyler
Başlık: Servo Motor
Gönderen: byka - 28 Kasım 2002, 00:43:18
dostum bir yerlere bununla ilgili bir yazı yazdım ama bir

arama yaptır step yada serv gibi yazarak
Başlık: Servo Motor
Gönderen: Prof.EleCTroN - 28 Kasım 2002, 06:51:02
Bende bir ara servo motorların çalışma mantığı hakkında

Türkçe kaynak aradım ama bulamadım, sonradan clinic arkadaşın yazdığı program yardımcı oldu tabii. İnternette servo motor

sürücü devreleri bulabilirsin. Duyduğuma göre servo motorlar ile mikron mertebesinden işlem yapabiliyorsun. Bu yüzden CNC

tezgahlarında kullanılıyormuş.
Başlık: Servo Motor
Gönderen: james - 28 Kasım 2002, 11:26:22
itiraf: ordaki clinic bendim. :lol:
electronicman sana

gönderdiğim word dosyası duruyosa onu buraya kopyalayıp yapıştıralım.herkes öğrensin
Başlık: Servo Motor
Gönderen: byka - 28 Kasım 2002, 12:22:09
:D  :D  :D  :D  :)  :)  :)  :)
Başlık: Servo Motor
Gönderen: Prof.EleCTroN - 28 Kasım 2002, 16:55:10
Piyasada çok kullanılan Hobby servo diye tabir ettiğimiz

servolarda 3 kablo vardır.1.si siyah yada kahverengi olanı toprak kırmızı Vcc sarı olan da
data kablosudur.Kaynaklar Vcc

gerilimini 5v uygulayın desede 12 volta kadar  uygulayabilirsin.Bundan fazlası servoda anlamsız hareketlere neden olur.
Pic

16F84 ile kontrol etmek çok kolaydır.Data ucunu dirence gerek kalmadan direk çıkışlardan birine uygulayabilirsin.
   Servoya

darbeleri PWM metoduyla yolluyoruz.En az 1ms en fazlada 2 ms doluluk oranına sahip kare dalga gönderiyoruz.ve en önemli

nokta bu
kare dalgaların periyodunun 20 ms olması!!!! Örneğin 1 ms doluluk oranı verirsen (bu tam sol demektir)19 ms de

boşluk vermek zorundasın.1.5ms doluluk
verirsen 18.5ms boşluk gibi.. servonun hareketini tamamlaması içinde bu işlemi en az

15 kere yapmalısın.yani 20 ms *15=300ms boyunca kare dalga
göndermeilsin.Aşağıda örnek bi program yazdım.Daha iyi

anlarsın. Bilmen gereken servoyu  1ms tam sol, 1.5ms orta,2ms tam sağ pozisyona getirir.


    örnek: Program

Pic'in RB1 pinine bağlı servoyu sağa ve sola sürekli hareket ettirir.

    basla           movlw   016h      ;2ms lik gecikme

için kullanılacak sabit
            movwf   doluluk
            movlw   0C8h      ;18 mslik gecikme için kullanılacak

sabit
            movwf   boşluk
            call      PWM
            movlw   0Bh       ;1ms lik gecikme için kullanılacak

sabit
            movwf   doluluk
            movlw   0D3h      ;19mslik gecikme için kullanılacak sabit
           

movwf   bosluk
            call      PWM
            goto   basla

   PWM           bsf      PORTB,1      
           

movf   doluluk,w
           call      delay
           bcf      PORTB,1
           movf   boşluk,w
           

call      delay   
      
           incf      sayac,f
           movlw   15      ;20 ms periyotlu darbeyi 15 kere vererek

hareketi tamamlamasını sağlıyoruz.
           subwf   sayac,w
           btfss   STATUS,Z
           goto                   

PWM
           clrf      sayac
           return

     delay           movwf    count1      ;gecikme hesabı

3*count1*count2 us şeklindedir.
      loop1        movlw     01Eh      ;3*30*22=1980us =yaklaşık 2 ms
                       

movwf     count2       ;3*30*200=18000us =18 ms
      loop2        decfsz    count2,f
           goto     loop2
           

decfsz   count1,f
                       goto     loop1
           return



   sayacı 15 değilde 12 alırsan bu

servonun hareketini hızlandırır. sağa sola daha hızlı  hareket eder.20 alırsan da daha yavaş hareket eder.
servoyu istediğin

pozisyona getirmek için 1-1.5ms yada 1.5-2ms arasında doluluk oranlı darbeler uygula.mesela sağa yakın bi yerlerde durması

için
1.8ms ,ortaya yakın bi yerler için 1.6 veya 1.4 gibiii.   

      Benden bu kadar.Umarım yardımcı

olabilmişimdir.Takıldığın bi yer olursa tekrar sorabilirsin.

Evet arkadaşlar clinic james arkadaşımızın gönderdiği program

ve açıklama yukarıdadır.  :D
Başlık: Servo Motor
Gönderen: james - 28 Kasım 2002, 17:54:50
bende bi yere kaydediyim bunu.yeri geliyor  lazım oluyor  8)

8)
Başlık: Servo Motor
Gönderen: Pros_PektuS - 28 Kasım 2002, 22:06:32
Arkadaşlar bilgi için teşekkür ederim.
Kullanım

açısından yardımcı oldu ancak çalışma mantığını nasıl bulabilirim. hani DC motorda içinden akım geçen iletken, manyetik alan

tarafından itilir vs... gibi. Bu şekil çalışma mantığı lazım bana.
:?:
Başlık: Servo Motor
Gönderen: james - 28 Kasım 2002, 22:29:40
http://www.geocities.com/donis1tr/P/picle.htm

antraktan barbarosun yazısı...
Başlık: fiyat
Gönderen: XNHCX - 01 Aralık 2002, 12:46:12
8)
             SELAM  

ARKADAŞLAR,
Yazdıkların için teşekkürler  DOSTUM

Electronicman
Hobby servo diye tabir ettiğimiz  bu 3 kablolu servoları en kolay  ve

yakın nereden  alabilirim.Fiyatı  nedir? Bilen  var mı?
Başlık: Servo Motor
Gönderen: james - 01 Aralık 2002, 14:47:52
sen sakaryadasın galiba.izmitte bulabilirsin.fiyatı 16 dolardı

en son aldığımda.
kadıköyde de mustanghobbies diye bi yer var sahra i cedid te .ordakiler daha kaliteli fiyatta 22 dolar civarı..
Başlık: Servo Motor
Gönderen: mustafabayrak - 01 Aralık 2002, 22:51:35
arkadaşlar servo motorla ilgili antrak'tan başka nerde bilgi

bulabilirim :?: bu konuda bana yardımcı olabilirmisiniz?ayrıca izmir'de bildiğiniz satıcı varmı?
teşekkürler...
Başlık: Servo Motor
Gönderen: james - 01 Aralık 2002, 23:12:42
hangi modelleri için açıklama arıyosun?servoyla ne

yapmayı düşünüyosun?
Başlık: Teşekkür
Gönderen: XNHCX - 02 Aralık 2002, 01:16:40
8)                      Teşekkür ederim  

james .
Başlık: Servo Motor
Gönderen: Prof.EleCTroN - 02 Aralık 2002, 09:53:20
Arkadaşlar yukarıdaki açıklama ve program aslında james

arkadaşımızın yazısıdır. Ben sadece siteye ekledim.
Başlık: rc,brush,brushless
Gönderen: askin - 05 Aralık 2002, 01:34:00
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.
Başlık: Servo Motor
Gönderen: mustafabayrak - 07 Aralık 2002, 17:22:37
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
Başlık: Servo Motor
Gönderen: askin - 07 Aralık 2002, 20:13:15
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.
Başlık: Servo Motor
Gönderen: james - 08 Aralık 2002, 14:18:45
http://www.baldor.com/pdf/manuals/1205-394.pdf

servolar hakkında...
Başlık: Servo Motor
Gönderen: akivanc75 - 24 Aralık 2002, 00:21:22
abi ya bu servomotorun step motordan farkı var mı ya?
Başlık: Servo Motor
Gönderen: mikimaus - 24 Aralık 2002, 00:50:31
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....
Başlık: Servo Motor
Gönderen: aster - 24 Aralık 2002, 08:34:01
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
Başlık: Servo Motor
Gönderen: Libertador - 11 Nisan 2003, 23:32:04
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?
Başlık: Servo Motor
Gönderen: Erol YILMAZ - 12 Nisan 2003, 14:03:28
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.
Başlık: Servo Motor
Gönderen: salim ALTIN - 03 Haziran 2003, 22:17:28
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...
Başlık: PIC Based Serial Port Servo Controller
Gönderen: byka - 05 Temmuz 2003, 13:54:56
PIC Based Serial Port Servo Controller

http://www.digitalnemesis.com/ash/projects/picservo/
Başlık: Servo Motor
Gönderen: ferhat - 04 Kasım 2003, 04:57:09
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
Başlık: Servo Motor
Gönderen: ferhat - 04 Kasım 2003, 04:58:32
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
Başlık: Servo Motor
Gönderen: z - 23 Kasım 2003, 13:21:55
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.
Başlık: servo anlatımı
Gönderen: 00050319 - 08 Şubat 2004, 21:30:39
:arrow: http://www.imagesco.com/articles/picservo
Başlık: Servo Motor
Gönderen: XNHCX - 08 Şubat 2004, 22:13:27
Teşekkürler   00050319 ,

Using Servomotors with the PIC Microcontroller
Link'i tekrar yazayım dostum.

http://www.imagesco.com/articles/picservo/01.html
http://www.imagesco.com/articles/picservo/02.html
http://www.imagesco.com/articles/picservo/03.html
.............

Konudan bir örnek:
(http://www.imagesco.com/images/picservo/fig02.gif)

----Listing 1----

' First servomotor program
' Sweeps left to right, then reverses
Symbol B1 = pw          ' create a variable pw
pw = 100                ' start at extreme left
sweep: pulsout 0,pw     ' send pulse to motor
pause 18               ' set frequency to about 50 Hz
pw = pw + 1            ' increase pw by 1
if pw > 200 then back  ' at extreme right, turn CCW
goto sweep             ' otherwise, continue
back: pulsout 0,pw      ' send pulse to motor
pause 18               ' set frequency to about 50 Hz
pw = pw - 1            ' decrease pw by 1
if pw < 100 then sweep ' at extreme left, turn CW
goto back              ' otherwise, continue

----End of Listing 1----

****
********
Başlık: Servo Motor
Gönderen: XNHCX - 08 Şubat 2004, 22:16:05
Controlling Stepper Motors with a PIC Microcontroller

Bu konuya ait link de aşağıda.

http://www.imagesco.com/articles/picstepper/01.html