Частота - около 8 кГц (при кварце 16 МГц), шаг сдвига фазы - несколько сотых градуса, диапазон, видимо, 0..180 градусов. Но это всё не принципиально, интересует только алгоритм изменения фазового сдвига между выходами, остальное очевидно...
С прерываниями связываться не хочется - контроллер будет загружен "тяжёлыми" задачами, вероятно, с другими прерываниями, если ещё и прерывание от генератора будет "под ногами путаться", будет совсем тяжко. Одно дело иногда (при необходимости) задавать новое значение сдвига, и совсем другое отвлекаться на каждый перепад выходного напряжения.
Двойная буферизация в данном случае только усложняет дело - при записи новых значений в регистры OCRx обновление произойдёт не одновременно, а каждый канал "досчитает" старое значение и в
разные моменты времени каналы стартуют с новыми значениями. Поэтому я и предполагаю, что надо выдавать reset на прескалер, вроде бы при этом происходит безусловное обновление значений OCRx. А чтобы не попасть на момент переключения, надо, видимо, и таймер останавливать.
За ссылку (http://electronix.ru/forum/index.php?showtopic=14401) спасибо, действительно, задача похожая (и для похожих целей), только вопрошающий в той ветке как то сам не чётко понимает, что ему нужно. Соответственно, и ответы несколько "не в ту степь".
В целом, видимо, более простого (изящного) пути нет...