avatar_Burak

Mini Servo Motor Sürme

Başlatan Burak, 11 Şubat 2013, 23:26:06

Burak

Hocam Merhaba ....

Ben HC-SR04 ultrasonik sensörler yardımıyla mesafe kontrolü yapmak istiyorum ... Aslında yapmak istediğim labirentte ilerleyip yolunu bulabilen bir robot olacak ... Dizayn sürecinde ultrasonic sensörlerden iki adet yanlara bakan bir adet öne bakan sensör koymayı düşünmüştüm daha sonra ise , bu sensörlerden sadece bir adet kullanmak üzere robotun önüne servo motora monte şekilde olmak üzere , bir kez 90 derece sola ardından 180' derece sağa ardındada eski konumuna gelmesi için tekrar 90'lik sola döndürerek 3 mesafe okumasınıda tek HC-SR04'e yaptırmak istiyorum

Ebay'dan bu işlevi yerine getirebileceğini düşündüğüm bir mini servo aldım ... Fakat ben bu servoyu nasıl süreceğimi bilmiyorum .. Sizin derslerinizde pot ile servo kontrolü yapılmış ama ben fazla birşey çıkaramadım kendi projem için oradan ...

Ayrıca servonun datasheet'i de yok ... Satın aldığım servonun satışa sunulduğu sayfada satıcı bir kaç birşey yazmış acaba o bilgiler bizim için yeterlimidir , o bilgiler nedir ne anlama gelmektedir ? bu konuda yardımlarınızı bekliyorum ...

http://www.ebay.com/itm/Motor-Micro-3-7g-Mini-Servo-set-Control-aircraft-flight-direction-RC-plane-/230871627044?_trksid=p5197.m1992&_trkparms=aid%3D111000%26algo%3DREC.CURRENT%26ao%3D1%26asc%3D14%26meid%3D5526426110407577131%26pid%3D100015%26prg%3D1006%26rk%3D1%26sd%3D230871627044%26

Şimdiden teşekkürler ..
Ω Gens Una Sumus Ω

ete

Verdiğin linkte motorun nasıl sürüleceği konusunda bilgi yok maalesef.
Servo motorlar sürekli Puls lar ile sürülürler. Genelde peryod 20 ms dir. Bu süre içinde yer alan HIGH süresi motora yön verir.
20 ms lik sürenin diyelimki 1 ms lik süresi HIGH olursa motor belirli bir yere kadar döner ve durur. Bu sefer süreyi 0,5 ms (500us) yaparsan motor başlangıç konumuna geri döner. Aynı şekilde  motora 1,5 ms lik bir puls verirsen motor başka bir pozisyonda durur. Benim gördüğüm motorların hemen hepsi 0-2 ms lik sürelerde çalışıyor idi. Bu bilgiyi linkte aradım ama bulamadım maalesef.
Bu durumda süreleri deneme yaparak öğreneceksin demektir. Yapman gereken motoru sıfır pozisyonuna hangi süre alıyor.
Sonra motoru 180 dereye konumuna hangi süre alıyor onu bulmaya çalış ve sonunda bu iki süre arasında değişen süreleri vererek motoru istediğin konuma getir. Hepsi bu.
Motora süre vermek için illa PWM kullanmak zorunda değilsin.
20 ms lik peryodu sağlamak  ve motora örnek olarak 2 ms lik puls vermek için;
BASLA:
HIGH MOTOR
PAUSE 2
LOW MOTOR
PAUSE 18
Goto basla
şeklinde bir komut vermen yeterlidir.
Aynı şekilde HIGH süresini 1 ms ye ye düşürürsek,
BASLA:
HIGH MOTOR
PAUSE 1
LOW motor
PAUSE 19
Goto basla
şeklinde ayarlamak mümkün. Bütün mesele 20 ms lik süreden High süresini düşürüp ona göre low süresi vermek gerekiyor.

Ete


Burak

Hocam aşağıdaki şekilde yazdım ... Tam istediğim gibi milimetrik bir açı değeri elde edemesemde %90 oranda gereksinimi karşıladı ...

Yalnız dikkatimi çeken bu motorda , periyod süresini 10 ms - 20 ms arasında değiştirsemde hiç birşeyin değişmemesi ... Tabiiki high süresi ciddi oranda açı değişimini kontrol ediyor ama , low süresi için 10 ms'lik bir aralıkta değişim yapmama rağmen bir fark gözlemleyememem dikkatimi çekti ...

Kod'la ilgili düzeltmek istediğiniz (Algoritma sırası bile olsa) gözüne çarpan birşey olursa lütfen ekleme yapınız ..
Teşekkür ederim yardımlarınız için ..



define osc 4

PORTA=0
PORTB=0     

OPTION_REG.7=0
TRISA=%00000000
TRISB=%00001100

but1 var portb.2
but2 var portb.3
out var portb.4
i var byte

i=0
out=0


for i=1 to 50
HIGH out
PAUSEus 1310
LOW out
PAUSEus 15000
next




CONTROL:



i=0
out=0
IF BUT1=0 THEN
   
    out=0
    gosub pulseout1
    WHILE BUT1=0
    WEND

endIF

IF BUT2=0 THEN
   
    out=0
    gosub pulseout2
    WHILE BUT2=0
    WEND
endIF
   
    pause 40
   
goto control


pulseout1:
for i=1 to 30
HIGH out
PAUSEus 490
LOW out
PAUSEus 19500
next
return

pulseout2:

for i=1 to 30
HIGH out
PAUSEus 2340
LOW out
PAUSEus 17800
next

return
Ω Gens Una Sumus Ω

ete

Ben olsam şu değerleri net olarak verirdim.
500 us
1000 us
1500 us
2000 us

Gecikmeleri küsuratlı vermen gerekmezdi. Belki komut gecikmelerini düşünerek bunu yaptın ama gerek yok.
Ete

Burak

Alıntı yapılan: ete - 17 Şubat 2013, 22:45:49
Ben olsam şu değerleri net olarak verirdim.
500 us
1000 us
1500 us
2000 us

Gecikmeleri küsuratlı vermen gerekmezdi. Belki komut gecikmelerini düşünerek bunu yaptın ama gerek yok.
Ete

Hocam küsüratların nedeni açı optimizasyonunu sağlamak için idi .. Yaklaşık olarak bu değerleri elde etmek için pic'i 100-200 defa sildim tekrar yazdım :D   Optimizasyon derken tam 90 derece 180 derece ve 0 derecelik dönüşleri elde edecek high pulse süreleri idi ...
Ω Gens Una Sumus Ω

Burak

Bu arada hocam oradaki FOR döngülerini gördünüz mü ? tek seferlik örneğin 1ms'lik high pulse vermem açı değerine ulaşmasına yetmiyor motorun ... sadece bir tık ilerliyor ve duruyor ... bende konumunu bulana kadar aynı pulse'ı verdim , sonuçta açısına ulaşınca istediğin kadar o aynı süredeki high pulse'i versende konumu değişmiyor ... Ben baştan sadece tek bir pulse ile o açıya ulaşacak sanmıştım ... böyle deneyim edindim ... Yanlışlık yoktur umarım bu durumda ... Yani sizin sürdüğünüz servolarda da böyle yapmışsınızdır herhalde dimi ?
Ω Gens Una Sumus Ω

Burak

Hocam servolarla ilgili sorunum ortadan kalktı fakat bu seferde robota hareket veren dc motorlar ile başım dertte ...
Elimde yaklaşık olarak 6-7 adet dc motor var (bana tabiiki 2 tanesi lazım çünkü bu robot zaten 3 tekerlekli olucak , diğer tekerlek ise bilyeli olan ve motorların hareket yönüne göre dönebilen bir tekerlek zaten arkada destek amaçlı...)
Fakat bu DC motorların hiç birisi aynı devirde çalışmıyorlar, eşit devirde dönmüyorlar ve robot dümdüz gitmesi gereken yerde farklı hızlarda dönen iki motor yüzünden sapmaya uğruyor ... Ben iki motorunda aynı hızda dönmesini istiyorum ? Bunu nasıl sağlayacağız ? dc motorlar yerine acaba başka tür bir motor mu kullansak ? Step motor gibi ???

Şimdiden teşekkürler ..
Ω Gens Una Sumus Ω

ete

Elbette aynı cins motorlar bile aynı hızda dönmezler. Bu sorunu gidemek için motorlar pwm ile sürülmeleri gerekir. Yaptığın alette yön düzeltme sistemi ( çizgi takibi gibi)olursa sistem kendi kendine yönü nü düzeltir.
Pwm dan tabiiki Hwpm sinyalini kast ediyorum. İki motorun var ise pratik olarak iki hpwm çıkışı olan bir işlemci kullanmak gerekir
Ete

Burak

Hocam aynı Board üzerinde tüm bağlantıları yapılmış sadece output pin' bağlantısı yapılmamış halde olan L293 ile PIC16F628A var iken , çalışmakta olan PWM , motoru L293'ün output pinleriyle bağlantısı yapıldığında sapıtıyor .... ??? Bu sorun niye olabilir ki ? Çok enteresan ,,, hiçbir şekilde sonuca ulaşamadım , problemi çözemedim ...  :(
Ω Gens Una Sumus Ω

F®T

işlemci besleme ayaklarının en yakınına 100nf kapasite tak.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

sinancnc

ebay dediğiniz yer yurt dışı firmasımıdır. Kargo + gümrük v.s gibi bedelleri varmıdır. Teşekkür ederim
Paylaşmayı seven insan toprak olup gitmez. Bir şeyler bırakır...!

Burak

Alıntı yapılan: sinancnc - 18 Şubat 2013, 23:02:28
ebay dediğiniz yer yurt dışı firmasımıdır. Kargo + gümrük v.s gibi bedelleri varmıdır. Teşekkür ederim

Kargo ücretleri siteye üye olunması durumunda görüntülenebilir ama gümrük konusunda 75 usd'nin üstündeki alışverişler için problem çıkmaktadır ... Bu yılın gümrük beyannamesine bakmanızı tavsiye ederim ...
Ω Gens Una Sumus Ω

sinancnc

Alıntı yapılan: gunayburak - 19 Şubat 2013, 00:10:13
Kargo ücretleri siteye üye olunması durumunda görüntülenebilir ama gümrük konusunda 75 usd'nin üstündeki alışverişler için problem çıkmaktadır ... Bu yılın gümrük beyannamesine bakmanızı tavsiye ederim ...
üye olduğumda görünen kargo ücreti kapı teslim değilse çok Zor ve teferruat lı gibi gözüküyor teşekkürler
Paylaşmayı seven insan toprak olup gitmez. Bir şeyler bırakır...!

bilsisco

Yeni konu açmak istemedim.
Tower Pro SG Micro Servo tipi bir motoru aşağıdaki kod ile sürebiliyorum ama
neden orta noktadan 45 derece sağa ve sola dönüyor anlamadım.
Servo 180 derece dönebiliyor ve bilgi sayfasında ( http://datasheet.sparkgo.com.br/SG90Servo.pdf )
toplam 20ms lik peryodun ilk 1-2 saniyesi ile (1500=0 derece orta, 2000=90 derece sağa ve 1000=90 derece sola)
180 derecelik açı arasında kontrolü sağlanması gerekiyor.

Include "modedefs.bas"         
@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_OFF
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE pic16f628A, BOD_OFF
@ DEVICE pic16f628A, LVP_OFF
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16f628A, MCLR_OFF
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT

DEFINE OSC 4

TRISA=%00000000  'A portu çıkış olarak ayarlandı.
TRISB=0         'B portu çıkış olarak ayarlandı.
PORTA=0
CMCON=7

Servo   var PortA.0
Lamba   var PortB.0
X       var word
Y       var word

high    lamba
pause   500
low     lamba

Low     servo   'İlk polaritesi low (pals pini high yapacak)
pause   1000

BASLA:     
    for y=0 to  40          '4Mhz de pals 10us sürer
        pulsout servo,150   '150*10=1500=1,5ms
        pauseus 18500
    next
    pause   2000
   
    for y=0 to  40   
        pulsout servo,199    '1990
        pauseus 18010
    next
    pause   2000
       
    for y=0 to  40
        pulsout servo,101    '1010
        pauseus 18990
    next
    pause   2000

GOTO BASLA
END

ete

Servoların pek çoğu 2000us lik puls ile çalışır. Ancak bu sürenin 500-2000us lik aralığını kullanır. Anlayacağın kullandığı süre max. 1500us dir.

Bu pulslar her 20 ms de bir verilmelidir. Motor palsi bir kere aldımı konumunu değiştirir. Aynı palsi defalarca üst üste alsa bir daha konum değiştirmez ama bu palsleride alması gerekir. Ancak süre değişirse konum değiştirir.
Şimdi sen önce 500us ver bakalım hangi konuma geçiyor. Bir hesap yapacak olursak  1500/180=8,3333 puls/derece  gibi bir değer buluruz. O halde 90 derece konum değiştirmek için 90 * 8,33333+500=1250 us puls uygulamak gerekir.  180 derece için 1500+500=2000 us puls uygulamak gerekir.
Dediğim gibi pulsler de 20hz lik frekans içinde verilmelidir.
örneğin 1250us lik bir HIGH palsi verilecek ise, 20000-1250=18750 lik low palsi verilmelidir.
En güzeli 20 ms lik bir kesme yaratıp içinde palsi uygulamak olabilir.

Ete

Powered by EzPortal