Ana Sayfa STM32F4 Discovery STM32F4 Discovery Servo Motor Kontrolü

STM32F4 Discovery Servo Motor Kontrolü

7 min read
5
1
11,533

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.

Servo_Breakdown

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.

Interfacing-Servo-Motor-with-PIC18F4550-Microcontroller

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ı

images (1)

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.

Buna Benzer Yazılar Göster !
Daha Fazlasını Yükle - Konuk Yazar
Daha Fazla Göster -  STM32F4 Discovery

5 Yorumlar

  1. ömer

    3 Mart 2015 at 17:10

    Ben ekrana bastığım butona her tıkladığımda servo motorun 5 derece hareket etmesi istiyorum
    uint8_t a=0;

    TM_SERVO_SetDegrees(&Servo2, a);

    if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) {

    a=a+5;

    }
    bu şekilde yapıyorum
    derleken hata vermiyor yüklediğimde calışmıyor. acaba sorun değişkende mi yoksa başka bir şey mi?

    Reply

    • Bilal Kaya

      4 Mart 2015 at 22:04

      Merhabalar,Eğer yazımızı okuduysanız servo çeşitlerinden bahsettik.Bizim kullandığımız servo motor R/C servo motor olarak geçmektedir ve Bu motorlar pwm tekniğine göre kontrol edilirler.Bu motorlar daha çok hobi devrelerinde falan kullanılır.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.Probleminizin bu olduğunu sanıyorum..
      İyi çalışmalar….

      Reply

  2. […] motor kullanımı hakkında bilgi edinmek isterseniz bu yazımızı […]

    Reply

  3. […] motor hakkında daha önceki yazımızda daha detaylı bilgi vermiştik.Yazımıza buradan […]

    Reply

  4. Masum

    16 Aralık 2016 at 04:06

    Hocam merhaba, ben sizin kodu stmf407vg discovery kitiyle denemeye çalışıyorum da ”Error: Flash download failed- Cortex M4” hatası alıyorum. İnternette baktım da halledemedim. Ayrıca daha önce de böyle bir sorun çıkmıyordu. Sorun neyden kaynaklanıyor olabilir veya bir çözm öneriniz var mı. Şimdiden teşekkürler.

    Reply

Bir cevap yazın

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

Bak Bakalım ?

Lazer İşleme Makinesi Yapımı

Merhaba arkadaşlar,bu projemizde sizlerle birlikte lazer işleme makinesi yapımını göreceği…