STM32F4 Discovery STM32F4 Discovery DC Motor Uygulaması By Konuk Yazar Posted on 6 Ocak 2015 6 min read 8 0 15,457 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr DC motorlar endüsrtride uzun zamandan beri çok kullanılan motor tipidir.DC motorlar,sabit bir mıknatıs ve içinde bir rotor içerirler. DC motorlar direkt olarak mikrodenetleyici çıkışı ile süremeyiz.Bu nedenle sürücü devreler kullanılır.DC motorların sürücü ve yön kontrolü için H-köprü devreleri kullanılır.Köprü devreleri genellikle transistör ile yapılır.Fakat hem yön hem hız kontrolü için köprü devrelerinde transistör yerine mosfet kullanılabilir. A ve D veya B ve C MOSFET çiftine uygulanan gate sinyali PWM mantığına göre kontrol edilirse motorun hızı da kontrol edilmiş olur.Şekildeki diyotlar,DC motor tarafından oluşabilecek ters EMK’nın devre elemanlarına zarar vermesini önlemek için kullanılmıştır.Bu iş için BA159 hızlı diyotu gibi diyot modelleri tercih edilir. Çoğu DC motor uygulamalarında H köprü sürücülerini içinde barındıran entegre elemanlar kullanılabilir.L293,L298,L6201,L6202,,L6203 veya LMD18200 gibi entegreler DC motor sürücü için kullanılabilir.Biz bu bölümde L298 entegresini inceleyeceğiz. L298 DC Motor Sürücü Entegresi L298 DC motor sürücü entegresi,içerisinde iki adet transistörlü sürücü devre barındırır.Bu entegre ile 2 adet motor kontrol edilebilir.Çalışma gerilimi 46V’a kadardır.Çıkış gerilimi 4 Ampere kadar çıkmaktadır.Entegre aynı zamanda aşırı ısı korumasına sahiptir. Datasheetine buradan ulaşabilirsiniz. Entegre hakkında bilgi verdikten sonra devremiz hakkında bilgi vereceğiz.. Aşağıda gördüğünüz devrede motorun ileri,geri ve dur işlemlerini gerçekleştiren şema gösterilmektedir.Motoru ileri yönde hareket ettirmek istediğmiz zaman STM32F4 Discovery kartının PA1 pinine bağlı buton basılması yeterlidir.Geri hareket için PA2 pinine bağlı butona basılması yeterlidir.Dur işlemi için PA3 pinine bağlı butona basılması yeterlidir. Aşağıda sürücü devreli motor şematik olarak gösterilmektedir.Entegrenin 5 nolu ucuna PD12 ,7 nolu ucuna PD13,6 nolu ucuna PD14 ve 11 nolu ucuna PD15 bağlanması gerekmektedir. Devremizle ilgili yazılım aşağıda gösterilmektedir. [php] #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h" int main(void) { GPIO_InitTypeDef GPIO_InitDef; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //D portu cikis pinleri ayarlan1yor…. GPIO_InitDef.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; GPIO_InitDef.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitDef.GPIO_OType = GPIO_OType_PP; GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitDef.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOD, &GPIO_InitDef); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //A portu giris pinleri ayarlan1yor…. GPIO_InitDef.GPIO_Pin =GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; GPIO_InitDef.GPIO_Mode = GPIO_Mode_IN; GPIO_InitDef.GPIO_OType = GPIO_OType_PP; GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitDef.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOA, &GPIO_InitDef); //L298 enable A kanali aktif ediliyor…. GPIO_SetBits(GPIOD, GPIO_Pin_14); //L298 enable B kanali inaktif ediliyor…. GPIO_ResetBits(GPIOD, GPIO_Pin_15); while (1) { //Motor ileri hareket…. if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)) { GPIO_SetBits(GPIOD, GPIO_Pin_12); GPIO_ResetBits(GPIOD, GPIO_Pin_13); } //Motor geri hareket…. if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)) { GPIO_SetBits(GPIOD, GPIO_Pin_13); GPIO_ResetBits(GPIOD, GPIO_Pin_12); } //Motor durdur…. if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)) { GPIO_ResetBits(GPIOD, GPIO_Pin_12); GPIO_ResetBits(GPIOD, GPIO_Pin_13); } } } [/php] Kodlara buradan ulaşabilirsiniz…….