J'essaie de trouver un moyen efficace de calculer un inverse sur un AVR (ou de l'approcher).
J'essaie de calculer la période d'impulsion d'un moteur pas à pas afin de pouvoir faire varier la vitesse linéairement. La période est proportionnelle à l'inverse de la vitesse ( p = K/v
), mais je ne peux pas penser à un bon moyen de calculer cela à la volée.
Ma formule est
p = 202/v + 298; // p in us; v varies from 1->100
En testant sur l'Arduino, la division semble être complètement ignorée en laissant p
fixe à 298
(bien que ce serait peut-être différent dans avr-gcc). J'ai également essayé de sommer v
dans une boucle jusqu'à ce qu'elle dépasse 202
et de compter les boucles, mais c'est assez lent.
Je pouvais générer une table de recherche et la stocker en flash, mais je me demandais s'il y avait une autre façon.
Edit : Peut-être que le titre devrait être "division efficace" ...
Mise à jour : Comme le souligne pingswept, ma formule pour mapper la période à la vitesse est incorrecte. Mais le problème principal est l'opération de division.
Edit 2 : Après une enquête plus approfondie, la division fonctionne sur l'arduino, le problème était dû à la fois à la formule incorrecte ci-dessus et à un débordement int ailleurs.