İçindekiler:

Mil ve Adım Motorlu Arduino Uno: 19 Adım
Mil ve Adım Motorlu Arduino Uno: 19 Adım

Video: Mil ve Adım Motorlu Arduino Uno: 19 Adım

Video: Mil ve Adım Motorlu Arduino Uno: 19 Adım
Video: УСКОРЯЕМ ARDUINO UNO | Уроки Ардуино #19 2024, Kasım
Anonim
Image
Image
Kullanılan Kaynaklar
Kullanılan Kaynaklar

Bugün mekanik ve mekatronikte çok önemli bir konudan bahsedeceğiz: makinelerin elemanları. Bu yazıda, bazı ilginç özellikler ve uygulamalar içeren iğleri özel olarak ele alacağız. Yine de, bir milin neden olduğu hareketi hesaplamanın bazı yollarını göstereceğiz ve bir test düzeneği sunacağız.

Aşağıdaki montajı yaptım, bu nedenle 2mm ve 8mm'lik bir milin ilerlemesini ortaya koyuyor. Kullandığım bu TR8 iğleri, özellikle Z ekseninde küçük yönlendiricilerde ve 3D yazıcılarda yaygın olarak kullanılmaktadır. Burada üzerinde çalışacağımız bazı kavramlara hakim olarak her türlü makineyi tasarlayabileceğinizi unutmayın.

Adım 1: Kullanılan Kaynaklar

  • 8 mm çapında ve 2 mm hatveli trapez mil
  • 8 mm çapında ve 8 mm hatveli trapez mil
  • 8x2 milli flanşlı kestane
  • 8x8 milli flanşlı kestane
  • 8 mm çaplı miller için rulmanlar
  • 10 mm çapında lineer silindirik kılavuz
  • 10 mm kılavuzlar için silindirik makaralı rulmanlar
  • 10 mm silindirik kılavuzlar için braketler
  • NEMA 17 Motorlar
  • Mil kaplinleri
  • Arduino Uno
  • Sürücü DRV8825
  • 4x4 matris klavye
  • Nokia 5110'u göster
  • Çeşitli plastik parçalar
  • Cıvata ve somun
  • Ahşap taban
  • Harici 12V güç kaynağı

Adım 2: İğler Hakkında - Bunlar Nelerdir?

İğler Hakkında - Bunlar Nelerdir?
İğler Hakkında - Bunlar Nelerdir?

Miller, vidalar gibi makinelerin elemanlarıdır. Yani, sürekli adımlardan oluşan düz çubuklardır. Doğrusal hareket ve konumlandırma gerektiren mekanizmalarda kullanılırlar. Yüksek çekme ve basma kuvvetleri uygulayabilir ve torku iletebilirler. Otomatik kilitleme ile harekete izin verirler. En yaygın alüminyum ve çelik olmak üzere farklı malzemelerden yapılabilirler.

Çinli firmalar trapez milleri ürettiği için bilinen somun cıvata yerine bu tür bir ürünü almanızı öneririm. Bunun nedeni, daha cazip fiyat ve iğrenç olduğunu düşündüğüm sürtünme.

Fotoğrafa en iyi mili koydum, bence bu döner bilyeli mil. Genellikle çok sert bir çelikten yapılır ve toplar kestanenin içinde onun etrafında döner. Mükemmel hassasiyetin yanı sıra, bu tür bir iş mili mekanizmaya zarar vermeden milyarlarca hareketi yeniden üretebildiğinden, dayanıklılığı da vurguluyorum. Burada kullandığımız daha ucuz bir seçenek trapez mildir.

3. Adım: Mil Hakkında - Tekli ve Bilyalı Dişler

Mil Hakkında - Tekli ve Bilyalı Dişler
Mil Hakkında - Tekli ve Bilyalı Dişler

Soldaki fotoğraftaki bilyalı miller, bilyelerin yuvarlandığı yarım daire biçimli kanallara sahiptir. Tek vidalı millere kıyasla nispeten daha pahalıdırlar ve düşük sürtünmeye sahiptirler, bu da çok daha yüksek bir verim (yuvarlanma sürtünmesi) sağlar.

Görüntünün sağ tarafındaki tek dişli miller genellikle yamuk profillere sahiptir, çünkü bu geometri eksenel yönde kuvvet uygulamak ve hareketin düzgün iletimi için daha uygundur. Nispeten ucuzdurlar ve devridaim yapan bilyalı iğlere kıyasla yüksek sürtünmeye sahiptirler, bu da düşük bir verime, yani kayma sürtünmesine yol açar.

4. Adım: Mil Hakkında - Uygulamalar

Mil Hakkında - Uygulamalar
Mil Hakkında - Uygulamalar

İğler, doğrusal hareketin gerekli olduğu herhangi bir mekanizmaya uygulanabilir. Endüstride makine ve proseslerde yaygın olarak kullanılmaktadırlar.

Bazı uygulamalar şunları içerir:

  • Kargo asansörleri
  • Presler
  • Çilek ve torna tezgahları
  • CNC Ekipmanları
  • Sarma Makinaları
  • 3D Yazıcılar
  • Lazer Kesim ve Kesim Ekipmanları
  • Endüstriyel işlemler
  • Konumlandırma ve doğrusal hareket sistemleri

Adım 5: Mil Hakkında - Parametreler

Mil Hakkında - Parametreler
Mil Hakkında - Parametreler

Bir mekanizma tasarlanırken dikkate alınması gereken bir iş milinin birkaç özelliği vardır. Çapına ve adımına ek olarak, basınç dayanımını, atalet momentini (dönme durumundaki değişime direnç), yapıcı malzemeyi, maruz kalacağı dönme hızını, çalışma yönünü (yatay) tanımak gerekir. veya dikey), uygulanan yük, diğerleri arasında.

Ancak, önceden oluşturulmuş mekanizmalara dayanarak, bu parametrelerin birçoğunu sezebiliriz.

Bazı ortak yararları tanıyalım. STEP ile başlayalım.

Adım 6: Mil Hakkında - Adım (yer değiştirme ve Hız)

Mil Hakkında - Adım (yer değiştirme ve Hız)
Mil Hakkında - Adım (yer değiştirme ve Hız)

Somunun her devirde kat ettiği uzunluğu belirler. Bu genellikle mm/devir cinsindendir.

Devir başına 2 mm'lik bir iş mili, iş milinin gerçekleştirdiği her dönüşte 2 mm'lik bir yer değiştirmeye neden olacaktır. Somunun lineer hızını etkileyecektir, çünkü dönme hızının artmasıyla birim zaman başına devir sayısı ve dolayısıyla kat edilen mesafe de artacaktır.

Devir başına 2 mm'lik bir dönüş 60 RPM'de (saniyede bir devir) dönüyorsa, somun saniyede 2 mm hareket edecektir.

Adım 7: Montaj

toplantı
toplantı
toplantı
toplantı

Montajımızda iki motorum var ve ekranlı klavyemiz hesap makinesine benziyor çünkü 3D yazıcıda onlar için bir kapak yaptım. Nokia ekranında aşağıdaki seçeneklere sahibiz:

F1: Hilal - Fuso mevcut konumdan belirlediğim konuma gider

F2: Azalan - Dönüş

F3: Hız - Darbe genişliğini değiştirebilir miyim

F4: ESC

Adım 8: Montaj - Malzemeler

Montaj - Malzemeler
Montaj - Malzemeler

A - 10mm Lineer Kılavuzlar

B - Adım 2 ve 8 mm'lik trapez miller

C - Sondaj Tabanı

D - Mil yatakları

E - Kılavuz tutucular

F - Kestane

G - Rulmanlar

H - Kaplinler

I - Motorlar

J - Çeşitli plastik parçalar (imleçler, motor braketleri, takozlar, klavye desteği ve ekran

Adım 9: Montaj - Adım 01

Montaj - Adım 01
Montaj - Adım 01

Tabanın (C) delinmesinin ardından iki motoru (I) monte ediyoruz. Onları sabitlemek için 3D yazıcıda (J) yapılan braketleri kullanıyoruz. Bu konumlandırma adımında vidaların hiçbirini sıkmayın. Bu, hizalama adımında gerekli ayarlamalara izin verecektir.

Adım 10: Montaj - Adım 02

Montaj - Adım 02
Montaj - Adım 02

Hala tabanın (C) delinmesini takiben, kılavuz rayları (E) ve yatakları (D) konumlandırın. Yatakların yüksekliklerini ayarlamak için kullanılan plastik şimin (J) detayı.

Adım 11: Montaj - Adım 03

Montaj - Adım 03
Montaj - Adım 03

Yatağı (G) somuna (F) bağlamak için basılı bir parça kullanarak bir imleç oluşturuyoruz. Biri sağ diğeri sol olmak üzere iki imleç kullandık. İşlevi, iş milinin neden olduğu yer değiştirmeyi belirlemek istediğimizde bir ölçekte konumu belirtmektir.

Adım 12: Montaj - Adım 04

Montaj - Adım 04
Montaj - Adım 04
Montaj - Adım 04
Montaj - Adım 04

Kılavuzu (A) ve mili (B) ilgili yataklarına (D) ve desteğine (E) motorun karşısına yerleştirin, ardından kılavuzu ve mili yatağa (G) ve kestanenin (F) içine ve milin ucuna da kuplörü (H) yerleştiriyoruz. Her ikisini de son noktalarına (karşı destek ve motor) ulaşana kadar alıyoruz.

Daha sonra ayarlamaya izin vermek için vidaları hafifçe sıkın. Kalan kılavuzu ve mili kullanarak prosedürü tekrarlayın. Tüm bileşenlerin konumlandırılması ile parçaların hizalanmasını gerçekleştirerek mekanik montaj aşamasını tamamlıyoruz.

Adım 13: Montaj - Elektronik

Montaj - Elektronik
Montaj - Elektronik
Montaj - Elektronik
Montaj - Elektronik
Montaj - Elektronik
Montaj - Elektronik

Basılı bir plastik tutucu kullanarak Nokia 5110 ekranını ve 4x4 matris tuş takımını sabitledik. Standın alt kısmında DRV8825 sürücüsü Arduino Uno bulunacak.

Tabandaki mevcut deliği kullanarak montajı sabitleriz.

Adım 14: Elektrik Şeması

Elektrik Şeması
Elektrik Şeması

Bağlantı şeması basittir. DRV8825 ve aynı iki 17 aynamız var, yani birine gönderdiğimiz aynı adım diğerine gidiyor. Değişen şu ki, motorlardan birinde 8 mm iğ ve diğerinde 2 mm iğ olması. O halde, 8 mm iğ ile ilkinin daha hızlı gittiği açıktır. Yine şemada ekran ve matris olması gereken 4x4 klavye var.

Adım 15: Kaynak Kodu

Kütüphanelerin dahil edilmesi ve nesnelerin oluşturulması

Burada benim yaptığım, StepDriver.h olan bir Lib var. 8825, 4988 ve ayrıca TB6600 sürücüleri için hazırlanmıştır. Bu adımda DRV8825 nesnesini, d1'i oluşturuyorum.

//Biblioteca yanıtları ve tecla que foi pressionada no teclado#include //Biblioteca yanıtları ve pelos graficos gösterimi #include //Biblioteca yanıtları gösterimi #include // Pino saatini yapılandırma // Ekran çıkışını yapılandırma // Serial (SCLK) // pin 5 - Seri veri çıkışı (DIN) // pin 4 - Veri/Komut seçimi (D/C) // pin 3 - LCD çip seçimi (CS/CE) // pin 2 - LCD sıfırlama (RST)) Adafruit_PCD8544 ekranı = Adafruit_PCD8544(6, 5, 4, 3, 2); //Biblioteca de motor de passo #include //Instancia veya DRV8825 DRV8825 d1 sürücüsü;

Sabitler ve global değişkenler

Kodun bu bölümünde, başka bir video derste (LINK KLAVYE) öğrettiğim matrisi ele alıyorum. Yine de, mesafe ve hızın yanı sıra Keypad nesnesinden bahsediyorum.

const bayt LINHAS = 4; // número de linhas, tecladoconst byte COLUNAS = 4; // teclado'daki tek sütun sayısı // uma matriz com os símbolos que deseja ser lido do teclado char SIMBOLOS[LINHAS][COLUNAS] = { {'A', '1', '2', '3'}, { 'B', '4', '5', '6'}, {'C', '7', '8', '9'}, {'D', 'c', '0', 'e '} }; bayt PINOS_LINHA[LINHAS] = {A2, A3, A4, A5}; //pinos que indicam as linhas do teclado byte PINOS_COLUNA[COLUNAS] = {0, 1, A0, A1}; //Teclado olarak pinos que indicam // Tuş Takımı, yanıtlama ve yakalama özelliği Tuş Takımı özelKeypad = Tuş takımı(makeKeymap(SIMBOLOS), PINOS_LINHA, PINOS_COLUNA, LINHAS, COLUNAS); //değişkenler, armazenar veya valor digitado char customKey'e göre değişir; işaretsiz uzun mesafe = 0; işaretsiz uzun hız = 2000;

Klavye okuma işlevi

Bu adımda, artan ve azalan baskıyı yapan ekrana atıfta bulunan kodumuz var.

//Funcao'nun yanıtları, u usuario pelo teclado do valor do valor ------------------------------------ ---unsigned uzun lerValor() { //Altmenüye girme, coleta os değer görüntüleme yok display.clearDisplay(); display.fillRect(0, 0, 84, 11, 2); display.setCursor(27, 2); display.setTextColor(BEYAZ); display.print("VALOR"); display.setTextColor(SİYAH); display.fillRect(0, 24, 21, 11, 2); display.setCursor(2, 26); display.setTextColor(BEYAZ); display.print("CLR"); display.setTextColor(SİYAH); display.setCursor(23, 26); display.print("LİMPAR"); display.fillRect(0, 36, 21, 11, 2); display.setCursor(5, 38); display.setTextColor(BEYAZ); display.print("F4"); display.setTextColor(SİYAH); display.setCursor(23, 38); display.print("VOLTAR"); display.setCursor(2, 14); display.display(); dize değeri = ""; char tecla = yanlış;

basılan tuşu bekleyen döngü

Burada Döngü programlamayı, yani değerleri girdiğiniz yeri açıklıyoruz.

//döngü sonsuz enquanto nao chamar o dönüş while (1) { tecla = customKeypad.getKey(); if (tecla) { switch (tecla) { //se teclas de 0 a 9 forem pressionadas durum '1': durum '2': durum '3': durum '4': durum '5': durum '6': durum '7': durum '8': durum '9': durum '0': değer += tecla; display.print(tecla); display.display(); kırmak; //Tecla CLR foi pressionada case 'c': //Limpa a string valor valor = ""; //Apaga veya valor do display.fillRect(2, 14, 84, 8, 0); display.setCursor(2, 14); display.display(); kırmak; //Tecla ENT foi pressionada case 'e': //Retorna veya valor return valor.toInt(); kırmak; //Se tecla F4 (ESC) foi pressionada case 'D': return -1; varsayılan: ara; } } //Limpa o char tecla tecla = yanlış; } }

Motor sürücü işlevi

Bu adımda "hareket" işlevi üzerinde çalışılır. Darbelerin sayısını ve yönünü alıyorum ve sonra bir "için" yapıyorum.

//Motor veya motora yanıt veren işlevler --------------------------------------void mover(imzasız) long pulsos, bool direcao) { for (unsigned long i = 0; i < pulsos; i++) { d1.motorMove(direcao); } }

kurmak ()

Şimdi ekranı ve sürücü yapılandırmasını hareket ettiriyorum ve hatta bunu kolaylaştırmak için sabitlemeyi kaynak kodun içine yerleştirdim. Belirli değerleri başlatırım ve ayarları oluşturan yöntemlerle ilgilenirim.

void setup() { //Konfigürasyon yapılandırması ---------------------------------------- -------- display.begin(); display.setContrast(50); display.clearDisplay(); display.setTextSize(1); display.setTextColor(SİYAH); // Sürücü DRV8825'i Yapılandırma ----------------------------------------- // pin GND - Etkinleştir (ENA) // pin 13 - M0 // pin 12 - M1 // pin 11 - M2 // pin 10 - Reset (RST) // pin 9 - Uyku (SLP) // pin 8 - Adım (STP)) // pin 7 - Yön (DIR) d1.pinConfig(99, 13, 12, 11, 10, 9, 8, 7); d1.uyku(DÜŞÜK); d1.sıfırla(); d1.stepPerMm(100); d1.stepPerRound(200); d1.stepConfig(1); d1.motionConfig(50, hızlanma, 5000); }

loop () - 1. kısım - Çizim menüsü

void loop() { //Escreve o Menu do Programa görüntüleme yok ----------------------------------- göster.clearDisplay(); display.fillRect(0, 0, 15, 11, 2); display.setCursor(2, 2); display.setTextColor(BEYAZ); display.print("F1"); display.setTextColor(SİYAH); display.setCursor(17, 2); display.print("HİLAL"); display.fillRect(0, 12, 15, 11, 2); display.setCursor(2, 14); display.setTextColor(BEYAZ); display.print("F2"); display.setTextColor(SİYAH); display.setCursor(17, 14); display.print("AZALMA"); display.fillRect(0, 24, 15, 11, 2); display.setCursor(2, 26); display.setTextColor(BEYAZ); display.print("F3"); display.setTextColor(SİYAH); display.setCursor(17, 26); display.print("VELOCIDADE");

loop () - Bölüm 2 - Çizim menüsü

display.fillRect(0, 36, 15, 11, 2); display.setCursor(2, 38); display.setTextColor(BEYAZ); display.print("F4"); display.setTextColor(SİYAH); display.setCursor(17, 38); display.print("ESC"); display.display(); bool esc = yanlış;

döngü () - Bölüm 3 - Koşu

// pressionada için enquanto a tecla F4 (ESC) nao while (!esc) { // teclado do tecla pressionada captura customKey = customKeypad.getKey(); //caso alguma tecla foi pressionada if (customKey) { //Trata a tecla apertada switch (customKey) { //Se tecla F1 foi pressionada case 'A': distancia = lerValor(); //Se tecla ESC foi pressionada if (distancia == -1) { esc = true; } else { //Escreve a tela "Movendo" görüntü yok display.clearDisplay(); display.fillRect(0, 0, 84, 11, 2); display.setCursor(21, 2); display.setTextColor(BEYAZ); display.print("MOVENDO"); display.setTextColor(SİYAH); display.setCursor(2, 14); display.print(uzaklık); display.print("Pass"); display.display();

döngü () - Bölüm 4 - Koşu

//Motor taşıyıcısını hareket ettirin(mesafe, LOW); //Volta ao menüsü esc = doğru; } kırmak; //Se tecla F2 foi pressionada case 'B': distancia = lerValor(); //Se tecla ESC foi pressionada if (distancia == -1) { esc = true; } else { //Escreve a tela "Movendo" görüntü yok display.clearDisplay(); display.fillRect(0, 0, 84, 11, 2); display.setCursor(21, 2); display.setTextColor(BEYAZ); display.print("MOVENDO"); display.setTextColor(SİYAH); display.setCursor(2, 14); display.print(uzaklık); display.print("Pass"); display.display();

döngü () - Bölüm 5 - Koşu

//Motor hareket ettiricisini hareket ettir(mesafe, YÜKSEK); //Volta ao menüsü esc = doğru; } kırmak; //Se tecla F3 foi pressionada case 'C': velocidade = lerValor(); if (velocidade == -1) { esc = true; } else { //Escreve a tela "Velocidade" görüntü yok display.clearDisplay(); display.fillRect(0, 0, 84, 11, 2); display.setCursor(12, 2); display.setTextColor(BEYAZ); display.print("VELOCIDADE"); display.setTextColor(SİYAH); display.setCursor(2, 14); display.print(velocidade); display.print(char(229)); display.print("s");

döngü () - Bölüm 6 - Koşu

display.fillRect(31, 24, 21, 11, 2); display.setCursor(33, 26); display.setTextColor(BEYAZ); display.println("Tamam!"); display.setTextColor(SİYAH); display.display(); //Motor için nova velocidade yapılandırması d1.motionConfig(50, velocidade, 5000); gecikme(2000); //Volta ao menüsü esc = doğru; } kırmak; //Tecla F4 (ESC) foi pressionada case 'D': //CLR foi pressionada case 'c': //Se tecla ENT foi pressionada case 'e': //Volta ao menu esc = true; varsayılan: ara; } } //Limpa o char customKey customKey = false; } }

Adım 16: Mil Hakkında - Makine Konfigürasyonları

Mil Hakkında - Makine Konfigürasyonları
Mil Hakkında - Makine Konfigürasyonları

Örneğin 3D yazıcılar ve yönlendiriciler gibi CNC makinelerinde, konumlandırma kontrolünden sorumlu programın, step motora verilen darbe sayısının bir fonksiyonu olarak hareketlerin nasıl gerçekleşeceğini bilmesi gerekir.

Adım motor sürücüsü mikro adımların uygulanmasına izin veriyorsa, üretilen yer değiştirmenin hesaplanmasında bu konfigürasyon dikkate alınmalıdır.

Örneğin, devir başına 200 adımlı bir motor 1/16'ya ayarlanmış bir sürücüye bağlıysa, iş milinin tek bir devri için 16 x 200 darbe, yani her devir için 3200 darbe gerekecektir. Bu iş mili devir başına 2 mm'lik bir adıma sahipse, somunun 2 mm hareket etmesi için sürücüde 3200 darbe alacaktır.

Aslında, yazılım denetleyicileri genellikle bu oranı belirtmek için "milimetre başına darbe sayısı" veya "adım / mm" gibi bir neden kullanır.

Adım 17: Marlin

marlin
marlin

Örneğin Marlin'de @section hareket bölümünde görüyoruz:

/ **

* Birim Başına Varsayılan Eksen Adımları (adım / mm)

* M92 ile geçersiz kıl

* X, Y, Z, E0 [, E1 [, E2 [, E3 [, E4]

* /

#define DEFAULT_AXIS_STEPS_PER_UNIT {80, 80, 3200, 100}

Bu örnekte, X ve Y eksenlerinin 1 mm hareket etmek için 80 darbe doğruluğuna sahip olduğu, Z'nin 3200 darbeye ve ekstrüder E0'ın 100 darbeye ihtiyacı olduğu sonucuna varabiliriz.

Adım 18: GRBL

GRBL
GRBL

Aşağıda GRBL yapılandırma komutlarını görüyoruz. 100 $ komutu ile X ekseninde bir milimetrelik ofset oluşturmak için gereken darbe sayısını ayarlayabiliriz.

Aşağıdaki örnekte mevcut değerin mm başına 250 darbe olduğunu görebiliriz.

Y ve Z eksenleri sırasıyla 101$ ve 102$ olarak ayarlanabilir.

Önerilen: