Estou tentando encontrar uma maneira eficiente de calcular um inverso em um AVR (ou aproximando-o).
Estou tentando calcular o período de pulso de um motor de passo para que eu possa variar a velocidade linearmente. O período é proporcional ao inverso da velocidade ( p = K/v
), mas não consigo pensar em uma boa maneira de calcular isso em tempo real.
Minha fórmula é
p = 202/v + 298; // p in us; v varies from 1->100
Testando no Arduino, a divisão parece ser completamente ignorada, ficando p
fixa em 298
(embora talvez isso seja diferente no avr-gcc). Eu também tentei somar v
um loop até exceder 202
e contar os loops, mas isso é bem lento.
Eu poderia gerar uma tabela de pesquisa e armazená-la em flash, mas estava pensando se havia outra maneira.
Edit : Talvez o título deva ser "divisão eficiente" ...
Atualização : Como pingswept aponta, minha fórmula para mapear o período para a velocidade está incorreta. Mas o principal problema é a operação de divisão.
Edit 2 : Em uma investigação mais aprofundada, o divide está funcionando no arduino, o problema foi devido à fórmula incorreta acima e a um transbordamento int em outro lugar.