Измерения | DDS-генератор на AVR - нужна помощь |
|
---|---|---|
Леонид Иванович: Ладно, ладно, ухожу. На шутку ATLab не надо обижаться.. А самое лучшее продолжение от Леонида Ивановича, это просто открыть на pro-radio.ru тему, например : "Генератор на DDS от Леонида Ивановича" Или как по другому назовете... |
|
|
Можно Леонида Ивановича и здесь послушать, почему нет. Также понимаю ATLab, накатали 130 страниц и не только о генераторе. Теперь, чтобы что-то найти, надо основательно потрудиться. Ну да ладно, что ж теперь..в чёрной крепости его надо было через дымоход брать, да... |
|
|
Л.И.: Иначе никак, ведь внутри одного цикла DDS нужно перегрузить две 32-разрядных переменных, на это просто нет времени. Да и в моем случае ресурсов не хватает для таких вещей. Ну, хорошо, о децибелах ни слова. (Формулу вашу подправлю только: 6.02*N+1.76+10log(Fs/(2Fmax)), последнее слагаемое даст дополнительно 13 дБ) Ну, положим, генератор у вас простаивает 1.5 мкс, да ещё требуется время на приём кода новой частоты по уарту, думаю, что генерация-таки прерывается. А в моём варианте принимается код частоты (пакет 5 байт) и после выдачи выборки старой частоты через 0.5 мкс выдаётся выборка уже новой частоты, т.е. нет перерыва генерации на загрузку-разгрузку. Так же и для свипа. |
|
|
Vlad_Petr На шутку ATLab не надо обижаться Так это была шутка? GM Формулу вашу подправлю только С исправлением согласен, мой вариант формулы был для полной зоны Найквиста (Fmax = 1/2*Fs), при таких условиях результаты у нас будут равны. А дополнительные 13 дБ будут, если сузить полосу Вашего генератора до 50 кГц, тут Вы правы. Получите примерно 63 дБ. По этой формуле для 16-разрядного генератора с Fs = 206 кГц и Fmax = 50 кГц получите примерно 101 дБ. Разница - 38 дБ. Но хочу подчеркнуть, что есть еще шум квантования фазы (или еще говорят "phase truncation spurs"), который совсем не белый. Ну да ладно. GM думаю, что генерация-таки прерывается Время на прием кода новой частоты учитывать не надо, так как прием ведётся в фоне. У меня ведь DDS работает в прерывании таймера, других прерываний в системе нет, но зато есть время на выполнение основной задачи. Прерывание, с учетом времени входа и выхода, занимает 92 цикла. Таймер генерирует прерывания каждые 97 циклов. Загрузка процессора задачей DDS составляет 95%, а 5% остается на основную задачу, где ведется прием команд от управляющего процессора (используется поллинг). Когда команда полностью принята и данные сохранены в буфере, DDS останавливается, код частоты (или фазы) копируется в рабочие регистры DDS, и DDS снова запускается. Прерывания генерации нет, просто очередной отсчет после перезагрузки появляется на выходе с некоторой небольшой дополнительной задержкой (на копирование буфера в регистры). Это и есть скачок фазы. Плохо, конечно, но нормальный генератор без таких скачков нужно уже строить на ПЛИС. |
|
|
Леонид Иванович: Vlad_Petr На шутку ATLab не надо обижаться Так это была шутка? Поэтому прошу: при всем уважении, Л.И. организуйте другую тему про свои генераторы - у них совершенно другая конструкция, другой код программы, обсуждать детали которого здесь, imho, нет смысла. P.S. Почитал еще раз последние страницы, в уме сложился такой образ: пришел взрослый парень с набором "Лего-робот" в песочницу и говорит малышне: фигня ваши песочные куличики, смотрите как надо робота программировать... |
|
|
ATLab Извините, пожалуйста! |
|
|
ATLab: пришел взрослый парень с набором "Лего-робот" в песочницу и говорит малышне: фигня ваши песочные куличики, смотрите как надо робота программировать... Теперь вопрос, а скорее просьба к Леониду Ивановичу: у нас так и не родился хороший оконечник с фильтром, поэтому прошу Вашего разрешения на использование фрагмента схемы проекта "SG-532" для завершения "DDS-1". Это открытый проект, поэтому крайние версии схем и плат будут выложены в интернете и доступны для повторения всеми желающими. |
|
|
madgrey: нет никаких проблем с использованием любых частей схемы SG-532, как и других моделей генераторов (все схемы я публиковал). Вот только мой выходной буфер медленноват для обсуждаемого здесь генератора. По крайней мере, придется подобрать более быстрый ОУ. А можно в качестве буфера применить и что-то интегральное, например, AD811. У него выходной ток 100 мА, этого как раз хватает для работы на нагрузку 50 Ом (+50 Ом согласующий резистор). Есть и другие интегральные решения, можно посмотреть драйверы ADSL. Ну а фильтр вполне нормальный и LC, как было здесь на схемах. Между резисторной матрицей ЦАП и фильтром нужно, конечно, ставить ОУ. Можно тот же AD811. Фильтр не обязательно рассчитывать с входным/выходным импедансом 50 Ом, вполне можно и 200 или 600 Ом, чтобы была возможность применить ОУ с меньшим выходным током. Можно поставить и активный фильтр, но для частоты среза порядка 1 МГц потребуются довольно быстрые ОУ. А из дешевых все теперь низковольтные, это потребует организации специального уровня питания типа ±5 В. Не вижу смысла делать фильтр активным. На выходе резисторной матрицы сигнал однополярный, поэтому каскад на ОУ должен его смещать. Сделать это лучше интегратором. В интеграторе может работать любой ОУ, лучше OP07, но пойдет даже LM358 при условии допустимости чуть большего смещения нуля. Регулятор уровня нужно ставить между фильтром и выходным буфером, в простейшем случае это переменный резистор. Если хочется сделать электронную регулировку, то при такой полосе придется ставить нормальные умножающие ЦАП. Для одноканального варианта я применял AD5452, для двухканального - AD5449. Они 12-разрядные, довольно дорогие. Но можно взять из этой же линейки и 10-разрядные, или даже 8-разрядные. Правда, дискретность установки амплитуды тогда увеличится. На выходе буферного усилителя нужен ступенчатый аттенюатор, его можно коммутировать с помощью герконовых реле. Я обычно использую EDR101. Аттенюатор рассчитывается для импеданса 50 Ом, только нужно помнить о мощности рассеяния согласующего резистора, который работает при ослаблении 0 дБ. Самый трудный момент - преобразователь синуса в меандр. Ничего лучше, чем применить быстрый rail-to-rail ОУ (AD8051, AD8091), придумать не удалось. Схема есть в SG-642, но там я дополнительно переключаю уровни питания ОУ, что только усложняет схему. Зря так сделал. Можно запитать ОУ ±5 В, а разницу амплитуды синуса и меандра компенсировать программно с помощью аттенюатора. Все равно там нужны разные калибровки. Интересно делает Agilent в своих функциональных генераторах. Синус в прямоугольник преобразуют с помощью компаратора, а порогом компаратора регулируют скважность выходного сигнала. Если есть желание сделать регулируемое постоянное смещение на выходе, то его можно суммировать на вход выходного буфера. А формировать это напряжение можно с помощью ШИМ управляющего контроллера. Быстрой регулировки тут не требуется, поэтому нет проблем как следует ШИМ отфильтровать. |
|
|
Спасибо за оперативный ответ. К слову, на примере Ваших статей и конструкций с конца 90-х учился современной схемотехнике. Низкий Вам поклон за Вашу работу и пламенный привет из города-героя Севастополя. Теперь по сути. Леонид Иванович: Ну а фильтр вполне нормальный и LC, как было здесь на схемах. Леонид Иванович: Можно поставить и активный фильтр, но для частоты среза порядка 1 МГц потребуются довольно быстрые ОУ. А из дешевых все теперь низковольтные, это потребует организации специального уровня питания типа ±5 В. Не вижу смысла делать фильтр активным. На выходе резисторной матрицы сигнал однополярный, поэтому каскад на ОУ должен его смещать. Сделать это лучше интегратором. В интеграторе может работать любой ОУ, лучше OP07, но пойдет даже LM358 при условии допустимости чуть большего смещения нуля. Регулятор уровня нужно ставить между фильтром и выходным буфером, в простейшем случае это переменный резистор. Если хочется сделать электронную регулировку, то при такой полосе придется ставить нормальные умножающие ЦАП. Для одноканального варианта я применял AD5452, для двухканального - AD5449. Они 12-разрядные, довольно дорогие. Но можно взять из этой же линейки и 10-разрядные, или даже 8-разрядные. Правда, дискретность установки амплитуды тогда увеличится. Леонид Иванович: Самый трудный момент - преобразователь синуса в меандр. Леонид Иванович: Если есть желание сделать регулируемое постоянное смещение на выходе, то его можно суммировать на вход выходного буфера. А на передней панели у меня поместились: дисплей, полная цифровая клавиатура, энкодер+4 кнопки и до 6 байонетов. Места осталось максимум под два переменника. Соосные ставить неохота, тем более, что в перспективе уровень и смещение по каналам будут регулироваться электронно с помощью кнопок и энкодера. |
|
|
madgrey Спасибо! madgrey: У меня есть ряд возражений по поводу самодельных LC фильтров высокого порядка Есть, конечно, определенные проблемы. Требуется высокая точность номиналов, необходим учет паразитных параметров, а методика настройки фильтра довольно туманна. К тому же, для настройки нужно иметь более высокочастотные приборы, чем создаваемый. Но начиная с частот порядка десятков мегагерц, такой фильтр является, пожалуй, единственной альтернативой. Если речь идет о 200 кГц, то активный фильтр строится без проблем. Когда-то давно делал такой на OP42, сейчас можно подобрать что-то подешевле с полосой порядка 10 МГц и скоростью нарастания порядка 50 В/мкс. На такой частоте и КР572ПА1 вполне нормально работает в регуляторе уровня. madgrey: этот генератор задумывался как ГСПФ и в этом его главная ценность Я понимаю, что у всех задачи разные, но мой личный опыт говорит о том, что генератор сигналов произвольной формы в работе не очень нужен. Я пользуюсь исключительно многоканальными генераторами синуса и прямоугольных импульсов (хоть делал и произвольной формы). С другой стороны, AWG в хозяйстве тоже не помешает. Но я бы не стал называть эту возможность главной ценностью. Тем более, учитывая качество выходного сигнала. madgrey: Именно компаратор GM и предложил использовать для этой цели. Компаратор тоже хорошо, но основная сложность - обеспечить одинаковую амплитуду и смещение для синуса и меандра. Некрасиво, если при переключении формы меняются другие параметры сигнала. С компаратором можно застрять в преобразователях уровней. madgrey: Только ШИМом не получится, т.к. занял его выводы Кроме ШИМа нет простых и дешевых вариантов сформировать программируемое напряжение. Внешний ЦАП будет намного дороже. Другое дело, что раз уровень регулируется вручную, так и смещение тоже логично регулировать вручную. Единство стиля - тоже важная вещь в эргономике приборов. У меня так и сделано в младшем генераторе импульсов PG-760. Ну а с клавиатурой при необходимости всегда можно что-то придумать: подключить ее через SAA3010, или расширить порты с помощью 74HC595/597, или организовать аналоговую клавиатуру с резисторной цепочкой на АЦП. madgrey: до 6 байонетов А зачем они? Есть два канала, поэтому должны быть только два выходных разъема. Любой прибор должен быть сбалансированным. В этом генераторе применяется ЦАП низкой разрядности и таблица очень маленького объема для форм. Как следствие, качество выходного сигнала хорошим быть не может. Поэтому я бы не вкладывал в этот прибор слишком много средств и времени. Все регулировки сделал бы ручными, а аналоговый тракт - простейшим. Получил бы красивый, простой и дешевый прибор. А нормальный AWG нужно строить на FPGA + RAM + DAC, и это тоже вполне подъемно для радиолюбителей даже с LUT-технологией. Силы и время лучше направить туда. После завершения простого прибора, разумеется |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |