Mastar, осознал задачи.
Такие вещи в идеале, конечно програмятся на ассемблере, но мы будем рассматривать шарообразный конь в вакууме (с) анекдот. Поэтому достаточно писать на С.
Итак, делим задачу на две - генерацию импульсов и подготовку данных для генерации импульсов. Пока рассматриваем первую задачу.
Чтобы подобное написать, надо запрограммировать таймер на выполнение каждые 100 мкс, к примеру. Для начала - можно и медленее запустить хоть раз в 10мс, растянув весь процесс во времени.
Затем создаешь комплект переменных для одной форсунки, в которых указываешь на какой вызов таймера эта форсунка должна потянуть за ножку, на какой - отпустить. В сложном случае - начиная с какого вызова и по какой - ШИМить и как шимить.
Таймер поступает просто - он с каждым вызовом увеличивает счетчик на 1 и выполняет все, что нужно выполнить для этого состояния счетчика - открывает форсунку, к примеру.
На этом этапе и со скоростью таймера 10мс тебе еще хватит ардуины. Когда будешь переходить на нормальную скорость таймера, придется уйти от некоторого кода arduino, заменив более быстрым аналогом.
Нужно продумать переменные для каждой форсунки, чтобы они были максимально независимыми.
К примеру переменные (не продумывал серьезно):
1. Длительность двух оборотов в вызовах таймера
2. Момент открытия форсунки после начала двух оборотов
3. длительность открытия форсунки
У этих переменных есть недостаток - нет возможности сообщить таймеру, что оборот начнется через 3 вызова таймера. Или начался 4 вызова назад.