Servo motor kontrolü
SERVO MOTOR KONTROLÜ
Merhaba arkadaşlar.Sistem analizi projemde bir robot kol ve birlikte çalışacağı taşıyıcı bant sistemi yapmaya karar verdim.Robot kol için servo motor kullanmayı seçtim.Servo motorlar hoby devrelerde çokça kullanılan ve işlevsel bir hareket elemanıdır.Kontrolü dc motora göre çok daha kolaydır.Fakat servo motorlar hakkında birçok sitede karman çorman verilen bilgiler bu motorun kullanımını zorlaştırmaktadır.Servo motor uygulaması yapmak isteyen arkadaşlarıma ışık tutmak ve benim zorlandığım konuların kolayca üstesinden gelebilmeleri için bu yayzıda servo motorları anlatıcam birkaç kod örneği de vericem.
Servo motorlar PWM(Pulse Widith Modulation) yani vuru genişlik modilasyonlu sinyal ile kontrol edilirler.
Bir servo motor içerisinde dişli sistem ve bir potansiyo metreye sahip dc motordan ibarettir.Kendi kontrol kartı bulunur.PWM sinyali bu kart aracılığı içe motora iletilir ve motor hareket eder bu hareket potansiyometre ile algılanarak motor milinin konumunu bize bildirir.
Sermo motora PWM sinyali nasıl uygulanır ?
Servo motorların çalışma periyotları 20 mili saniyedir.Fakat servolar bu 20 mslik periyodun sadece 2 veya 2.5 mslik kısmında 180 derecelik hareket gerçekleştirirler.Bu çalışma süresi motordan motora değişir.Ben 2ms baz alarak anlatıcam.Bu 2ms süre boyunca motora "1" verip kalan 18ms "0" verirseniz motor 90 derecelik bir hareket gerçekleştirir.Şayet 500 micro saniye(us) "1" ve 195ms "0" verirseniz de -90 derecelik bir hareket gerçekleştirir.
+ -90 nedir yahu :S
- Arkadaşlar servo motor 0 noktası bulunarak kullanılır.Motora uygulayacağınız 1.5 mslik lojik "1" motoru sıfır noktasında konumlandırır.Bu sıfır noktasından itibaren motora vereceğiniz sinyal artar ise motor sola doğru max 90 derecelik hareket yaparazalır ise sağa doğru max 90 derecelik hareket yapar.
+ Çok konuştun bi örnek ver !!!
- Tamam;
void main(void)
{
int a=0;
set_tris_B(0x00);// B portu çıkış ilahn edildi.
output_B(0x00);// B port'unun kafasına göre değer almaması için sıfırlanması gerekir.
while(TRUE)
{
for(a=0;a<=50;a++) // orta nokta için.
{
output_high(PIN_B0);
delay_us(1500);// B portunun 0'ıncı pini 1.5 milisaniye 1 yapıldı ve servo orta noktada
output_low(PIN_B0);
delay_us(18500);// B port'unun 0'ıncı pini periyot 20 milisaniyeyi aşmıyacak şekilde 0
}
for(a=0;a<=50;a++) // sağa hareket.
{
output_high(PIN_B0);
delay_us(500);// B port'unun 0'ıncı pini 500us 1 yapıldı ve servo -90 derece de
output_low(PIN_B0);
delay_us(19500);// Bport'unun 0'ıncı pini periyot 20 milisaniyeyi aşmayacak şekilde 0
}
}
}
+ o for neden ben anlamadım ?
Burada for döngüsünün kullanılma sebebi siz motora gerekli sinyali verdiğinizde periyot 20 ms olduğu için bu sinyalin kalıcılığı 20 ms dir.Motorun o konumda nekadar kalmasını istiyorsanız for döngüsüne o ölçüde bir değer girmelisiniz.
Şu anki değerle motor her konumda 20ms x 50 = 1000ms yani 1saniye kaldıktan sonra diğer konumuna geçicektir.
Daha fazla örnek vermek isterim birkaç motorun falan nasıl hareket ettiğini falan da göstermek isterim ama arkadaşlar açık konuşmak gerekirse biz tembel bir milletiz.Araştırmıyoruz lütfen bu örnek ile biraz ilgilendikten sonra amacınız uğruna savaşıp ter dökün şayet hala başarısız oluyorsanız mail atın:er3_sev5
Yazımı okuduğunuz için teşekkür ederim.Yalnış bir bilgi verdiysem affedin ve beni düzeltin saygılar.
Konu ersev151 tarafından (3. May 2012 Saat 11:43 PM ) değiştirilmiştir.
|