Just nu är det en Arduino Mega som driver X,Y,Z på min CNC-fräs.
Den skall alltså läsa in gcoden från min laptop via usd-porten, förvandla den till koordinater och flytta axlarna med att styra stegmotorerna. Stegmotorerna kräver 200 x 16 pulser per varv. (microstegning = 16 steg/hel puls)
Ett varv flyttar varje axel 4 mm. alltså 800 pulser per mm, när alla axlar flyttas samtidigt så blir det 3 x 800 = 2400 pulser per mm. Säg att man har en matning på 2000 mm/min. Det innebär att Megan skall spotta ur sig 2400x2000/60= 80.000 pulser/s utan avbrott medan den samtidigt läser in gcoderna från USB-porten, räknar ut koordinaterna för varje gcode och omsätter det till pulser som matas ut på tre pinnar plus tre pinnar för rotationsriktning.
Vore intressant att se en uträkning på vilken maximal matningshastighet Megan (16MHz) klarar utan att missa coordinater. Jag upplever det som att det blir problem om jag överstiger 1200 mm/min. Håller därför på att byta ut Megan mot en ESP32 och closed loop.
Teoretisk maximal matningshastighet.
- SeniorLemuren
- Inlägg: 8332
- Blev medlem: 26 maj 2009, 12:20:37
- Ort: Kristinehamn
- SeniorLemuren
- Inlägg: 8332
- Blev medlem: 26 maj 2009, 12:20:37
- Ort: Kristinehamn
Re: Teoretisk maximal matningshastighet.
Snabba svar med AI :
Bedömning av Kodens Effektivitet
Varje gång Arduino Mega genererar en puls, behöver den:
Läsa in kommandon från USB (G-code).
Utföra nödvändiga beräkningar för att omvandla G-code till koordinater.
Generera pulserna för varje axel (X, Y, Z).
Eventuellt uppdatera stegmotorns riktning.
Med en enkel avbrottshanterare och låg overhead kan varje puls genereras med ett par dussin maskininstruktioner. Men när man tar hänsyn till avbrott, koordinatberäkningar, och USB-inläsningar, kan varje puls kosta betydligt fler klockcykler.
Steg 4: Analysera Begränsningar
Antag att varje puls kräver mellan 50 och 150 klockcykler för att hantera all nödvändig bearbetning:
Vid 50 cykler per puls:
Max pulser/sekund = 16,000,000 cykler/sekund 50
klockcykler per puls = 320,000 pulser/sekund
Max pulser/sekund=50 klockcykler per puls 16,000,000cykler/sekund
=320,000pulser/sekund
Detta skulle teoretiskt möjliggöra en matningshastighet på:
Max hastighet= 320,000 pulser/sekund
2400 pulser/mm × 60 sekunder/min
= 8,000 mm/min
Max hastighet= 2400 pulser/mm
320,000pulser/sekund × 60sekunder/min=8,000mm/min
Vid 150 cykler per puls:
Max pulser/sekund
= 16,000,000 klockcykler/sekund 150
klockcykler per puls = 106,666 pulser/sekund
Max pulser/sekund= 150klockcykler per puls
16,000,000 klockcykler/sekund = 106,666pulser/sekund
Detta skulle teoretiskt möjliggöra en matningshastighet på:
Max hastighet = 106,666 pulser/sekund
2400 pulser/mm × 60 sekunder/min ≈2,666 mm/min
Max hastighet= 2400 pulser/mm
106,666pulser/sekund × 60sekunder/min ≈2,666mm/min
Steg 5: Jämförelse med Dina Observationer
Du nämnde att problem börjar uppstå vid hastigheter över 1200 mm/min. Detta tyder på att den effektiva klockcykelförbrukningen per puls ligger närmare 133 klockcykler (med hänsyn till overhead från avbrott och andra operationer).
Detta är konsistent med en bedömning där varje steg involverar avsevärd bearbetning och att overhead från inläsning av G-code och konvertering spelar en roll.
Slutsats
För att undvika problem vid högre hastigheter kan du:
Med en Arduino Mega kan du förvänta dig en praktisk maximal matningshastighet runt 1200-1600 mm/min utan att missa koordinater, vilket är ungefär i linje med dina observationer.
Re: Teoretisk maximal matningshastighet.
När jag höll på med laser så var max kring 30.000 steg/sek för en arduino mega (16 MHz) och 90.000 steg/sek för en 32-bit arduino zero (48 MHz).
I runda slängar. Med Marlin 1.x.
Iaf en jämförelsepunkt även om det är en del annat.
I runda slängar. Med Marlin 1.x.
Iaf en jämförelsepunkt även om det är en del annat.