Я пытаюсь найти эффективный способ вычисления обратного на AVR (или аппроксимируя его).
Я пытаюсь рассчитать период импульса для шагового двигателя, чтобы я мог линейно изменять скорость. Период пропорционален обратной скорости ( p = K/v
), но я не могу придумать хороший способ рассчитать это на лету.
Моя формула
p = 202/v + 298; // p in us; v varies from 1->100
При тестировании на Arduino разделение, похоже, полностью игнорируется, оставляя p
фиксированным на 298
(хотя, возможно, в avr-gcc это будет иначе). Я также пытался суммировать v
в цикле, пока он не превысил 202
, и подсчитывал циклы, но это довольно медленно.
Я мог бы создать таблицу поиска и сохранить ее во флэш-памяти, но мне было интересно, есть ли другой способ.
Редактировать : Может быть, заголовок должен быть "эффективный разрыв" ...
Обновление : как указывает Pingswept, моя формула для отображения периода на скорость неверна. Но главная проблема - операция деления.
Редактировать 2 : При дальнейшем исследовании, разделение работает на Arduino, проблема была связана с неправильной формулой выше и переполнением int в другом месте.