Cuprins:

Arduino Uno cu arbore și motor cu pas: 19 pași
Arduino Uno cu arbore și motor cu pas: 19 pași

Video: Arduino Uno cu arbore și motor cu pas: 19 pași

Video: Arduino Uno cu arbore și motor cu pas: 19 pași
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Iulie
Anonim
Image
Image
Resurse utilizate
Resurse utilizate

Astăzi vom vorbi despre un subiect foarte important în mecanică și mecatronică: elementele mașinilor. În acest articol, vom aborda în mod specific axele, prezentând câteva caracteristici și aplicații interesante. Totuși, vom demonstra câteva moduri de a calcula mișcarea cauzată de un fus și de a prezenta un ansamblu de testare.

Prin urmare, am făcut ansamblul de mai jos, care expune avansul unui fus de 2mm și altul de 8mm. Acest ax TR8 pe care îl folosesc este utilizat în mod obișnuit în routere mici și imprimante 3D, în special pe axa Z. Amintindu-vă că prin stăpânirea unor concepte pe care le vom lucra aici, veți putea proiecta orice tip de mașină.

Pasul 1: Resurse utilizate

  • Fus trapezoidal de 8 mm în diametru și pas de 2 mm
  • Fus trapezoidal de 8 mm în diametru și 8 mm în pas
  • Castan cu flanș 8x2
  • Castan cu flanș 8x8
  • Rulmenți pentru arbori cu diametrul de 8 mm
  • Ghidaj cilindric liniar cu diametrul de 10 mm
  • Rulmenți cu role cilindrice pentru ghidaje de 10 mm
  • Suporturi pentru ghidaje cilindrice de 10 mm
  • NEMA 17 Motoare
  • Cuplaje pentru arbori
  • Arduino Uno
  • Driver DRV8825
  • Tastatură matricială 4x4
  • Afișați Nokia 5110
  • Piese diverse din plastic
  • Suruburi si piulite
  • Baza din lemn
  • Alimentare externă de 12V

Pasul 2: Despre arbori - Ce sunt?

Despre fusuri - Ce sunt?
Despre fusuri - Ce sunt?

Fusele sunt elemente ale mașinilor, cum ar fi șuruburile. Adică sunt bare drepte formate din fire de trepte continue. Sunt utilizate în mecanisme care necesită mișcare și poziționare liniară. Ele pot exercita forțe de tracțiune și compresiune ridicate și pot transmite cuplu. Permit deplasarea cu blocare automată. Pot fi construite din diferite materiale, fiind cele mai comune aluminiu și oțel.

Întrucât companiile chinezești fabrică fusuri trapezoidale, v-aș sugera să obțineți acest tip de produs în locul binecunoscutului șurub de piuliță. Acest lucru se datorează prețului mai atractiv și dragului, pe care îl consider hidos.

În fotografie am pus cel mai bun fus care are, după părerea mea, fusul cu bile recirculante. De obicei este fabricat dintr-un oțel foarte dur, iar bilele se învârt în jurul său, în interiorul castanului. Pe lângă precizia excelentă, subliniez și durabilitatea, deoarece acest tip de fus poate reproduce miliarde de mișcări fără a deteriora mecanismul. O opțiune mai ieftină, care este cea pe care o folosim aici, este fusul trapezoidal.

Pasul 3: Despre arbori - fire simple și bilă

Despre arbori - fire simple și bilă
Despre arbori - fire simple și bilă

Fusele cu bile, din fotografia din stânga, au canale semicirculare pe care se rostogolesc bilele. Sunt relativ mai scumpe și au o frecare redusă în comparație cu fusurile cu un singur șurub, ceea ce duce la un randament mult mai mare (frecare la rulare).

Fusele cu un singur filet din partea dreaptă a imaginii au de obicei profile trapezoidale, deoarece această geometrie este mai potrivită pentru a aplica forțe în direcția axială și transmiterea lină a mișcării. Acestea sunt relativ ieftine și au o frecare ridicată în comparație cu axele cu bile recirculante, ducând la un randament scăzut, adică la frecare la alunecare.

Pasul 4: Despre arbori - Aplicații

Despre arbori - Aplicații
Despre arbori - Aplicații

Fusele pot fi aplicate oricărui mecanism în care este necesară mișcarea liniară. Sunt utilizate pe scară largă în industrie în mașini și procese.

Unele aplicații includ:

  • Ascensoare de marfă
  • Prese
  • Căpșuni și strunguri
  • Echipamente CNC
  • Mașini de ambalat
  • Imprimante 3D
  • Echipament de tăiere și tăiere cu laser
  • Procese industriale
  • Sisteme de poziționare și mișcare liniară

Pasul 5: Despre arbori - Parametri

Despre arbori - Parametri
Despre arbori - Parametri

Există mai multe caracteristici ale unui fus care trebuie luate în considerare la proiectarea unui mecanism. În plus față de diametrul și pasul său, este necesar să se recunoască rezistența la compresiune, momentul său de inerție (rezistența la schimbare în starea sa de rotație), materialul constructiv, viteza de rotație la care va fi supus, direcția de funcționare (orizontală) sau vertical), sarcina aplicată, printre altele.

Dar, pe baza unor mecanisme deja construite, putem intui mai mulți dintre acești parametri.

Să recunoaștem un bine comun. Să începem cu STEP.

Pasul 6: Despre arbori - Pas (deplasare și viteză)

Despre arbori - Pas (deplasare și viteză)
Despre arbori - Pas (deplasare și viteză)

Determină lungimea parcursă de piuliță la fiecare rotație. Aceasta este de obicei în mm / rotație.

Un fus de 2 mm pe rotație va determina o deplasare de 2 mm la fiecare rotire pe care o efectuează fusul. Va influența viteza liniară a piuliței, deoarece odată cu creșterea vitezei de rotație, numărul de rotații pe unitate de timp va crește și, prin urmare, și distanța parcursă.

Dacă o rotație de 2 mm pe rotație se rotește la 60 RPM (o rotație pe secundă), piulița se va deplasa cu 2 mm pe secundă.

Pasul 7: Asamblare

Asamblare
Asamblare
Asamblare
Asamblare

În ansamblul nostru, am două motoare și tastatura noastră cu afișajul, care semănau cu un calculator, pentru că le-am făcut o copertă în imprimanta 3D. Pe ecranul Nokia avem următoarele opțiuni:

F1: Crescent - Fuso trece de la poziția curentă la poziția pe care o determin

F2: Descrescător - Întoarcere

F3: Viteză - Pot modifica lățimea impulsului

F4: ESC

Pasul 8: Montare - Materiale

Montare - Materiale
Montare - Materiale

A - Ghidaje liniare de 10 mm

B - Fusuri trapezoidale de treptele 2 și 8mm

C - Baza de foraj

D - Rulmenți pentru arbori

E - Titulari de ghid

F - Castane

G - Rulmenți

H - Cuplaje

I - Motoare

J - Diverse piese din plastic (cursoare, suporturi pentru motor, pene, suport pentru tastatură și afișaj

Pasul 9: Asamblare - Pasul 01

Asamblare - Pasul 01
Asamblare - Pasul 01

În urma găuririi bazei (C), asamblăm cele două motoare (I). Pentru a le fixa, folosim paranteze realizate în imprimanta 3D (J). Nu strângeți niciunul dintre șuruburi în această etapă de poziționare. Acest lucru va permite ajustările necesare în etapa de aliniere.

Pasul 10: Asamblare - Pasul 02

Asamblare - Pasul 02
Asamblare - Pasul 02

Urmând în continuare găurirea bazei (C), poziționați șinele de ghidare (E) și rulmenții (D). Detaliu pentru colierul din plastic (J) utilizat pentru reglarea înălțimilor rulmenților.

Pasul 11: Montare - Pasul 03

Montare - Pasul 03
Montare - Pasul 03

Creăm un cursor folosind o parte tipărită pentru a conecta rulmentul (G) la piulița (F). Am folosit două cursoare, unul dreapta altul stânga. Funcția sa este de a indica poziția pe o scală ori de câte ori dorim să determinăm deplasarea cauzată de fus.

Pasul 12: Asamblare - Pasul 04

Asamblare - Pasul 04
Asamblare - Pasul 04
Asamblare - Pasul 04
Asamblare - Pasul 04

Introduceți ghidajul (A) și axul (B) în lagărul respectiv (D) și suportul (E), opus motorului, apoi introduceți ghidajul și axul în lagărul (G) și castanul (F) și la vârful fusului introducem și cuplajul (H). Îi luăm pe amândoi până când ajung la ultimele lor puncte (opus sprijin și motor).

Strângeți ușor șuruburile pentru a permite o reglare ulterioară. Repetați procedura folosind ghidajul și axul rămase. Cu toate componentele poziționate, executăm alinierea pieselor, terminând etapa de asamblare mecanică.

Pasul 13: Montare - Electronică

Montare - Electronică
Montare - Electronică
Montare - Electronică
Montare - Electronică
Montare - Electronică
Montare - Electronică

Folosind un suport de plastic imprimat, am securizat afișajul Nokia 5110 și o tastatură cu matrice 4x4. În spațiul inferior al standului se va afla Arduino Uno, driverul DRV8825.

Folosind găurile disponibile în bază, fixăm ansamblul.

Pasul 14: Schema electrică

Schema electrică
Schema electrică

Diagrama de cablare este simplă. Avem DRV8825 și aceleași două 17 oglinzi, adică același pas pe care îl trimitem unuia merge la altul. Ceea ce se schimbă este că într-unul dintre motoare am un fus de 8 mm și în celălalt un fus de 2 mm. Evident, atunci, că primul, cu fus de 8 mm, merge mai repede. În diagramă sunt încă afișajul și tastatura 4x4, care trebuie să fie matricială.

Pasul 15: Cod sursă

Includerea de biblioteci și crearea de obiecte

Avem aici un Lib pe care l-am făcut, care este StepDriver.h. Este pregătit pentru driverele 8825, 4988 și, de asemenea, pentru TB6600. Creez în acest pas obiectul DRV8825, d1.

// Biblioteca responsabilă pentru a captura o tastă care a fost presionată fără tastatură # include // Biblioteca responsabilă pentru pelos graficos do display #include // Biblioteca responsabilă pentru comunicarea pe ecran #include // Configurarea pinilor do Display // pin 6 - Serial clock out (SCLK) // pinul 5 - Ieșire date seriale (DIN) // pinul 4 - Selectare date / comenzi (D / C) // pinul 3 - Selectare chip LCD (CS / CE) // pinul 2 - resetare LCD (RST)) Adafruit_PCD8544 display = Adafruit_PCD8544 (6, 5, 4, 3, 2); // Biblioteca de motor de pas #include // Instancia o driver DRV8825 DRV8825 d1;

Constantele și variabilele globale

În această parte a codului tratez matricea, pe care am predat-o într-o altă lecție video (LINK KEYBOARD). Totuși, vorbesc despre obiectul tastaturii, pe lângă distanță și viteză.

octet const LINHAS = 4; // numărul de linii do tecladoconst byte COLUNAS = 4; // număr de coloane do teclado // define uma matriz com os símbolos that 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 '}}; octet PINOS_LINHA [LINHAS] = {A2, A3, A4, A5}; // pinos que indicam as linhas do teclado byte PINOS_COLUNA [COLUNAS] = {0, 1, A0, A1}; // pinos que indicam as colunas do teclado // instancia de Keypad, responsável por capturar a tecla pressureada Keypad customKeypad = Keypad (makeKeymap (SIMBOLOS), PINOS_LINHA, PINOS_COLUNA, LINHAS, COLUNAS); // variáveis resposnsáveis por armazenar o valor digitado char customKey; unsigned long distance = 0; unsigned long velocidade = 2000;

Funcția de citire a tastaturii

În acest pas avem codul care se referă la afișaj, care funcționează imprimarea crescândă și descrescătoare.

// Funcao responsavel por ler o valor do user pelo teclado -------------------------------------- --- unsigned long lerValor () {// Escreve o submenu care coleta os valores no display display.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (27, 2); display.setTextColor (ALB); display.print ("VALOR"); display.setTextColor (NEGRU); display.fillRect (0, 24, 21, 11, 2); display.setCursor (2, 26); display.setTextColor (ALB); display.print ("CLR"); display.setTextColor (NEGRU); display.setCursor (23, 26); display.print ("LIMPAR"); display.fillRect (0, 36, 21, 11, 2); display.setCursor (5, 38); display.setTextColor (ALB); display.print ("F4"); display.setTextColor (NEGRU); display.setCursor (23, 38); display.print ("VOLTAR"); display.setCursor (2, 14); display.display (); String valor = ""; char tecla = false;

buclând în așteptarea tastei apăsate

Aici explicăm programarea Loop, adică unde introduceți valorile.

// Loop infinito enquanto nao chamar o return while (1) {tecla = customKeypad.getKey (); if (tecla) {switch (tecla) {// Se teclas de 0 a 9 forem pressionadas case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': valor + = tecla; display.print (tecla); display.display (); pauză; // Se tecla CLR a fost presionată case 'c': // Limpa a string valor valor = ""; // Apaga o valor do display display.fillRect (2, 14, 84, 8, 0); display.setCursor (2, 14); display.display (); pauză; // Se tecla ENT a fost presionat case 'e': // Retorna o valor return valor.toInt (); pauză; // Se tecla F4 (ESC) a fost presiune case 'D': return -1; implicit: pauză; }} // Limpa o char tecla tecla = false; }}

Funcția de acționare a motorului

Funcția „mutare” este lucrată la acest pas. Primesc numărul de impulsuri și direcția și apoi fac un „pentru”.

// Funcao responsavel por mover o motor -------------------------------------- void mover (nesemnat long pulsos, bool direcao) {for (unsigned long i = 0; i <pulsos; i ++) {d1.motorMove (direcao); }}

înființat ()

Acum mut ecranul și configurația driverului și chiar pun fixarea în interiorul codului sursă pentru a ușura. Inițializez anumite valori și mă ocup de metodele care generează setările.

void setup () {// Configurarea afișării ---------------------------------------- -------- display.begin (); display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (NEGRU); // Configurare driver DRV8825 ----------------------------------------- // pin GND - Activare (ENA) // pin 13 - M0 // pin 12 - M1 // pin 11 - M2 // pin 10 - Reset (RST) // pin 9 - Sleep (SLP) // pin 8 - Step (STP) // pinul 7 - Direction (DIR) d1.pinConfig (99, 13, 12, 11, 10, 9, 8, 7); d1.somn (LOW); d1.reset (); d1.stepPerMm (100); d1.stepPerRound (200); d1.stepConfig (1); d1.motionConfig (50, viteza, 5000); }

loop () - prima parte - Meniu desen

void loop () {// Screve o Menu do Program nu se afișează ----------------------------------- afișează.clearDisplay (); display.fillRect (0, 0, 15, 11, 2); display.setCursor (2, 2); display.setTextColor (ALB); display.print ("F1"); display.setTextColor (NEGRU); display.setCursor (17, 2); display.print ("CRESCENTE"); display.fillRect (0, 12, 15, 11, 2); display.setCursor (2, 14); display.setTextColor (ALB); display.print ("F2"); display.setTextColor (NEGRU); display.setCursor (17, 14); display.print ("DECRESCENTE"); display.fillRect (0, 24, 15, 11, 2); display.setCursor (2, 26); display.setTextColor (ALB); display.print ("F3"); display.setTextColor (NEGRU); display.setCursor (17, 26); display.print ("VELOCIDADE");

loop () - Partea 2 - Meniu desen

display.fillRect (0, 36, 15, 11, 2); display.setCursor (2, 38); display.setTextColor (ALB); display.print ("F4"); display.setTextColor (NEGRU); display.setCursor (17, 38); display.print ("ESC"); display.display (); bool esc = fals;

loop () - Partea 3 - Rularea

// Loop enquanto a tecla F4 (ESC) nao for pressionada while (! Esc) {// captura a tecla pressionada do teclado 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 a fost presionat if (distancia == -1) {esc = true; } else {// Escreve a tela "Movendo" no display display.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (21, 2); display.setTextColor (ALB); display.print ("MOVENDO"); display.setTextColor (NEGRU); display.setCursor (2, 14); display.print (distancia); display.print ("Passos"); display.display ();

loop () - Partea 4 - Rularea

// Mutare o motor mover (distancia, LOW); // Volta ao menu esc = true; } pauză; // Se tecla F2 foi pressionada case 'B': distancia = lerValor (); // Se tecla ESC a fost presionat if (distancia == -1) {esc = true; } else {// Escreve a tela "Movendo" no display display.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (21, 2); display.setTextColor (ALB); display.print ("MOVENDO"); display.setTextColor (NEGRU); display.setCursor (2, 14); display.print (distancia); display.print ("Passos"); display.display ();

loop () - Partea 5 - Rularea

// Move o motor mover (distancia, HIGH); // Volta ao menu esc = true; } pauză; // Se tecla F3 a fost presionat case 'C': viteza = lerValor (); if (velocidade == -1) {esc = true; } else {// Escreve a tela "Velocidade" fără afișaj display.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (12, 2); display.setTextColor (ALB); display.print ("VELOCIDADE"); display.setTextColor (NEGRU); display.setCursor (2, 14); display.print (velocidade); display.print (char (229)); display.print ("s");

loop () - Partea 6 - Rularea

display.fillRect (31, 24, 21, 11, 2); display.setCursor (33, 26); display.setTextColor (ALB); display.println ("OK!"); display.setTextColor (NEGRU); display.display (); // Configura noua viteza al motorului d1.motionConfig (50, viteza, 5000); întârziere (2000); // Volta ao menu esc = true; } pauză; // Se tecla F4 (ESC) foi pressionada case 'D': // Se tecla CLR foi pressionada case 'c': // Se tecla ENT foi pressionada case 'e': // Volta ao menu esc = true; implicit: pauză; }} // Limpa o char customKey customKey = false; }}

Pasul 16: Despre arbori - configurații ale mașinii

Despre arbori - configurații ale mașinii
Despre arbori - configurații ale mașinii

În mașinile CNC, cum ar fi imprimantele 3D și routerele, de exemplu, programul responsabil pentru controlul poziționării trebuie să știe cum vor avea loc mișcările în funcție de numărul de impulsuri date motorului pas cu pas.

Dacă driverul motorului pas cu pas permite aplicarea de micro-pași, această configurație trebuie luată în considerare la calcularea deplasării produse.

De exemplu, dacă un motor de 200 de pași pe rotație este conectat la un driver setat la 1/16, atunci vor fi necesare 16 x 200 de impulsuri pentru o singură rotație a fusului, adică 3200 de impulsuri pentru fiecare rotație. Dacă acest arbore are un pas de 2 mm pe rotație, va fi nevoie de 3200 de impulsuri în driver pentru ca piulița să se miște 2 mm.

De fapt, controlerele software folosesc adesea un motiv pentru a specifica acest raport, „numărul de impulsuri pe milimetru” sau „trepte / mm”.

Pasul 17: Marlin

Marlin
Marlin

În Marlin, de exemplu, vedem în secțiunea @section motion:

/ **

* Pași prestabiliti pe unitate (pași / mm)

* Înlocuiți cu M92

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

* /

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

În acest exemplu, putem concluziona că axele X și Y au o precizie de 80 de impulsuri pentru a se deplasa 1 mm, în timp ce Z are nevoie de 3200 de impulsuri, iar extruderul E0 are nevoie de 100.

Pasul 18: GRBL

GRBL
GRBL

Mai jos vedem comenzile de configurare GRBL. Cu comanda de 100 USD, putem ajusta numărul de impulsuri necesare pentru a provoca un decalaj de un milimetru pe axa X.

În exemplul de mai jos putem vedea că valoarea curentă este de 250 impulsuri pe mm.

Axele Y și Z pot fi setate respectiv 101 USD și 102 USD.

Recomandat: