Есть сервомотор, который управляет перемещением объекта. На вход подаем два сигнала: step и dir. Частота сигнала step задает скорость перемещения:V=k*f, V - линейная скорость перемещения объекта[m/s], к - коэфф; f - частота входного сигнала, Hz. Надо линейно разгонять объект, двигать его и затем тормозить(тоже равноускоренно). Как реализовать ускорение/торможение на микроконтроллере?
Вариант1:
Таймер1 в режиме счетчика и таймер2 в режиме ШИМ.
Запускаю таймер1, который будет остчитывать тики t. По каждому тику вычисляю скорость в данный момент по V = a*t,(ускорение задается), пересчитываю скорость в частоту, разрешаю обновление регистра таймера2. По окончании периода таймера2, автоматически запишестя новое значение частоты. Не устраивает одно: например, тик t=20ms, при пересчете скорости получим частоту ШИМ 100Гц(например), получится, что основной таймер в "холостую" протикает 5 тактов, чего не очень хочется. Напрашивается решение: изменять длительность тика основного таймера1, но чего-то туплю, подскажите как пересчитать?
Можно ли реализовать только на одном таймере?