Estoy tratando de encontrar una manera eficaz de calcular una inversa en un AVR (o aproximación).
Estoy tratando de calcular el pulso período de un motor paso a paso para que yo pueda variar la velocidad lineal. El periodo es proporcional al inverso de la velocidad (p = K/v
), pero no puedo pensar en una buena manera de calcular este sobre la marcha.
Mi fórmula es
p = 202/v + 298; // p in us; v varies from 1->100
Las pruebas en el Arduino, la división parece ser ignorado por completo dejando p
fija en 298
(aunque tal vez esto sería diferente en avr-gcc). También he tratado de sintetizar v
en un bucle hasta que se supera 202
, y contar las vueltas, pero esto es bastante lento.
Yo podría generar una tabla de búsqueda y almacenarlo en flash, pero me preguntaba si no había otra manera.
Edit: puede que el título debería ser "eficiente dividir"...
Actualización: Como pingswept señala, mi fórmula para la asignación de período de velocidad es incorrecta. Pero el problema principal es la operación de división.
Edit 2: En la investigación posterior, división de trabajo en el arduino, el problema se debe tanto a la fórmula incorrecta arriba y un int de desbordamiento en otros lugares.