Teknikim

Üye Girişi

PIC Uygulamaları 10-Servo Motor Kontrolü
 

Yazan: Tuna BULUT, Tarih: 31-08-2008 16:55

Okunma Sayısı : 576

Beğenilme : 3

Yayınlama yeri : Dersler, PIC Dersleri


Bu uygulamada PIC 16F628A kullanarak servo motor kontrol edeceğiz. RA0 pinine bağlı butona basınca servo  motor  orta konuma(0o) gelecek. Öncelikle servo motordan biraz bahsedelim. Servo motor istenilen konuma getirilebilen temel olarak potansiyometre ve dc motordan oluşan bir motor çeşididir. Servo motor ilk olarak hangi konumda olursa olsun aynı darbe gönderildiği sürece hep aynı pozisyona gelecektir. PWM servo motorlar şekildeki gibi kare dalga gönderilerek çalıştırılırlar. Servonun pozisyonunu belirleyense gönderilen lojik 1(+5V) seviyesinin süresidir. Gönderilecek kare dalga 10-20 ms arasında değişebilen periyoda sahiptir. 1.5 ms uzunluğunda gönderilen lojik 1 seviyesi  servoyu orta pozisyona(0o), 0.6 ms en sol pozisyona(-90o), 2.4 ms ise en sağ pozisyona(+90o) getirmektedir, ancak bu değerler kullanılan servo modeline göre değişebilmektedir. Bu uygulamada kullanacağımız servo motor maks. 180o dönebilmektedir, 210o dönebilenleri de vardır. Bu kadar bilgiden sonra artık uygulamaya geçebiliriz.

 

pulse.gif

 

Kullanılacak Malzemeler

 

  • 1xPIC16F628A
  • 1xPWM servo motor(Hitec-HS-322HD)
  • 1x4 Mhz kristal
  • 2x22pf seramik kondansatör
  • 1x100nF seramik kondansatör
  • 2x4.7 kΩ direnç
  • 2x100 Ω direnç
  • 2xButon
  • 5 V DC kaynak(Batarya, pil, adaptör veya güç kaynağı)

 

  16F628A_Pin_Diagram.jpg   servo_motor.jpg

               Pic 16F628A Pin Diyagramı                                                                  Pic ve Servo Devresi

 

                                                                        

PIC Assembly Kodu 

       

        LIST        P=16F628A

        #INCLUDE    "P16F628A.INC"

        __CONFIG    _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF

        CBLOCK      H'20'

        SAYAC1

        SAYAC2

        IS

        BEK

        NUM

        ENDC

;---------------------------------------------------------------

;0,6    MS     EN SOL(-90 DERECE)

;1,5    MS     ORTA KONUM(0 DERECE)

;2,4    MS     EN SAĞ(+90 DERECE)

;---------------------------------------------------------------

        MOVLW       H'07'

        MOVWF       CMCON

        BANKSEL     TRISB

        CLRF        TRISB

        MOVLW       H'FF'

        MOVWF       TRISA

        BANKSEL     PORTA

        CLRF        PORTB

        MOVLW       D'05'

        MOVWF       NUM

TEST_ET

        BTFSC       PORTA,0

        GOTO        TEST_ET

DONDUR

        MOVLW       D'05'

        MOVWF       IS

        MOVLW       D'100'

        MOVWF       BEK

        BSF         PORTB,3

        CALL        GECIKME

        MOVLW       D'50'

        MOVWF       IS

        MOVLW       D'100'

        MOVWF       BEK

        BCF         PORTB,3

        CALL        GECIKME

        DECFSZ      NUM,F

        GOTO        DONDUR

        GOTO        TEST_ET

GECIKME

        MOVF        IS,W

        MOVWF       SAYAC1

DONGU1

        MOVF        BEK,W

        MOVWF       SAYAC2

DONGU2

        DECFSZ      SAYAC2,1

        GOTO        DONGU2

        DECFSZ      SAYAC1,1

        GOTO        DONGU1

        RETURN

        END

 

Kodun Mantığı

 

TEST_ET

        BTFSC       PORTA,0

        GOTO        TEST_ET

 

;PORTA,0ı kontrol ediyoruz eğer 0 seviyesindeyse yani butona basılıyorsa kare dalga göndermek için bir sonraki komuta geçiyoruz, eğer butona basılmıyorsa tekrar butonu kontrol etmek üzere işlemi başa alıyoruz.  

 

DONDUR

        MOVLW       D'05'

        MOVWF       IS

        MOVLW       D'100'

        MOVWF       BEK

        BSF         PORTB,3

        CALL        GECIKME

        MOVLW       D'50'

        MOVWF       IS

        MOVLW       D'100'

        MOVWF       BEK

        BCF         PORTB,3

        CALL        GECIKME

        DECFSZ      NUM,F

        GOTO        DONDUR

        GOTO        TEST_ET

 

;Bu kısımda servoya kare dalga gönderiyoruz, kare dalga oluşturmak ise oldukça basit; öncelikle çıkışı +5 V seviyesine getiriyoruz ve ardından belli bir süre gecikme koyarak çıkışın bu seviyede o süre boyunca kalmasını sağlıyoruz, daha sonra çıkışı 0 seviyesine çekip gene ardından belli bir süre gecikme koyuyoruz.

 

IS ve BEK değişkenlerini ise bu gecikme sürelerini ayarlamak için kullanıyoruz, NUM değişkenini de bu döngüyü NUM sayısınca tekrarlamak için yani NUM sayısı kadar darbe göndermek için kullanıyoruz. Butona basmamız ve çekmemiz arasında geçen süre boyunca servoya kare dalga gönderdiğimiz için NUM sayısına yüklediğimiz 5 sayısı yeterli olmaktadır, buton kullanmasaydık bu sayı yeterli olmayacaktı ve motor dönmeyecekti. Eğer buton kullanmayacaksanız NUM değişkenine 100 sayısını yüklemenizi tavsiye ederim.

 

GECIKME

        MOVF        IS,W

        MOVWF       SAYAC1

DONGU1

        MOVF        BEK,W

        MOVWF       SAYAC2

DONGU2

        DECFSZ      SAYAC2,1

        GOTO        DONGU2

        DECFSZ      SAYAC1,1

        GOTO        DONGU1

        RETURN

        END

 

;Burada çift döngülü bir gecikme oluşturuyoruz. Bu gecikme miktarı ise yaklaşık olarak şu şekilde hesaplanmaktadır:

 

Gecikme(μs)=IS*BEK*3

 

Bu uygulamada servoyu orta pozisyona getirdiğimiz için 1 süresini 1.5 ms, 0 süresini ise 15 ms olarak ayarladım, siz de 1 süresini 0.6 ve 2.4 ms arasında değiştirerek diğer açı değerlerini bulabilirsiniz. 0 süresini ise hepsinde 15 ms olarak kullanabilirsiniz.

 


   
Beğenilme
E-mail olarak gönder
İlgili makaleler
Teknikim'e kaydet

Okuyucu yorumları  RSS feed Yorum
 

Ortalama Üye Değerlendirmesi

   (0 Oylama)

 

Yorum Sayısı: 2 / 2

Re: atalay54

Yazan:: Tuna (Kayıtlı ) Tarih: 10-10-2008 16:59

İstediğiniz diğer açı değerleri için de servonun dönmesini sağlamaksa, bu açı değerlerini bulmak için 1 süresini 0.6 ve 2.4 ms arasında değiştirerek denemelisiniz.

 

» Yorumu cevapla...

atalay54

Yazan:: atalay54 (Kayıtlı ) Tarih: 09-10-2008 23:45

tuna bey devre güzel. fakat servoyu tüm açıyı tarayacak şekilde oluşturmak için bir uygulama yapabilirmisiniz saygılar

 

» Yorumu cevapla...

Yorum Sayısı: 2 / 2



Yorumunuzu ekleyin
Sadece kayitli kullanicilar bir Makaleyi yorumlayabilir. Lütfen ücretsiz üye olun veya giriş yapın.


mXcomment 1.0.8 © 2007-2008 - visualclinic.fr
License Creative Commons - Some rights reserved