Auch wenn sich keiner weiter gemeldet hat, nach langem Herumprobieren habe ich es doch so halbwegs hinbekommen. Hier mal ein Video davon:
Am Ende kann man etwas sehen, was mich sehr stört und ich weiß auch nicht, wo das her kommt. Der Motor fährt nicht bis auf die Mindestgeschwindigkeit und kehrt dann um, sondern fährt bis ganz herunter und bekommt dann Probleme, da dann die Frequenz zu klein für den Timer wird. Das Piepen ist der Chopper zur Stromregelung (keine Ahnung, warum man das nur manchmal hört...).
Ansonsten muss ich noch die Fallunterscheidung einbauen, falls der Beschleunigungsweg größer als der Gesamtweg ist, sollte jetzt aber nicht mehr das Problem darstellen.
Hier der Code (ist reichlich kompakter geworden, hab sämtliche Floats rausgeschmissen)
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 Isr
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 Temp As Long
Dim Dt As Long
Dim T As Long
Dim B As Long
S = 10000
V = 2000
A = 1500
V0 = 2
Temp = V - V0
Temp = Temp * Temp
Temp = Temp / A
Sa = Temp / 2
Sk = S - Sa
Sk = Sk + 1
Dt = 0
T = 0
B = 0
V0 = 125 * V0
Do
If B = S Then
B = 0
Toggle Portc.0
End If
If B >= Sa And B <= Sk Then
Dt = 125000 / V
Else
Temp = T / 1000
Temp = A * Temp
Temp = Temp + V0
Dt = 17000000 / Temp
End If
Loop
End
Isr:
Load Timer1 , Dt
Toggle Portc.1
If B < Sa Then
T = T + Dt
Elseif B > Sk Then
T= T - Dt
Else
T=T
End If
Incr B
Toggle Portc.1
Return
Lesezeichen