Ich versuche einen effizienten Weg zu finden, eine Inverse auf einem AVR zu berechnen (oder zu approximieren).
Ich versuche, die Impulsdauer für einen Schrittmotor so zu berechnen, dass ich die Geschwindigkeit linear variieren kann. Die Periode ist proportional zur Umkehrung der Geschwindigkeit (p = K/v
), aber ich kann mir keine gute Möglichkeit vorstellen, dies on the fly zu berechnen.
Meine Formel lautet
p = 202/v + 298; // p in us; v varies from 1->100
Beim Testen auf dem Arduino scheint die Division ignoriert zu werden, wenn sie p
fest bei 298
belassen wird (obwohl dies in avr-gcc möglicherweise anders wäre). Ich habe auch versucht, v
in einer Schleife zu summieren , bis sie übersteigt 202
, und die Schleifen zu zählen, aber das ist ziemlich langsam.
Ich konnte eine Nachschlagetabelle generieren und in Flash speichern, aber ich fragte mich, ob es einen anderen Weg gab.
Edit : Vielleicht sollte der Titel "effizient teilen" sein ...
Aktualisieren : Wie Pingswept hervorhebt, ist meine Formel für die Zuordnung der Periode zur Geschwindigkeit falsch. Das Hauptproblem ist jedoch die Divisionsoperation.
Bearbeiten 2 : Bei weiteren Untersuchungen arbeitet Divide am Arduino. Das Problem lag sowohl an der falschen obigen Formel als auch an einem int-Überlauf an einer anderen Stelle.