Oca 15, 2019
93 Views
0 0

Arduino ve Bipolar step motor kontrolü

Yazar

Step motorların mükemmel olduğu bilinen bir gerçektir! Tek dezavantajı, servolardan ve düz eski DC motorlardan çok daha zor sürülmeleridir.  Burada, Arduino ve L293D gibi bir H-Bridge IC ile çalışan bir bipolar step motorun (tipik olarak 4 telli) – SN754410NE’de nasıl çalışacağını ele alacağım.

Adım 1: Motorunuzun kablo bağlantıları

Bipolar step motor

Burada tek ihtiyacımız olan, bipolar step motor’dan çıkan 4 telin iç kanatlarda nasıl eşleşeceğini bulmak

Bir multimetre yardımı ile multimetremizin buzzer ölçüm kademe sindeyken kısa devre olan uçları tespit etmemiz gerekiyor.

Step’inizin nasıl kablolandığını bulduğunuzda, 4 telin renklerini unutmayın veya işaretleyin. Step motorunuzda 6 tel olsa bile, hala dört telli bir step motor gibi kontrol edebilirsiniz, sadece merkezdeki musluk tellerini tanımlamanız gerekir.

 

İki orta kadranı bir kez bulduğunuzda, basitçe onları işaretleyebilir ve onları görmezden gelebilirsiniz, zira bunların bağlantısını keserek bırakarak, kalan 4 kabloya odaklanabilirsiniz.

Bizim görmezden geleceğimiz kablo renkleri YEŞİL ve BEYAZ

Adım 2: Devreyi prototipleyin

Bipolar step motorlar, 28BYJ-48 gibi tek kutuplu stepperlerden biraz daha karmaşık bir elektronik kontrol devresi gerektirir . İki bobindeki A1A2 ve B1B2’deki akımı tersine çevirebilmeniz gerekir, tıpkı akımı DC motor boyunca tersine çevirmek ve tersine döndürmek gibi. Bunu yapmanın en kolay yolu L293D (gibi bir H-Köprü IC, ile veri sayfasında ) veya SN754410NE ( veri sayfası ). Ayrıca bir prototip panosuna, bazı bağlantı kablolarına, bir Arduino Uno’ya veya uyumlu bir  Arduino IDE yüklü bir bilgisayara ve elbette bir step motoruna ihtiyacınız olacak.

İşte aşağıdaki örnek kullandığım devre şeması (Kaynak: Arduino.cc):

bipolar step motor H-Köprü

Aşağıdaki örnekleri izleyecekseniz H-Bridge’i Arduino’nuza aşağıdaki şekilde bağlayabilirsiniz:

H-Köprüsü Girişi 1 -> Arduino Dijital Pin 2

H-Köprüsü Girişi 2 -> Arduino Dijital Pin 4

H-Köprüsü Girişi 3 -> Arduino Dijital Pin 6

H-Köprüsü Girişi 4-> Arduino Dijital Pin 7

H-Bridge’deki her iki Enable pin, Arduino 5 volt’a (her zaman etkin olarak) bağlanır. Motorların, Arduino üzerindeki  5 volt pininden verebileceğinden çok daha fazla akım çekebileceğini unutmayın, bu nedenle motorlarınız için ayrı bir güç kaynağı edinmeli ve tüm topraklama (GND) bağlantı uçlarını bağlamayı unutmayınız.

Adım 3: Arduino Kodu

Step motorları yönetmeye yardımcı olan iki Arduino kütüphanesi var ve her ikisini de aşağıdaki örneklerde ele alacağım.

Step motorları yönetmeye yardımcı olan iki Arduino kütüphanesi var ve her ikisini de aşağıdaki örneklerde ele alacağım, ancak önce bazı temel Arduino kodları ile denemeyi seviyorum. Bu, motorları sürmek için etkili bir yol olmayacak, ancak adım atmak ve step motoru döndürmek için gerekenleri ögrenmek için iyi bir yoldur. Aşağıdaki kod, saat yönünün tersine 48 adımda ve daha sonra saat yönünde tersi yönünde hareket etmesini sağlamaktadır.

int inA1 = 2; // input 1 of the stepper
int inA2 = 4; // input 2 of the stepper
int inB1 = 6; // input 3 of the stepper
int inB2 = 7; // input 4 of the stepper

int stepDelay = 25; // Delay between steps in milliseconds

void setup() {                
  pinMode(inA1, OUTPUT);     
  pinMode(inA2, OUTPUT);     
  pinMode(inB1, OUTPUT);     
  pinMode(inB2, OUTPUT);     
}

void step1() {
  digitalWrite(inA1, LOW);   
  digitalWrite(inA2, HIGH);   
  digitalWrite(inB1, HIGH);   
  digitalWrite(inB2, LOW);   
  delay(stepDelay);
  
}
void step2() {
  digitalWrite(inA1, LOW);   
  digitalWrite(inA2, HIGH);   
  digitalWrite(inB1, LOW);   
  digitalWrite(inB2, HIGH);   
  delay(stepDelay);
}
void step3() {
  digitalWrite(inA1, HIGH);   
  digitalWrite(inA2, LOW);   
  digitalWrite(inB1, LOW);   
  digitalWrite(inB2, HIGH);   
  delay(stepDelay);
}
void step4() {
  digitalWrite(inA1, HIGH);   
  digitalWrite(inA2, LOW);   
  digitalWrite(inB1, HIGH);   
  digitalWrite(inB2, LOW);   
  delay(stepDelay);
}
void stopMotor() {
  digitalWrite(inA1, LOW);   
  digitalWrite(inA2, LOW);   
  digitalWrite(inB1, LOW);   
  digitalWrite(inB2, LOW);   
}

// the loop routine runs over and over again forever:
void loop() {
  for (int i=0; i<=11; i++){ 
    step1(); 
    step2();
    step3();
    step4();
  }
  stopMotor();
  delay(2000);
  
  for (int i=0; i<=11; i++){
    step3();
    step2();
    step1();
    step4(); 
  }
  
  stopMotor();
  delay(2000);
}

 

Yukarıdaki kodu iyileştirmenin birçok yolu var;

tam kontrol sizde deney yapabilir ve öğrenebilirsiniz.

Örnek 2: Arduino Stepper kütüphanesi

Arduino IDE, temel uygulamalar için bir step motoru kontrol eden iyi bir iş yapan önceden kurulmuş bir Stepper kütüphanesi ile birlikte gelir. Aşağıdaki örnekte, adım adım duraklatıldığında ve adım numarasının konsola yazdırılması sırasında adım bir tam tur saat yönünde, döndürmek için  (Dosya-> Örnekler-> Stepper-> stepper_OneStepAtATime) kullanılır.

 

/* 
 Stepper Motor Control - one step at a time
 
 This program drives a unipolar or bipolar stepper motor. 
 The motor is attached to digital pins 8 - 11 of the Arduino.
 
 The motor will step one step at a time, very slowly.  You can use this to
 test that you've got the four wires of your stepper wired to the correct
 pins. If wired correctly, all steps should be in the same direction.
 
 Use this also to count the number of steps per revolution of your motor,
 if you don't know it.  Then plug that number into the oneRevolution
 example to see if you got it right.
 
 Created 30 Nov. 2009
 by Tom Igoe
 
 */

#include <Stepper.h>

const int stepsPerRevolution = 48;  // change this to fit the number of steps per revolution
                                     // for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 2,4,6,7);            

int stepCount = 0;         // number of steps the motor has taken

void setup() {
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  if (stepCount < stepsPerRevolution) {  
    // step one step:
    myStepper.step(1);
    Serial.print("steps:" );
    Serial.println(stepCount);
    stepCount++;
    delay(500);
  }
}

 

Örnek 3: AccelStepper kütüphanesi

Temel bilgileri ele aldığınızda ve step motorunuzu sınıra kadar zorlamaya çalıştığınızda, AccelStepper kütüphanesine bakabilirsiniz . Bu kütüphane, aynı anda birden fazla adımlayıcıyı kontrol etmek için ek özelliklerle  optimize edilmiştir. Bu kütüphane Arduino IDE ile önceden yüklenmemiş olarak geldiğinden, zip dosyasını indirmeniz ve yüklemeniz gerekir (Sketch -> Kütüphaneyi İçe Aktar… ve yukarıdaki linkten indirilen zip dosyasını seçmeniz gerekir). Aşağıdaki örnek, step motorumu 12.000 adımda kademeli olarak hızlandırmak için bu kütüphaneyi kullanıyorum, ardından geri yavaşlıyor ve işlemi ters yönde tekrarlıyor.

 

#include <AccelStepper.h>

#define HALF4WIRE 8

// Motor pin definitions
#define motorPin1  2     // A1 
#define motorPin2  4     // A2 
#define motorPin3  6     // B1 
#define motorPin4  7     // B2 

// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
//AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5

AccelStepper stepper1 (HALF4WIRE, motorPin1, motorPin2, motorPin3, motorPin4, true);

void setup() {
  stepper1.setMaxSpeed(1200.0);
  stepper1.setAcceleration(100.0);
  stepper1.setSpeed(100);
  stepper1.moveTo(12000); //250 full rotations @ 48 steps each = 12,000 steps

}//--(end setup )---

void loop() {

  //Change direction when the stepper reaches the target position
  if (stepper1.distanceToGo() == 0) {
    stepper1.moveTo(-stepper1.currentPosition());
    delay(500);
  }
  stepper1.run();
}
Makale Kategorileri:
Arduino
http://teknobayt.com

Teknobayt Tasarım Stüdyosunun tasarımcısı, ve kurucusudur.

Yorum Yap

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir