Есть привод от матричного принтера с шаговым двигателем.
Приладил к шаговому двигателю драйвер из четырёх кт815. Ключами управляет Atmega.
Алгоритм движения такой:
Шаг 1 (подаём питание на обмотку А), пауза, питание на обмотке А выключается.
Шаг 2 (подаём питание на обмотку В), пауза, питание на обмотке В выключается.
Шаг 3 (подаём питание на обмотку С), пауза, питание на обмотке С выключается.
Шаг 4 (подаём питание на обмотку Д), пауза, питание на обмотке Д выключается.
и дальше опять шаг 1.
Т.е. всё понятно - прямолинейное движение в одну сторону.
Стало скучно и захотелось это движение (а точнее скорость движения) сделать нелинейным, а именно если требуется скажем 100 шагов сделать то у первого шага (а также у последнего) пауза самая большая, у следующего шага чуть меньше, у 50-го шага пауза самая минимальная и потом снова на увеличение.
Что то типа "экспоненциального" закона изменения - или даже что-то типа "параболического" движения.
Т.е. нужна функция, в которую бы мы заходили, передавали 2 параметра это полное количество шагов при перемещении, и номер шага.
Не знаю правильно и понятно ли объясняюсь но хочу чтобы двигатель стартовал с минимальной скоростью (максимальная пауза), и ускорялся, посредине движения скорость была максимальная (минимальная пауза),а потом пауза вновь бы увеличивалась.
Т.е. можем заведомо задать минимальную скорость (максимальную паузу шага - 4000 uS), и максимальную скорость (минимальную паузу - 2000 uS).
Как такую функцию сделать и нужно учесть что количество шагов может быть как чётным так и нечётным.
Есть какие-либо мысли? Сам в программировании не очень силён

Спасибо!