Program Arduino untuk Stepper Motor NEMA 17 dengan Driver L298N versi 1

 menggerakkan stepper motor NEMA 17 menggunakan driver L298N. Driver L298N adalah motor driver H-bridge yang serbaguna dan dapat mengendalikan dua motor DC atau satu stepper motor.

Meskipun L298N bisa digunakan untuk stepper, ia sedikit lebih kompleks daripada driver khusus stepper seperti A4988/DRV8825 karena Anda harus mengendalikan urutan fasa secara manual. Motor NEMA 17 umumnya adalah stepper unipolar atau bipolar, dan L298N cocok untuk stepper bipolar (4 kabel).


Program Arduino untuk Stepper Motor NEMA 17 dengan Driver L298N




Program ini akan membuat stepper motor berputar maju dan mundur secara berurutan.

Komponen yang Dibutuhkan:

  • Arduino Board (misalnya Arduino Uno)

  • Stepper Motor NEMA 17 (4 kabel, bipolar)

  • Driver Motor L298N

  • Power Supply Eksternal (misalnya 9V-12V, sesuai spesifikasi motor dan L298N, dengan arus yang cukup)

  • Kabel Jumper

Skema Pengkabelan (Umum untuk L298N):

Koneksi ini adalah yang paling umum. Pastikan L298N Anda memiliki heatsink yang memadai, terutama jika motor menarik arus tinggi.

  1. VCC L298N ke 5V Arduino

  2. GND L298N (pin kontrol) ke GND Arduino

  3. +12V (atau VIN) L298N ke Positive (+) Power Supply Eksternal

  4. GND L298N (pin daya motor) ke Negative (-) Power Supply Eksternal

  5. IN1 L298N ke Digital Pin Arduino (misalnya pin 8)

  6. IN2 L298N ke Digital Pin Arduino (misalnya pin 9)

  7. IN3 L298N ke Digital Pin Arduino (misalnya pin 10)

  8. IN4 L298N ke Digital Pin Arduino (misalnya pin 11)

  9. ENA L298N (Enable untuk Output A) ke 5V Arduino atau ke pin PWM Arduino (misalnya pin 5) untuk kontrol kecepatan. Untuk contoh ini, kita hubungkan ke 5V agar motor selalu aktif.

  10. ENB L298N (Enable untuk Output B) ke 5V Arduino atau ke pin PWM Arduino (misalnya pin 6) untuk kontrol kecepatan. Untuk contoh ini, kita hubungkan ke 5V agar motor selalu aktif.

  11. OUT1 & OUT2 L298N ke Pasangan Koil 1 Stepper Motor

  12. OUT3 & OUT4 L298N ke Pasangan Koil 2 Stepper Motor

Penting: Mencocokkan pasangan koil stepper motor sangat krusial. Jika motor tidak bergerak dengan benar, coba balik salah satu pasangan koil atau tukar urutan koil A dan B.


Arduino
// Mendefinisikan pin yang terhubung ke driver L298N
const int IN1 = 8;
const int IN2 = 9;
const int IN3 = 10;
const int IN4 = 11;

// Jumlah langkah per putaran penuh motor Anda.
// NEMA 17 umumnya 200 langkah per putaran (1.8 derajat per langkah).
const int stepsPerRevolution = 200;

// Variabel untuk mengontrol kecepatan (delay antar langkah)
// Semakin kecil nilai ini, semakin cepat putaran motor
const int stepDelay = 2000; // Delay dalam microdetik (2000 us = 2 ms)

// Urutan langkah untuk stepper motor bipolar (Full Step Drive)
// Ini adalah urutan aktivasi koil untuk membuat motor bergerak maju satu langkah
// {IN1, IN2, IN3, IN4}
int stepSequence[4][4] = {
  {1, 0, 1, 0}, // Step 1: Koil A aktif, Koil B aktif
  {0, 1, 1, 0}, // Step 2: Koil A terbalik, Koil B aktif
  {0, 1, 0, 1}, // Step 3: Koil A terbalik, Koil B terbalik
  {1, 0, 0, 1}  // Step 4: Koil A aktif, Koil B terbalik
};

void setup() {
  // Mengatur semua pin L298N sebagai OUTPUT
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);

  // Mulai komunikasi serial untuk debugging (opsional)
  Serial.begin(9600);
  Serial.println("Stepper Motor Program (L298N) Started");
}

void loop() {
  // --- Putar searah jarum jam ---
  Serial.println("Rotating Clockwise...");
  for (int i = 0; i < stepsPerRevolution; i++) {
    // Menjalankan satu siklus urutan langkah
    // % 4 memastikan indeks selalu antara 0 dan 3
    int sequenceIndex = i % 4;
    digitalWrite(IN1, stepSequence[sequenceIndex][0]);
    digitalWrite(IN2, stepSequence[sequenceIndex][1]);
    digitalWrite(IN3, stepSequence[sequenceIndex][2]);
    digitalWrite(IN4, stepSequence[sequenceIndex][3]);
    delayMicroseconds(stepDelay);
  }

  delay(1000); // Jeda 1 detik setelah satu putaran

  // --- Putar berlawanan arah jarum jam ---
  Serial.println("Rotating Counter-Clockwise...");
  for (int i = 0; i < stepsPerRevolution; i++) {
    // Untuk arah berlawanan, cukup balik urutan indeks
    // (4 - 1 - (i % 4)) % 4
    // Contoh: i=0 -> (3-0)%4 = 3, i=1 -> (3-1)%4 = 2, dst.
    int sequenceIndex = (4 - 1 - (i % 4)) % 4;
    digitalWrite(IN1, stepSequence[sequenceIndex][0]);
    digitalWrite(IN2, stepSequence[sequenceIndex][1]);
    digitalWrite(IN3, stepSequence[sequenceIndex][2]);
    digitalWrite(IN4, stepSequence[sequenceIndex][3]);
    delayMicroseconds(stepDelay);
  }

  delay(2000); // Jeda 2 detik sebelum mengulang siklus
}

Penjelasan Kode:

  1. const int IN1 = 8; hingga IN4 = 11;:

    • Mendefinisikan pin-pin digital Arduino yang akan terhubung ke pin IN1, IN2, IN3, IN4 pada driver L298N.

  2. const int stepsPerRevolution = 200;:

    • Sama seperti sebelumnya, ini adalah jumlah langkah untuk satu putaran penuh motor.

  3. const int stepDelay = 2000;:

    • Ini adalah jeda dalam mikrodetik antara setiap langkah motor. Nilai yang lebih kecil akan mempercepat putaran motor.

  4. int stepSequence[4][4]:

    • Ini adalah inti dari pengendali stepper dengan L298N. Ini adalah array 2D yang menyimpan urutan aktivasi koil untuk setiap langkah.

    • Setiap baris {1, 0, 1, 0} merepresentasikan kondisi (HIGH/LOW) dari pin IN1, IN2, IN3, IN4 secara berurutan untuk satu langkah.

    • Urutan ini disebut "Full Step Drive" atau "Wave Drive" (tergantung implementasi, ini adalah full step 2-phase on). Ada juga urutan lain seperti "Half Step Drive" untuk gerakan yang lebih halus tetapi membutuhkan dua kali lipat langkah.

  5. setup() Function:

    • Mengatur semua pin IN sebagai OUTPUT.

    • Menginisialisasi komunikasi serial untuk debugging.

  6. loop() Function:

    • Putar Searah Jarum Jam:

      • Loop for berjalan stepsPerRevolution kali.

      • int sequenceIndex = i % 4; : Ini menghitung indeks 0, 1, 2, 3, 0, 1, 2, 3, ... yang sesuai dengan baris di stepSequence.

      • digitalWrite(IN1, stepSequence[sequenceIndex][0]); dan seterusnya: Ini mengatur status HIGH/LOW pada pin-pin IN sesuai dengan urutan langkah yang didefinisikan dalam stepSequence.

      • delayMicroseconds(stepDelay); : Memberikan jeda antara setiap langkah.

    • Putar Berlawanan Arah Jarum Jam:

      • Urutan langkah dibalik untuk memutar motor ke arah sebaliknya.

      • int sequenceIndex = (4 - 1 - (i % 4)) % 4;: Rumus ini membalik urutan indeks 0, 1, 2, 3 menjadi 3, 2, 1, 0 secara berulang.

Sebelum Mengunggah Program:

  1. Pastikan Koneksi Benar: Periksa semua kabel, terutama power supply ke L298N dan L298N ke motor. Kesalahan dapat merusak komponen.

  2. Power Supply: Pastikan power supply eksternal Anda memiliki tegangan dan arus yang memadai untuk motor dan driver.

  3. Heat Sink: Pastikan L298N memiliki heatsink yang terpasang dengan baik, karena driver ini bisa menjadi panas, terutama dengan motor yang menarik arus tinggi.

  4. Pilih Board dan Port: Di Arduino IDE, pastikan Anda telah memilih board Arduino yang benar (misal: "Arduino Uno") di Tools > Board dan port serial yang benar di Tools > Port.

  5. Unggah Kode: Klik tombol "Upload".

Jika motor tidak bergerak atau hanya bergetar, coba hal-hal berikut:

  • Periksa Pairing Koil: Urutan kabel motor ke OUT1/OUT2 dan OUT3/OUT4 sangat penting. Coba balik salah satu pasangan kabel koil (misalnya, OUT1 dengan OUT2).

  • Urutan Langkah: Jika motor bergerak tetapi tidak mulus, mungkin urutan langkah stepSequence perlu disesuaikan dengan motor Anda. Beberapa motor mungkin memiliki urutan yang sedikit berbeda.

  • Power Supply: Pastikan power supply Anda stabil dan menyediakan arus yang cukup.

  • stepDelay: Coba tingkatkan stepDelay (motor berputar lebih lambat) jika motor terlihat skipping steps atau bergetar.

Komentar