İçindekiler:

AVR Mikroişlemcili Bir Step Motoru Sür: 8 Adım
AVR Mikroişlemcili Bir Step Motoru Sür: 8 Adım

Video: AVR Mikroişlemcili Bir Step Motoru Sür: 8 Adım

Video: AVR Mikroişlemcili Bir Step Motoru Sür: 8 Adım
Video: Step Motorlar Sürücüsüz Nasıl Çalıştırılır? Sürücü Arduino Mikroişlemci ve Mikrodenetleyici Olmadan. 2024, Temmuz
Anonim
AVR Mikroişlemcili Bir Step Motoru Sürme
AVR Mikroişlemcili Bir Step Motoru Sürme

Etrafta yatan yazıcılardan/disk sürücülerinden/vb.

Bir ohmmetre ile bazı problama, ardından mikroişlemcinizdeki bazı basit sürücü kodları ve şık bir şekilde adım atacaksınız.

Adım 1: Stepper'ları Tanıyın

Stepper'ları Tanıyın
Stepper'ları Tanıyın
Stepper'ları Tanıyın
Stepper'ları Tanıyın

Temel olarak, tüm küçük kabloların nereye gittiğini bulmanız gerekecek.

İlk adım, tek kutuplu veya iki kutuplu bir motor olup olmadığını anlamaktır. Daha derin bir arka plan için Jones on Steppers'a, ardından bilinmeyen bir motoru bulmak için basit bir yöntem için Ian Harries'in Sitesine bakın. Biraz okuyun, sonra ucuza aldığım bu motorun bir adımında bana katılın. (Şu anda 0,99 ABD dolarına satılıyorlar. Küçükler, nispeten hafifler, ancak fazla torkları yok. Ne işe yarayacağını henüz bilmiyorum.)

2. Adım: Ortak Zemin Bulun

Ortak zemin bulmak
Ortak zemin bulmak
Ortak zemin bulmak
Ortak zemin bulmak

Yani beş (veya dört veya altı) teliniz var. Motorunuzun iki yarısı olacak ve muhtemelen her bir telin hangi tarafa ait olduğunu bakarak bile söyleyebilirsiniz.

Yalnızca dört kabloya bakıyorsanız, şanslısınız - bu bir bipolar motor. Tek yapmanız gereken hangi iki tel çiftinin bir araya geldiğini bulmak. Tek kutuplu bir motorunuz varsa veya 4'ten fazla kablonuz varsa, ohmmetrenizi kırmanız gerekecek. Aradığınız şey, her bir yarı için ortak (toprak) teldir. Bipolar motorda hangisinin toprak olduğunu anlayabilirsiniz çünkü kutuplardan herhangi birine karşı kutupların kendi aralarında yaptığı direncin yarısı kadardır. Resimde, telleri tellere bağlamaktan ve direnci not etmekten (veya bağlıysalar) notlarım var. Beyazın alttaki b/c üçlüsünün zemini olduğunu görebilirsiniz, birbirlerine karşı sahip oldukları Kırmızı veya Mavi'ye karşı direncinin yarısına sahiptir. (Bu motor garip ve üst mıknatıs bobininde orta musluğa sahip değil. Sanki yarı-bipolar, yarı-unipolar gibi. Belki bunu, Siyah-Sarı olduğunda Kırmızı-Beyaz-Mavi bobindeki dönüşü algılamak için kullanabilirsiniz. bobin sürülmektedir.)

Adım 3: Adım Sırasını Belirleyin

Adım Sırasını Anlayın
Adım Sırasını Anlayın

Bu motoru bipolar olarak sürecektim, bu yüzden Beyaz topraklama kablosunu görmezden geliyorum. Endişelenmem gereken sadece dört kablo var.

Tek kutuplu motorunuzu yine de bipolar olarak çalıştırmak isteyebilirsiniz, çünkü her bir bobinin iki yarısı arasında geçiş yapmak yerine her iki fazda da tüm bobini kullanır. Daha fazla bobin = daha fazla tork. Akımı bir çiftten geçirin (seçtiğiniz polariteye dikkat ederek) ve ardından diğer çiftten aynı anda akım geçirin. İkinci çifti bağladığınızda motorun hangi yöne döndüğüne dikkat edin. Bunu bir yere yaz. Şimdi seçtiğiniz ilk çiftin polaritesini ters çevirin. Ardından ikinci çifti kutupları da ters olacak şekilde tekrar bağlayın. Yönü not edin. Bundan, motoru her iki yönde döndürme sırasını anlayabilmelisiniz. Örneğimde, her ikisi de saat yönünün tersine döndü, bu nedenle dizide benim seçtiğim şekilde adım atmak motorun CCW'sini adımlayacaktır.

Adım 4: Motoru Test Sürüşüne Çıkarma

Motoru Test Sürüşüne Çıkarmak
Motoru Test Sürüşüne Çıkarmak

Mikroişlemci programlama için henüz donanımlı değilseniz, Getto Geliştirme Kitinden veya çeşitli PIC programcılarından daha kötüsünü yapabilirsiniz. Kabloları doğrudan microproc'unuza bağlayın ve aşağıdaki kodla yazın:

/* Küçük step motorların çalıştırılmasıyla oynanıyor. */

/* Gecikme fonksiyonunu dahil et */ #define F_CPU 1000000UL #include /* ATTiny2313 için pin tanımları */ /* Saat yönünde sıra */ #define BLUE _BV(PB0) #define BLACK _BV(PB1) #define KIRMIZI _BV(PB2) #define SARI _BV(PB3) #define DELAY 200 /* adımlar arasında milisaniye */ int main(void){ DDRB = 0xff; /* Tüm B pinlerinde çıkışı etkinleştir */ PORTB = 0x00; /* Hepsini 0v olarak ayarlayın */ while(1){ /* burada ana döngü */ PORTB = MAVİ; _delay_ms(DELAY); PORTB = SİYAH; _delay_ms(DELAY); PORTB = KIRMIZI; _delay_ms(DELAY); PORTB = SARI; _delay_ms(DELAY); } } Bu kod ne kadar basit? Gerçekten basit. Tek yaptığı bazı güzel tanımlar yapmak, böylece tellere pin adları yerine renklerine göre atıfta bulunabilirim ve ardından aralarında ayarlanabilir bir gecikme ile sırayla onları açar. Başlangıç olarak, adımlar arasında yarım saniyelik bir gecikme seçtim. Sonuçlar için kısa videoya bakın. Gerçekten oyunundaysanız, motorun tek adımlı açısal çözünürlüğünü bulmak için döngü başına adım sayısını sayın. (Oh evet. Not. Yüksüz olarak 3.6v'de kolayca sürülür. Pili videoda görün.)

Adım 5: İleri Geri Sallayın

Yani saat yönünde çalıştırıyorsunuz. Daha ilginç bir şey var mı? Küçük bir kod temizleme ve onu ileri geri çalıştırabiliriz. Aşamaları basit bir for döngüsü ile geçebilmeniz için saat yönünde diziyi bir diziye koydum. Şimdi saat yönünde veya saat yönünün tersine gitmek için döngüyü yukarı veya aşağı çalıştırabilirsiniz.

int main(void){ const uint8_t gecikme = 50; const uint8_t saat yönünde = {MAVİ, SİYAH, KIRMIZI, SARI}; uint8_t ben; DDRB = 0xff; /* Tüm B pinlerinde çıkışı etkinleştir */ PORTB = 0x00; /* Hepsini 0v olarak ayarlayın */ while(1){ /* ana döngü burada */ for (i=0; i<=3; i++){ /* renkler arasında saat yönünde ilerleyin */ PORTB = saat yönünde; _delay_ms(gecikme); } for (i=3; i>=0; i--){ /* renkler arasında gezin ccw */ PORTB = saat yönünde; _delay_ms(gecikme); } }} Geri ve ileri için müstehcen videoyu izleyin.

Adım 6: Asla Yarım Adım Atmam, Çünkü Yarım Adımcı Değilim…

Quest lirik bir yana, motorunuzu yarım adım atmak, olduğu yerdir. Daha fazla tepe akımı, daha anlık tork ve iki kat açısal çözünürlük elde edersiniz. Özetle yarım adım: Motoru Mavi, Siyah, Kırmızı, Sarı yerine Mavi, Mavi+Siyah, Siyah, Siyah+Kırmızı, Kırmızı, Kırmızı+Sarı, Sarı, Sarı+Mavi ile sürersiniz. Sonuç, zamanın yarısında her iki mıknatısı da aynı anda meşgul ediyor olmanızdır. Ve her iki setin devreye girdiği zamanlarda, motor ikisinin ortasını işaret ederek "adımlar" arasındaki açıyı daraltır ve motorun daha düzgün dönmesini sağlar. Videodan anlayabilir misin? Emin değilim… Şimdi kodun yarım adımı yapan kısmı şuna benziyor:

void halfStepping(uint16_t gecikme, uint8_t yön){ uint8_t i; for (i=0; i<=3; i++){ PORTB = yön; /* tek bobin kısmı */ _delay_ms(gecikme); PORTB |= yön[i+1]; /* yarım adımda ekle */ _delay_ms(delay); }} İlk PORTB komutu, tek bir kutbu pozitife ve geri kalan her şeyi negatife ayarlar. Sonra bekler. Ardından ikinci PORTB komutu, ikinci bir kutbu (diğer sargıda) pozitife ayarlar ve her iki sargıyı da torkun 1,4 katı (ve akımın 2 katı) için devreye sokar. Tam bir program listesi aşağıda eklenmiştir. Şimdi iki dizi tanımlanmıştır (saat yönünde, saat yönünün tersinde) ve her ikisinin de HalfStepping işlevinde i+1 girişine izin vermek için 5 öğesi vardır.

7. Adım: Bir Motor Sürücüsü Ekleyin

Motor Sürücüsü Ekle
Motor Sürücüsü Ekle
Motor Sürücüsü Ekle
Motor Sürücüsü Ekle
Motor Sürücüsü Ekle
Motor Sürücüsü Ekle

Çok uzak çok iyi.

Tek sorun, motorun o kadar fazla torka sahip olmamasıdır, bunun nedeni mikroişlemcinin pin başına yalnızca ~50mA vermesi olabilir. Bir sonraki adım, daha fazla meyve suyu sağlamak için bir motor sürücüsüne bağlamak olacaktır. Ama sonra biraz düşünüyorum: Sadece 5v ile sürüyorum ve bobin sarma direnci ~ 125 ohm. Bu, motorun pin başına yalnızca 40mA çektiği ve (et!) AVR çipi tarafından gayet iyi çalıştırılması gerektiği anlamına gelir. Bu yüzden motoru daha fazla voltajla çalıştırmak için onu bir SN754410 H-köprü çipine bağladım. Devre oldukça basit. AVR'den gelen her pin bir girişe, karşılık gelen çıkış pinleri ise motora gider. Çip, mantık bölümü için 5v'ye ihtiyaç duyar ve motor bölümünde çok daha fazla voltaj alabilir. 11.25v (üç 3.6v pil) ile çalıştırmak biraz yardımcı oldu. Parmağımda gözle görülür şekilde daha fazla tork, ama yine de bir güç merkezi değil. Yine de bir nikelden daha küçük bir motor için fena değil. Ve şimdi devre, genel amaçlı bir bipolar step motor sürücüsü haline geldi. 29 Kasım Eklendi: Dün gece motoru bir süre 12v'de çalıştırdım ve ısınmaya başladı. Rezonans frekansı sorunu olup olmadığından veya sargılar için çok fazla akım olup olmadığından emin değilim. Her iki durumda da, bu küçük motoru daha büyük voltajlarla kullanıyorsanız biraz dikkatli olun.

8. Adım: Son

Peki ne öğrendim? Bir AVR (ve bir H-köprü çipi) ile bir step motoru sürmek, "süslü" yarım adım modunda bile oldukça kolaydır.

Küçük step motorlarla ne yapacağımdan henüz emin değilim. Herhangi bir öneri?

Önerilen: