Hab das mittlerweile auch schon herausgefunden und mit einem !Nop in einer schleife gelöst (hab ich beim Suchen so gefunden). Zur Erzeugung einer Rampe habe ich folgenden Link entdeckt:
http://www.mikrocontroller.net/artic..._und_berechnen
Besonders das hier:
Häufigster Fehler
Die Rampe wird unter der Prämisse erstellt, die Zeit zwischen den Einträgen sei konstant, man könne also die linear berechneten Frequenz- oder Timerwerte einfach so eintragen. DEM IST NICHT SO. Die Mitte der Liste ist bei Weitem nicht nach der halben Rampenzeit erreicht, da Schritte am Anfang wesentlich langsamer ausgeführt werden. Die Liste muss bei niedrigen Geschwindigkeiten grobe, bei hohen Geschwindigkeiten feine Abstufungen haben.
Richtig ist: nach jedem Step die Zeit seit Beschleunigungsbeginn (einfach die Timer-Werte aufaddieren), daraus die gewünschte Frequenz und daraus den benötigten Timer-Wert berechnen.
Hatte den Fehler erst auch gemacht *schäm*
und versuche das nun irgendwie umzusetzen, irgendwie steh ich da aber noch auf dem Schlauch...
edit:
Hab den Code jetzt so weit gebracht:
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000
$baud = 9600
Config Portc.0 = Output
Config Portc.1 = Output
Config Timer1 = Timer , Prescale = 8
Enable Timer1
On Timer1 Led
Enable Interrupts
Dim A As Word
Dim V As Word
Dim V0 As Word
Dim S As Word
Dim Sk As Word
Dim Sa As Word
Dim Sv As Word
Dim Temp As Single
Dim Temp1 As Word
Dim T As Single
Dim Ta As Single
Dim Tp As Word
Dim B As Long
Dim Zeit As Single
S = 20000
V = 1000
A = 200
V0 = 100
Temp1 = V - V0
Temp = Temp1 * Temp1
Sa = Temp1 / A
Sk = S - Sa
T = 1 / V0
Zeit = T
B = 0
Do
If B = S Then B = 0
If B < Sa Then
Temp = A * Zeit
Temp = Temp + V0
T = 1 / Temp
Temp = 125000 * T
Tp = Round(temp)
Elseif B > Sk Then
Temp = Ta - Zeit
Temp = A * Temp
Temp = Temp + V0
T = 1 / Temp
Temp = 125000 * T
T = Round(temp)
Else
T = 1 / V
Temp = 125000 * T
Tp = Round(temp)
Zeit = 0
End If
If B = Sa Then Ta = Zeit
Loop
End
Led:
Toggle Portc.1
Load Timer1 , Tp
Zeit = Zeit + T
Incr B
Toggle Portc.1
Return
Allerdings ergibt das Ganze nur ein seltsames Stocken am Schrittmotor. Findet wer den Fehler?
Lesezeichen