Gelişen mikrokontrol teknolojileri ve artan bilgi birikimi sayesinde geliştirici düzeyinde daha yaygın kullanımına olanak tanımıştır. Burada elimden geldiği kadar bazı örnekler sunmaya çalışacağım... Görüleceği gibi ilk örneklerimizde çoğunlukla ASM üzerinde iken daha sonraları C üzerinde örnekler yer almaktadır. Hatta ilerleyen zamanlarda Arduino örneklerinin yer alması kaçınılmaz olacaktır.

15 Mart 2018 Perşembe

L298 çipi ve Arduino ile bipolar adım motor sürülmesi

L298 çipi ve Arduino ile bipolar adım motor sürülmesi



Bir arkadaşım yazı tamiri ile uğraşmakta. Zaman zaman yazıcı üzerinde hareket etmeyen (elektronik bölümden, motordan veya mekanik bölümden kaynaklanan arızalardan dolayı)  bipolar adım motorlar getirmekte. Unipolar motor için sürücü örneği blog üzerinde zaten yer aldığından, bipolar için çözüm arayışım bu projede anlatılacak olan motor sürücüye getirdi.

Adım (step) motor olarak iki bağlantı tipi yaygındır. Bipolar; şu anda anlatmakta olduğumuz bağlantı şeklidir (4 telli bağlantı olarak da bilinir), diğeri unipolar; 5 veya 6 telli bağlantı olarak da bilinir. Atmega8 ile tek kutuplu Adım motorların sürülmesi örnek yer almaktadır.

Piyasada L298 için hazır devre var , hatta daha küçük boyutta değişik yaklaşımlar sunan modüllerde var. Satın alıp, kullanmak isteyenlere kolay gelsin. Burada devrenin nasıl yapılacağı ve kullanılacağını anlatmaktayız. Elbette bir örnektir, geliştirmek size kalmış.

 Bipolar (iki kutuplu)

Bu tür adım motorlarda temelde iki sargı yer almaktadır ve motoru döndürebilmek için sargıların akım yönü değiştirilerek sürülür. (Çoğu adım motor içinde torkunu artırmak için birden fazlı sargı seri veya paralel bağlı olarak motor içinde yer alır.)
Yazıcılarda kullanılan bir step(adım) motor
Boyut olarak oldukça küçük olan ve DVD sürücülerinde kullanılan step motor. Üzrenide yiv bulunan mil optik kafanın ileri geri hareketini sağlamak üzeredir.
Yazıcı üzerinde daha düşük yüklerde örneğin kağı besleyici sistemlerde kullanılan adım motor.

 Bobin sarım yapısı nedeni ile mikrokontroller tarafından sürülebilmesi için H köprüsü olarak tanımlanan yapıda sürücü gerektirir.
Parçalara ayrılmış bir adım motor içinin görünümü. 

Bu tür motorlar incelendiğinde görüleceği öncelikle fırçasızdır, diğer bir özelliği de sabit mıknatıklı ve mıknatısın rotor üzerinde yer aldığı ve bobinlerin de  stator (gövde) üzerinde yer aldığı görülür. Bu nedenle rotor yataklarının dışında  bir sürtünme olmaz. Ama görüleceği üzere  motoru çalıştırabilmek için elektronik devre gerektirir.
Mıknatıs üzerinde birden fazla kutup bulunmaktadır. Bu kutuplar sarımların sağladığı manyetik alanlara göre hareketi oluşturmaktadır.
Motorların hepsi bir yerlerden sökülmedi. 3D yazıcılarda kullanılan motorlardan biri.

Bobinlere uygulanan akım sayesinde rotorun konumu belirlendiği için bir geri besleme bilgisi olmaksızın motorun rotor konumu belirlenebilecektir.
Resimdeki kırmızı teller :+ besleme ucunu, mavi teller:- besleme ucunu temsil etmektedir. Elbette bu gösterim temsilidir. Step motorlarda çok sayıda sarım ve mıknatısta elbette daha fazla kutup vardır.

Yukarıdaki resim bir adım motorun dönüşünü temsili olarak göstermektedir. Son aşamadan sonra tekrar başa döner. Tersi dönüş için adımlar tersine izlenir.

Adım motorlarda DC motorlarda olduğu gibi mıknatısların aynı kutupların birbirini itmesi  ve farklı kutupların birbirini çekmesi prensibi üzerinden çalışırlar. Sadece buradaki sarımlar bir elektronik devre yardımı ile yönlendirilirler.

L298

içinde 2 adet H köprü yer almaktadır. Projemizde multiwatt15 kılıfındaki ürünü kullanmayı hedefledik. Çünkü üzerine kolaylıkla bir soğutucu bağlamak mümkündür.

Entegre motor sürücü için ve lojik girişler için iki besleme içermektedir. Projeyi gerçekleştirirken bu bilgi göz önünde tutulması gerekmektedir.
L298 çipinin görünümü Çok da zorlu görünmüyor.!

 Her bir H köprü sürücü 2 sürücü girişine ek bir de izin girişi kullanımını gerektirmektedir. dolayısı ile bu  entegreyi kullanmak için toplamda 6 bacak kullanımını gerektirmektedir.

Ayrıca H köprü kollarından akımı ölçmek için  direnç  bağlantısı ile direnç üzerinden akım geribeslemesi almak mümkündür. Eğer istenirse bu akım direnci kullanılarak , step motor üzerinde akacak akım kontrolu sağlanarak, yük veya  ısı durumunda darbe genişliği ayarlanarak  güç ayarlaması yapılması mümkün olacaktır.

Not: Belirttiğim gibi bu konu sizin çalışmanıza bağlı olacak ve projede üzerinden durulmayacaktır.

L298 bacak bağlantıları.  Soğutucunun bağlanacağı yüzeyin GND ucuna bağlı olduğuna dikkate alın.

Modül çıkışları, step motora bağlanması konusunda  bir iki deneme yapılması gerekebilir. Kablolar motoruna göre değişiklik gösterebilmektedir.

L298 teknik özellikleri üzerinde kısaca duracak olursak;
Maksimum 46 Volt motor besleme gerilimi,
Lojik besleme olarak 5 Volt,
Toplam DC akımı 4Amper, (her bir kol için 2 amper).

Her ne kadar burada step motor için kullanımı anlatılsa da, uygun bağlantı ve sürme tekniği  ile 2 adet DC motor kontrol edilmesi mümkündür. Elbette bu kendi başına bir projedir. Eminiz ki internette bu konu ile ilgili ayrıntılı bilgi ve uygulamalar bulabilirsiniz.

Devre Şeması

Devrenin işlemci bölümü bir Arduino olduğu için geri sadece motor sürücü bölümünün şeması kalmakta. Devrenin denemesini Arduino  UNO üzerinde gerçekleştirdik.

Devre şeması. Gri renkte gösterilen, ismi ve değeri belirtilmeyen elemanlar PCB üzerinde monte edilmemiştir.

Daha önce belirttiğim gibi akım algılama bölümü sadece tasarım aşamasında kalmıştır. Bu nedenle devre elemanları üzerinde değer ve kodlamaları belirtilmemiştir,

Şemadaki D1..D8 diyotları önemlidir. Çünkü motor sarımlarından dolayı oluşabilecek  parasitik  sinyalleri yok etmek için gereklidir ki, bu L298 koruması için vazgeçilmez bir öneme sahiptir.


PCB


Görüntü PCB çiziminden sonra 3 boyutlu görüntü olarak üretilmiştir.

PCB'nın boyutları; kendi yapmak isteyenlere bir fikir vermesi açısından önemlidir. Ölçüler mm cinsindendir.

PCB'nin altındaki bakır yolların görünümü.
Üstten eleman yerleşim görünümü, Köprülere dikkat.

Alt yüzdeki elemanların yerleşimi. Sadece kondansatörler..(kırmızı ile renklendirilmiş olan öğeler). Açık renk ile işaretli elemanların monte edilip edilmemesi önemli değildir.

Devre esas olarak tek yüzlü devre kartına monte edilecek şekilde tasarlansa da, devre üzerinde bazı köprüler  (tel atlamaları yer almaktadır) içermektedir. İsteyenler bu tel atlamaları yerine, devre kartını çift yüzlü olarak tasarlamaları ve delik içi kaplamalı şekilde üretilmesi durumunda, özellikle  tek sıra pinlerin montajında kolaylık sağlayabileceği gibi, devrenin kalitesi konusunda önemli bir artış sağlayacaktır. (tek yapılması gereken atlama-köprüler yerine üst yollar olarak tanımlamak)

Amaç kendini geliştirmek ise, bu şekilde üretmek yerinde olacaktır.

Birkaç kondansatör dışında tüm elemanlar delik içi geçişlidir. Sadece devre  kullanım alanı nedeni ile diyot ve dirençler  kıvırma aparatı kullanımı ile şekillendirilmesi mümkün değildir. Elle şekillendirilmesi yerinde olacaktır.
PCB monteli üstten görünümü. Daha iyisi yapılabilir olsa da, bir şeyleri denemek için yeterlidir. L298 normalde dik monte edilmişti. Taşıma esnasında bu şekilde yatık konuma gelmiştir.

Lehimleme esnasında işi zora sokacak olan Arduino bağlantısı için kullanılan sıra pinlerdir. Çünkü sıra pinler yolların bulunduğu taraftan monte edilecek ve dolayısı ile lehimlenecektir.

PCB'nin monte edilmiş halinin alttan görünüm. Sıra pinlerin bakır yüze monte edildiğine ve  bacakların  lehimleme şekline dikkat edin.

Malzeme Listesi
İşlemci kartı ve ekran kartı için malzeme listesi

Arduino UNO-
USB kablosu-
1N4007D1 ,D2 ,D3 ,D4 , D5, D6, D7, D8, D9, D10, D11,D12
0,1RR1,R2
1000u/35VC1
100nF  805 kılıfC3,C4,C5
2'li tip 0 klemens3 adet
2.54 mm 6'lı erkek sıra pin1 adet
2.54 mm 8'li erkek sıra pin3 adet
L2981 adet (IC1 )

Kullanımı

Arduino üzerine L298 modülünü pinlerine dikkat ederek tak.

USB kablosunu tak. Diğer bağlantıları yapmadan bu şekilde Arduino üzerine program yüklenebilir. Arduino kartının beslemesi USB kablo üzerinden gelmektedir.

Motor bağlantılarını ve besleme bağlantıları uygun klemenslere tak.

Modül klemenslerinde motor bağlantıları ve besleme bağlantılarının görünümü.
Motor ve besleme bağlantıları. GND (eksi besleme),Vcc artı besleme, mor kablolar ise motor bağlantı kablolarını temsil etmektedir. Besleme gerilimini kullanacağınız motora göre seçmeniz gerekmektedir.

Kullanımda, besleme verilip de, step motor programı yüklediğinde, Arduino IDE programında "Seri Port Ekranı"  açıp, "Gönder" butonu yanındaki alana  0,1,2 girerek adım motor sürücüsünü test edebilirsiniz.
Bilgisayardan gönderilen veriİşlevi
0DUR
1Bir yöne dönüş
2Ters yöne dönüş
kontrolunu sağlar.

Burada dikkate alınması gereken birkaç durum var:
1-PCB üzerinde besleme bağlantıları ters bağlanmaması için dikkate etmek gereklidir.
2- Şu an için test amacıyla Arduino USB bağlantısı üzerinden beslenmektedir, ki motorun sağa, sola dönmesi ve durması bilgisayar üzerindeki terminal penceresinden 1,2 ve 0 gönderilerek motor kontrolu sağlanmaktadır.
 3- Arduino üzerindeki kesit olarak yüksek malzemelerin yakınlarına özellikle motor bobin bağlantı klemesinin temasından kaçınmak gerekir. (ya motor yanar, ya da L298)
4-Motor bağladıktan sonra, dönme hareketi yoksa, ki çoğunlukla bir ileri bir geri şeklinde bir hareketi varsa, motor bağlantı kablolarını değiştirmek gerekir. Birkaç deneme gerekebilir.
5- Motor içinde sadece 2 bobin olduğu için ölçü aleti yardımı ile (ohm kademesinde) hangi uçların birbiri ile bağlantısı olduğu bulunabilir.

Not: Arduino üzerine nasıl program yüklendiğini ve bilgisayarınıza nasıl kurulduğunu bildiğinizi varsayıyıoruz.

Burada motor oldukça küçük görünmektedir. Çünkü bu adım motor DVD sürücülerinde okuyucu kafanın hareketini sağlayan bir motordur. Kafa motora bağlı mil üzerinde hareket etmektedir. (besleme kabloları artı-kırmızı ve eksi-siyah ) Görüldüğü gibi USB (mavi) kablosu bağlıdır.
Bir yazıcıdan sökülmüş bir motor ve bağlantısı


Piyasada satılan bir step motor bağlı iken görünümü

Soldan sağa doğru, adım motor, L298 sürücü modül ve en sağdaki Arduino UNO.

Arduino klonu olan Nanino olarak bilinen PCB üzerinden motor kontrolu. USB kablo ucundaki modül, USB-seri dönüştürücüdür, ve Nanino  beslemesini sağlar. (UNO eşdeğeridir)

Arduino klonlarından olan Raduino kartı ile kullanımı gösterilmektedir. (Arduino MEGA eşdeğeridir). Buradaki motorun orjinalde konnektörüne takılan bir kablosu vardır. Malzemeler arasında bulamadığım için konnektör yerine kablo lehimlemem gerekti.

Kodlama

Örnek 1:

 //  Arduino uno veya klonu için
const int ENA = 6;
const int IN1 = 9;
const int IN2 = 10;
const int ENB = 11;
const int IN4 = 3;
const int IN3 = 5;
int yonlen = 0;
int gecik = 5;

void setup()
{
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available()) {
    int inByte = Serial.read();
    if (inByte == '1')
    {
      yonlen = 1;
    }
    else if (inByte == '2')
    {
      yonlen = 2;
    }
    else if (inByte == '0')
    {
      yonlen = 0;
      digitalWrite(ENA, LOW);
      digitalWrite(ENB, LOW);
    }
  }
  if (yonlen == 1)
  {
    Ileri(gecik);
  }
  if (yonlen == 2)
  {
    Geri(gecik);
  }
}

void Geri(int j) {

  // set both motors ON
  digitalWrite(ENA, HIGH);
  digitalWrite(ENB, HIGH);

  step_yaz(0, 1, 0, 1);
  delay(j);
  step_yaz(0, 1, 1, 0);
  delay(j);
  step_yaz(1, 0, 1, 0);
  delay(j);
  step_yaz(1, 0, 0, 1);
  delay(j);

}  

void Ileri(int j) {

  // Set both motors ON
  digitalWrite(ENA, HIGH);
  digitalWrite(ENB, HIGH);
  step_yaz(0, 1, 0, 1);
  delay(j);
  step_yaz(1, 0, 0, 1);
  delay(j);
  step_yaz(1, 0, 1, 0);
  delay(j);
  step_yaz(0, 1, 1, 0);
  delay(j);


} 
void step_yaz(int A1, int A2, int A3, int A4)
{
  digitalWrite(IN1, A1);
  digitalWrite(IN2, A2);
  digitalWrite(IN3, A3);
  digitalWrite(IN4, A4);
}

yukarıdaki kod arduino UNO için düzenlenmiştir. Ama en altta step_yaz() fonksiyunundaki komutlar motor özellikle düşük hızlarda yüksek akım çekmesine neden
olur.

Örnek2:

 // Arduino UNO veya klonu için
const int ENA = 6;
const int IN1 = 9;
const int IN2 = 10;
const int ENB = 11;
const int IN4 = 3;
const int IN3 = 5;
int yonlen = 0;
int gecik = 50;

void setup()
{
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available()) {
    int inByte = Serial.read();
    if (inByte == '1')
    {
      yonlen = 1;
    }
    else if (inByte == '2')
    {
      yonlen = 2;
    }
    else if (inByte == '0')
    {
      yonlen = 0;
      digitalWrite(ENA, LOW);
      digitalWrite(ENB, LOW);
    }
  }
  if (yonlen == 1)
  {
    Ileri(gecik);
  }
  if (yonlen == 2)
  {
    Geri(gecik);
  }
}

void Geri(int j) {

  // set both motors ON
  digitalWrite(ENA, HIGH);
  digitalWrite(ENB, HIGH);

  step_yaz(0, 1, 0, 1);
  delay(j);
  step_yaz(0, 1, 1, 0);
  delay(j);
  step_yaz(1, 0, 1, 0);
  delay(j);
  step_yaz(1, 0, 0, 1);
  delay(j);

} 

void Ileri(int j) {

  // Set both motors ON
  digitalWrite(ENA, HIGH);
  digitalWrite(ENB, HIGH);
  step_yaz(0, 1, 0, 1);
  delay(j);
  step_yaz(1, 0, 0, 1);
  delay(j);
  step_yaz(1, 0, 1, 0);
  delay(j);
  step_yaz(0, 1, 1, 0);
  delay(j);

}  

void step_yaz(int A1, int A2, int A3, int A4)
{
  if (A1 == 1)
    analogWrite(IN1, 128);
  else
    analogWrite(IN1, 0);
  if (A2 == 1)
    analogWrite(IN2, 128);
  else
    analogWrite(IN2, 0);
  if (A3 == 1)
    analogWrite(IN3, 128);
  else
    analogWrite(IN3, 0);
  if (A4 == 1)
    analogWrite(IN4, 128);
  else
    analogWrite(IN4, 0);
}
Gösterilmekte olan örnekte özellikle motor sarımları %50 darbe genişliği olan darbeler ile sürülmektedir.. Bu düşük hızlarda motorun daha az akım çekmesini sağlar.

Örnek3:

 //  Raduino kartı için;

const int ENA = 6;
const int IN1 = 9;
const int IN2 = 53;
const int ENB = 51;
const int IN4 = 3;
const int IN3 = 5;
int yonlen = 0;
int gecik = 50;

void setup()
{
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available()) {
    int inByte = Serial.read();
    if (inByte == '1')
    {
      yonlen = 1;
    }
    else if (inByte == '2')
    {
      yonlen = 2;
    }
    else if (inByte == '0')
    {
      yonlen = 0;
      digitalWrite(ENA, LOW);
      digitalWrite(ENB, LOW);
    }
  }
  if (yonlen == 1)
  {
    Ileri(gecik);
  }
  if (yonlen == 2)
  {
    Geri(gecik);
  }
}

void Geri(int j) {

  // set both motors ON
  digitalWrite(ENA, HIGH);
  digitalWrite(ENB, HIGH);

  step_yaz(0, 1, 0, 1);
  delay(j);
  step_yaz(0, 1, 1, 0);
  delay(j);
  step_yaz(1, 0, 1, 0);
  delay(j);
  step_yaz(1, 0, 0, 1);
  delay(j);

}  

void Ileri(int j) {

  // Set both motors ON
  digitalWrite(ENA, HIGH);
  digitalWrite(ENB, HIGH);
  step_yaz(0, 1, 0, 1);
  delay(j);
  step_yaz(1, 0, 0, 1);
  delay(j);
  step_yaz(1, 0, 1, 0);
  delay(j);
  step_yaz(0, 1, 1, 0);
  delay(j);

} 

void step_yaz(int A1, int A2, int A3, int A4)
{
  if (A1 == 1)
    analogWrite(IN1, 128);
  else
    analogWrite(IN1, 0);
  if (A2 == 1)
    analogWrite(IN2, 128);
  else
    analogWrite(IN2, 0);
  if (A3 == 1)
    analogWrite(IN3, 128);
  else
    analogWrite(IN3, 0);
  if (A4 == 1)
    analogWrite(IN4, 128);
  else
    analogWrite(IN4, 0);
}

Bu örnekte ise kodlama Raduino olarak bilinen ürün için oluşturulmuştur.

Not: "gecik" değişkeni motorun hızının değişmesinde kullanılmaktadır. Değeri artıttıkça motr yavaşlarken, değeri azaldıkça motor hızı artır.

kodlama incelenirse, kütüphane kullanılmadığı için kolaylıkla diğer platformlara taşınabilir.
Elbette daha ne kadar eklemek istediğiniz size kalmıştır.

Sonuç


Sonuçta başlıkta belirtildiği gibi bipolar step motorları test edebilecek bir projeye erişildi.

Daha ne yapılabilir, konusu size kalmış.

Hiç yorum yok:

Translate

Sayfalar

Etiketler

İzleyiciler