Hoer mal ein Codeschnipsel - aus C in pascal umgestrickt, basierend auf der ATMEL-Applikation von der wir schonmal die Rede hatten im letzen Schrittmotor-Thread: die Variablen global, das ist schneller im Zugriff var r, ri, rampe, rampwert, rampengrenze, schlweg : integer; dly, dly_alt, rest : integer; procedure fahrenl; begin schlweg := schl_max; {zu fahrende Schritte} ri := 0; dly_alt := 1543; {Startspeed} rest := 0; {Rampe anfahren} repeat ri := ri + 1; dly := dly_alt - (2*dly_alt + rest) div (4* ri +1); rest := (2 * dly_alt + rest) mod (4 * ri + 1); rampe := dly - 4; dly_alt := dly; step_rechts; schlweg := schlweg - 1; for r := 1 to rampe do udelay(1); endfor; until dly < 41; {so schnell solls werden} rampwert := ri; {Fullspeed} rampe := 40; repeat step_rechts; schlweg := schlweg - 1; for r := 1 to rampe do udelay(1); endfor; until schlweg = rampwert; {bremsen} repeat ri := ri - 1; dly := dly_alt + (2*dly_alt + rest) div (4* ri +1); rest := (2 * dly_alt + rest) mod (4 * ri + 1); rampe := dly - 4; dly_alt := dly; step_rechts; schlweg := schlweg - 1; for r := 1 to rampe do udelay(1); endfor; until schlweg = 0; {da - bissel beruhigen lassen} mdelay(200); end; step_rechts macht den Steppuls - andersrum vorher dir umschalten wenn du 2 Achsen fahren willst, mußt du das halt in einen line-Algorithmus einbauen und die MaxSpeed entsprechend korrigieren. läuft auf nem 16MHz mega128 der Speedwert von 40 - also etwa 400us - ergibt sich aus dem Gewicht, daß der Stepper transportieren muß - je schwerer desto langsamer ... 14 kHz wird wohl nur mit Stepper ohne Last gehen, es sei denn du nimmst Achtelschritt oder noch feiner