Inhoudsopgave:

Arduino Uno met spindel en pitchmotor - Ajarnpa
Arduino Uno met spindel en pitchmotor - Ajarnpa

Video: Arduino Uno met spindel en pitchmotor - Ajarnpa

Video: Arduino Uno met spindel en pitchmotor - Ajarnpa
Video: Arduino CNC Shield Tutorial - Control Stepper Motors using CNC Shield V3.0 2024, November
Anonim
Image
Image
Gebruikte bronnen
Gebruikte bronnen

Vandaag gaan we het hebben over een heel belangrijk onderwerp in de mechanica en mechatronica: de elementen van machines. In dit artikel zullen we specifiek ingaan op de spindels, met enkele interessante functies en toepassingen. Toch zullen we enkele manieren demonstreren om de beweging veroorzaakt door een spindel te berekenen en een testopstelling presenteren.

Ik heb daarom de montage hieronder gemaakt, die de voortgang van een spindel van 2 mm en een andere van 8 mm blootlegt. Deze TR8-assen die ik gebruik, worden vaak gebruikt in kleine routers en 3D-printers, vooral op de Z-as. Onthoud dat door enkele concepten te beheersen waaraan we hier zullen werken, u elk type machine kunt ontwerpen.

Stap 1: Gebruikte bronnen

  • Trapeziumvormige spindel met een diameter van 8 mm en een steek van 2 mm
  • Trapeziumvormige spindel met een diameter van 8 mm en een spoed van 8 mm
  • 8x2 spindel flens kastanje
  • 8x8 spindel flens kastanje
  • Lagers voor spindels met een diameter van 8 mm
  • Lineaire cilindrische geleider met een diameter van 10 mm
  • Cilindrische rollagers voor 10 mm geleiders
  • Beugels voor cilindrische geleiders van 10 mm
  • NEMA 17-motoren
  • Askoppelingen
  • Arduino Uno
  • Stuurprogramma DRV8825
  • 4x4 matrixtoetsenbord
  • Weergave Nokia 5110
  • Diverse kunststof onderdelen
  • Bouten en moeren
  • Houten basis
  • Externe 12V voeding

Stap 2: Over spindels - wat zijn ze?

Over spindels - wat zijn dat?
Over spindels - wat zijn dat?

Spindels zijn onderdelen van machines, zoals schroeven. Dat wil zeggen, het zijn rechte staven gevormd door draden van continue stappen. Ze worden gebruikt in mechanismen die lineaire beweging en positionering vereisen. Ze kunnen hoge trek- en drukkrachten uitoefenen en koppel overbrengen. Ze laten beweging toe met automatische vergrendeling. Ze kunnen worden gemaakt van verschillende materialen, de meest voorkomende aluminium en staal.

Aangezien Chinese bedrijven de trapeziumvormige spindels vervaardigen, raad ik u aan dit type product te kopen in plaats van de bekende moerbout. Dit komt door de aantrekkelijkere prijs en de weerstand, die ik afschuwelijk vind.

Op de foto heb ik de beste spindel gezet die naar mijn mening de recirculerende kogelspil is. Het is meestal gemaakt van heel hard staal en de ballen draaien eromheen, in de kastanje. Naast de precisie die geweldig is, benadruk ik ook de duurzaamheid, aangezien dit type spindel miljarden bewegingen kan reproduceren zonder het mechanisme te beschadigen. Een goedkopere optie, die we hier gebruiken, is de trapeziumvormige spindel.

Stap 3: Over spindels - enkele en kogeldraden

Over spindels - enkele en kogelschroefdraad
Over spindels - enkele en kogelschroefdraad

De kogelspindels, op de foto links, hebben halfronde kanalen waar de kogels rollen. Ze zijn relatief duurder en hebben een lage wrijving in vergelijking met spindels met enkele schroef, wat leidt tot een veel hoger rendement (rolwrijving).

De spindels met één schroefdraad aan de rechterkant van de afbeelding hebben meestal trapeziumvormige profielen, omdat deze geometrie meer geschikt is om krachten in axiale richting uit te oefenen en beweging soepel over te brengen. Ze zijn relatief goedkoop en hebben een hoge wrijving in vergelijking met recirculerende kogelspindels, wat leidt tot een lage opbrengst, dwz slipwrijving.

Stap 4: Over spindels - Toepassingen

Over Spindels - Toepassingen
Over Spindels - Toepassingen

Spindels kunnen worden toegepast op elk mechanisme waar lineaire beweging vereist is. Ze worden veel gebruikt in de industrie in machines en processen.

Sommige toepassingen omvatten:

  • Ladingliften
  • Persen
  • Aardbeien en draaibanken
  • CNC-apparatuur
  • Verpakkingsmachines
  • 3D-printers
  • Lasersnij- en snijapparatuur
  • Industriële processen
  • Positionerings- en lineaire bewegingssystemen

Stap 5: Over spindels - parameters

Over spindels - parameters
Over spindels - parameters

Er zijn verschillende kenmerken van een spindel waarmee rekening moet worden gehouden bij het ontwerpen van een mechanisme. Naast de diameter en spoed, is het noodzakelijk om de druksterkte, het traagheidsmoment (weerstand tegen verandering in de rotatietoestand), het constructieve materiaal, de rotatiesnelheid waaraan het zal worden onderworpen, de werkingsrichting (horizontaal of verticaal), onder andere de toegepaste belasting.

Maar op basis van reeds geconstrueerde mechanismen kunnen we verschillende van deze parameters intuïtief aanvoelen.

Laten we een gemeenschappelijk goed erkennen. Laten we beginnen met STAP.

Stap 6: Over spindels - Stap (verplaatsing en snelheid)

Over spindels - Stap (verplaatsing en snelheid)
Over spindels - Stap (verplaatsing en snelheid)

Bepaalt de lengte die de moer bij elke omwenteling aflegt. Dit is meestal in mm / omwenteling.

Een spindel van 2 mm per omwenteling zal een verplaatsing van 2 mm veroorzaken bij elke omwenteling die de spindel uitvoert. Het zal de lineaire snelheid van de moer beïnvloeden, aangezien met de toename van de rotatiesnelheid het aantal omwentelingen per tijdseenheid zal toenemen en bijgevolg ook de afgelegde afstand.

Als een spin van 2 mm per omwenteling draait met 60 RPM (één omwenteling per seconde), zal de moer met 2 mm per seconde bewegen.

Stap 7: Montage

samenkomst
samenkomst
samenkomst
samenkomst

In onze montage heb ik twee motoren en ons toetsenbord met het display, dat eruitzag als een rekenmachine, omdat ik er een hoes voor heb gemaakt in de 3D-printer. Op het Nokia display hebben we de volgende opties:

F1: Crescent - Fuso gaat van de huidige positie naar de positie die ik bepaal

F2: Afdalen - Draaien

F3: Snelheid - Kan ik de pulsbreedte wijzigen?

F4: ESC

Stap 8: Montage - Materialen

Montage - Materialen
Montage - Materialen

A - 10 mm lineaire geleiders

B - Trapeziumvormige spindels van stappen 2 en 8 mm

C - Boorbasis

D - Lagers voor spindels

E - Gidshouders

F - Kastanjes

G - Lagers

H - Koppelingen

I - Motoren

J - Diverse plastic onderdelen (cursors, motorsteunen, wiggen, toetsenbordsteun en display)

Stap 9: Montage - Stap 01

Montage - Stap 01
Montage - Stap 01

Na het boren van de basis (C), assembleren we de twee motoren (I). Om ze vast te maken, gebruiken we haakjes gemaakt in de 3D-printer (J). Draai geen van de schroeven vast in deze positioneringsstap. Dit zorgt voor de nodige aanpassingen in de uitlijningsstap.

Stap 10: Montage - Stap 02

Montage - Stap 02
Montage - Stap 02

Nog steeds na het boren van de basis (C), positioneer de geleiderails (E) en de lagers (D). Detail voor de plastic shim (J) die wordt gebruikt om de hoogte van de lagers aan te passen.

Stap 11: Montage - Stap 03

Montage - Stap 03
Montage - Stap 03

We maken een cursor met behulp van een gedrukt onderdeel om het lager (G) te verbinden met de moer (F). We gebruikten twee cursors, de ene rechts en de andere links. Zijn functie is om de positie op een schaal aan te geven wanneer we de verplaatsing willen bepalen die door de spil wordt veroorzaakt.

Stap 12: Montage - Stap 04

Montage - Stap 04
Montage - Stap 04
Montage - Stap 04
Montage - Stap 04

Steek de geleider (A) en de spil (B) in hun respectieve lager (D) en steun (E), tegenover de motor, steek dan de geleider en de spil in het lager (G) en kastanje (F) en aan de punt van de spindel plaatsen we ook de koppeling (H). We nemen ze allebei totdat ze hun eindpunt hebben bereikt (tegenover ondersteuning en motoriek).

Draai de schroeven licht vast om later af te stellen. Herhaal de procedure met de resterende geleider en spil. Met alle componenten gepositioneerd, voeren we de uitlijning van de onderdelen uit en voltooien we de mechanische montagefase.

Stap 13: Montage - Elektronica

Montage - Elektronica
Montage - Elektronica
Montage - Elektronica
Montage - Elektronica
Montage - Elektronica
Montage - Elektronica

Met behulp van een bedrukte plastic houder hebben we het Nokia 5110-scherm en een 4x4 matrixtoetsenbord vastgezet. In de onderste ruimte van de standaard bevindt zich de Arduino Uno, de driver DRV8825.

Met behulp van de aanwezige boringen in de basis bevestigen we het geheel.

Stap 14: Elektrisch schema

Elektrisch schema
Elektrisch schema

Het bedradingsschema is eenvoudig. We hebben de DRV8825 en dezelfde twee 17 spiegels, dat wil zeggen, dezelfde stap die we naar de ene sturen, gaat naar de andere. Wat verandert is dat ik in een van de motoren een spindel van 8 mm heb en in de andere een spindel van 2 mm. Het is dus duidelijk dat de eerste, met een spindel van 8 mm, sneller gaat. Nog steeds in het diagram zijn het display en het 4x4-toetsenbord, dat matrix moet zijn.

Stap 15: Broncode

Opname van bibliotheken en creatie van objecten

We hebben hier een Lib die ik heb gemaakt, namelijk StepDriver.h. Het is voorbereid voor de 8825, 4988 en ook de TB6600-stuurprogramma's. Ik maak in deze stap het object DRV8825, de d1.

//Biblioteca responsável por capturar a tecla que foi pressionada no teclado#include //Biblioteca responsável pelos graficos do display #include //Biblioteca responsável pela comunicacao do display #include //Configuracao de pinos do Display // pin 6 - Seriële klok uit (SCLK) // pin 5 - Serial data out (DIN) // pin 4 - Data/Command select (D/C) // pin 3 - LCD chip select (CS/CE) // pin 2 - LCD reset (RST) Adafruit_PCD8544-display = Adafruit_PCD8544 (6, 5, 4, 3, 2); //Biblioteca de motor de passo #include //Instancia of driver DRV8825 DRV8825 d1;

Constanten en globale variabelen

In dit deel van de code behandel ik de matrix, die ik in een andere videoles (LINK KEYBOARD) heb geleerd. Toch heb ik het over het Keypad-object, naast afstand en snelheid.

const-byte LINHAS = 4; // nummer van de linhas 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 op de tecla pressionada Keypad customKeypad = Keypad (makeKeymap (SIMBOLOS), PINOS_LINHA, PINOS_COLUNA, LINHAS, COLUNAS); //varieer reacties op armazenar of valor digitado char customKey; ongetekende lange afstand = 0; unsigned lange velocidade = 2000;

Toetsenbordleesfunctie

In deze stap hebben we de code die verwijst naar het display, dat de toenemende en afnemende afdrukken werkt.

//Funcao responsavel por ler o valor do usuario pelo teclado-------------------------------------- ---unsigned long lerValor() {//Escreve o submenu que coleta os valores geen weergave display.clearDisplay(); display.fillRect(0, 0, 84, 11, 2); display.setCursor(27, 2); display.setTextColor(WIT); display.print("VALOR"); display.setTextColor(ZWART); display.fillRect(0, 24, 21, 11, 2); display.setCursor(2, 26); display.setTextColor(WIT); display.print("CLR"); display.setTextColor(ZWART); display.setCursor(23, 26); display.print("LIMPAR"); display.fillRect(0, 36, 21, 11, 2); display.setCursor(5, 38); display.setTextColor(WIT); display.print("F4"); display.setTextColor(ZWART); display.setCursor(23, 38); display.print("VOLTAR"); display.setCursor(2, 14); weergave.weergave(); String waarde = ""; char tecla = onwaar;

looping wachtend op de toets ingedrukt

Hier leggen we de lusprogrammering uit, dat wil zeggen, waar u de waarden invoert.

//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': geval '7': geval '8': geval '9': geval '0': valor += tecla; display.print(tecla); weergave.weergave(); pauze; //Se tecla CLR foi pressionada case 'c': //Limpa a string valor valor = ""; //Apaga o valor display.fillRect (2, 14, 84, 8, 0); display.setCursor(2, 14); weergave.weergave(); pauze; //Se tecla ENT foi pressionada case 'e': //Retorna o valor return valor.toInt(); pauze; //Se tecla F4 (ESC) foi pressionada case 'D': return -1; standaard: pauze; } } //Limpa o char tecla tecla = false; } }

Motoraandrijffunctie:

In deze stap wordt aan de functie "verplaatsen" gewerkt. Ik krijg het aantal pulsen en de richting en dan maak ik een "voor".

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

opstelling ()

Nu verplaats ik het display en de configuratie van het stuurprogramma, en ik heb zelfs de pinning in de broncode geplaatst om het gemakkelijker te maken. Ik initialiseer bepaalde waarden en behandel de methoden die de instellingen genereren.

void setup() {//Configuracao do display ---------------------------------------- -------- display.begin(); display.setContrast(50); display.clearDisplay(); display.setTextSize(1); display.setTextColor(ZWART); // Driver DRV8825 configureren ----------------------------------------- // pin GND - inschakelen (ENA) // pin 13 - M0 // pin 12 - M1 // pin 11 - M2 // pin 10 - Reset (RST) // pin 9 - Slaapstand (SLP) // pin 8 - Step (STP) // pin 7 - Richting (DIR) d1.pinConfig (99, 13, 12, 11, 10, 9, 8, 7); d1.slaap (LAAG); d1.reset(); d1.stapPerMm(100); d1.stepPerRound(200); d1.stepConfig(1); d1.motionConfig(50, velocidade, 5000); }

loop () - 1e deel - Tekenmenu

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

loop () - Deel 2 - Tekenmenu

display.fillRect(0, 36, 15, 11, 2); display.setCursor(2, 38); display.setTextColor(WIT); display.print("F4"); display.setTextColor(ZWART); display.setCursor (17, 38); display.print("ESC"); weergave.weergave(); bool esc = onwaar;

loop () - Deel 3 - Hardlopen

//Loop enquanto een tecla F4 (ESC) nao voor pressionada while (!esc) { //captura een 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(WIT); display.print("VERPLAATS"); display.setTextColor(ZWART); display.setCursor(2, 14); display.print(afstand); display.print(" Passos"); weergave.weergave();

loop () - Deel 4 - Hardlopen

// Verplaats de motorverhuizer (distancia, LAAG); //Volta oa menu esc = true; } pauze; //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(WIT); display.print("VERPLAATS"); display.setTextColor(ZWART); display.setCursor(2, 14); display.print(afstand); display.print(" Passos"); weergave.weergave();

loop () - Deel 5 - Hardlopen

// Verplaats de motorverhuizer (afstand, HOOG); //Volta oa menu esc = true; } pauze; //Se tecla F3 foi pressionada case 'C': velocidade = lerValor(); if (velocidade == -1) { esc = waar; } else { //Escreve een tela "Velocidade" geen weergave display.clearDisplay(); display.fillRect(0, 0, 84, 11, 2); display.setCursor (12, 2); display.setTextColor(WIT); display.print("VELOCIDADE"); display.setTextColor(ZWART); display.setCursor(2, 14); display.print(velocidade); display.print(char(229)); display.print("s");

loop () - Deel 6 - Hardlopen

display.fillRect(31, 24, 21, 11, 2); display.setCursor(33, 26); display.setTextColor(WIT); display.println("OK!"); display.setTextColor(ZWART); weergave.weergave(); //Configura nova velocidade oa motor d1.motionConfig(50, velocidade, 5000); vertraging (2000); //Volta oa menu esc = true; } pauze; //Se tecla F4 (ESC) foi pressionada case 'D': //Se tecla CLR foi pressionada case 'c': //Se tecla ENT foi pressionada case 'e': //Volta oa menu esc = true; standaard: pauze; } } //Limpa of char customKey customKey = false; } }

Stap 16: Over spindels - Machineconfiguraties

Over spindels - Machineconfiguraties
Over spindels - Machineconfiguraties

In CNC-machines zoals 3D-printers en routers bijvoorbeeld, moet het programma dat verantwoordelijk is voor de positioneringscontrole weten hoe de bewegingen zullen plaatsvinden als functie van het aantal pulsen dat aan de stappenmotor wordt gegeven.

Als de stappenmotordriver de toepassing van microstappen toestaat, moet met deze configuratie rekening worden gehouden bij de berekening van de geproduceerde verplaatsing.

Als bijvoorbeeld een motor met 200 stappen per omwenteling is aangesloten op een driver die is ingesteld op 1/16, dan zijn 16 x 200 pulsen nodig voor een enkele omwenteling van de spil, dat wil zeggen 3200 pulsen voor elke omwenteling. Als deze spindel een spoed heeft van 2 mm per omwenteling, heeft de moer 3200 pulsen nodig om 2 mm te bewegen.

In feite gebruiken softwarecontrollers vaak een reden om deze verhouding te specificeren, het "aantal pulsen per millimeter" of "stappen / mm".

Stap 17: Marlijn

Marlijn
Marlijn

In Marlin zien we bijvoorbeeld in de sectie @section motion:

/ **

* Standaard asstappen per eenheid (stappen / mm)

* Overschrijven met M92

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

* /

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

In dit voorbeeld kunnen we concluderen dat de X- en Y-as een nauwkeurigheid hebben van 80 pulsen om 1 mm te verplaatsen, terwijl de Z 3200 pulsen nodig heeft en de extruder E0 100.

Stap 18: GRBL

GRBL
GRBL

Hieronder zien we de GRBL-configuratieopdrachten. Met het $ 100-commando kunnen we het aantal pulsen aanpassen dat nodig is om een verschuiving van één millimeter op de X-as te veroorzaken.

In het onderstaande voorbeeld kunnen we zien dat de huidige waarde 250 pulsen per mm is.

De Y- en Z-as kunnen respectievelijk $ 101 en $ 102 worden ingesteld.

Aanbevolen: