bluebravo:
Ich kann dir garnicht so viel Karma geben, wie ich es gerne wĂŒrde.
Danke fĂŒr die groĂartige Anerkennung!
bluebravo:
Ich hab da aber noch eine frage: Hast du dir die GRBL Software runtergeladen und angesehen?
Hier nochmal der Link zu der Seite GitHub - grbl/grbl: An open source, embedded, high performance g-code-parser and CNC milling controller written in optimized C that will run on a straight Arduino
Kann man das da nicht irgendwie, Irgendwo einbauen?
Ich habe mir den Code mal angesehen. Und auch, was die G-Code Daten eigentlich sind.
Offenbar ganz etwas anderes als HPGL-Daten, d.h. da sind nicht nur die zu plottenden XY-Werte in den Daten enthalten, sondern auch höhere Geometriedaten wie z.B. Kreisbogenbeschreibungen, die dann erst noch interpretiert werden mĂŒssen. An den G-Code Daten, mit denen Dein Plotter gefĂŒttert wird, kann man also nicht so einfach ansetzen. Die Kreisbögen wĂŒrden sich einer Umrechnung entziehen.
Nachdem ich mal in den Code geschaut habe, kommt fĂŒr eine Umrechnung der Koordinaten wohl die Datei "planner.c" in Frage und dort die Funktion "plan_buffer_line". Das scheint die Funktion zu sein, in der die Koordinaten in Steps fĂŒr die Stepper-Motoren umgerechnet werden. Und dort könnte man am Anfang der Funktion, bevor die Umrechnung in Stepper-Schritte erfolgt, noch die Umrechnung der Koordinaten einfĂŒgen.
Statt Code in Datei planner.c:
void plan_buffer_line(float x, float y, float z, float feed_rate, uint8_t invert_feed_rate)
{
// Prepare to set up new block
block_t *block = &block_buffer[block_buffer_head];
// Calculate target position in absolute steps
...
Da tue ich mal so als wenn die Funktion noch gar nicht die richtigen Koordinaten ĂŒbergeben bekommt, sondern falsche Koordinaten, die ich mal xx und yy nenne und dann erst in X- und Y- umrechne (die hergeleiteten Werte fĂŒr da und db), womit dann die Stepper-Schritte ermittelt werden:
Setze Code in Datei planner.c:
// V-Plotter calculations by 'jurs' for German Arduino Forum
// Details: http://forum.arduino.cc/index.php?topic=226277.0
#define XB 500.0
#define XA XB
#define YB 600.0
#define YA YB
void calc_ab(float x, float y, float &da, float &db)
{
// db = b - b0
db= sqrt((XA-x)*(XA-x) + (YA-y)*(YA-y)) - sqrt(YA*YA+XA*XA);
// da = a - a0
da= sqrt((XB+x)*(XB+x) + (YB-y)*(YB-y)) - sqrt(YB*YB+XB*XB);
}
void plan_buffer_line(float xx, float yy, float z, float feed_rate, uint8_t invert_feed_rate)
{
// Prepare to set up new block
block_t *block = &block_buffer[block_buffer_head];
float x,y;
calc_ab(xx, yy, x, y);
// Calculate target position in absolute steps
...
FĂŒr die Geometriedaten Deines V-Plotters mĂŒĂtest Du dann natĂŒrlich Deine tatsĂ€chlichen Werte fĂŒr XA und XB direkt in die Library-Datei einsetzen, so dass die geĂ€nderte Library dann nur fĂŒr Deine V-Plotter-Abmessungen verwendbar ist. Am besten sicherst Du Dir die Originaldatei, bevor Du sie fĂŒr Dich verĂ€nderst.
Ob das die optimale Stelle zum Patchen der Library ist und ob das wirklich alles ist, was gemacht werden mĂŒĂte und ob es ĂŒberhaupt so funktioniert, mĂŒĂtest Du mal ausprobieren. Ich kann es hier bei mir nicht testen, ich habe keinen V-Plotter.
Du kannst ja mal posten, wie es dann mit diesem Patch aussieht.