Bei linearer Beschleunigung steigt die Geschwindigkeit=Frequenz
proportional mit der vergangenen Zeit. D.h. proportional zu der Summe
aller bisherigen Timer-Werte, die eine Step-IRQ ausgelöst haben.
Die Zeit bis zum nächsten Timerinterrupt berechnet sich zu:
newtimer=konst1/(timersumme+=oldtimer);oldtimer=newtimer;
Man startet aber i.d.R. nicht mit 0 Hz, sondern mit einer Startfrequenz
im Bereich von 400 - 2000 Hz, je nach Qualität von Motor und Treiber,
Höhe der Vcc und der mechanischen Last (Trägheitsmoment).
Andere Vorgehensweise:
In meiner aktuellen DDS-Version erzeuge ich die beiden Phasenstromwerte
aus einer sin- und aus einer cos-Lookup-Table:
Phase1=sinTab[index=highword(istpos+=speed+=accel)&127};
Phase2=cosTab[index];
Wenn ich an einem bestimmten Punkt halten will, begrenze ich speed auf
einen zum Abstand proportionalen Wert.
if(abs(speed)>abs(sollpos-istpos)){speed=konst2*(sollpos-istpos);}
Damit wird speed genau 0, wenn ich am Ziel angekommen bin.
Die Drehrichtung ist das Vorzeichen von speed, Beschleunigung /
Verzögerung ergibt sich aus dem Vorzeichen von accel.
Hört sich einfach toll an, wenn der Motor innerhalb von wenigen
Umdrehungen absolut linear von der max. neg. Geschwindigkeit auf max.
pos. Geschwindkeit (bei mir 3000 rpm) beschleunigt.