![]() |
|
|
Hobi Servo Sürelim (Bilgisayar Kontrollü) / 27 Ekim 2008
Hobi servolar girişine uyguladığımız darbenin genişliğine göre 0-180 derece arasında dönme açısını değiştirilebildiğimiz motorlardır. Model uçakların kanat açıları, uzaktan kumandalı arabaların direksiyon sistemleri, el-kol hamleleri-adım atma-tutma-bırakma gibi hareketler gerektiren ve çok yüksek tork gerektirmeyen robotlar için ideal motorlardır. Bu motorlar çeşitli boy ve torklarda olabiliyor: Büyük resimden görüldüğü üzere servolarımızın üç girişi var, ikisi besleme üçüncüsü data(veya pwm) girişi yani darbe genişliği uyguladığımız giriştir. Hobi servomuzu kontrol etmek için bir kare dalga işaretinin darbe genişliğini belirli sınırlar içerisinde değiştiririz, yani ismini koymak gerekirse darbe-genişlik modülasyonu yaparız. Renklerden hangi pin ne işe yarıyor görebiliyoruz. Nitekim bizim servomuzda kahverengi:toprak, kırmızı:+, turuncu:data. Diğer hobi servolarda renkler nasıl bilmiyorum ama kırmızı(+) ve siyah(toprak) kablolar varsa kalan girişin pwm girişi olduğunu söyleyebiliriz. Communication: Pulse Width Modulation (PWM) Bu bilgileri bulma işine girmeden önce servomuza bir hareket verelim, bakalım çalışıyor mu! Servomuza 1ms darbe genişliği uygulayarak konumlandığı açıya bakalım. Besleme gerilimi olarak servonuzun teknik bilgilerine bakabilirsiniz. Bizim servomuz için “Operating voltage 4.2-6V” denilmiş. Genel olarak 6V uygulanabilir, ben 5V uyguluyorum. Servomuzun data girişine b0 pinini bağlayacak olursak bunun için bizim yazacağımız temel kod: while(1){ output_high(pin_b0); delay_us(1000); output_low(pin_b0); delay_us(19000); } olacaktır. long b0=600; while(1){ output_high(pin_b0); delay_us(b0); output_low(pin_b0); delay_us(20000-b0); } yazarsak servomuzun pozisyonunu b0 değişkeniyle kontrol edebiliriz. Hobi servo sürmek bu kadar basit:) long b0=1000; while(1){ if(!input(pin_b3)){ //dugmeye basildi b0+=50; delay_ms(200); deger=b0/10; putc(deger); //8 bitlik sayıyı bilgisayara gönder } if(!input(pin_b4)){ //dugmeye basildi b0-=50; delay_ms(200); deger=b0/10; putc(deger); } output_high(pin_b0); //surmeye devam delay_us(b0); output_low(pin_b0); delay_us(20000-b0); }//while Bilgisayara göndermek şart değil b0 ın ilk değerini programınızda 1000us gibi sabit bir sayıya eşitleyin sonra düğmeye kaç defa bastıysanız o kadar 50 us ekleyerek(veya çıkararak) servonuzun sınır darbe genişliklerini tespit edebilirsiniz. Her düğmeye bastığınızda “toggle” eden bir led olursa adım kaçırmazsınız. Sınır değerleri de bulduysak artık servomuzu istediğimiz açıya getirebiliriz. Peki ne kadar bir hassasiyetle? Devre düzeneğinizi bozmadan düğmelerle değiştirdiğiniz b0 değerini 50 us değil de daha az yapın, bakalım tepki veriyor mu? Bizim servomuz için bu hassasiyet “Dead band width =10 us” olarak verilmiş. Bu da yaklaşık 1 dereceye tekabül ediyor. Peki bu yöntemle aynı anda kaç servoyu sürebiliriz? long s1=650,s2=650,s3=650; while(1){ output_high(pin_b0); delay_us(s1); output_low(pin_b0); output_high(pin_b3); delay_us(s2); output_low(pin_b3); output_high(pin_b4); delay_us(s3); output_low(pin_b4); delay_us(20000-s1-s2-s3); }//while Gelelim bu bilgilerimizi güzel bir uygulamada kullanma kısmına: while(1){ output_high(pin_b0); delay_us(s1); output_low(pin_b0); output_high(pin_b3); delay_us(s2); output_low(pin_b3); output_high(pin_b4); delay_us(s3); output_low(pin_b4); delay_us(20000-s1-s2-s3); }//while }//main #INT_RDA void seri_data_geldi(){ bx=getc(); // bx de long türünden if(bx==200){ //sira ilk motorun sira=1; } if(bx==220){//sira ikinci motorun sira=2; } if(bx==240){//sira ucuncu motorun sira=3; } if(bx<200){ //gelen veri motorlara if(sira==1){ s1=10*bx+540; } if(sira==2){ s2=10*bx+540; } if(sira==3){ s3=10*bx+540; } } output_toggle(pin_a1); //kesme geldi belirteci } Peki elimizde servo yoksa bu uygulamayı Proteusta simüle edebilir miyiz? Evet. Bunun için öncelikle “eltima virtual serial port” programı gibi bilgisayarımızda virtual serial port oluşturabilecek bir programa ihtiyacımız var. Çünkü “virtual port” oluşturamazsak visual studio.net ile açtığımız porta proteus bağlanamayacak, proteusla açtığımız porta vs.net bağlanamayacak. Bahsettiğim virtual serial port programı bilgisayarımızda birbirine bağlanmış sanal port çifti oluşturuyor, örn com1 ve com2 olarak. Proteustan com1 e bağlanıp başka programlardan com2 ye bağlanarak iki program arasında iletişimi sağlayabiliyoruz. Dikkat etmemiz gereken bir diğer nokta proteusta kullandığımız servonun sağ tık menüsüyle açılan özelliklerinin kendi servomuzla uyuşuyor olmasıdır.
“Hobi Servo Sürelim (Bilgisayar Kontrollü)” için 23 YorumYorum Yapın |
|
| |
29 Ocak 2009, 21:48
Selam.ben devreyi butonla kontrol edecem bilgisayarla değil.Devreyi yaptım servoya pals gidiyo ama servo dönmüyo.birde çalışınca sürekli titreme yapıyo.Elimle pals ucuna değince normal dönüyo.Yardım edin…
31 Ocak 2009, 22:24
Ahmet servoyu hangi PIC in hangi piniyle sürüyorsun? Bu bilgilerle sana yardım edebilmemiz biraz zor. İyi çalışmalar.
18 Mart 2009, 22:57
selamlar… ben bu uygulamada birşey sormak istiyorum. öncelikle ben pic16f877 kullanmak istiyorum. RS232 ile bilgisayar bağlantısında araya max 232 entegre kullanmamız gerekirmi? direk bilgisayara bağlama, gerilim farklılıkları sorunu yaratırmı?
19 Mart 2009, 00:37
http://antrak.org.tr/index.php?option=com_content&task=view&id=1192 adresinde seviye dönüştürücü kullanmaksızın 22k direnci üzerinden seri porttan PIC e direkt bağlantı yapılmış. Ancak yazının sonunda riskli bir uygulama olduğu notu da düşülmüş. Seriport ile PIC arasında gerilim seviyeleri açısından çok fark var, dolayısıyla max232 gibi bu iş için tasarlanmış bir seviye dönüştürücü kullanmamız daha uygun olacaktır.
20 Temmuz 2009, 03:36
Dostum kralsın valla kitaplarda vay efendim pwm miş timermış onlarla bi sürü hesaplamaymış en iyi çözüm en basit olanıdır tebrik ederim. Saygılarla…
Ben de delaylerle oynamayı düşünmüştüm senin gibi ama baya bi düşünmem gerekiyomuş paylaşım için teşekkürler çok iş görecek bu
24 Temmuz 2009, 17:52
En üstteki resimde rc servonun yanına 1 ytl bozuk para koyman dikkatimi çekti yabancı sitelerde dolarşırken onlarda da cent ya da peny görüyordum. Hoşuma gitti. Teşekkürler.
31 Temmuz 2009, 04:19
Teşekkürler hocam C# ile seri port uygulaması için harika bir ornek olmuş…
06 Ocak 2010, 19:52
ben 16f84 kullanarak buton ile kontrol etmek istiyorum nasıl yapabilirim. aslında rs232 ile de kontrol etmek istiyorum da onu yetiştiremeyebilirim. bitirme projem için lazım acil yardımcı olursanız sevinirim.
21 Ocak 2010, 10:15
öncelikle yaptıgınız örnek harika C# için harika bır örnek benim şöyle bir sorunum var usb ile bilgisayarın iletişimini bilgisyayardan görmek istiyorum acaba böyle direk bir elektronik devre varmıdır acaba yoksa nasıl bu devreyı oluşturablırıım şimdiden yardımlarınız için çok teşekküreler…
14 Mayıs 2010, 00:49
Dostum eline koluna sağlık çok güzel bir anlatım. Ben bir öğretmenim ve bunu iznin olursa bu şekilde öğrencilerime anlatmak istiyorum. Tabii ki senin isminle.. Teşekkürler
18 Temmuz 2010, 01:53
cok gusel bır uygulama paylaşım için çok teşekkurler…Ancak benım yapacagım uygulamada virtual thermınalden c# da kı program kontrolu ıslemı yapmak ıstıyorum. c # da kı yapılmıs arabanın kontrolu acaba nasıl bır yol ızlemelıyım yardımcı olabılırmısınız??
04 Aralık 2010, 18:15
iyi güzel ama bu zamanları ben ayarlayamadım. yani ne yaparsam yapayım ya +90 ya-90 a döndü servoalar pratikte yapmöadım fakat proteusda denedim sadece lütfen yardım eder misiniz kod;
#include
#use delay (clock=10000000)
long x, y;
main()
{
x=10;
y=30;
while (1)
{
output_high(pin_b0);
delay_us(600);
output_low(pin_b0);
delay_us(2000-600);
}
19 Şubat 2011, 02:11
keşke herkes böyle paylaşımcı olsa,
teşekkürler.
28 Nisan 2011, 17:07
Hocam eline koluna sağlık, teşekkürler paylaşım için …
05 Mayıs 2011, 15:38
Merhaba,
Kardsm on numara bi sunum ben pic basic pro ile pic assembly kullanıyorum ona rağmen cok kolay şekilde adapte edilecek boyutta vermıssın Allah razı olsun
iyi çalışmalar kolay gelsin
12 Mayıs 2011, 11:32
selamlar,
bu örnekte com port zarar görme olasılığı nedir?
birde sitede vermiş olduğunuz kodlar ccs pic kodları mıdır?
3 servoyu kontrol etmek için kullandığınız f628 a da sol taraftaki bağlantılarda eksiklik mi var ben bir proje hazırlıyorumda bilgisayar programcılığı okuyorum elektronik ve devrelerden pek fazla anlamam yardımcı olabilirmisiniz. Kolay gelsin.
12 Mayıs 2011, 17:07
Merhaba, comport un zarar görmesi için bir sebep yok, evet CCS C kodları, devre şemasına çok sade olmasından dolayı gerek görülmedi.
13 Mayıs 2011, 21:02
iyi akşamlar,
isis te çalıştırdığımızda tek tur dönme işlemi yapan servolar c# ile yazılan yazılıma istediğimiz gibi aynı hex koduyla birini sağ diğerini sol vb şeklinde döndürme yapabilir miyiz acaba.
az önceki sorumda eğer 6,7,8,9,10,18 harici olan pin uçlarına bi takım bağlantılar gerekiyorsa
bunlar neler olmalı ve nasıl bi şekilde bağlanmalı.açıklayabilirmisiniz. Gerçekten bu konularda yeniyim ve hiç bir eğitim almadım ancak bilgisayar bölümü olarak bu tip bir projem var
sizin yaptığınız servo.c kodunu internette bulduğum ccs c e kitabı ile anlamaya çalışıyorum.
Başınızı ağrıttığım için de özür dilerim
iyi akşamlar ve iyi çalışmalar
14 Mayıs 2011, 14:40
Diğer pinlere bağlantı gerekmiyor, hangi pinlerin kullanıldığı programdan da takip edilebilir. Birini sağa diğerini sola döndürebilirsiniz, motorlar birbirlerinden bağımsız ve uyguladığınız darbe genişliğine göre belirli bir açıya gidiyorlar. İyi çalışmalar.
16 Mayıs 2011, 07:41
merhaba,
yaptığınız bu çalışmada servolar enerjisini 6 v gerilim kaynagından alıyorlar anladığım kadarıyla pic servoya ne kadar sure akım cekmesi gerektiğini bildiriyor, peki pic burda nekadar volt enerji kullanıyor
ve bişey daha yorumlara cevabınızın birinde max 232 kullanmayı önermişsiniz aynı durumun bu uygulamadada zorunlulugu var mı.
paylaşım için teşekkur ederim,iyi çalışmalar.
16 Mayıs 2011, 10:12
Ben servoları ve PIC i 5V ile beslemiştim. Bilgisayardan komut göndermek için en kolay yol olarak seri port kullanıyoruz ancak seri portun voltaj seviyesi(-10V, 10V) PICe(0V, 5V) uygun değil dolayısıyla araya uyumu sağlamak için max232 seri port buffer devresi koyuyoruz.
17 Mayıs 2011, 00:45
merhaba,
proteus cızımını verdiğiniz uygulamada illaki max232 kullanmak zorunluluğu varmı yoksa diger kristal vb elemanlarla da bunu saglayabilirmiyiz,devrede 6v yerine 5v kullanmamız şartmı
iyi çalışmalar hayırlı akşamlar.
17 Mayıs 2011, 15:05
6V yerine 5V şart değil, 6V PIC için bozulma sınırı(asıl değer için datasheet e bakılabilir), ben hem PIC i hem de motoru aynı kaynaktan beslediğim için besleme gerlimini 5V seçmiştim. max232, bilgisayarla PIC in haberleşmesi için kullanılır, max232 yerine ayrık devre elemanlarıyla bir devre düşünülebilir ancak risk almaya gerek yoktur max232 bu iş için uygun ve kolay çözümdür.