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 que pueda variar la velocidad linealmente. El período es proporcional a la inversa de la velocidad ( p = K/v
), pero no puedo pensar en una buena forma de calcular esto sobre la marcha.
Mi fórmula es
p = 202/v + 298; // p in us; v varies from 1->100
Probando en el Arduino, la división parece ignorarse por completo, dejando p
fijo en 298
(aunque quizás esto sería diferente en avr-gcc). También he intentado sumar v
en un bucle hasta que supere 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 problema principal es la operación de división.
Edición 2 : en una investigación más a fondo, divide está trabajando en el arduino, el problema se debió tanto a la fórmula incorrecta anterior como a un desbordamiento de int en otra parte.