Sto cercando di trovare un modo efficiente per calcolare un inverso su un AVR (o approssimarlo).
Sto cercando di calcolare il periodo di impulso per un motore passo-passo in modo da poter variare la velocità in modo lineare. Il periodo è proporzionale all'inverso della velocità ( p = K/v
), ma non riesco a pensare a un buon modo per calcolarlo al volo.
La mia formula è
p = 202/v + 298; // p in us; v varies from 1->100
Testando su Arduino, la divisione sembra essere completamente ignorata lasciando p
fisso su 298
(anche se forse questo sarebbe diverso in avr-gcc). Ho anche provato a sommare v
in un ciclo fino a quando non supera 202
, e contare i loop, ma questo è abbastanza lento.
Potrei generare una tabella di ricerca e archiviarla in flash, ma mi chiedevo se ci fosse un altro modo.
Modifica : forse il titolo dovrebbe essere "divisione efficiente" ...
Aggiornamento : come sottolineato da pingswept, la mia formula per mappare il periodo alla velocità non è corretta. Ma il problema principale è l'operazione di divisione.
Modifica 2 : su ulteriori indagini, il divario sta funzionando sull'arduino, il problema era dovuto sia alla formula errata sopra che a un overflow int altrove.