Arduino ile Step Motor Kontrolü
Arduino ile step motor kontrolü için en kolay ve ucuz yollardan biri, L293D Motor Sürücü kullanmaktır. Bu yazımızda 28BYJ-48 gibi herhangi bir Unipolar step motorun veya NEMA 17 gibi Bipolar step motorun hem hızını hem de dönüş yönünü kontrol edebilmeyi öğreneceğiz. Öncelikle arduino projemizde kullanacağımız L293D motor sürücünün temellerini öğrenmek istiyorsanız, aşağıdaki arduino ile dc motor çalıştırma yazımıza göz gezdirin. L293d motor sürücü ile ilgili çok detaylı bilgiler mevcut.
Arduino ile Step Motor Kontrolü Projesi için Kullanılacak Malzemeler:
Arduino Uno R3 1x
Step Motor 1x
L293D Motor Sürücü 1x
Breadboard 1x
Jumper Kablo
Güç Kaynağı (Pil vb.) 1x
H-Bridge ile Step Motor Kontrolü
L293D motor sürücü iki
H-Bridge 'e sahip olduğundan, her
H-Bridge bir step motorun elektromanyetik bobinlerinden birini kullanır. Bu elektromanyetik bobinlere belirli bir şekilde enerji verilerek, bir kademenin şaftı küçük adımlarla tam olarak ileri veya geri hareket ettirilebilir. Bununla birlikte, bir motorun hızı bu bobinlere ne sıklıkla enerji verildiğine göre belirlenir. Aşağıdaki resimde
H-Bridge ile sürüş kademesi gösterilmektedir.
Tek Kutuplu Unipolar Step Motor (28BYJ-48)
İlk deneyimizde 5V olarak derecelendirilmiş 28BYJ-48 tek kutuplu step kullanıyoruz. Devir başına 48 adım ilerleme kaydeder. Motoru çip ile bağlamaya başlamadan önce, kullanmayı planladığınız motorda
A+ ,
A- ,
B+ ve
B- bağlantılarını belirlemeniz gerekecektir. Bunu yapmanın en iyi yolu
28BYJ-48 Step Motor Veri Sayfasını kontrol etmektir. Bahsi geçen renkler
Turuncu ,
Pembe ,
Mavi ve
Sarı renklerdir.
Bu deneyde ortak merkez bağlantısını (Kırmızı) kullanmayacağımızı unutmayın.
Orta bağlantı yalnızca bobinin sol veya sağ tarafına enerji vermek ve akımı tersine çevirebilecek bir devre kullanmak zorunda kalmadan akımın tersine çevrilmesini gerçekleştirmek için kullanılır.
Bağlantılar oldukça basittir. Arduino'daki 5V çıkışı Vcc1 ve Vcc2 pinlerine bağlayarak başlayalım. Toprağı toprağa bağlayın. Motorun her zaman etkin olması için ENA ve ENB pinlerini 5V çıkışa bağlamanız gerekir. Şimdi, L293D motor sürücünün giriş pinlerini IN1, IN2 IN3, IN4 , Arduino'daki dört dijital çıkış pinine (12, 11, 10 ve 9) bağlayın. Son olarak, step motorun kablolarını A+ (Turuncu ), A- (Pembe ), B- (Sarı ) ve B+ (Mavi ) L293D'nin çıkış pinlerine OUT1, OUT2 OUT3, OUT4 aşağıdaki şekilde gösterildiği gibi bağlayın.
L293d motor sürücü çıkış pinleri
Bipolar Step Motor Kontrolü (NEMA-17)
Şimdiki projemizde, 12V olarak derecelendirilmiş NEMA 17 bipolar kademeli step motor kullanacağız. Nema-17 step motor devir başına 200 adım hareket eder ve 60 RPM'de çalışabilir. Motoru çip ile bağlamaya başlamadan önce A+ , A- , B+ ve B- bağlantılarını belirlemeniz gerekecektir. Bunu yapmanın en iyi yolu ise yine :) motorun veri sayfasını kontrol etmektir. Bahsi geçen renkler Kırmızı , Yeşil , Mavi ve Sarı renklerdir.
Bağlantılar diğer projemizdeki gibi yine oldukça basittir. Harici 12V güç kaynağını Vcc2 pinine ve Arduino'daki 5V çıkışını Vcc1 pinine bağlayarak başlayın. Devredeki tüm toprakları ortak kullandığınızdan emin olun. Motorun her zaman etkin olması için ENA ve ENB pinlerini 5V çıkışa bağlamanız gerekir. Şimdi, L293D motor sürücünün giriş pinlerini IN1, IN2 IN3, IN4 , Arduino'daki dört dijital çıkış pinine (12, 11, 10 ve 9) bağlayın. Son olarak, step motorun kablolarını A+ (Kırmızı ), A- (Yeşil ), B- (Sarı ) ve B+ (Mavi ) L293D'nin çıkış pinlerine OUT1, OUT2 OUT3, OUT4 aşağıdaki şekilde gösterildiği gibi bağlayın.
Arduino Kodu - Step Motor Kontrolü
Aşağıdaki kodlar, tek kutuplu veya bipolar step motorların L293D motor sürücü çip ile hızını ve dönüş yönünü kontrol edebilmeniz için pratik temel teşkil edecektir. Not: stepsPerRevolution parametre hariç her iki motor için de aynıdır. Kodları denemeden önce bu parametreyi motorunuzun teknik özelliklerine göre değiştirin. Örneğin, NEMA 17 için 200'e, 28BYJ-48 için ise 48'e ayarlayın.
// Include the Arduino Stepper Library
#include < Stepper . h >
// Number of steps per output rotation
const int stepsPerRevolution = 200 ;
// Create Instance of Stepper library
Stepper myStepper ( stepsPerRevolution , 12 , 11 , 10 , 9 ) ;
void setup ( )
{
// set the speed at 20 rpm:
myStepper . setSpeed ( 20 ) ;
// initialize the serial port:
Serial . begin ( 9600 ) ;
}
void loop ( )
{
// step one revolution in one direction:
Serial . println ( "clockwise" ) ;
myStepper . step ( stepsPerRevolution ) ;
delay ( 500 ) ;
// step one revolution in the other direction:
Serial . println ( "counterclockwise" ) ;
myStepper . step ( - stepsPerRevolution ) ;
delay ( 500 ) ;
}
Kodlar,
Arduino Stepper Library ile birlikte kullanılır.
// Include the Arduino Stepper Library
#include < Stepper . h >
Kütüphaneyi dahil ettikten sonra adlandırılmış bir değişken tanımlarız.
stepsPerRevolution Adından da anlaşılacağı gibi, motorumuzun derecelendirildiği devir başına adım sayısıdır. Bu parametreyi motorunuzun teknik özelliklerine göre değiştirin. Örneğin, NEMA 17 için 200'e, 28BYJ-48 için ise 48'e ayarlayın.
// Number of steps per output rotation
const int stepsPerRevolution = 200 ;
Ardından, step kütüphanesinin bir örneğini oluştururuz. Motor, Arduino'nun pin bağlantılarınından devir başına hareket adımlarını parametre olarak alır.
// Create Instance of Stepper library
Stepper myStepper ( stepsPerRevolution , 12 , 11 , 10 , 9 ) ;
Kodun kurulum bölümünde, step motorun hızını
setSpeed() işlevini çağırarak ayarlıyoruz ve iletişimi başlatıyoruz.
void setup ( )
{
// set the speed at 20 rpm:
myStepper . setSpeed ( 20 ) ;
// initialize the serial port:
Serial . begin ( 9600 ) ;
}
Kodun döngü bölümünde
step() ve
setSpeed() işlevleri ile motorumuzun belirlenen bir hızda, belirli sayıda adımı uygulamasını sağlarız. Bu fonksiyona negatif bir sayı iletmek motorun dönüş yönünü tersine çevirir.
void loop ( )
{
// step one revolution in one direction:
Serial . println ( "clockwise" ) ;
myStepper . step ( stepsPerRevolution ) ;
delay ( 500 ) ;
// step one revolution in the other direction: Serial . println ( "counterclockwise" ) ; myStepper . step ( - stepsPerRevolution ) ; delay ( 500 ) ; }