hmm..also ich hab das bisher völlig anders gemacht würde ich sagen. Auf diese Weise wäre ein "zu langsamer" Mikrocontroller eigentlich gar nicht schlimm, ein Fräsvorgang würde einfach länger dauern aber funktionieren würde es.
Ich poste mal den relevanten Teil meines Basic-Programms, falls du willst kannst du es ja mal anschauen.
Code:
Sub OneStep(Achse As Byte, Richtung As Byte) 'Führt einfach nur einen Schritt bei einer Achse in die gewählte Richtung aus
Select Case Achse
Case 1 'X-Achse, F.0
Port_WriteBit(43, Richtung) 'Richtung angeben
Port_WriteBit(40, 1)
' AbsDelay(ISpeed*SpeedFactor) ' Verzögerung in ms
Port_WriteBit(40, 0)
If Richtung=0 Then
PosX=PosX-1
Else
PosX=PosX+1
End If
Case 2 'Y-Achse F.1
Port_WriteBit(44, Richtung) 'Richtung angeben
Port_WriteBit(51, 0)
' AbsDelay(ISpeed*SpeedFactor) ' Verzögerung in ms
Port_WriteBit(51, 1)
If Richtung=0 Then
PosY=PosY-1
Else
PosY=PosY+1
End If
Case 3 'Z-Achse F.2
Port_WriteBit(45, Richtung) 'Richtung angeben
Port_WriteBit(52, 0)
' AbsDelay(ISpeed*SpeedFactor) ' Verzögerung in ms
Port_WriteBit(52, 1)
If Richtung=0 Then
PosZ=PosZ-1
Else
PosZ=PosZ+1
End If
End Case
End Sub
In der Main-Prozedur:
Do While True
GoPosX=" "
For i=0 To 4
GoPosX(i)=Serial_Read(0)
Next
GoPosY=" "
For i=0 To 4
GoPosY(i)=Serial_Read(0)
Next
GoPosZ=" "
For i=0 To 4
GoPosZ(i)=Serial_Read(0)
Next
Speed=" "
For i=0 To 4
Speed(i)=Serial_Read(0)
Next
Text="Fahre auf Position... "
Serial_WriteText(0, Text)
Serial_Write(0, LF)
Serial_Write(0, CR)
InZahlenWandeln()
GoToPos() ' hier wird OneStep(...) mehrmals aufgerufen
Text="Erwarte Befehl "
Serial_WriteText(0, Text)
Serial_Write(0, LF)
Serial_Write(0, CR)
End While
Die Prozedur GoToPos ist nur sehr schwer verständlich wenn ich den Code poste
Deshalb eine kurze Erklärung:
Istposition und Sollposition von X, Y und Z werden verglichen. OneStep wird dann mit jeder Achse so häufig aufgerufen, bis die Fräse sich in der Sollposition befinden.
Bsp: Xist, Yist, Zist = 0; Xsoll = 100, Ysoll = 50 und Zsoll=25;
--> OneStep(X) wird 100 mal aufgerufen, Jedes zweite mal wird auch OneStep(Y) und jedes vierte mal auch OneStep(Z) aufgerufen.
Zu deiner Frage noch: Anfangs konnte ich das Teil so schnell laufen lassen bis es Schrittverluste gab. Dann hab ich das Programm ein bisschen abgeändert, nun gibts (höchstwahrscheinlich sehr knapp) keine Schrittverluste mehr. Also mit der maximalen Geschwindigkeit bin ich eigentlich ganz zufrieden, ich glaub nicht dass der Schrittmotor noch schneller laufen könnte.
Mit Interrupt hab ich mich noch nicht auseinandergesetzt, dohc ich habe befürchtet dass dies für eine saubere Lösung notwendig ist
Da hab ich wohl einiges zu tun um es so ähnlich hinzukriegen wie du
Naja wenigstens wird mir so nicht langweilig^^
mfg
Urban
EDIT:
was ich schon lange fragen wollte, wie greifst du im Delphi-Programm auf die RS232 zu? Benutzt du eine Komponente?