Hallo, ich habe einen Koordinatentisch an welchem an der X und der Y Seite jeweils ein Schrittmotor angebracht ist. Nur meine Frage wenn ich einen punkt anfahren will mus ich den tisch im X und Y gleichzeitig bewegen um eine gerade linie zu bekommen. Jedoch wenn ich zb 400 Schriite in die X Richtung und 300 in die Y muss, wie schaffe ich es, das diese zugleich am ziel sind ? Danke in vorhinein mfg
Wenn Du beliebige Punkte im Koordinatensystem anfahren wilst soltest Du dir die Bresenham Linien-Algorithmus anschauen der einfachste weg mit integer aritmetik den Problem zu lösen. zB: Procedure Line (x1, y1, x2, y2: integer); var y : integer; xi,mi : integer; xf,mf : integer; begin xi := x1; xf := -(y2-y1); mi := (x2-x1) div (y2-y1); mf := ((x2-x1) mod (y2-y1))*2; for y := y1 to y2 do begin WritePixel (xi, y,); xi := xi + mi; xf := xf + mf; if xf > 0 then { ergibt sich ein Übertrag? } begin xi := xi + 1; xf := xf - 2*(y2-y1) end end end; Gruß Waldemar
@Waldemar_P: Habe so was in der Art in AVR-ASM gemacht nur mit einem Übertrag nach unten hin ( <0 ). In der Zeile if xf > 0 then { ergibt sich ein Übertrag? } wird ein Übertrag bei Integer ja erst ab 1 erkannt wobei ein Übertrag von minus auf plus schon bei 0 ist ( >= 0 ). Oder ist das Absicht? Besser wäre es doch, man macht daraus 2 Annäherungs-Algorhytmen, je nach dem, ob die X- oder Y-Achse zwischen den beiden Endpunkten länger ist, ansonsten hat man bei einer X-Achse, welche länger ist als die Y-Achse, nur eine Punktierte Linie bzw. fehlen bei dem Schrittmotor in X-Richtung die nötigen Bewegungen. MfG Andi
Hallo Andi, es gibt abwandlungen von diesem Algo die mit reinem Integer arbeiten ohne fost bzw Gleitkommazahlen meistens auch mit guten Beispielen wie diese hier von UNI-Fulda : http://www.fh-fulda.de/caelabor/inhalte/java/Java_Examples/Projekt/LineBres.htm vor allem Starte den Java APP. da wird eine Simulation gestartet die dir bestimmt weiter Hilft. Ich habe meine CNC auch mit diesem Algo ausgestatet und funtzt wunderbar. Gruß Waldemar
Schon klar, wie das funtzt. Ich habe ja selber so was für eine Line-Funktion für ein GLCD in ASM ausgearbeitet, wusste aber bisher nicht, dass dieser Algorythmus "Bresenham" genannt wird da ich selbst darauf gekommen bin, die Abstufungen der Pixel in der kürzeren Achse aus dem Verhältnis von DX und DY zu ermitteln in dem man die Länge der kürzeren Achse von der längeren subtrahiert, bei Überlauf erfolgt dann ein weiterer Schritt in der kürzeren Achse. Dein Algorythmus stimmt zwar, aber es fehlt die Abhandlung, wenn die X-Achse (DX) länger ist als die Y-Achse (DX), oder habe ich da was übersehen? Was passiert mit Deinem Code-Schnipsel bei dem Aufruf "Line (0,0,50,25)"? Im Anhang ein ASM-Beispiel. MfG Andi
Hallo Andi, Diese Code bedient nur 1/8 des Koordinatensystems, und dient nur dazu da die Schrittvfolge der Motoren zu berechnen, da die Motoren immer mit 2 Leitungen angesteuert werden Schritt und Richtung muss man vor dem Berechnung noch durch andere Routinen festlegen in welche Richtung die Motoren Laufen sollen und die Routine dann ggf. anpassen durch vertauschen der Koordinaten oder Spiegelung der Bewegung. Da bei der Routine die Y-Achse immer die Leitachse ist und entweder = oder > der X Achse sein muss. Gruß Waldemar
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.