Taula de continguts:

Arduino Uno amb eix i motor de pas: 19 passos
Arduino Uno amb eix i motor de pas: 19 passos

Vídeo: Arduino Uno amb eix i motor de pas: 19 passos

Vídeo: Arduino Uno amb eix i motor de pas: 19 passos
Vídeo: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, De novembre
Anonim
Image
Image
Recursos utilitzats
Recursos utilitzats

Avui parlarem d’un tema molt important en mecànica i mecatrònica: els elements de les màquines. En aquest article, tractarem específicament els eixos, amb algunes funcions i aplicacions interessants. Tot i així, demostrarem algunes maneres de calcular el moviment provocat per un eix i presentar un conjunt de prova.

Per tant, he fet el conjunt següent, que exposa l'avanç d'un eix de 2 mm i un altre de 8 mm. Aquests fusos TR8 que estic utilitzant s’utilitzen habitualment en encaminadors petits i impressores 3D, especialment a l’eix Z. Recordant que, dominant alguns conceptes que treballarem aquí, podreu dissenyar qualsevol tipus de màquina.

Pas 1: recursos utilitzats

  • Eix trapezoïdal de 8 mm de diàmetre i pas de 2 mm
  • Eix trapezoïdal de 8 mm de diàmetre i 8 mm de pas
  • Fus de castanyer de 8x2 amb brida
  • Fus de castanyer de 8x8 amb brida
  • Rodaments per eixos de 8 mm de diàmetre
  • Guia cilíndrica lineal de 10 mm de diàmetre
  • Rodaments de rodets cilíndrics per a guies de 10 mm
  • Suports per a guies cilíndriques de 10 mm
  • NEMA 17 Motors
  • Acoblaments d'eix
  • Arduino Uno
  • Controlador DRV8825
  • Teclat de matriu 4x4
  • Pantalla Nokia 5110
  • Peces de plàstic diverses
  • Cargols i femelles
  • Base de fusta
  • Alimentació externa de 12V

Pas 2: sobre els eixos: què són?

Quant als eixos: què són?
Quant als eixos: què són?

Els eixos són elements de les màquines, com ara els cargols. És a dir, són barres rectes formades per fils de passos continus. S'utilitzen en mecanismes que requereixen moviment i posicionament lineals. Poden exercir elevades forces de tracció i compressió i transmetre parell. Permeten el moviment amb bloqueig automàtic. Es poden construir amb diferents materials, sent l’alumini i l’acer més comuns.

Com que les empreses xineses fabriquen eixos trapezoïdals, us suggeriria que obtingueu aquest tipus de producte en lloc del conegut pern de rosca. Això es deu al preu més atractiu i a l’arrossegament, que considero horrible.

A la foto he posat el millor eix que té, al meu entendre, que és el fus de bola de recirculació. Normalment està fet d’un acer molt dur i les boles giren al seu voltant, dins de la castanya. A més de la precisió excel·lent, també destaco la durabilitat, ja que aquest tipus de fus pot reproduir milers de milions de moviments sense danyar el mecanisme. Una opció més barata, que és la que fem servir aquí, és el fus trapezoïdal.

Pas 3: Quant als eixos: fils individuals i boles

Quant als eixos: fils individuals i de bola
Quant als eixos: fils individuals i de bola

Els eixos de boles, a la foto de l’esquerra, tenen canals semicirculars per on roden les boles. Són relativament més cars i tenen una fricció baixa en comparació amb els cargols d’un sol cargol, cosa que comporta un rendiment molt més elevat (fricció de laminació).

Els eixos de rosca simple del costat dret de la imatge solen tenir perfils trapezoïdals, ja que aquesta geometria és més adequada per aplicar forces en la direcció axial i una transmissió suau del moviment. Són relativament econòmics i tenen una fricció elevada en comparació amb els fusos de bola de recirculació, cosa que comporta un rendiment baix, és a dir, fricció de lliscament.

Pas 4: Quant als eixos: aplicacions

Quant als eixos: aplicacions
Quant als eixos: aplicacions

Els eixos es poden aplicar a qualsevol mecanisme on es requereixi un moviment lineal. S’utilitzen àmpliament en la indústria en maquinària i processos.

Algunes aplicacions inclouen:

  • Elevadors de càrrega
  • Premses
  • Maduixes i torns
  • Equips CNC
  • Embaladores
  • Impressores 3D
  • Equips de tall i tall per làser
  • Processos industrials
  • Sistemes de posicionament i moviment lineal

Pas 5: Quant als eixos: paràmetres

Quant als eixos: paràmetres
Quant als eixos: paràmetres

Hi ha diverses característiques d’un fus que cal tenir en compte a l’hora de dissenyar un mecanisme. A més del seu diàmetre i pas, cal reconèixer la seva resistència a la compressió, el seu moment d’inèrcia (resistència al canvi en el seu estat de rotació), el material constructiu, la velocitat de rotació a la qual serà sotmès, el sentit de funcionament (horitzontal) o vertical), la càrrega aplicada, entre d'altres.

Però, basant-nos en mecanismes ja construïts, podem intuir diversos d’aquests paràmetres.

Reconeixem algun bé comú. Comencem per STEP.

Pas 6: Quant als eixos: pas (desplaçament i velocitat)

Quant als eixos: pas (desplaçament i velocitat)
Quant als eixos: pas (desplaçament i velocitat)

Determina la longitud recorreguda per la femella a cada volta. Això sol ser en mm / revolució.

Un eix de 2 mm per volta provocarà un desplaçament de 2 mm a cada gir que realitzi el fus. Influirà en la velocitat lineal de la femella, ja que amb l’augment de la velocitat de rotació augmentarà el nombre de revolucions per unitat de temps i, en conseqüència, la distància recorreguda també.

Si un gir de 2 mm per revolució gira a 60 RPM (una volta per segon), la femella es mourà a 2 mm per segon.

Pas 7: Muntatge

muntatge
muntatge
muntatge
muntatge

Al nostre muntatge, tinc dos motors i el teclat amb la pantalla, que semblaven una calculadora, perquè els vaig fer una tapa a la impressora 3D. A la pantalla de Nokia tenim les opcions següents:

F1: Crescent - Fuso va de la posició actual a la posició que determino

F2: Descendent - Gir

F3: Velocitat: puc canviar l'amplada del pols

F4: ESC

Pas 8: Muntatge: materials

Muntatge - Materials
Muntatge - Materials

Guies lineals A - 10 mm

B - Eixos trapezoïdals dels passos 2 i 8mm

C - Base de perforació

D - Rodaments per eixos

E - Titulars de guia

F - Castanyes

G - Rodaments

H - Acoblaments

I - Motors

J - Diverses peces de plàstic (cursors, suports del motor, falques, suport del teclat i pantalla)

Pas 9: Muntatge - Pas 01

Muntatge - Pas 01
Muntatge - Pas 01

Després del forat de la base (C), muntem els dos motors (I). Per subjectar-los, fem servir claudàtors fabricats a la impressora 3D (J). No estrenyiu cap dels cargols en aquest pas de posicionament. Això permetrà fer els ajustos necessaris al pas d'alineació.

Pas 10: Muntatge - Pas 02

Muntatge - Pas 02
Muntatge - Pas 02

Seguint el forat de la base (C), col·loqueu els rails de guia (E) i els coixinets (D). Detall de la calçada de plàstic (J) que s’utilitza per ajustar les alçades dels coixinets.

Pas 11: muntatge: pas 03

Muntatge: pas 03
Muntatge: pas 03

Creem un cursor mitjançant una part impresa per connectar el coixinet (G) a la femella (F). Hem utilitzat dos cursors, un a la dreta i l’altre a l’esquerra. La seva funció és indicar la posició en una escala sempre que volem determinar el desplaçament causat per l’eix.

Pas 12: Muntatge: pas 04

Muntatge: pas 04
Muntatge: pas 04
Muntatge: pas 04
Muntatge: pas 04

Introduïu la guia (A) i l’eix (B) al seu coixinet respectiu (D) i el suport (E), oposats al motor i, a continuació, introduïu la guia i l’eix al coixinet (G) i el castany (F) i punta de l'eix també inserim l'acoblador (H). Els agafem tots dos fins que arriben als seus punts finals (suport i motor oposats).

Estrenyiu lleugerament els cargols per permetre un ajust posterior. Repetiu el procediment amb la guia i el fus restants. Amb tots els components posicionats, realitzem l'alineació de les peces, acabant l'etapa de muntatge mecànic.

Pas 13: Muntatge: electrònica

Muntatge: electrònica
Muntatge: electrònica
Muntatge: electrònica
Muntatge: electrònica
Muntatge: electrònica
Muntatge: electrònica

Amb un suport de plàstic imprès, vam assegurar la pantalla Nokia 5110 i un teclat de matriu 4x4. A l'espai inferior de l'estand residirà l'Arduino Uno, el controlador DRV8825.

Utilitzant la perforació disponible a la base, fixem el conjunt.

Pas 14: Esquema elèctric

Esquema elèctric
Esquema elèctric

El diagrama de cablejat és senzill. Tenim el DRV8825 i els mateixos 17 miralls, és a dir, el mateix pas que enviem a un va a un altre. El que canvia és que en un dels motors tinc un eix de 8 mm i en l’altre un eix de 2 mm. És evident, doncs, que el primer, amb eix de 8 mm, va més ràpid. Encara al diagrama hi ha la pantalla i el teclat 4x4, que ha de ser matricial.

Pas 15: codi font

Inclusió de biblioteques i creació d'objectes

Tenim aquí un Lib que he fet, que és StepDriver.h. Està preparat per als controladors 8825, 4988 i també per als TB6600. Creo en aquest pas l’objecte DRV8825, el d1.

// Biblioteca responsable per capturar a una tecla que va ser pressionada sense teclat # include // Biblioteca responsable pelos grafics do display #include // Biblioteca responsável pela comunicacao do display #include // Configuracao de pinos do Display // pin 6 - Serial clock out (SCLK) // pin 5 - Sortida de dades serials (DIN) // pin 4 - Selecció de dades / ordres (D / C) // pin 3 - Selecció de xip LCD (CS / CE) // pin 2 - Restabliment de LCD (RST)) Adafruit_PCD8544 display = Adafruit_PCD8544 (6, 5, 4, 3, 2); // Biblioteca de motor de passo #include // Instancia o driver DRV8825 DRV8825 d1;

Constants i variables globals

En aquesta part del codi tracto la matriu, que vaig ensenyar en una altra lliçó de vídeo (TECLAT ENLLAÇ). Tot i això, estic parlant de l’objecte del teclat, a més de la distància i la velocitat.

byte const LINHAS = 4; // número de línies do tecladoconst byte COLUNAS = 4; // número de colunas do teclado // define 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 '}}; byte 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 per capturar a tecla pressionada Keypad customKeypad = Keypad (makeKeymap (SIMBOLOS), PINOS_LINHA, PINOS_COLUNA, LINHAS, COLUNAS); // variáveis resposnsáveis per armazenar o valor digitado char customKey; unsigned long distance = 0; velocitat llarga sense signar = 2000;

Funció de lectura del teclat

En aquest pas tenim el codi que fa referència a la pantalla, que treballa la impressió creixent i decreixent.

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

bucle esperant la tecla premuda

Aquí expliquem la programació de bucle, és a dir, on introduïu els valors.

// Loop infinito enquanto nao chamar o return while (1) {tecla = customKeypad.getKey (); if (tecla) {switch (tecla) {// Se teclas de 0 a 9 forem pressionades case '1': case '2': case '3': case '4': case '5': case '6': cas '7': cas '8': cas '9': cas '0': valor + = tecla; display.print (tecla); display.display (); trencar; // Se tecla CLR foi pressionada 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 (); trencar; // Se tecla ENT foi pressionada case 'e': // Retorna o valor return valor.toInt (); trencar; // Se tecla F4 (ESC) va ser pressionada case 'D': return -1; per defecte: trencar; }} // Limpa o char tecla tecla = false; }}

Funció d'accionament del motor

La funció "moure" es treballa en aquest pas. Rebo el nombre de polsos i la direcció i després faig un "per".

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

setup ()

Ara moc la pantalla i la configuració del controlador, i fins i tot he posat la fixació dins del codi font per facilitar-la. Inicialitzo certs valors i tracto els mètodes que generen la configuració.

void setup () {// Configuració de la pantalla ---------------------------------------- -------- display.begin (); display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (NEGRE); // Configuració del controlador DRV8825 ----------------------------------------- // pin GND - Activa (ENA) // pin 13 - M0 // pin 12 - M1 // pin 11 - M2 // pin 10 - Restableix (RST) // pin 9 - Sleep (SLP) // pin 8 - Step (STP) // pin 7 - Direction (DIR) d1.pinConfig (99, 13, 12, 11, 10, 9, 8, 7); d1.sleep (BAIX); d1.reset (); d1.stepPerMm (100); d1.stepPerRound (200); d1.stepConfig (1); d1.motionConfig (50, velocitat, 5000); }

loop () - 1a part - Menú dibuix

void loop () {// Escreve o Menu do Programa no display ----------------------------------- display.clearDisplay (); display.fillRect (0, 0, 15, 11, 2); display.setCursor (2, 2); display.setTextColor (BLANC); display.print ("F1"); display.setTextColor (NEGRE); display.setCursor (17, 2); display.print ("CRESCENTE"); display.fillRect (0, 12, 15, 11, 2); display.setCursor (2, 14); display.setTextColor (BLANC); display.print ("F2"); display.setTextColor (NEGRE); display.setCursor (17, 14); display.print ("DECRESCENTE"); display.fillRect (0, 24, 15, 11, 2); display.setCursor (2, 26); display.setTextColor (BLANC); display.print ("F3"); display.setTextColor (NEGRE); display.setCursor (17, 26); display.print ("VELOCIDADE");

loop () - Part 2: menú Dibuix

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

loop () - Part 3 - Funcionament

// 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 foi pressionada 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 (BLANC); display.print ("MOVENDO"); display.setTextColor (NEGRE); display.setCursor (2, 14); display.print (distancia); display.print ("Passos"); display.display ();

loop () - Part 4 - Running

// Move o motor mover (distància, BAIX); // Volta ao menu esc = true; } trencar; // Se tecla F2 foi pressionada case 'B': distancia = lerValor (); // Se tecla ESC foi pressionada 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 (BLANC); display.print ("MOVENDO"); display.setTextColor (NEGRE); display.setCursor (2, 14); display.print (distancia); display.print ("Passos"); display.display ();

loop () - Part 5 - Funcionament

// Move o motor mover (distància, HIGH); // Volta ao menu esc = true; } trencar; // Se tecla F3 foi pressionada case 'C': velocidade = lerValor (); if (velocidade == -1) {esc = true; } else {// Escreve a tela "Velocidade" no display display.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (12, 2); display.setTextColor (BLANC); display.print ("VELOCIDADE"); display.setTextColor (NEGRE); display.setCursor (2, 14); display.print (velocitat); display.print (char (229)); display.print ("s");

loop () - Part 6 - Funcionament

display.fillRect (31, 24, 21, 11, 2); display.setCursor (33, 26); display.setTextColor (BLANC); display.println ("D'acord!"); display.setTextColor (NEGRE); display.display (); // Configura nova velocitat al motor d1.motionConfig (50, velocitat, 5000); endarreriment (2000); // Volta ao menu esc = true; } trencar; // 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; per defecte: trencar; }} // Limpa o char customKey customKey = false; }}

Pas 16: Quant als eixos: configuracions de màquines

Quant als eixos: configuracions de màquines
Quant als eixos: configuracions de màquines

Per exemple, en màquines CNC, com ara impressores 3D i encaminadors, el programa responsable del control de posicionament ha de saber com es produiran els moviments en funció del nombre de polsos donats al motor pas a pas.

Si el controlador del motor de pas permet l'aplicació de micro-passos, s'ha de tenir en compte aquesta configuració en el càlcul del desplaçament produït.

Per exemple, si un motor de 200 passos per revolució està connectat a un controlador configurat a 1/16, es necessitaran 16 x 200 polsos per a una sola volta del fus, és a dir, 3200 impulsos per cada volta. Si aquest fus té un pas de 2 mm per volta, caldrà 3200 impulsos al controlador perquè la femella es mogui 2 mm.

De fet, els controladors de programari solen utilitzar una raó per especificar aquesta proporció, el "nombre de polsos per mil·límetre" o "passos / mm".

Pas 17: Marlin

Marlin
Marlin

A Marlin, per exemple, veiem a la secció @section motion:

/ **

* Passos per eix predeterminats per unitat (passos / mm)

* Substitueix amb M92

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

* /

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

En aquest exemple, podem concloure que els eixos X i Y tenen una precisió de 80 impulsos per moure’s 1 mm, mentre que la Z necessita 3200 impulsos i l’extrusora E0 necessita 100.

Pas 18: GRBL

GRBL
GRBL

A continuació veiem les ordres de configuració de GRBL. Amb l’ordre de 100 dòlars, podem ajustar el nombre de polsos necessaris per provocar un desplaçament d’un mil·límetre a l’eix X.

A l'exemple següent podem veure que el valor actual és de 250 impulsos per mm.

Els eixos Y i Z es poden establir respectivament entre 101 i 102 dòlars.

Recomanat: