МК STM32F429, хотелось бы получить синус 1 МГц
Это несложно. Таймеры в этом МК могут работать на частоте ядра - максимум 180 МГц. Максимальная частота на драйверах пинов составляет 100 МГц на нагрузку 10 пФ.
Итого, все зависит от возможности грузить шину ОЗУ при загрузке значений синуса в ШИМ регистр таймера.
Скажем, дискретизация синуса в 15 МГц позволит достаточно несложно получить искомое при достаточно простом ФНЧ.
Итого, делаете таблицу из 15 значений синуса на период (естественно сдвинутую вверх на половину амплитуды). Все значения синуса будут лежать в диапазоне от 0 до 11. Выбираете стрим и канал DMA по каналу используемого таймера.
Указываете таблицу синуса в качестве source DMA, а регистр канала ШИМ в таймере в качестве destination.
Предделителем таймера создаете входную частоту счетчика равной 15 МГц (например, при входной частоте 180 МГц и входном прескалере = 1, регистр TIMx->ARR должен быть равен (180/15)-1=11.
Вот собственно и все.
Склон ФНЧ на выходе ШИМ должен обеспечивать срез чуть выше 1 МГц, а необходимое подавление на частоте 15 МГц. Это почти 4 октавы и даже обычная однозвенная RC цепь даст чуть менее -24 дБ подавления несущей ШИМ - то есть примерно в 16 раз по напряжению. Второй порядок ФНЧ обеспечит 48 дБ (250 раз) подавления несущей ШИМ.
Естественно, что разрядность ШИМа будет невелика, но для монохромного (одночастотного) сигнала это не так уж важно.
Если вы выберете другой МК, у которого есть ШИМ высокого разрешения, то там обычно эквивалентная частота порядка 4...5 ГГц и разрядность ШИМа для искомого 1 МГц и 15 МГц дискретизации составит уже порядка 8 разрядов.
ЗЫ. Есть так же вариант работать во второй зоне Найквиста, что позволит увеличить разрядность, но потребует ПОЛОСОВОГО фильтра в качестве выходного (антиалиасингового).