Daftar Isi:

Mengendarai Motor Stepper Dengan Mikroprosesor AVR: 8 Langkah
Mengendarai Motor Stepper Dengan Mikroprosesor AVR: 8 Langkah

Video: Mengendarai Motor Stepper Dengan Mikroprosesor AVR: 8 Langkah

Video: Mengendarai Motor Stepper Dengan Mikroprosesor AVR: 8 Langkah
Video: Rangkaian dan Program Kendali Motor Stepper Berbasis Mikrokontroler Atmega16 dan CodeVisionAVR 2024, November
Anonim
Mengendarai Motor Stepper Dengan Mikroprosesor AVR
Mengendarai Motor Stepper Dengan Mikroprosesor AVR

Punya beberapa motor stepper yang diambil dari printer/disk drive/dll tergeletak di sekitar?

Beberapa probing dengan ohmeter, diikuti oleh beberapa kode driver sederhana pada mikroprosesor Anda dan Anda akan melangkah dengan gaya.

Langkah 1: Kenali Steppers

Mengenal Steppers
Mengenal Steppers
Mengenal Steppers
Mengenal Steppers

Pada dasarnya, Anda harus mencari tahu ke mana semua kabel kecil itu pergi.

Langkah pertama adalah mencari tahu apakah itu motor unipolar atau bipolar. Lihat Jones di Steppers untuk latar belakang yang lebih dalam, lalu di Situs Ian Harries untuk metode sederhana untuk mengetahui motor yang tidak dikenal. Baca sedikit, lalu bergabunglah dengan saya dalam penelusuran motor ini yang saya dapatkan dengan harga murah. (Mereka dijual seharga $0,99 sekarang. Mereka kecil, relatif ringan, tetapi tidak memiliki banyak torsi. Belum tahu apa yang akan baik untuk itu.)

Langkah 2: Temukan Kesamaan

Temukan kesamaan
Temukan kesamaan
Temukan kesamaan
Temukan kesamaan

Jadi Anda punya lima (atau empat, atau enam) kabel. Motor Anda akan memiliki dua bagian, dan Anda mungkin bahkan dapat mengetahuinya hanya dengan melihat sisi mana dari setiap kabel.

Jika Anda hanya melihat empat kabel, Anda beruntung -- ini adalah motor bipolar. Yang harus Anda lakukan adalah mencari tahu dua pasang kabel mana yang cocok. Jika Anda memiliki motor unipolar, atau lebih dari 4 kabel, Anda harus melepaskan ohmeter Anda. Apa yang Anda cari adalah kabel umum (tanah) untuk setiap setengahnya. Anda dapat mengetahui mana yang di-ground pada motor bipolar karena ia memiliki setengah hambatan pada salah satu kutub daripada kutub-kutub itu sendiri. Digambarkan adalah catatan saya dari menghubungkan kabel ke kabel dan mencatat resistansi (atau jika mereka terhubung sama sekali). Anda dapat melihat bahwa Putih adalah dasar untuk trio bawah b/c memiliki setengah perlawanan terhadap Merah atau Biru yang mereka miliki satu sama lain. (Motor ini aneh dan tidak memiliki center tap pada kumparan magnet atas. Ini seperti setengah bipolar, setengah unipolar. Mungkin Anda bisa menggunakan ini untuk merasakan rotasi pada kumparan Merah-Putih-Biru ketika Hitam-Kuning kumparan sedang didorong.)

Langkah 3: Cari Tahu Urutan Melangkah

Cari tahu urutan langkahnya
Cari tahu urutan langkahnya

Saya akan mengendarai motor ini sebagai motor bipolar, jadi saya mengabaikan kabel ground Putih. Saya hanya punya empat kabel yang perlu dikhawatirkan.

Anda mungkin ingin menjalankan motor unipolar Anda sebagai bipolar, karena ia menggunakan seluruh kumparan di kedua fase alih-alih bergantian antara dua bagian dari setiap kumparan. Lebih banyak koil = lebih banyak torsi. Jalankan arus melalui pasangan (perhatikan polaritas yang Anda pilih) dan kemudian jalankan arus melalui pasangan lain pada saat yang sama. Saat Anda memasang pasangan kedua, perhatikan ke arah mana motor berputar. Tuliskan ini. Sekarang balikkan polaritas pada pasangan pertama yang Anda pilih. Kemudian sambungkan pasangan kedua lagi dengan polaritasnya juga terbalik. Perhatikan arahnya. Dari sini Anda harus dapat mengetahui urutan untuk memutar motor di kedua arah. Dalam contoh saya, keduanya akhirnya berputar berlawanan arah jarum jam, jadi melangkah melalui urutan dengan cara yang sama yang saya pilih akan menginjak motor CCW.

Langkah 4: Mengambil Motor untuk Test Drive

Mengambil Motor untuk Test Drive
Mengambil Motor untuk Test Drive

Jika Anda belum siap untuk pemrograman mikroprosesor, Anda bisa melakukan yang lebih buruk daripada Kit Pengembangan Ghetto atau salah satu dari berbagai pemrogram PIC. Hubungkan kabel langsung ke microproc Anda dan bakar dengan kode berikut:

/* Bermain dengan menggerakkan motor stepper kecil. */

/* Sertakan fungsi penundaan */ #define F_CPU 1000000UL #include /* Pin defs untuk ATTiny2313 */ /* Urutan searah jarum jam */ #define BLUE _BV(PB0) #define BLACK _BV(PB1) #define RED _BV(PB2) #define KUNING _BV(PB3) #define DELAY 200 /* milidetik antar langkah */ int main(void){ DDRB = 0xff; /* Mengaktifkan output pada semua pin B */ PORTB = 0x00; /* Atur semuanya ke 0v */ while(1){ /* loop utama di sini */ PORTB = BLUE; _delay_ms(DELAY); PORTB = HITAM; _delay_ms(DELAY); PORTB = MERAH; _delay_ms(DELAY); PORTB = KUNING; _delay_ms(DELAY); } } Seberapa sederhana kode itu? Benar-benar sederhana. Yang dilakukannya hanyalah membuat beberapa definisi yang bagus sehingga saya bisa merujuk ke kabel berdasarkan warna daripada nama pinnya, dan kemudian mengaktifkannya secara berurutan dengan penundaan yang dapat disesuaikan di antaranya. Sebagai permulaan, saya memilih penundaan setengah detik di antara langkah-langkah. Lihat video singkat untuk hasilnya. Jika Anda benar-benar bermain, hitung jumlah langkah per siklus untuk mengetahui resolusi sudut langkah tunggal motor. (Oh ya. PS. Drive tanpa beban di 3.6v dengan mudah. Lihat baterai di video.)

Langkah 5: Ayunkan Bolak-Balik

Jadi Anda membuatnya berjalan searah jarum jam. Ada yang lebih menarik? Sedikit pembersihan kode, dan kita bisa menjalankannya bolak-balik. Saya menempatkan urutan searah jarum jam ke dalam array sehingga Anda dapat melangkah melalui fase dengan loop for sederhana. Sekarang Anda dapat menjalankan loop ke atas atau ke bawah untuk searah atau berlawanan arah jarum jam.

int main(void){ const uint8_t penundaan = 50; const uint8_t searah jarum jam = {BIRU, HITAM, MERAH, KUNING}; uint8_t saya; DDRB = 0xff; /* Mengaktifkan output pada semua pin B */ PORTB = 0x00; /* Atur semuanya ke 0v */ while(1){ /* loop utama di sini */ for (i=0; i<=3; i++){ /* langkah melalui warna searah jarum jam */ PORTB = searah jarum jam; _delay_ms(tunda); } for (i=3; i>=0; i--){ /* melangkah melalui warna ccw */ PORTB = searah jarum jam; _delay_ms(penundaan); } }} Lihat video bersemangat untuk bolak-balik.

Langkah 6: Saya Tidak Pernah Setengah Langkah, Karena Saya Bukan Setengah Langkah…

Di samping lirik pencarian, setengah melangkahkan motor Anda adalah tempatnya. Anda mendapatkan lebih banyak arus puncak, torsi lebih instan, dan resolusi sudut dua kali lipat. Singkatnya setengah langkah: Alih-alih Biru, Hitam, Merah, Kuning, Anda mengendarai motor dengan Warna Biru, Biru+Hitam, Hitam, Hitam+Merah, Merah, Merah+Kuning, Kuning, Kuning+Biru. Hasilnya adalah bahwa selama separuh waktu Anda menggunakan kedua magnet sekaligus. Dan selama kedua set diaktifkan, motor mengarah ke tengah di antara keduanya, mengecilkan sudut antara "langkah" dan membuat putaran motor lebih mulus. Bisakah Anda mengetahuinya dari video? Saya tidak yakin… Sekarang bagian dari kode yang melakukan setengah langkah terlihat seperti ini:

void halfStepping(penundaan uint16_t, arah uint8_t){ uint8_t i; for (i=0; i<=3; i++){ PORTB = arah; /* bagian kumparan tunggal */ _delay_ms(delay); PORTB |= arah[i+1]; /* tambahkan setengah langkah */ _delay_ms(delay); }} Perintah PORTB pertama menetapkan satu kutub ke positif dan sisanya menjadi negatif. Kemudian menunggu. Kemudian perintah PORTB kedua menetapkan kutub kedua (pada belitan lainnya) ke positif, mengikat kedua belitan untuk 1,4x torsi (dan 2x arus). Daftar program lengkap terlampir di bawah ini. Dua array sekarang didefinisikan (searah jarum jam, berlawanan arah jarum jam) dan keduanya memiliki 5 elemen masing-masing untuk memungkinkan entri i+1 dalam fungsi halfStepping.

Langkah 7: Tambahkan Driver Motor

Tambahkan Pengemudi Motor
Tambahkan Pengemudi Motor
Tambahkan Pengemudi Motor
Tambahkan Pengemudi Motor
Tambahkan Pengemudi Motor
Tambahkan Pengemudi Motor

Sejauh ini baik.

Satu-satunya masalah adalah bahwa motor tampaknya tidak memiliki torsi sebanyak itu, yang mungkin disebabkan oleh fakta bahwa mikroprosesor hanya akan mengeluarkan ~50mA per pin. Langkah selanjutnya yang jelas adalah menghubungkannya ke pengemudi motor untuk memasok lebih banyak jus. Tapi kemudian sedikit berpikir: Saya hanya mengendarainya dengan 5v, dan resistansi lilitan koil adalah ~ 125 ohm. Yang berarti bahwa motor hanya menarik 40mA per pin, dan itu harus digerakkan dengan baik oleh chip AVR (befy!). Jadi untuk mendapatkan tegangan lebih untuk menggerakkan motor, saya menghubungkannya ke chip SN754410 H-bridge. Sirkuitnya cukup sederhana. Setiap pin dari AVR menuju ke input, dan pin output yang sesuai menuju ke motor. Chip membutuhkan 5v untuk bagian logika, dan dapat mengambil lebih banyak tegangan di bagian motor. Menjalankannya pada 11.25v (tiga baterai 3.6v) sedikit membantu. Terasa lebih banyak torsi ke jari saya, tapi itu masih bukan pembangkit tenaga listrik. Tidak buruk untuk motor yang lebih kecil dari nikel. Dan sekarang sirkuit ini menjadi driver motor stepper bipolar untuk keperluan umum. Ditambahkan 29 Nov: Jalankan motor tadi malam di 12v untuk sementara waktu dan mulai panas. Saya tidak yakin apakah itu masalah frekuensi resonansi atau apakah itu terlalu banyak arus untuk belitan. Bagaimanapun, berhati-hatilah jika Anda mengendarai motor kecil ini dengan voltase yang lebih besar.

Langkah 8: Akhir

Jadi apa yang saya pelajari? Mengendarai motor stepper dengan AVR (dan chip H-bridge) cukup mudah, bahkan dalam mode setengah langkah "mewah".

Tidak yakin apa yang akan saya lakukan dengan motor stepper kecil dulu. Ada saran?

Direkomendasikan: