Arduino GRBL

Hallo alle zusammen !
Mein Kumpel hat mich mal gefragt, ob ich ihm eine einfache Steuerung für seine selbst gebaute Fräse erstellen könnte.
Da hab ich sofort erstmal an Arduino gedacht.
Somit nach etwas Suche im Internet habe ich dieses gefunden:
http://mtm.cba.mit.edu/machines/mtm_snap-lock/build/software.html

Also habe ich das mal alles so gemacht wie das da steht, und hat auch soweit mit dem flashen gut geklappt.
Und nun meine Frage: Kann ich den G-Code interpreter mit dem Motortreiber L297/L298 benutzen ?

Anfangs habe ich gedacht, das müsste ja eigentlich wegen der Ansteuerung kein Problem ergeben.
Hier mal vorab die config-Datei:

#ifndef config_h
#define config_h

// IMPORTANT: Any changes here requires a full re-compiling of the source code to propagate them.

#define BAUD_RATE 9600

// Updated default pin-assignments from 0.6 onwards 
// (see bottom of file for a copy of the old config)

#define STEPPERS_DISABLE_DDR     DDRB
#define STEPPERS_DISABLE_PORT    PORTB
#define STEPPERS_DISABLE_BIT         0

#define STEPPING_DDR       DDRD
#define STEPPING_PORT      PORTD
#define X_STEP_BIT           2
#define Y_STEP_BIT           3
#define Z_STEP_BIT           4
#define X_DIRECTION_BIT      5
#define Y_DIRECTION_BIT      6
#define Z_DIRECTION_BIT      7

#define LIMIT_DDR      DDRB
#define LIMIT_PIN     PINB
#define X_LIMIT_BIT          1
#define Y_LIMIT_BIT          2
#define Z_LIMIT_BIT          3

#define SPINDLE_ENABLE_DDR DDRB
#define SPINDLE_ENABLE_PORT PORTB
#define SPINDLE_ENABLE_BIT 4

#define SPINDLE_DIRECTION_DDR DDRB
#define SPINDLE_DIRECTION_PORT PORTB
#define SPINDLE_DIRECTION_BIT 5

// This parameter sets the delay time before disabling the steppers after the final block of movement.
// A short delay ensures the steppers come to a complete stop and the residual inertial force in the 
// CNC axes don't cause the axes to drift off position. This is particularly important when manually 
// entering g-code into grbl, i.e. locating part zero or simple manual machining. If the axes drift,
// grbl has no way to know this has happened, since stepper motors are open-loop control. Depending
// on the machine, this parameter may need to be larger or smaller than the default time.
// NOTE: If defined 0, the delay will not be compiled.
#define STEPPER_IDLE_LOCK_TIME 25 // (milliseconds) - Integer >= 0

// The temporal resolution of the acceleration management subsystem. Higher number give smoother
// acceleration but may impact performance.
// NOTE: Increasing this parameter will help any resolution related issues, especially with machines 
// requiring very high accelerations and/or very fast feedrates. In general, this will reduce the 
// error between how the planner plans the motions and how the stepper program actually performs them.
// However, at some point, the resolution can be high enough, where the errors related to numerical 
// round-off can be great enough to cause problems and/or it's too fast for the Arduino. The correct
// value for this parameter is machine dependent, so it's advised to set this only as high as needed.
// Approximate successful values can range from 30L to 100L or more.
#define ACCELERATION_TICKS_PER_SECOND 50L

// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
// of the buffer and all stops. This should not be much greater than zero and should only be changed
// if unwanted behavior is observed on a user's machine when running at very slow speeds.
#define MINIMUM_PLANNER_SPEED 0.0 // (mm/min)

// Minimum stepper rate. Sets the absolute minimum stepper rate in the stepper program and never runs
// slower than this value, except when sleeping. This parameter overrides the minimum planner speed.
// This is primarily used to guarantee that the end of a movement is always reached and not stop to
// never reach its target. This parameter should always be greater than zero.
#define MINIMUM_STEPS_PER_MINUTE 800 // (steps/min) - Integer value only

// Number of arc generation iterations by small angle approximation before exact arc trajectory 
// correction. This parameter maybe decreased if there are issues with the accuracy of the arc
// generations. In general, the default value is more than enough for the intended CNC applications
// of grbl, and should be on the order or greater than the size of the buffer to help with the 
// computational efficiency of generating arcs.
#define N_ARC_CORRECTION 25 // Integer (1-255)

#endif

Da ich jetzt nur einen fertigen Motortreiber hier rumliegen hatte, habe ich mal nur die X-Achse ausprobiert, ob das überhaupt fuktioniert.
Dazu habe ich einfach den Clock-Pin vom L297 mit dem Pin2 (Step) vom Arduino verbunden und zuletzt noch den "Drehrichtungspin" vom L297 mit dem Arduino pin 5 (Direction) verbunden. Ist das bis hierhin so richtig ?

Dann habe Processing gestartet, den Sketch geladen, und mich mit dem Arduino verbunden.
Nun konnte ich mit den Pfeiltasten den Schrittmotor steuern. Funktionierte super !
Dann habe ich mal einen G-Code file geöffnet, gestartet und aufeinmal machte der Motor ganz komische Geräusche.
Das war so ein Piepton der immer höher wurde, empfand ich so, und der Motor wurde ganz schön warm ! Da habe ich erstmal schnell
den Netzstecker gezogen, wollte nicht das mir da noch irgendetwas zerstört wird !
Warum hat sich der Motor so komisch verhalten ?!
Muss ich da noch was an den Einstellungen vornehmen ?

Hoffe ihr könnte meinen Schilderungen folgen, wenn nicht, dann fragt am besten :wink:
Ich kann ich mich nicht wirklich präzise ausdrücken, aber ich hoffe ihr versteht es !

Grüße
Lorenz

P.S.: Wollt nur mal am Rande erwähnen, der Moving Head ist noch nicht vergessen ! :smiley:

Ich habe mal ein wenig mit den Einstellungen die man in dem Serial Monitor vornimmt, rum probiert.
Da gibt es folgendes Menü:

$0 = 755.906 (steps/mm x)
$1 = 755.906 (steps/mm y)
$2 = 755.906 (steps/mm z)
$3 = 10 (microseconds step pulse)
$4 = 500.000 (mm/min default feed rate)
$5 = 500.000 (mm/min default seek rate)
$6 = 0.100 (mm/arc segment)
$7 = 28 (step port invert mask. binary = 11100)
$8 = 50.000 (acceleration in mm/sec^2)
$9 = 0.050 (cornering junction deviation in mm)
'$x=value' to set parameter or just '

Und da habe ich bei $8 die Geschwindigkeit auf 1.000 gesetzt. Ist zwar relativ langsam aber es funktioniert. Vielleicht werde ich ihn mal fragen, ob er mehr Geld für bessere Treiber ausgeben möchte ?!

Aber da ist noch das Problem mit der Erwärmung des Schrittmotors ! Der wird schon ganz schön warm...ich habe den auch nur kurz laufen lassen, wie wird das denn dann wenn der länger läuft ?!?!
Ist das so normal das die so "heiß" werden ?

Grüße
Lorenz to dump current settings


Und da habe ich bei $8 die Geschwindigkeit auf 1.000 gesetzt. Ist zwar relativ langsam aber es funktioniert. Vielleicht werde ich ihn mal fragen, ob er mehr Geld für bessere Treiber ausgeben möchte ?!

Aber da ist noch das Problem mit der Erwärmung des Schrittmotors ! Der wird schon ganz schön warm...ich habe den auch nur kurz laufen lassen, wie wird das denn dann wenn der länger läuft ?!?! 
Ist das so normal das die so "heiß" werden ?

Grüße
Lorenz

Gibt es eigentlich auch einen Enablepin für jeden einzelnen Motortreiber ?
Weil ich denke mal das ist auch ein Grund warum der Motor so warm wird...ist ja dumm da Strom durchfließen zulassen obwohl er sich gar nicht bewegen muss. Der Schrittmotor muss dies ja alles in Form Wärme dann abgeben (?!).
Ich hab mal gelesen, ein Schrittmotor kann bis zu 100grad wärmer als seine Umgebung werden, stimmt das ? Kann ich mir kaum vorstellen !

Schrittmotore müssen immer stromdurchflossen (angesteuert) werden damit sie Kraft haben. Wenn die Fräse eine Achse bewegt gibt es sicher Kräfte, die auf die anderen Achsen übertragen werden. Bei Bewegung über Gewindestangen ist das weniger problematisch.
Die max Temperatur des Motore wird durch die Isolierklasse angegeben siehe Isolierstoffklasse – Wikipedia . Du kannst Die Motortemperatur herabsetzen indem Du in mit einem Ventillator kühlst.

Ich rate Dir vom L297/298 ab. Das sind sehr alte Treiber (vor 40 Jahren konzipiert). Neuere Modelle sind kleiner, Leistungstärker udn haben weniger Abwärme. Zb der A4988 ist so einer. Zusätzlich können diese Neueren TreiberICs auch Microstepping was den Lauf des Motore leiser und ruhiger macht. Allerdings braucht man dann eine höhere Versorgungspannung (ca 4x Nennspannung) und ein leistungstärkeres Netzteil.

Grüße Uwe

Endlich !
Vielen dank für deine Antwort ! :slight_smile:
Stimmt das mit der Kraft habe ich ganz vergessen !
Also den Schrittmotor den ich habe kann laut dieser Klassefezierzung ganze 130 grad heiß werden :open_mouth: Hätt ich mir nie vorstellen können !

Wegen den Motortreibern habe ich ihn mal gefragt und er wäre auch bereit für etwas "bessere" Technik noch mehr Geld zu bezahlen ! Das ist schon mal Super.
Wow 40 Jahre :open_mouth:
A4988: Motortreiber - Watterott electronic
Ist das so das günstigste ?!
Also soweit ich gelesen habe, kann der ja nur max 2A verkraften ?!
Zur Zeit benutze ich so (laut Netzteil; konnte nicht nachmessen, Multimeter geschrottet) ca. 3,8 A und 15 V ! Mit dem L297/298 geht das ja noch !
Aber wie sieht dass dann mit der Leistung der Motoren aus ? Wird dort irgendetwas vernachlässigt ??

Grüße
Lorenz

hi,

Ich bin auch dabei mir ne CNC Maschiene zu basteld und hänge bei genau den gleichen Fragen.
Das grbl shield ist das was meinen Anforderungen ( hauptsächlich I>2A und nicht zu teuer) am nächsten kommt.
Meine Frage wäre ob ich das grbl shield auch ohne den Gcode interpreter ansteuern kann, also dass ich die bitfolge vom arduino schicke und das shield einfach als Treiber nutze.

die haben einen Monat Lieferzeit....