Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

ULN2003 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ULN2003 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

3 Mayıs 2021 Pazartesi

ULN2003 Sürücü ve Arduino ile 28BYJ-48 Step Motor Kontrolü

 

ULN2003 Sürücü ve Arduino ile 28BYJ-48 Step Motor Kontrolü

Step motorlar, konum kontrolü için harika motorlardır. Bunlar, tam bir dönüşü birkaç eşit "adıma" bölen özel bir fırçasız motor türüdür. Genellikle masaüstü yazıcılarda, 3B yazıcılarda, CNC freze makinelerinde ve hassas konumlandırma kontrolü gerektiren diğer her şeyde bulunurlar.

Adım motorları hakkında bilgi edinmenin ucuz yollarından biri, 28BYJ-48 adımlı motorları kullanmaktır. Genellikle ULN2003 tabanlı bir sürücü kartı ile birlikte gelirler, bu da onların kullanımını çok kolaylaştırır.

Bu step motorların nasıl çalıştığını biliyor musunuz?

Bu kademeli motorlar, tekerleği bir seferde bir 'adım' döndürmek için bir dişli çark (32 dişli) ve dört elektromıknatıs kullanır.

Gönderilen her YÜKSEK darbe, bobine enerji verir, dişli çarkın en yakın dişini çeker ve motoru bir adım çalıştırır.

step motor çalışma animasyonu

Bu bobinleri vurma şekliniz, motorun davranışını büyük ölçüde etkiler.

  • Darbe sırası, motorun dönüş yönünü belirler.
  • Darbelerin frekansı motorun hızını belirler.
  • Darbe sayısı, motorun ne kadar uzağa döneceğini belirler.

28BYJ-48 Step Motor

28BYJ-48, 5 voltta çalışan 5 telli tek kutuplu bir step motordur.

Bu motorla ilgili ilginç olan şey, insanların onu son birkaç on yıldır sayısız uygulamada kullanıyor olmasıdır. Klima, otomat ve diğer birçok uygulamada kullanılmaktadır.



Bu motorlarla ilgili en iyi şeylerden biri, her seferinde bir 'adım' olarak doğru şekilde konumlandırılabilmeleridir.

Diğer bir avantajı ise, hareketlerinde nispeten hassas olmaları ve motorun kontak fırçaları kullanmaması nedeniyle oldukça güvenilir olmalarıdır.

Motora güç verildiği sürece muhafaza edilen hareketsiz durumda bile genellikle iyi tork verirler.

Tek dezavantajı, güç için biraz aç olmaları ve hareket etmedikleri zaman bile güç tüketmeleri.


28BYJ-48 Dişli Redüksiyon Oranı

Veri sayfasına göre, 28BYJ-48 motoru tam adım modunda çalıştığında, her adım 11,25 ° 'lik bir dönüşe karşılık gelir. Bu, devir başına 32 adım olduğu anlamına gelir (360 ° / 11.25 ° = 32).

28byj48 step motor dişli oranı açıklaması

Ek olarak, motorda 1/64 redüksiyon dişlisi seti vardır. (Aslında 1 / 63.68395'idir, ancak çoğu amaç için 1/64, yeterince iyi bir yaklaşımdır)

Bunun anlamı, devir başına aslında 32 * 63.68395 adım = 2037.8864 ~ 2038 adımdır!

28BYJ-48 Güç Tüketimi

Motorun güç tüketimi 240mA civarındadır.

Motor çok fazla güç çektiği için, bu gücü Arduino'dan çekmek yerine doğrudan harici bir 5V güç kaynağından çalıştırmak en iyisidir.

Motor, konumunu korumak için hareketsiz durumda bile güç tüketir.

ULN2003 Sürücü Kartı

Motor genellikle ULN2003 tabanlı bir sürücü kartıyla birlikte gelir.

ULN2003, 7 Darlington transistör çiftinden oluşan en yaygın motor sürücü IC'lerinden biridir ve her bir çift 500mA ve 50V'ye kadar yükleri çalıştırabilir. Bu kartta yedi çiftten dördü kullanılıyor.

uln2003 step motor sürücüsüne genel bakış

Kart, motor kablolarını mükemmel şekilde eşleştiren bir konektöre sahiptir, bu da motoru panele bağlamayı çok kolaylaştırır. Dört kontrol girişi için bağlantıların yanı sıra güç kaynağı bağlantıları da vardır.

Anakartta, dört kontrol giriş hattındaki etkinliği gösteren (adımlama durumunu göstermek için) dört LED bulunur. Adım atarken güzel bir görsel sağlarlar.

Kart ayrıca, step Motoruna giden gücü izole etmek için bir AÇIK / KAPALI atlama teli ile birlikte gelir.

ULN2003 Step Sürücü Kartı Pin Çıkışı

ULN2003 step sürücü kartının pinleri aşağıdaki gibidir:

uln2003 step motor sürücüsü pin çıkışı

IN1 - IN4motoru sürmek için pimler kullanılır. Bunları Arduino'daki dijital çıkış pinlerine bağlayın.

GND ortak bir zemin pimidir.

VDDpin, motora güç sağlar. Harici bir 5V güç kaynağına bağlayın. Motor çok fazla güç çektiğinden, bu step motora güç sağlamak için ASLA Arduino'nuzun 5V gücünü kullanmamalısınız.

Motor KonektörüMotorun takıldığı yer burasıdır. Konektör anahtarlıdır, bu nedenle yalnızca tek yöne gider.

28BYJ-48 Step Motor ve ULN2003 Sürücüsünü Arduino'ya Kablolama

Artık motor hakkında her şeyi bildiğimize göre, onu Arduino'muza bağlamaya başlayabiliriz!

Güç kaynağını ULN2003 sürücüsüne bağlayarak başlayın.

Step motora doğrudan Arduino'dan güç vermenin mümkün olduğunu unutmayın. Ancak bu tavsiye edilmez; Motor güç kaynağı hatlarına elektriksel gürültüye neden olabilir ve bu Arduino'ya zarar verebilir.

Bu nedenle, step motorlarınıza güç sağlamak için ayrı bir 5V güç kaynağı kullanın.

Sonra o güç kaynağından gelen toprağı arduino'nun topraklamasına bağlayın. Bu, ikisi arasında aynı voltaj referansını oluşturmamız için çok önemlidir.

Şimdi sürücü kartının IN1, IN2, IN3, IN4'ü Arduino dijital pinleri 8, 9, 10 ve 11'e bağlayın.

Son olarak, motor kablosunu step motordan sürücü kartına asın.

İşiniz bittiğinde, aşağıda gösterilen resme benzer bir şeye sahip olmalısınız.

uln2003 sürücü ve arduino ile kablolama 28byj48 step motor

Arduino Kodu - Dahili Step Kitaplığını Kullanma

İlk deneyimiz için Arduino IDE'niz ile birlikte gelen Arduino Step Kitaplığını kullanacağız.

Kademeli kitaplık, kademe dizisini halleder ve hem tek kutuplu hem de çift kutuplu çok çeşitli kademeli motorları kontrol etmeyi kolaylaştırır.

İşte step motoru saat yönünde yavaşça ve ardından saat yönünün tersine hızlıca hareket ettiren basit taslak.

//Includes the Arduino Stepper Library
#include <Stepper.h>

// Defines the number of steps per rotation
const int stepsPerRevolution = 2038;

// Creates an instance of stepper class
// Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence
Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);

void setup() {
	// Nothing to do (Stepper Library sets pins as outputs)
}

void loop() {
	// Rotate CW slowly
	myStepper.setSpeed(100);
	myStepper.step(stepsPerRevolution);
	delay(1000);
	
	// Rotate CCW quickly
	myStepper.setSpeed(700);
	myStepper.step(-stepsPerRevolution);
	delay(1000);
}

Kod Açıklaması:

Taslak, Arduino Step Kitaplığı dahil edilerek başlar.

#include <Stepper.h>

Daha sonra, stepsPerRevolutionmotorun bir devri tamamlamak için atacağı 'adımların' sayısını tutan bir sabit tanımlıyoruz Bizim durumumuzda, 2038.

const int stepsPerRevolution = 2038;

28BYJ-48 Unipolar step motor, IN1-IN3-IN2-IN4 adım dizisine sahiptir. Bu bilgiyi myStepper, 8, 10, 9, 11 pin dizisi ile adlandırılan bir step kitaplığı örneği oluşturarak motoru sürmek için kullanacağız .

Bunu doğru yaptığınızdan emin olun, aksi takdirde motor düzgün çalışmayacaktır.

Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);

Step kitaplığı dahili olarak dört I / O pinini çıkış olarak ayarladığından kurulum işlevinde ayarlanacak hiçbir şey yoktur.

void setup() {
}

Döngü işlevinde, setSpeed()kademeli motorun hareket etmesini istediğimiz hızı ayarlamak için step()işlevi kullanırız ve daha sonra işlevi, kaç adım döneceğini söylemek için kullanırız İşleve negatif bir sayı geçirmek step(), motorun dönüş yönünü tersine çevirir.

İlk kod parçacığı motoru saat yönünde çok yavaş çevirecektir. İkincisi, motoru saat yönünün tersine çok daha hızlı bir hızda döndürecektir.

void loop() {
	// Rotate CW slowly
	myStepper.setSpeed(100);
	myStepper.step(stepsPerRevolution);
	delay(1000);
	
	// Rotate CCW quickly
	myStepper.setSpeed(700);
	myStepper.step(-stepsPerRevolution);
	delay(1000);
}

Arduino Kodu - AccelStepper kitaplığını kullanma

Arduino Step Kitaplığı, basit, tek motorlu uygulamalar için mükemmel bir şekilde yeterlidir. Ancak birden fazla adımı kontrol etmek istediğinizde, daha iyi bir kitaplığa ihtiyacınız olacak.

Bu nedenle, bir sonraki deneyimiz için AccelStepper kitaplığı adı verilen gelişmiş bir step motor kitaplığından yararlanacağız . Standart Arduino Step kitaplığını çeşitli şekillerde önemli ölçüde geliştirir:

  • Hızlanma ve yavaşlamayı destekler.
  • Yarım adım sürüşü destekler.
  • Her adımda bağımsız eşzamanlı adımlarla birden fazla eşzamanlı adımı destekler.

Bu kütüphane Arduino IDE'ye dahil değildir, bu yüzden önce onu kurmanız gerekecektir.

Kütüphane Kurulumu

Kitaplığı kurmak için Sketch> Dahil Et> Kitaplıkları Yönet'e gidin… Kitaplık Yöneticisinin kitaplıklar dizinini indirmesini ve kurulu kitaplıkların listesini güncellemesini bekleyin.

kitaplıkları yönet

Aramanızı ' accelstepper ' yazarak filtreleyin İlk girişe tıklayın ve ardından Yükle'yi seçin.

accelstepper kitaplığı yükleniyor

Arduino Kodu

İşte step motorunu bir yönde hızlandıran ve sonra durmak için yavaşlayan basit taslak. Motor bir devir yaptığında, dönüş yönünü değiştirir. Ve bunu tekrar tekrar yapmaya devam ediyor.

// Include the AccelStepper Library
#include <AccelStepper.h>

// Define step constant
#define FULLSTEP 4

// Creates an instance
// Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence
AccelStepper myStepper(FULLSTEP, 8, 10, 9, 11);

void setup() {
	// set the maximum speed, acceleration factor,
	// initial speed and the target position
	myStepper.setMaxSpeed(1000.0);
	myStepper.setAcceleration(50.0);
	myStepper.setSpeed(200);
	myStepper.moveTo(2038);
}

void loop() {
	// Change direction once the motor reaches target position
	if (myStepper.distanceToGo() == 0) 
		myStepper.moveTo(-myStepper.currentPosition());

	// Move the motor one step
	myStepper.run();
}

Kod Açıklaması:

Yeni kurulan AccelStepper kitaplığını dahil ederek başlıyoruz.

#include <AccelStepper.h>

Şimdi motorumuzu tam adımlarla sürecekken, bunun için bir sabit tanımlayacağız. Motoru yarım adımlarla sürmek istiyorsanız, sabiti 8'e ayarlayın.

#define FULLSTEP 4

Daha sonra, myStepper8, 10, 9, 11 pin dizisi ile adlandırılan bir step kitaplığı örneği oluşturuyoruz (Bu motorlar için adım sırasının IN1-IN3-IN2-IN4 olduğunu unutmayın).

Yine, bunu doğru yaptığınızdan emin olun, aksi takdirde motor düzgün çalışmayacaktır.

AccelStepper myStepper(FULLSTEP, 8, 10, 9, 11);

Kurulum işlevinde ilk olarak motorun maksimum hızını bu motorların gidebildiği kadar hızlı olan bin olarak ayarladık. Ardından, step motorun hareketlerine hızlanma ve yavaşlama eklemek için motora bir hızlanma faktörü belirledik.

Daha sonra, 200'lük normal hızı ve onu 2038'e taşıyacağımız adım sayısını belirledik (28BYJ-48'in dişli tertibatıyla birlikte devir başına 2038 adım hareket ettiğini hatırladığınız gibi).

void setup() {
	myStepper.setMaxSpeed(1000.0);
	myStepper.setAcceleration(50.0);
	myStepper.setSpeed(200);
	myStepper.moveTo(2038);
}

Döngü işlevinde, motorun distanceToGohedef konuma (tarafından ayarlanan moveToulaşana kadar özelliği okuyarak ne kadar ilerlemesi gerektiğini kontrol etmek için bir If ifadesi kullanırız Bir kez distanceToGoulaştığında, biz değiştirerek ters yönde motora hareket edecek sıfır moveTomevcut pozisyonun negatif pozisyon.

Şimdi döngünün en altında bir run()fonksiyon dediğimizi fark edeceksiniz Bu en önemli işlevdir, çünkü bu işlev çalıştırılıncaya kadar adımlayıcı çalışmayacaktır.

void loop() {
	// Change direction once the motor reaches target position
	if (myStepper.distanceToGo() == 0) 
		myStepper.moveTo(-myStepper.currentPosition());

	// Move the motor one step
	myStepper.run();
}

İki 28BYJ-48 Step Motoru Aynı Anda Kontrol Edin

Bir sonraki deneyimiz için, aynı anda iki motoru sürmek için Arduino'muza ikinci bir 28BYJ-48 step ve ULN2003 sürücü seti ekleyeceğiz.

Kablolama

Daha önce yaptığınız bağlantıları olduğu gibi bırakın ve yeni cihazları şu şekilde bağlayın:

Bir kez daha ULN2003 sürücü kartına güç sağlamak için ayrı 5V güç kaynağını kullanacağız.

Şimdi ikinci sürücü kartının IN1, IN2, IN3, IN4'ü sırasıyla Arduino dijital pinleri 4, 5, 6 ve 7'ye bağlayın.

Aşağıdaki çizim kablolamayı göstermektedir.

arduino ile iki 28byj48 step motorun kablolanması

Arduino Kodu

İşte bir motoru tam adımlarla ve ikincisini yarım adımlarla çalıştıran taslak. Motorlar bir devir yaptığında dönüş yönleri değişecektir. Bazı hızlanma ve yavaşlama da var.

// Include the AccelStepper Library
#include <AccelStepper.h>

// Define step constants
#define FULLSTEP 4
#define HALFSTEP 8

// Creates two instances
// Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence
AccelStepper stepper1(HALFSTEP, 8, 10, 9, 11);
AccelStepper stepper2(FULLSTEP, 4, 6, 5, 7);

void setup() {
	// set the maximum speed, acceleration factor,
	// initial speed and the target position for motor 1
	stepper1.setMaxSpeed(1000.0);
	stepper1.setAcceleration(50.0);
	stepper1.setSpeed(200);
	stepper1.moveTo(2038);

	// set the same for motor 2
	stepper2.setMaxSpeed(1000.0);
	stepper2.setAcceleration(50.0);
	stepper2.setSpeed(200);
	stepper2.moveTo(-2038);
}

void loop() {
	// Change direction once the motor reaches target position
	if (stepper1.distanceToGo() == 0) 
		stepper1.moveTo(-stepper1.currentPosition());
	if (stepper2.distanceToGo() == 0) 
		stepper2.moveTo(-stepper2.currentPosition());

	// Move the motor one step
	stepper1.run();
	stepper2.run();
}

Kod Açıklaması:

AccelStepper Kitaplığını dahil ederek başlıyoruz.

#include <AccelStepper.h>

Şimdi bir motoru tam adımda ve ikincisini yarım adımda süreceğiz. Bunun için iki sabit tanımlayacağız.

#define FULLSTEP 4
#define HALFSTEP 8

Ardından, her motor için bir tane olmak üzere iki motor nesnesi oluşturuyoruz. Bunları oluşturmak için pin tanımlarımızı ve adım tanımlarımızı kullanıyoruz.

AccelStepper stepper1(HALFSTEP, 8, 10, 9, 11);
AccelStepper stepper2(FULLSTEP, 4, 6, 5, 7);

Kurulum fonksiyonunda ilk olarak maksimum hızı stepper1bin olarak ayarladık Ardından, step motorun hareketlerine hızlanma ve yavaşlama eklemek için motora bir hızlanma faktörü belirledik.

Daha sonra, 200'lük normal hızı ve onu 2038'e taşıyacağımız adım sayısını belirledik (28BYJ-48'in dişli tertibatıyla birlikte devir başına 2038 adım hareket ettiğini hatırladığınız gibi).

Tam olarak aynı şeyi stepper2yapacağız ancak ona -2038'e gitmesi talimatını vereceğiz çünkü saat yönünün tersine hareket etmesini istiyoruz.

void setup() {
	// settings for motor 1
    stepper1.setMaxSpeed(1000.0);
    stepper1.setAcceleration(50.0);
    stepper1.setSpeed(200);
    stepper1.moveTo(2038);

	// settings for motor 2
    stepper2.setMaxSpeed(1000.0);
    stepper2.setAcceleration(50.0);
    stepper2.setSpeed(200);
    stepper2.moveTo(-2038);
}

Döngü işlevinde, If statementsmotorların distanceToGohedef konumlarına (tarafından ayarlanan) ulaşana kadar özelliği okuyarak ne kadar uzağa gitmeleri gerektiğini kontrol etmek için her motor için iki tane kullanırız moveToBir kez distanceToGoulaşır sıfır, onların değişecek moveToonlar ters yönde hareket etmeye başlar, böylece, mevcut pozisyonun negatife konumunu.

Son olarak run()işlevi çağırarak onları harekete geçiriyoruz .

void loop() {
	// Change direction once the motor reaches target position
	if (stepper1.distanceToGo() == 0) 
		stepper1.moveTo(-stepper1.currentPosition());
	if (stepper2.distanceToGo() == 0) 
		stepper2.moveTo(-stepper2.currentPosition());

	// Move the motor one step
	stepper1.run();
	stepper2.run();
}

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.