Estoy tratando de encontrar una manera eficiente de calcular un inverso en un AVR (o aproximarlo).
Estoy tratando de calcular el período de pulso para un motor paso a paso para poder variar la velocidad linealmente. El período es proporcional al inverso de la velocidad ( p = K/v
), pero no puedo pensar en una buena forma de calcular esto sobre la marcha.
Mi formula es
p = 202/v + 298; // p in us; v varies from 1->100
Al probar en Arduino, la división parece ignorarse por completo, quedando p
fijada en 298
(aunque quizás esto sería diferente en avr-gcc). También he intentado sumar v
en un bucle hasta que excede 202
y contar los bucles, pero esto es bastante lento.
Podría generar una tabla de búsqueda y almacenarla en flash, pero me preguntaba si había otra forma.
Editar : Tal vez el título debería ser "división eficiente" ...
Actualización : como señala pingswept, mi fórmula para asignar el período a la velocidad es incorrecta. Pero el principal problema es la operación de división.
Edición 2 : en una investigación adicional, dividir está trabajando en el arduino, el problema se debió tanto a la fórmula incorrecta anterior como a un desbordamiento int en otra parte.