Ana Sayfa PIC Assembly - PIC C 16F877A İle Servo Motor Kontrolü

16F877A İle Servo Motor Kontrolü

2 min read
16
0
18,885

SERVO MOTOR

Robotik uygulamalarının temelini oluşturan servo motor R/C tip servo motordur.

R/C Servo motorların 3 kablosu bulunur. Genellikle kırmızı kablo +, siyah yada kahve kablo -, sarı yada turuncu kablo ise mikrodenetleyiciye bağlanacak kontrol (PWM) ucudur.

Servo motorlar genel itibari ile içerlerinde bir DC motor ve şaft konum bilgisi devresi barındırırlar. Bu devre şaftın kaç derece döndüğünün algılanmasında kullanılır . Servo motorlar 20ms periyotlu, 1ms’den 2ms’e kadar değişen duty cycle’lı PWM sinyali ile sürülürler. Verilen duty cycle periyotlarına göre servo motorun 0-180 derece aralığı arasında alacakları değerler yanda gösterilmiştir.

Burada sinyal verilirken örneğin 1,5ms ile 1ms arası 90’a bölünerek istenilen açıya gidilebilir.

Model uçak, araba ve robotik uygulamalarda yaygın olarak kullanılır.

ser1

DEVRENİN ŞEMASI

ser2

DEVRENİN HI-TECH C KODU

[php]

#include "htc.h"
#include "delay.h"
__CONFIG(0x3FF1);
void main()
{
TRISB =0x00; // PORTB cikis
TRISD=0xFF;
while(1)
{
if(RD5)//0 Derece Dön
{
for(;;){
RB0 = 1;
DelayUs(250);DelayUs(250);DelayUs(250);DelayUs(250);
RB0 = 0;
DelayMs(19);
if(RD6 | RD7) break;
} }
if(RD6)
{
for(;;)
{
RB0=1;
// 1,5ms Gecikme
DelayUs(250);DelayUs(250);DelayUs(250);DelayUs(250);
DelayUs(250);DelayUs(250);
RB0=0;
// 18,5ms Gecikme
DelayMs(18);
DelayUs(250);DelayUs(250);
if(RD5 | RD7)
break;
}}
if(RD7)
{
for(;;)
{
RB0=1;
// 2ms Gecikme
DelayMs(2);
RB0=0;
// 18ms gecikme
DelayMs(18);
if(RD5 | RD6)
break;
}
}
}
}

[/php]

DEVRENİN VİDEOSU:

Programın hex dosyasını buradan ulaşabilirsiniz..

Buna Benzer Yazılar Göster !
Daha Fazlasını Yükle - Burak Ablay
Daha Fazla Göster -  PIC Assembly - PIC C

16 Yorumlar

  1. ibrahim

    1 Ağustos 2015 at 20:04

    Merhabalar. hex dosyasını programlayıcıdan yüklediğim zaman bu hatayı alıyorum. Yardımcı olabilir misiniz acaba ?

    http://i.hizliresim.com/kggzzv.jpg

    Reply

    • Bilal Kaya

      1 Ağustos 2015 at 22:27

      İbrahim 16f877a yı düzgün takdığına emin misin?

      Reply

      • ibrahim

        2 Ağustos 2015 at 07:09

        malesef herşeyi doğru yaptıgıma eminim

        Reply

      • ibrahim

        2 Ağustos 2015 at 08:00

        normalde 16f84a ile çalısıyorum…winsows 10 a geçtim acaba bundan mı diyorum ama bundna olcagını sanmıyorum. 16f84a yı programladığımda başarıyla programlıyor ama devreyi kurdugumda calısmıyor. 16f84a yı okutuyorum doğru yazılmıs. bende gittim heralde yandı diyerek yeni bir pic aldım

        16f877a yı okutabiliyorum içinde hiçbişey yok gözüküyor. fakat yazmaya calıstıgımda yukarıdaki hatayı alıyorum.

        Reply

        • Bilal Kaya

          2 Ağustos 2015 at 08:46

          Kullanılan Pic programlama kartı Windows 10 desteklemiyor olabilir.Bir de 16F877A yi değiştirip deneyin isterseniz.Belki denetleyici bozuktur.

          Reply

  2. ibrahim

    2 Ağustos 2015 at 14:59

    k150 pic programlıcısı kullanıyorum…yeni bir tane alıcam sanırım…sizin kullandığınız bana önerebilceğiniz bir programlayı söyleyebilir misiniz

    Reply

  3. İbrahim

    9 Eylül 2015 at 20:31

    merhabalar…sg90 servo motor ile bu projeyi gerçekleştirdim..fakat küçük bir cızırtı sesi alıyorum içeride dişli de dönmüyr..servo motor bozuk olabilir mi

    Reply

    • İbrahim

      9 Eylül 2015 at 20:43

      şimdide dönüyor fakat sürekli saat yönü vebutona ne kadar basarsam o kadar dönüyor…tüm butonlarda böyle..sizin verdiğiniz hex dosyasını yükledim

      Reply

    • İbrahim

      9 Eylül 2015 at 21:34

      Arduino ile de deneme yaptım ve yine kararsız çalıstı sanırım servo motor bozuk

      Reply

      • Ömer Egil

        31 Ağustos 2016 at 21:28

        ibrahim sana olanların aynısı banada oldu ilk başta cızırtı oldu doğru dürüst dönmüyordu sonra sadece saat yönünde dönmeye başladı. ardından 11inci bacağı(vdd isimli bacak) +ya, 12. bacağı(vss isimli bacak) -ye bağladım 32. bacağı(vdd isimli bacak) yine + ya ve 31. bacağı(vss isimli bacak) yine -ye bağladım ve düzeldi.

        Reply

  4. Burak Ablay

    Burak Ablay

    10 Eylül 2015 at 09:23

    Evet ya servonda sıkıntı var yada pic te olabilir.Çünkü pic de kolay bozulabilir bir cihazdır her zaman doğruluğunu kontrol etmek için farklı picte denemeni öneririm.Sen pic yerine arduino denemişsin zaten ordada sorun oluşuyorsa servo motorun bozuktur.İyi çalışmalar dilerim..

    Reply

  5. abdussamet

    13 Aralık 2015 at 14:49

    bu kodu derlediğimde delay.h hatası alıyorum yardımcı olursanız sevinirim

    Reply

    • Burak Ablay

      Burak Ablay

      13 Aralık 2015 at 16:10

      delay.h eklentisi indirmeniz gerekmektedir. c kodu için gerekli bir eklentidir. İndirdikten sonra çalışma dosyanızı kaydettiğiniz yere bu dosyayı atmanız gerekmektedir. Bu sorunu bu şekilde çözebilirsiniz.

      Reply

  6. Berk Kaya

    16 Haziran 2017 at 19:59

    Merhaba cikis pinlerine bagli 6 adet direnc ve 3 butonun nedeni nedir ? Bunlari bilmem cok onemli, nedenini belirtirseniz sevinirim. O pinlerde neden anahtarlama yapmaya ihtiyac duyulsun ki ?

    Reply

    • Burak Ablay

      Burak Ablay

      19 Haziran 2017 at 20:02

      Merhaba Berk bey,3 adet anahtar servo motorun 0-90-180 derece acı yapması için konulmuştur. Dirençlere gelecek olursak nötr ile pic ucu arasına atılan 10k hem butona basılmaması halinde pic ucunda 0 v gözükmesini hemde butona basılması halinde +5v un kısa devre olmamasını sağlamaktadır. Yani pic üzerinde herhangi bir buton kullanılması durumunda buna benzer bir devre kurmanız gerekmektedir aksi taktirde istediğiniz sonucu elde edemezsiniz.. İyi çalışmalar dilerim.

      Reply

Bilal Kaya için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bak Bakalım ?

Modbus POLL ile Allen Bradley Motor Sürücüsünün Haberleşmesi

Merhabalar arkadaşlar , Bu yazımızda RS485 yada Modbus haberleşmesi ile ilgilenen arkadaşl…