формирование пачек на AD9850

Ikingi
Ikingi аватар
Offline
Зарегистрирован: 23.10.2018

Всем привет!

Делаю проект, связанный с акустическими измерениями, в котором нужно формировать пачки синусоидального сигнала примерно от 2 до 10 МГц строго по синхроимпульсу, и конкретно застрял на синхронизации.

Пример сигнала:

На данный момент схема такая: есть dds AD9850, частоту на нём задаю последовательно с ардуино. После запуска dds работает непрерывно, синхроимпульс от триггера запускает счётчик периодов прямоугольника от dds, запрограммированный на нужное число периодов в пачке, а также сигнал с триггера открывает аналоговый ключ 74hc4066, пропуская сигнал с аналогового выхода dds. Сигнал с выхода счётчика сбрасывает триггер и аналоговый ключ обрубает сигнал, вроде всё работает.

Проблема тут в том, что при таком вырезании пачки из непрерывного сигнала фаза "плавает", а необходимо, чтобы сигнал при любом значении периода синхроимпульса и частоты был неподвижен, а лучше - начинался всегда с нуля.

Т.е. нужно либо как-то приостанавливать и возобновлять формирование сигнала без повторного перепрограммирования, либо "по щелчку" выставлять косинус 0.

Мои неудачные идеи: 1) в даташите написано, что reset возвращает фазу в положение cos(0), но по сути всё сбрасывает и надо заново программировать, 2) подстраивать программно фазу - шаг 11.25 градусов великоват, 3) включать/отключать кварц dds-а когда надо - мутная идея, 4) после синхроимпульса ожидать нулевой фазы и тогда только начинать отсчёт - не годится, т.к. этот генератор должен зависеть от синхронизации, а не наоборот.

Вопрос: можно на AD9850 как-то организовать пачки в любой момент времени?

Если нет, то буду рад любым предложениям по замене dds-ки.

Morroc
Offline
Зарегистрирован: 24.10.2016

Ikingi пишет:

1) в даташите написано, что reset возвращает фазу в положение cos(0), но по сути всё сбрасывает и надо заново программировать

Цитата:

NOTE: The RESET does not reset the shift register. It only resets the FQ_UD’s register and the phase accumulator to COS(0).

Если я правильно понял, то вам после reset нужно дернуть FQ_UD и даже без загрузки управляющего слова dds должен выдать что и до reset.
 
 
Ikingi
Ikingi аватар
Offline
Зарегистрирован: 23.10.2018

Morroc пишет:

Цитата:

NOTE: The RESET does not reset the shift register. It only resets the FQ_UD’s register and the phase accumulator to COS(0).

после reset нужно дернуть FQ_UD

Ох, спасибо большое, действительно сработало, если добавить после ресета FQ_UD, частота не слетает, не догадался до этого. Смущала всегда эта фраза:

Цитата:

The shift register should be treated as
containing “random” data after a RESET and may inadvertently
contain a reserved “factory code” that causes
the DDS to behave in unintended ways. For this reason,
a FQ_UD should not be sent until the shift register has
been programmed with the intended data.
Якобы регистр данных сбросом не очищается, но всё же содержит уже случайные данные, поэтому FQ_UD без данных посылать не стоит. На деле это проявляется так, что после сброса при следующей загрузке данных настройки сбиваются, но повторная загрузка восстанавливает работу.

Сейчас не могу проверить на нужных частотах насколько постоянна задержка такой операции, но это уже отдельный разговор. Ещё раз благодарю.