Вопрос собственно в заголовке. Сижу вот читаю теорию и не могу понять...
Мне нужно получить только меандр с частотой 0.5 - 32.5 кгц с шагом 10Гц.
Завожу таймер на мк, где то 60кгц прерывания, далее завожу фазовый аккумулятор длинной 32бит.
Фазовый аккумулятор нужно приращивать каждое прерывание, вопрос на сколько и в какие моменты портом дергать?
как работает прямой цифровой синтез (DDS)?
-
electronic255
- Встал на лапы
- Сообщения: 81
- Зарегистрирован: Вт окт 05, 2010 20:57:19
Re: как работает прямой цифровой синтез (DDS)?
Если вам нужен именно меандр, то лучше использовать обычный ШИМ-выход.
Если говорить о DDS, то оно работает следующим образом.
Прежде всего нам надо определить функцию, которая будет выдавать интересующий нас сигнал в зависимости от фазы. Для меандра это может быть, например, что-то такое:
И дальше на каждом шаге инкрементируем аккумулятор фазы, вызываем эту функцию и то, что она вернула, выводим в порт (либо дергаем пин).
Если говорить о DDS, то оно работает следующим образом.
Прежде всего нам надо определить функцию, которая будет выдавать интересующий нас сигнал в зависимости от фазы. Для меандра это может быть, например, что-то такое:
Код: Выделить всё
int16_t square_wave(int16 amplitude,uint32_t phase)
{
uint8_t phase_msb;
phase_msb = phase >> 24;
if (phase_msb<128)
{
return amplitude;
}
else
{
return 0;
}
}
И дальше на каждом шаге инкрементируем аккумулятор фазы, вызываем эту функцию и то, что она вернула, выводим в порт (либо дергаем пин).
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- КРАМ
- Друг Кота
- Сообщения: 25125
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: как работает прямой цифровой синтез (DDS)?
[uquote="electronic255",url="/forum/viewtopic.php?p=3488529#p3488529"]Мне нужно получить только меандр с частотой 0.5 - 32.5 кгц с шагом 10Гц.[/uquote]
Дело в том, что DDS не генерирует чистую функцию из ROM. На выходе получается произведение частоты накачки и генерируемого сигнала (огибающая выходного спектра представляет собой функцию sin(x)/x). То есть принцип работы основан на СТРОБОСКОПИЧЕСКОМ ЭФФЕКТЕ и естественной интерполяции значений синуса (если генерируется он), в том числе в районе перехода через ноль.
При генерации меандра это приводит к модуляции фазы фронта комбинационными частотами. Для синуса это не представляет проблем, поскольку при сильном разносе частоты сигнала и частоты выборок простейший фильтр НЧ легко подавляет комбинационные частоты, а даже дает возможность получить синтез в районе одной из комбинационных частот (при необходимости) с помощью соответствующего полосового фильтра.
Генерация меандра с помощью ШИМ ограничит шаг перестройки частоты периодом системного клока, что на много порядков больше, нежели чем можно получить при DDS.
Можно пойти по пути генерации синуса с последующим преобразованием его в меандр с помощью компаратора.
Дело в том, что DDS не генерирует чистую функцию из ROM. На выходе получается произведение частоты накачки и генерируемого сигнала (огибающая выходного спектра представляет собой функцию sin(x)/x). То есть принцип работы основан на СТРОБОСКОПИЧЕСКОМ ЭФФЕКТЕ и естественной интерполяции значений синуса (если генерируется он), в том числе в районе перехода через ноль.
При генерации меандра это приводит к модуляции фазы фронта комбинационными частотами. Для синуса это не представляет проблем, поскольку при сильном разносе частоты сигнала и частоты выборок простейший фильтр НЧ легко подавляет комбинационные частоты, а даже дает возможность получить синтез в районе одной из комбинационных частот (при необходимости) с помощью соответствующего полосового фильтра.
Генерация меандра с помощью ШИМ ограничит шаг перестройки частоты периодом системного клока, что на много порядков больше, нежели чем можно получить при DDS.
Можно пойти по пути генерации синуса с последующим преобразованием его в меандр с помощью компаратора.