ULN2003 Sürücü ve Arduino ile 28BYJ-48 Step Motor Kontrolü
Step motorlar, konum kontrolü için harika motorlardır. Bunlar, tam bir dönüşü birkaç eşit "adıma" bölen özel bir fırçasız motor türüdür. Genellikle masaüstü yazıcılarda, 3B yazıcılarda, CNC freze makinelerinde ve hassas konumlandırma kontrolü gerektiren diğer her şeyde bulunurlar.
Adım motorları hakkında bilgi edinmenin ucuz yollarından biri, 28BYJ-48 adımlı motorları kullanmaktır. Genellikle ULN2003 tabanlı bir sürücü kartı ile birlikte gelirler, bu da onların kullanımını çok kolaylaştırır.
Bu step motorların nasıl çalıştığını biliyor musunuz?
Bu kademeli motorlar, tekerleği bir seferde bir 'adım' döndürmek için bir dişli çark (32 dişli) ve dört elektromıknatıs kullanır.
Gönderilen her YÜKSEK darbe, bobine enerji verir, dişli çarkın en yakın dişini çeker ve motoru bir adım çalıştırır.
Bu bobinleri vurma şekliniz, motorun davranışını büyük ölçüde etkiler.
- Darbe sırası, motorun dönüş yönünü belirler.
- Darbelerin frekansı motorun hızını belirler.
- Darbe sayısı, motorun ne kadar uzağa döneceğini belirler.
28BYJ-48 Step Motor
28BYJ-48, 5 voltta çalışan 5 telli tek kutuplu bir step motordur.
Bu motorla ilgili ilginç olan şey, insanların onu son birkaç on yıldır sayısız uygulamada kullanıyor olmasıdır. Klima, otomat ve diğer birçok uygulamada kullanılmaktadır.
Bu motorlarla ilgili en iyi şeylerden biri, her seferinde bir 'adım' olarak doğru şekilde konumlandırılabilmeleridir.
Diğer bir avantajı ise, hareketlerinde nispeten hassas olmaları ve motorun kontak fırçaları kullanmaması nedeniyle oldukça güvenilir olmalarıdır.
Motora güç verildiği sürece muhafaza edilen hareketsiz durumda bile genellikle iyi tork verirler.
Tek dezavantajı, güç için biraz aç olmaları ve hareket etmedikleri zaman bile güç tüketmeleri.
Veri sayfasına göre, 28BYJ-48 motoru tam adım modunda çalıştığında, her adım 11,25 ° 'lik bir dönüşe karşılık gelir. Bu, devir başına 32 adım olduğu anlamına gelir (360 ° / 11.25 ° = 32).
Ek olarak, motorda 1/64 redüksiyon dişlisi seti vardır. (Aslında 1 / 63.68395'idir, ancak çoğu amaç için 1/64, yeterince iyi bir yaklaşımdır)
Bunun anlamı, devir başına aslında 32 * 63.68395 adım = 2037.8864 ~ 2038 adımdır!
28BYJ-48 Güç Tüketimi
Motorun güç tüketimi 240mA civarındadır.
Motor çok fazla güç çektiği için, bu gücü Arduino'dan çekmek yerine doğrudan harici bir 5V güç kaynağından çalıştırmak en iyisidir.
Motor, konumunu korumak için hareketsiz durumda bile güç tüketir.
ULN2003 Sürücü Kartı
Motor genellikle ULN2003 tabanlı bir sürücü kartıyla birlikte gelir.
ULN2003, 7 Darlington transistör çiftinden oluşan en yaygın motor sürücü IC'lerinden biridir ve her bir çift 500mA ve 50V'ye kadar yükleri çalıştırabilir. Bu kartta yedi çiftten dördü kullanılıyor.
Kart, motor kablolarını mükemmel şekilde eşleştiren bir konektöre sahiptir, bu da motoru panele bağlamayı çok kolaylaştırır. Dört kontrol girişi için bağlantıların yanı sıra güç kaynağı bağlantıları da vardır.
Anakartta, dört kontrol giriş hattındaki etkinliği gösteren (adımlama durumunu göstermek için) dört LED bulunur. Adım atarken güzel bir görsel sağlarlar.
Kart ayrıca, step Motoruna giden gücü izole etmek için bir AÇIK / KAPALI atlama teli ile birlikte gelir.
ULN2003 Step Sürücü Kartı Pin Çıkışı
ULN2003 step sürücü kartının pinleri aşağıdaki gibidir:
IN1 - IN4motoru sürmek için pimler kullanılır. Bunları Arduino'daki dijital çıkış pinlerine bağlayın.
GND ortak bir zemin pimidir.
VDDpin, motora güç sağlar. Harici bir 5V güç kaynağına bağlayın. Motor çok fazla güç çektiğinden, bu step motora güç sağlamak için ASLA Arduino'nuzun 5V gücünü kullanmamalısınız.
Motor KonektörüMotorun takıldığı yer burasıdır. Konektör anahtarlıdır, bu nedenle yalnızca tek yöne gider.
28BYJ-48 Step Motor ve ULN2003 Sürücüsünü Arduino'ya Kablolama
Artık motor hakkında her şeyi bildiğimize göre, onu Arduino'muza bağlamaya başlayabiliriz!
Güç kaynağını ULN2003 sürücüsüne bağlayarak başlayın.
Step motora doğrudan Arduino'dan güç vermenin mümkün olduğunu unutmayın. Ancak bu tavsiye edilmez; Motor güç kaynağı hatlarına elektriksel gürültüye neden olabilir ve bu Arduino'ya zarar verebilir.
Bu nedenle, step motorlarınıza güç sağlamak için ayrı bir 5V güç kaynağı kullanın.
Sonra o güç kaynağından gelen toprağı arduino'nun topraklamasına bağlayın. Bu, ikisi arasında aynı voltaj referansını oluşturmamız için çok önemlidir.
Şimdi sürücü kartının IN1, IN2, IN3, IN4'ü Arduino dijital pinleri 8, 9, 10 ve 11'e bağlayın.
Son olarak, motor kablosunu step motordan sürücü kartına asın.
İşiniz bittiğinde, aşağıda gösterilen resme benzer bir şeye sahip olmalısınız.
Arduino Kodu - Dahili Step Kitaplığını Kullanma
İlk deneyimiz için Arduino IDE'niz ile birlikte gelen Arduino Step Kitaplığını kullanacağız.
Kademeli kitaplık, kademe dizisini halleder ve hem tek kutuplu hem de çift kutuplu çok çeşitli kademeli motorları kontrol etmeyi kolaylaştırır.
İşte step motoru saat yönünde yavaşça ve ardından saat yönünün tersine hızlıca hareket ettiren basit taslak.
Kod Açıklaması:
Taslak, Arduino Step Kitaplığı dahil edilerek başlar.
Daha sonra, stepsPerRevolution
motorun bir devri tamamlamak için atacağı 'adımların' sayısını tutan bir sabit tanımlıyoruz . Bizim durumumuzda, 2038.
28BYJ-48 Unipolar step motor, IN1-IN3-IN2-IN4 adım dizisine sahiptir. Bu bilgiyi myStepper
, 8, 10, 9, 11 pin dizisi ile adlandırılan bir step kitaplığı örneği oluşturarak motoru sürmek için kullanacağız .
Bunu doğru yaptığınızdan emin olun, aksi takdirde motor düzgün çalışmayacaktır.
Step kitaplığı dahili olarak dört I / O pinini çıkış olarak ayarladığından kurulum işlevinde ayarlanacak hiçbir şey yoktur.
Döngü işlevinde, setSpeed()
kademeli motorun hareket etmesini istediğimiz hızı ayarlamak için step()
işlevi kullanırız ve daha sonra işlevi, kaç adım döneceğini söylemek için kullanırız . İşleve negatif bir sayı geçirmek step()
, motorun dönüş yönünü tersine çevirir.
İlk kod parçacığı motoru saat yönünde çok yavaş çevirecektir. İkincisi, motoru saat yönünün tersine çok daha hızlı bir hızda döndürecektir.
Arduino Kodu - AccelStepper kitaplığını kullanma
Arduino Step Kitaplığı, basit, tek motorlu uygulamalar için mükemmel bir şekilde yeterlidir. Ancak birden fazla adımı kontrol etmek istediğinizde, daha iyi bir kitaplığa ihtiyacınız olacak.
Bu nedenle, bir sonraki deneyimiz için AccelStepper kitaplığı adı verilen gelişmiş bir step motor kitaplığından yararlanacağız . Standart Arduino Step kitaplığını çeşitli şekillerde önemli ölçüde geliştirir:
- Hızlanma ve yavaşlamayı destekler.
- Yarım adım sürüşü destekler.
- Her adımda bağımsız eşzamanlı adımlarla birden fazla eşzamanlı adımı destekler.
Bu kütüphane Arduino IDE'ye dahil değildir, bu yüzden önce onu kurmanız gerekecektir.
Kütüphane Kurulumu
Kitaplığı kurmak için Sketch> Dahil Et> Kitaplıkları Yönet'e gidin… Kitaplık Yöneticisinin kitaplıklar dizinini indirmesini ve kurulu kitaplıkların listesini güncellemesini bekleyin.
Aramanızı ' accelstepper ' yazarak filtreleyin . İlk girişe tıklayın ve ardından Yükle'yi seçin.
Arduino Kodu
İşte step motorunu bir yönde hızlandıran ve sonra durmak için yavaşlayan basit taslak. Motor bir devir yaptığında, dönüş yönünü değiştirir. Ve bunu tekrar tekrar yapmaya devam ediyor.
Kod Açıklaması:
Yeni kurulan AccelStepper kitaplığını dahil ederek başlıyoruz.
Şimdi motorumuzu tam adımlarla sürecekken, bunun için bir sabit tanımlayacağız. Motoru yarım adımlarla sürmek istiyorsanız, sabiti 8'e ayarlayın.
Daha sonra, myStepper
8, 10, 9, 11 pin dizisi ile adlandırılan bir step kitaplığı örneği oluşturuyoruz (Bu motorlar için adım sırasının IN1-IN3-IN2-IN4 olduğunu unutmayın).
Yine, bunu doğru yaptığınızdan emin olun, aksi takdirde motor düzgün çalışmayacaktır.
Kurulum işlevinde ilk olarak motorun maksimum hızını bu motorların gidebildiği kadar hızlı olan bin olarak ayarladık. Ardından, step motorun hareketlerine hızlanma ve yavaşlama eklemek için motora bir hızlanma faktörü belirledik.
Daha sonra, 200'lük normal hızı ve onu 2038'e taşıyacağımız adım sayısını belirledik (28BYJ-48'in dişli tertibatıyla birlikte devir başına 2038 adım hareket ettiğini hatırladığınız gibi).
Döngü işlevinde, motorun distanceToGo
hedef konuma (tarafından ayarlanan moveTo
) ulaşana kadar ( özelliği okuyarak ) ne kadar ilerlemesi gerektiğini kontrol etmek için bir If ifadesi kullanırız . Bir kez distanceToGo
ulaştığında, biz değiştirerek ters yönde motora hareket edecek sıfır moveTo
mevcut pozisyonun negatif pozisyon.
Şimdi döngünün en altında bir run()
fonksiyon dediğimizi fark edeceksiniz . Bu en önemli işlevdir, çünkü bu işlev çalıştırılıncaya kadar adımlayıcı çalışmayacaktır.
İki 28BYJ-48 Step Motoru Aynı Anda Kontrol Edin
Bir sonraki deneyimiz için, aynı anda iki motoru sürmek için Arduino'muza ikinci bir 28BYJ-48 step ve ULN2003 sürücü seti ekleyeceğiz.
Kablolama
Daha önce yaptığınız bağlantıları olduğu gibi bırakın ve yeni cihazları şu şekilde bağlayın:
Bir kez daha ULN2003 sürücü kartına güç sağlamak için ayrı 5V güç kaynağını kullanacağız.
Şimdi ikinci sürücü kartının IN1, IN2, IN3, IN4'ü sırasıyla Arduino dijital pinleri 4, 5, 6 ve 7'ye bağlayın.
Aşağıdaki çizim kablolamayı göstermektedir.
Arduino Kodu
İşte bir motoru tam adımlarla ve ikincisini yarım adımlarla çalıştıran taslak. Motorlar bir devir yaptığında dönüş yönleri değişecektir. Bazı hızlanma ve yavaşlama da var.
Kod Açıklaması:
AccelStepper Kitaplığını dahil ederek başlıyoruz.
Şimdi bir motoru tam adımda ve ikincisini yarım adımda süreceğiz. Bunun için iki sabit tanımlayacağız.
Ardından, her motor için bir tane olmak üzere iki motor nesnesi oluşturuyoruz. Bunları oluşturmak için pin tanımlarımızı ve adım tanımlarımızı kullanıyoruz.
Kurulum fonksiyonunda ilk olarak maksimum hızı stepper1
bin olarak ayarladık . Ardından, step motorun hareketlerine hızlanma ve yavaşlama eklemek için motora bir hızlanma faktörü belirledik.
Daha sonra, 200'lük normal hızı ve onu 2038'e taşıyacağımız adım sayısını belirledik (28BYJ-48'in dişli tertibatıyla birlikte devir başına 2038 adım hareket ettiğini hatırladığınız gibi).
Tam olarak aynı şeyi stepper2
yapacağız , ancak ona -2038'e gitmesi talimatını vereceğiz çünkü saat yönünün tersine hareket etmesini istiyoruz.
Döngü işlevinde, If statements
motorların distanceToGo
hedef konumlarına (tarafından ayarlanan) ulaşana kadar ( özelliği okuyarak ) ne kadar uzağa gitmeleri gerektiğini kontrol etmek için her motor için iki tane kullanırız moveTo
. Bir kez distanceToGo
ulaşır sıfır, onların değişecek moveTo
onlar ters yönde hareket etmeye başlar, böylece, mevcut pozisyonun negatife konumunu.
Son olarak run()
işlevi çağırarak onları harekete geçiriyoruz .