STM32F4 Discovery STM32F4 Discovery Servo Motor Kontrolü By Konuk Yazar Posted on 12 Ocak 2015 7 min read 5 1 11,520 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr Servo motorlarda DC motorların temelini kullanırlar.Fakat buna ek olarak başka bileşenleri de vardır.Servo motorların bileşenleri aşağıda verilmiştir. DC motor Torku arttırmak için dişli sistemi Elektronik şaft pozisyon ve kontrol devresi Servo motorlar şaftın kaç derece döndüğünü ve hangi hızda döndüğünü algılar ve girişe geri besleme olarak verir.Böylece girişte istenen durum ile çıkış durumundan oluşan bir hata sinyali oluşur.Bu hata sinyaline göre servo motor şaftı döndürerek istenen pozisyon ve hızı ayarlar.Bu algılama sistemi için servo motorlarda rotora takılı bir enkoder veya pozisyon algılayıcı potansiyometre bulunur.Bu tipteki servo deliklerin motorlarda enkoder belirli sayılardaki boşlulardan oluşur.Mil döndükçe deliklerin sayısı kontrol devresi tarafından sayılmaktadır.Servo motorun kaç tur atacağı dijital bilgi olarak servo motorlara bildirilir.Böylece pozisyon kontrol devresi kaç tur atacağını bilir ve o kadar tur atar. R/C tipi servo motorlarda enkoder yoktur.Bunun yerine şafta bağlanmış ve dönüşü algılayan potansiyometre vardır.Bu tip servo motorlar PWM tekniği ile çalışırlar.Kontrol ucuna gelen PWM sinyalinin görev çevrimine(duty cycle) göre göre belli açılarda dönme yaparlar.Kontrol sinyali aynı kaldığı sürece konumlarını korurlar.R/C servo motorlar 0-180 derece arasında dönüş gerçekleştirir.R/C servo motorları kontrol etmek için PWM tekniğini bilmemiz gerekiyor. Dönmenin gerçekleşmesi için PWM sinyalinin frekansı 50Hz olmalıdır.Yani servo motorların kontrol sinyalinin periyodu 20 ms olmalıdır. 0-180 derece arasındaki dönüşe dereceleri için PWM sinyalinin görev çevrimi yaklaşık 1-2 ms arasında değiştirilmesiyle elde edilir.PWM sinyalinin 1,5 ms görev çevrimiyle servo motor merkez konumunda,1 ms görev çevriminde servo motor 90 derece sol,2 ms görev çevriminde servo motor 90 derece tam sağ konumundadır. R/C servo motorların besleme gerilimleri ise 4,8-6 Volt arasında olmalıdır.R/C servo motorların üzerinde torkları da belirtilmektedir. R/C servo motorlar genelde uzaktan kumandalı model uçak,helikopter,gemi maketlerinde,robot kollarında ve bazı robotik uygulamalarında kullanılmaktadır.Bu motorlar genellikle merkezde,tam solda ve tam sağda olacak şekilde yönlendirilirler.Ara açı değerlerinin bu motorlarda çok hassas olarak elde edilmesi zordur.R/C servoların digital olanları da vardır.Digital servo motorlar,normal servo motorlara göre daha küçük açı değerlerinde çalıştırılabilir.Bazı güç kaynaklarına fazla sayıda R/C servo motor bağlandığında bu motorların çalışması esnasında güç kaynağının voltajı dalgalanmaktadır.Bu dolgalanma STM32F4 Discovery’e zarar verebilir.Bu nedenle servo motorları ayrı bir güç kaynağıyla beslemek daha mantıklıdır. Servo Motor Bağlantısı Bizim bu uygulamamızdaki PWM ucumuz PA5 pinidir.Bunu unutmayalım.. Kodlarımız aşağıda gösterilmektedir. [php] #include "stm32f4xx.h" #include "defines.h" #include "tm_stm32f4_pwm.h" #include "tm_stm32f4_disco.h" #include "tm_stm32f4_delay.h" int main(void) { TM_PWM_TIM_t TIM2_Data; uint16_t position = 1000; SystemInit(); /* Delay fonksiyonlar1n1 baslat */ TM_DELAY_Init(); /* TIM2 de ki 50Hz frekansi ayarla*/ /* 50Hz = 20ms = 20000us */ TM_PWM_InitTimer(TIM2, &TIM2_Data, 50); /* TIM2 üzerindeki Pwm’i baslat,PA5 pini*/ TM_PWM_InitChannel(TIM2, TM_PWM_Channel_1, TM_PWM_PinsPack_2); /*Servo motor merkez konumunda*/ TM_PWM_SetChannelMicros(TIM2, &TIM2_Data, TM_PWM_Channel_1, 1500); Delayms(1000); while (1) { if (position == 1000) { /* yön degistir */ position = 2000; } else { /* yön degistir */ position = 1000; } /* Servo pozisyonunu ayarlar*/ TM_PWM_SetChannelMicros(TIM2, &TIM2_Data, TM_PWM_Channel_1, position); Delayms(1500); } } [/php] Proje dosyalarına buradan ulaşabilirsiniz.