Welcome

Welcome to My Blog

Thursday, 12 January 2017

MOTOR STEPPER


Motor stepper merupakan salah satu jenis motor listrik yang dikendalikan dengan memberikan pulsa-pulsa digital. Prinsip kerja motor stepper yaitu dengan mengubah pulsa yang diberikan menjadi gerakan motor discret (terputus) yang disebut step.
Berdasarkan struktur rotor dan stator, motor stepper dikategorikan dalam 3 jenis yaitu :
1.      Motor Stepper Variable Reluctance (VR)
Motor stepper jenis ini menggunakan rotor besi lunak non-magnet dengan beberapa gerigi dan lilitan stator. Ketika lilitan stator diberi energi dengan arus DC, maka kutub-kutubnya akan termagnetisasi. Perputaran terjadi ketika gerigi rotor tertarik oleh kutub-kutub stator. Berikut ini adalah penampang melintang dari motor stepper variable reluctance:

Penampang melintang motor stepper variable reluctance

2.      Motor Stepper Permanent Magnet (PM)
Motor stepper jenis ini menggunakan permanent magnet pada rotornya dan beberapa lilitas stator. Ketika lilitas stator diberi energi dengan arus DC maka stator akan termagnetisasi, sehingga kutub rotor yang merupakan permanent magnet mengikuti kutub-kutub stator yang termagnetisasi. Terdapat 3 cara untuk menaikkan resolusi/step angle pada motor stepper jenis ini, yang pertama yaitu dengan menambahkan kutub-kutub pada permanent magnet, kedua yaitu dengan menambahkan lilitas stator, yang ketiga yaitu dengan menggunakan cara lain dalam memagnetisasi stator. Berikut penampang melintang motor stepper permanent magnet:

Penampang melintang motor stepper permanent magnet

3.      Motor Stepper Hybrid
Motor stepper hybrid merupakan kombinasi dari kedua tipe motor stepper sebelumnya. Motor stepper ini memiliki gerigi seperti tipe VR dan memiliki permanent magnet pada batang porosnya seperti tipe PM. Motor jenis ini dapat menghasilkan resolusi step yang tinggi yaitu antara 100-400 step setiap putarannya. Berikut penampang melintang dari motor stepper hybrid:

Penampang melintang motor stepper hybrid
Untuk lebih memahami prinsip kerja motor stepper hybrid silahkan buka link video berikut: https://www.youtube.com/watch?v=u12dt1RqLW0
Berdasarkan metode perancangan rangkaian pengendalinya , motor stepper dapat dibagi menjadi dua jenis yaitu:
1.      Motor Stepper Unipolar
Motor stepper jenis ini memiliki satu lilitan dengan center tap setiap fasanya. Setiap bagian dari lilitan diaktifkan untuk setiap arah dari medan magnet. Untuk mengendalikan motor stepper ini lebih mudah karena hanya memerlukan satu switch setiap lilitannya. Umumnya, center tap pada setiap lilitan dibuat sama (common), jadi center tap pada setiap lilitan dihubungkan satu sama lain. Untuk menjalankan dan menghentikan motor ini cukup dengan menerapkan pulsa digital yang hanya terdiri atas tegangan positif dan nol (ground) pada salah satu terminal lilitan (wound) motor sementara terminal lainnya dicatu dengan tegangan positif konstan (VM) pada bagian tengah (center tap) dari lilitan seperti pada gambar berikut.

Motor stepper dengan lilitan unipolar

2.      Motor Stepper Bipolar
Motor stepper jenis ini memiliki satu lilitan per fasa. Arus dapat mengalir dua arah pada setiap lilitannya. Untuk mengendalikan motor ini diperlukan pulsa yang berubah-ubah dari postif ke negatif dan sebaliknya. Jadi setiap lilitan A dan B harus dihubungkan dengan sinyal positif ke negatif dan negatif ke positif . Karena itu rangkaian pengendali motor ini lebih kompleks dibandingkan motor stepper unipolar. Motor stepper bipolar memiliki keunggulan dibandingkan motor unipolar, torsi yang dihasilkan motor bipolar lebih besar untuk ukuran yang sama.

Motor stepper dengan lilitan bipolar

Untuk dapat menjalankan motor stepper unipolar dibutuhkan IC driver ULN 2803, sedangkan untuk motor bipolar dibutuhkan IC driver L293D. Motor unipolar juga dapat di drive dengan IC L293D.
Berikut merupakan wiring pada proteus untuk mendrive motor stepper unipolar dengan ATmega8535:

Wiring motor stepper unipolar
Kaki tengah pada motor merupakan common yang langsung dihubungkan ke Vcc.
Berikut merupakan wiring pada proteus untuk mendrive motor stepper bipolar dengan ATmega8535:

Wiring motor stepper bipolar

Dan berikut ini merupakan program bahasa C untuk menjalankan motor stepper. Program yang dibuat menggunakan fungsi sehingga dapat memilih antara full step, half step, berputar searah jarum jam, atau berlawanan jarum jam.

/*MOTOR STEPPER*/
#include <mega8535.h>
#include <delay.h>
#define PORT PORTA
// Declare your global variables here
int x, y;

/* ---------------- UNIPOLAR/BIPOLAR STEPPER MOTOR ---------------- */
//Full Step Counter Clockwise
void FSCCW(float delay){
    PORT = 0x08;        //0b1000
    delay_ms(delay);         
    PORT = 0x04;        //0b0100
    delay_ms(delay);   
    PORT = 0x02;        //0b0010
    delay_ms(delay);   
    PORT = 0x01;        //0b0001
    delay_ms(delay);   
}
//Full Step Clockwise
void FSCW(float delay){
    PORT = 0x01;        //0b0001
    delay_ms(delay);         
    PORT = 0x02;        //0b0010
    delay_ms(delay);   
    PORT = 0x04;        //0b0100
    delay_ms(delay);   
    PORT = 0x08;        //0b1000
    delay_ms(delay);                 
}
//Half Step Counter Clockwise
void HSCCW(float delay){
    PORT = 0X09;                    //0b1001
    delay_ms(delay);
    PORT = 0x08;                     //0b1000
    delay_ms(delay);
    PORT = 0x0C;                    //0b1100
    delay_ms(delay);
    PORT = 0x04;                     //0b0100
    delay_ms(delay);
    PORT = 0x06;                     //0b0110
    delay_ms(delay);
    PORT = 0x02;                     //0b0010
    delay_ms(delay);
    PORT = 0x03;                     //0b0011
    delay_ms(delay);
    PORT = 0x01;                     //0b0001
    delay_ms(delay); 
}
//Half Step Clockwise
void HSCW(float delay){
    PORT = 0x01;                     //0b0001
    delay_ms(delay);
    PORT = 0x03;                     //0b0011
    delay_ms(delay);
    PORT = 0x02;                     //0b0010
    delay_ms(delay);
    PORT = 0x06;                     //0b0110
    delay_ms(delay);
    PORT = 0x04;                     //0b0100
    delay_ms(delay);
    PORT = 0x0C;                    //0b1100
    delay_ms(delay);
    PORT = 0x08;                     //0b1000
    delay_ms(delay);
    PORT = 0x09;                     //0b1001
    delay_ms(delay);
}
void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
PORTA=0x00;
DDRA=0xFF;

// Port B initialization
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
PORTD=0x00;
DDRD=0xFF;
while (1)
{
    // Place your code here 
            //Panggil fungsi dengan parameter delay per step disini. 
    FSCW(10);//Memanggil fungsi Full Step Clockwise dengan delay per step 10ms
}
}

No comments:

Post a Comment