PIC Motor Kontrolü L298N Motor Sürücü Kullanımı
PIC motor kontrolü, robotik ve hobi devreleri için yapması ve anlaması kolay bir olaydır. Daha önce Arduino ile L298N motor sürücü kullanımını anlatmıştık. Bu sefer PIC16F ile L298N motor sürücüsünü kullanıyoruz. Başlamadan önce L298N motor sürücüsünü inceleyelim:
L298N Motor Sürücüsü Nedir?
L298N, aynı anda iki DC motorun hız ve yön kontrolünü sağlayan çift H-Bridge motor sürücüsüdür. Modül, 2A’ya kadar tepe akımı ile 5 ile 35V arasında gerilime sahip DC motorları çalıştırabilir. Motorun boyutuna bağlı olarak, basitçe bir PWM çıkışını transistörün tabanına veya bir MOSFET’in kapısına bağlayabilir ve PWM çıkışını kontrol ederek motorun hızını kontrol edebiliriz. Düşük güçlü PWM sinyali, yüksek güçlü motorun sürüldüğü MOSFET’teki kapıyı açar ve kapatır. Ayrıca L298N entegresinin veri sayfasına buradan bakabilirsiniz.
L298N modülünün pin çıkışına daha yakından bakalım ve nasıl çalıştığını açıklayalım. Modül, motor A ve B için iki vidalı terminal bloğuna ve topraklama pini için başka bir vidalı terminal bloğuna, motor için VCC’ye ve giriş veya çıkış olabilen bir 5V pine sahiptir.
H-Bridge DC Motor Kontrolü
Dönüş yönünü kontrol etmek için, motordan geçen akımın yönünü tersine çevirmemiz yeterlidir ve bunu yapmanın en yaygın yöntemi bir H-Bridge kullanmaktır. Bir H-Bridge devresi, merkezde motor H benzeri bir konfigürasyon oluşturan dört anahtarlama elemanı, transistör veya MOSFET içerir. Aynı anda iki özel anahtarı etkinleştirerek akımın yönünü değiştirebilir, böylece motorun dönüş yönünü değiştirebiliriz.
Dolayısıyla bu iki yöntemi, PWM ve H-Bridge’i birleştirirsek, DC motor üzerinde tam bir kontrole sahip olabiliriz. Bu özelliklere sahip birçok DC motor sürücüsü vardır ve L298N de bunlardan biridir.
Devre Şeması
L298N motor kontrol kartı ile başka bir PIC mikrodenetleyici de kullanabilirsiniz. PIC16F877A’yı kullanan örnek bir diyagram:
Program Kodu
XC8 kodu:
#define _XTAL_FREQ 4000000 #include #include "pwm.h" void goStraight(){ //motor A çalıştır PORTBbits.RB0 = 1; PORTBbits.RB1 = 0; startPWM(1); //motor A pwm //turn on motor B PORTBbits.RB2 = 1; PORTBbits.RB3 = 0; startPWM(2); //motor B pwm __delay_ms(2000); PORTBbits.RB0 = 0; PORTBbits.RB1 = 0; PORTBbits.RB2 = 0; PORTBbits.RB3 = 0; } void main(void) { TRISBbits.TRISB0 = 0; //IN1 TRISBbits.TRISB1 = 0; //IN2 TRISBbits.TRISB2 = 0; //IN3 TRISBbits.TRISB3 = 0; //IN4 initPWM(500, 50, 1); //PWM 50% duty cycle(görev döngüsü) 500 Hz while(1){ goStraight(); __delay_ms(1000); } return; }
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.