DC Motor: Pek çok elektronik projesinde tercih edilen hareket elemanlarından biri de DC motorlardır. Bu projede kullanılan 3-6 Volt gerilim ile çalışabilen DC motor hobi projeleri için oldukça uygun fiyatlı tercih edilebilir bir üründür. DC motorlar uygulanan elektrik enerjisini mekanik enerjiye çeviren elektrik makineleridir. DC motor Arduino, STM gibi farklı kontrol kartları ile kolaylıkla hareketi ve hızı kontrol edilebilmektedir. DC motora bir güç kaynağı bağlandığında motor maksimum hareket etmeye başlar bağlantı yönü değiştirilirse ters yönde hareket eder. Motorun hız ve yön ayarı yapılabilmesi için sürücüye ihtiyaç duyulur.
DC motorun hızı uygulanan voltaja ve yüke bağlıdır. Motorun çektiği akım da motordaki yüke göre değişmektedir. Referans aralığından daha fazla yük uygulanan motor fazla akım çeker ve motor bozulur. DC motorun içindeki iletken sargılara akım uygulandığında bir manyetik alan oluşur ve bu manyetik alan mıknatıs etkisi gösterir ardından rotor ve statörde meydana gelen itme- çekme kuvveti ile hareket sağlanır. DC motorların çeşitleri fırçalı DC motor, fırçasız DC motor, step motor ve servo motor olmak üzere çeşitleri bulunmaktadır.
Fırçalı DC Motor: Eski ve en temel dc motor tipidir. Motordaki bobinlere fırçalar ile akım uygulanmaktadır. Bu nedenle içindeki fırçanın (kömür) belli bir kullanımdan sonra aşındığı için değiştirilmesi gerekmektedir. Avantajı ise uygulanan gerilimin büyüklüğü ve gerilim yönü değiştirerek hız ve yön kontrolü sağlanabilmektedir. Kontrolcüler ile sürebilmek hız ayarını kontrol edebilmek için de L293D, L9110 gibi H-Köprü devresi bulunduran sürücü entegreler kullanılmaktadır. Yüksek tork veya devir özelliklerine göre redüktörlü dc motor ve redüktörsüz dc motor olarak çeşitleri mevcuttur.
Fırçasız DC Motor: Fırçalı motorların tersine içerisinde değiştirilmesi gereken aşınan bir kısım yoktur, bu yüzden sürtünmeye bağlı verim kaybı ve bakım maliyeti bulunmamaktadır. Mıknatıs kısmı motor milinde ve bobinler sabit şekildedir. Fırçasız motorların 3 kablosu bulunur ve bu kablolar farklı fazlara bağlıdır, her birinden farklı sırada elektrik akımı verilirse manyetik alan oluşur ve hareket sağlanır. DC motorlar dönen parçaları rotor yerine göre inrunner veya outrunner olarak iki gruba ayrılırlar. Genellikle yüksek performans gerektiren projelerde, RC model araçlarda (drone gibi) çok sık tercih edilir. Fırçasız motorların dezavantaj olarak, bu motorlar ihtiyaca göre gereken akım ve gerilim değerlerinde çalıştırılmak için mutlaka uygun bir ESC sürücüye ihtiyaç duyulur, ve maliyetleri daha yüksektir.
Step Motor: Hassas konum kontrolü için kullanılan ve sürülebilen motorlardır. Genellikle CNC makineleri, 3 boyutlu yazıcılarda kullanılırlar. Bağlantı şekillerine göre unipolar veya bipolar motorlar olarak gruplandırılırlar. Unipolar motorlarda bir ortak negatif uç bulunur.Her adımda sadece fazlardaki negatif ya da pozitif uçlar aktif olur, kolay sürülebilmelerine rağmen bu özelliklerinden dolayı maksimum tork elde edilmez. Bipolar motorlarda ortak negatif uç yoktur. Sürmek daha karmaşıktır her adımda sarımların tamamı kullanılabilir ve bu sayede yüksek tork elde edilebilmektedir.
Servo Motor: İçlerinde bir fırçalı veya fırçasız dc motor, dişli mekanizması, ve milin dönüşünü ölçen potansiyometre ile konum bilgisi alan bir devre bulunur. Genellikle 0-180 derece açılarda PWM sinyalleri ile çalışırlar. Belli açıya gider ve o açıda kalır. Hobi projelerinde kullanılan tiplerinin genellikle çalışma voltajı 5 volttur. Kontrolü için sürücü devresine ihtiyaç yoktur. Hassas pozisyon kontrolü içeren projelerde tercih edilirler.
L9110 Motor Sürücü: Bu sürücü ile 2 adet dc motor kontrol edilebilmektedir. Genellikle mini projelerde tercih edilirler. Üzerinde güce takıldığında yanan led bulunur ve vidalı montaj yerlerine sahiptir. Besleme voltaj aralığı 2.5V-12V, maksimum akım kapasitesi 0.8A.
Bu uygulamada bir adet dc motorun L9110 sürücüsü ile hız ve yön kontrolü yapılmıştır. Motor direkt STM’e bağlandığında 5V çıkış ile son hızda dönmektedir. Bağlantı yönü değiştirilerek dönüş yönü de değiştirilebilir. Fakat bu istenilen farklı hız ve yön için tercih edilen bir yöntem değildir. Yani bu şekilde hız ayarlı yapılamamktadır. Uygulamada pwm çıkışı olarak ayarlanan pinlerden pwm sinyali elde edilmiş ve motor ileri geri farklı hızlarla çalıştırılmıştır. A0 pininden ileri yönde pwm sinyali gönderilmiş B-1A’ya bağlanmıştır, A1 pininden geri yönde pwm sinyali gönderilmş ve B-1B’e bağlanmıştır.
Malzemeler ve Devre Şeması ve Kod:
L9110 sürücü
DC motor
STM32VL Discovery
Breadboard
Jumper Kablolar
#include "stm32f10x.h" // Device header
#include "stm32f10x_tim.h" // Keil::Device:StdPeriph Drivers:TIM
#include "stm32f10x_gpio.h" // Keil::Device:StdPeriph Drivers:GPIO
#include "stm32f10x_rcc.h" // Keil::Device:StdPeriph Drivers:RCC
#include "delay.h" // timer ayarlamasi dahil edilen .h dosyasi
void gpioConfig (); // pin konfigurasyonlari
void timerConfig(); //timerlar pwm mod icin kullanilacak onun konfigürasyonu
void pwmConfig1(uint32_t timPulse); //ileri yön ve hiz
void pwmConfig2(uint32_t timPulse); // geri yön ve hiz
int main (void){
gpioConfig();
timerConfig();
DelayInit(); // systick timer baslatiliyor
while(1){
pwmConfig1(1500); // motor verilen hizda ileri dönsün
delayms(2000); // 2 saniye bekleme
pwmConfig1(0); // motor dursun ileri yönde
delayms(2000); // 2 saniye bekleme
pwmConfig2(1500); // motor belirtilen hızda geri donsun
delayms(2000); // 2 saniye bekleme
pwmConfig2(0); // motor dursun geri yönde
delayms(2000); // 2 saniye bekleme
}
}
void gpioConfig(){
GPIO_InitTypeDef GPIOInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //A pinleri kullanilacak clock hatti aktif edildi
GPIOInitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //pwm için af mode secilmesi gerek
GPIOInitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1; // A0 ve A1 pini kullanilacak
GPIOInitStructure.GPIO_Speed=GPIO_Speed_50MHz; // hiz ayari
GPIO_Init(GPIOA,&GPIOInitStructure); //GPIO ayari yapildıgi bildiriliyor
}
void timerConfig(){
TIM_TimeBaseInitTypeDef TIMERInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); // A0 ve A1 pini TIM2 hattini kullandigi icin TIM2 clock hatti aktif ediliyor
TIMERInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; // clock division 1 secildi
TIMERInitStructure.TIM_CounterMode=TIM_CounterMode_Up; // counter yukarı doğru saysın
TIMERInitStructure.TIM_Prescaler=10; // 1 kHz icin prescaler degeri
TIMERInitStructure.TIM_Period=2399; // 1 kHz icin period degeri
TIMERInitStructure.TIM_RepetitionCounter=0; // repetition counter advanced counter icin aktif edilir
TIM_TimeBaseInit(TIM2,&TIMERInitStructure); // TIM2 ayarlari yapildigi bildiriliyor
TIM_Cmd(TIM2,ENABLE);
}
void pwmConfig1(uint32_t timerPulse){
TIM_OCInitTypeDef TIMER_OCInitStructure;
TIMER_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; // tımer output compare modu %75 duty cycle ıle calısan pwm seçildi
TIMER_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; //yükselen kenar seçildi
TIMER_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//output enable edildi
TIMER_OCInitStructure.TIM_Pulse=timerPulse; // fonksiyondaki hız değerine göre. Periyot değeri 2399 kada olabilir hız en fazla
TIM_OC1Init (TIM2,&TIMER_OCInitStructure); // A0 için channel1 aktif edildi ve ayarlaması yapıldığı bildiriliyor
TIM_OC1PreloadConfig (TIM2,TIM_OCPreload_Enable);
}
void pwmConfig2(uint32_t timerPulse){
TIM_OCInitTypeDef TIMER_OCInitStructure;
TIMER_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIMER_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
TIMER_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIMER_OCInitStructure.TIM_Pulse=timerPulse;
TIM_OC2Init (TIM2,&TIMER_OCInitStructure); // A1 için channel2 aktif edildi
TIM_OC2PreloadConfig (TIM2,TIM_OCPreload_Enable);
TIM_OC2Init (TIM2,&TIMER_OCInitStructure);
TIM_OC2PreloadConfig (TIM2,TIM_OCPreload_Enable);
}
**Dahil edilen delay dosyası ile ilgili bilgilendirmeye şuradan ulaşabilirsiniz.
Comments