Koordinatentisch

Gast #229632
Lesenswert?

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
Gast #229634
Lesenswert?

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
Gast #229636
Lesenswert?

@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
Gast #229637
Lesenswert?

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
Gast #229638
Lesenswert?

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
Angehängte Dateien:
Gast #229639
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren