Pull to refresh

Comments 36

Конечно со специализированными DDS от ADI ни в какое сравнение не идёт, но как пища для ума интересно. Если доработать, то может полезная вещь получиться.
Недавно запустил готовый DDS-модуль на AD9850 с Arduino. Почему то на частоте ниже 10 Гц сигнал пропадает.

Вы не проверяли как ваш модуль ведет себя крайне низких частотах? Сигнал имеет синусоидальную форму?
В DDS передается значение частоты или приращения? Вообще я микросхемы DDS воспринимаю только как генераторы в области радиочастот, для построения приемников, трансиверов. Запустить его на частоте в 10 Гц мне бы и в голову не пришло.
Да, на низких частотах сигнал имеет синусоидальную форму. Генератор будет работать, если слово приращение больше ноля.
По идее, должен работать на низких частотах. Вплоть до значения = частота генератора / максимальное значение аккумулятора.
Возможно в вашем модуле развязка по постоянке на выходе через конденсатор.
Ну или какие-то особенности программной настройки. (Конкретно с этой микросхемой не работал, так что только предположение)
Много работал с DDS от ADI, правда более современных. Если судить по его архитектуре — не вижу никаких принципиальных проблем с работой на инфранизких частотах. Правда ниже 10 Гц не пытался опускаться. Возможно дело в том что вы просто пытались тактировать его слишком низкой частотой или не хватало разрешения? Кстати конкретно у этого прибора нижняя частота тактирования в даташите указана в 1 МГц. Значит какие то частотные ограничения снизу всё таки могут присутствовать.
Делал подобное в коммерческом проекте. На Cyclone I добился частоты инкремента аккумулятора в 240 МГц. Конкретно в данном приборе было выгоднее использовать ПЛИС чем готовый DDS.

Но надо вот что добавить. Несмотря на то, что теоретически можно генерить до половины частоты квантования. При приближении к этому пределу DDS алгоритм дает очень большой джиттер. Форма сохраняется, но фаза дрожит. У меня получилось приемлемая стабильность фазы до 25-30 МГц. Но заказчику захотелось сигнал в 60 МГц — пришлось переделывать и ставить готовый DDS от Analog Device
Да, ADI давно на этой теме сидит и у них с обработкой нарастания фазы всё очень хорошо обстоит. Получается генерить сигнал с малыми фазовыми шумами даже на частотах всего в несколько раз ниже частоты тактирования, особенно если не нужен очень широкий диапазон и можно применить узкополосные выходные фильтры.
В моем случае программа посчитала, что до 247 МГц. Так что можно и 240.
Про джиттер — согласен.
Для работы на высоких частотах делитель напряжения в ЦАП можно попробовать скомпенсировать. Для этого параллельно резисторам ставим конденсаторы, заведомо большие, чем паразитные ёмкости резисторов. Величины емкостей должны быть такими, чтобы комплексные сопротивления имели такие же соотношения, что и исходные чисто активные. Для простоты можно принять, что постоянные времени комплексных сопротивлений должны быть одинаковыми R1C1 = R2C2.
Не могли бы вы, пожалуйста, продемонстрировать ваш тезис небольшим рисунком с конкретными значениями элементов?
В R-2R ЦАП добавить
— параллельно каждому резистору R конденсатор емкостью 2С
— параллельно каждому резистору 2R конденсатор емкостью С
С тем расчетом, что добавленная емкость (пФ-нФ) много больше паразитной (доли пФ).
По такому принципу осуществляется частотная компенсация резистивных делителей напряжения, например, в щупах осциллографов.
Сработает ли для ЦАП полной уверенности нет.
А, я понял! R-2R лестница превращается в C-2C лестницу на высоких частотах.
Но лучше просто поставить на выходе ЦАП. Если уж нашли деньги на ПЛИС то на нём не разоритесь.
Приобрел КР572ПА1 и ПА2. Как будет время, обязательно попробую.
Вау. Интересно будет почитать как можно скрестить советскую разработку времён моей юности с современным ПЛИС. Надеюсь вы поделитесь и этим своим опытом.
Вместо резисторов поставьте ЦАП.

Если хорошо оформить код в виде IP-ядра, возможно, даже удастся продать.
mua-ha-ha. За тыщу рублей штук пять продать может получится. Если рекламную кампанию провести. Все это пишется за день работы (оптимист скажет — за час) и зачастую удобнее сделать самому под свою конкретную задачу, чем интегрировать стороннее ядро.
Вам, самоделкиным, виднее…
А нам однажды только за проект такого устройства 4000 евро заплатили.
Ну кто-то и лекции по 1 млн за час читает…
И проект-то, наверное УСТРОЙСТВА был, а не ip-ядра, которое лишь малая часть его?
Есть разница между приемниками на фото? Верхний вроде более старый.
Верно. Разница есть. Белый на базе Elonics E4000 (снят с производства) и принимает 52 — 2200 MHz. Черный на R820T, принимает 24 — 1766 MHz. У первого часто был не впаян защитный диод, и они выходили из строя.
60$ за первый (верхний) просят (стоит ли он того?), а за черный 8, все мечтаю купить… Есть что слушать выше 1,4 ГГц? Софт один и тот же на оба подходит?
Не стоит он того. Цена из за того, что их сняли с продаж. В него диод еще надо впаивать. Мне черный больше нравится, он принимает с 24 МГц, то есть попадает и СИБИ и любительский 28-29 МГц диапазон. Выше 1 ГГц мне однажды удалось принять местный любительский маяк на 1.2 на штатную антенну. Сразу после появления R820T не поддерживался, потом поддерживался не полностью, сейчас все нормально. Причем недавно попробовал, белый свисток — почему-то не «завелся». А так, ПО использую — SDR Sharp, подходил к обоим.
Не надо мечтать, надо купить, попробовать и забросить на полку :) Стоит он не таких больших денег, чтоб потом сильно о них пожалеть. Параметры по качеству приема у него так себе, но возможности такие, что лет 10 назад о таких и мечтать не приходилось. Чтобы хоть что-то принять на УКВ, надо было портативку найти, а китайские еще были не сильно в ходу, ебей не развит. А тут за копейки виден спектр всего диапазона. Я не пожалел, но есть и недовольные.
Заказал уже (только что), куда уже откладывать, а то опять забуду до следующей статьи с упоминанием… (Там есть еще DVB-T2, они вроде не из той оперы.)
Че с входной частью? Для полноценного приема нужна полноценная антенна и согласование. Если сами проходили, можете и мне в этом направлении что-нибудь посоветовать почитать?
Скорее всего не из той. Тут нужно, чтоб был RTL2832 на борту.
У черного входная часть защищена. Но чутья у него бывает недостаточно. Поэтому я брал обычный антенный усилитель SWA2000 с блоком питания, который стоит на современных антеннах «сушилках». Полноценную антенну не подключал, а просто пару отрезков провода. Этого хватило, чтоб начали отлично приниматься все местные ЧМ станции (пришлось даже убавлять усиление, иначе перегруз, а динамики мало — всего 8 бит), авиация и прочее. Ну и потребуется для этого переходник IEC DVB-T TV PAL female jack to MCX male plug RF adapter connector чтоб подключать штекер от обычной антенны.
Да, использовать в ЦАП «рассыпные» резисторы — идея не очень хорошая.
Резисторные сборки (они же матрицы или массивы, «arrays») — другое дело, у них как минимум внутри одного корпуса разброс минимален.
Впрочем, проблема разброса между экземплярами в партии остаётся. Идеально, если получится найти матрицу, вмещающую все разряды.

Пункт 2 — лучше использовать один номинал — не «R — 2R», а «R — R+R». И разумеется, из одной партии (из одной упаковки).

Про высокий класс точности резисторов, наверно, напоминать излишне. Но уже не смог удержаться.

А вот про что будет нелишне напомнить — так это про старую фишку сортировки по точности, из-за которой элементы с «грубыми» классами точности не просто имеют разброс относительно номинала — они никогда не попадают ближе к номиналу, чем следующий вышележащий класс точности. (Вроде, на эту тему статья на хабре была, но может, это глюк моей памяти)
Просто потому, что, скажем, 10% резисторы берутся из «отбраковки» при отборе 5%, 5% — от 1% и т.п.
И от этого эффекта «R — R+R» как раз помогает.
(для прецизионных классов, конечно, всё несколько по-другому — техпроцессы заточены под уменьшение разброса, вплоть до электроискровой или лазерной подгонки)

Для изготовления единичного экземпляра есть еще один почти беспроигрышный метод — ручной подбор номиналов из партии. «Почти» — потому что придётся затариться довольно приличным объёмом и кропотливо перемерять.
Ну и для уравнивания по ТКС это почти единственный вариант, если не применять «специальные» прецизионные резисторы с низким ТКС. А то ж если в партии 1% разброс по номиналу — это еще не значит, что по ТКС разброс тоже уложится в 1%.
Спасибо! Целая статья получилась.
Вспомнил про ваш проект и понял, что раз уж вы программируете ПЛИС, то отличным вариантом было бы запрограммировать дельта-сигма ЦАП c аналоговым фильтром на выходе. Представляете, вы программно генерируете с ножки нули и единицы, прогоняете их через RC-фильтр (хотя бы однополюсный), а на выходе красивый линейный аналоговый сигнал! Это будет более точный сигнал при меньшем количестве компонент.
Дельта-сигма использую, но для звуковых частот
Позвольте спросить, где берут готовый mif-файл?
Первое что приходит на ум, это генерировать в MatLAB, но ставить такой огромный пакет, только для этого как-то не хочется.
Гугление простой утилиты или скрипта генерации mif результата не принесло (допускаю, что гугулины у меня не из того места растут).
Поделитесь опытом.
Я сгенерировал mif файл самостоятельно. Его структура очень проста.
Содержимое mif файла
— Quartus II generated Memory Initialization File (.mif)
— discretization: any Hz, 8 bit, usigned

WIDTH=8;
DEPTH=256;
ADDRESS_RADIX=UNS;
DATA_RADIX=UNS;
CONTENT BEGIN
0: 127;
1: 130;
2: 133;
3: 136;

253: 121;
254: 124;
255: 127;
END;
Мне стыдно признаться, но я его генерировал, написав простой проект на Delphi 7, который писал данные в файл.

Но можно поступить еще проще! И я так делаю, когда нужно написать Verilog модули, в которых есть большой case или присвоение. Просто составляю в Excell таблицу по нужной формуле, а справа от нее, с помощью формулы СЦЕПИТЬ составляю конструкции языка Verilog. Эту конструкцию я тупо копирую и вставляю в .v файл.

Вот пример модуля преобразования номера ноты MIDI в константу для генератора частоты. Модуль из себя представляет описание массива, в initial описываются значения всех элементов. Фактичеси, синтезатор Quartus из такого модуля сделает элемент памяти, а для его инициализации сам создаст mif файл.



Вот нашел утилиту для генерации LUT, может кому пригодиться:
HDL Sine LUT Generator
Недостаток: ширина выходных данных зависит от разрядности фазы.
А пока, осваиваю Excel LibreOffice Calc
Можно вас попросить добавить в проект генератор прямоугольных импульсов со скважностью 25%. очень надо, для изучения резонансных явлений, а времени на освоение плис пока не найду. П.с. статья про генератор мечты)
Можно. Но не обещаю, что быстро.
Тогда прошу. Как найдете свободный вечерок, осчастливьте меня!)

По хорошему чтобы это был генератор нужен ФНЧ на выходе.

Sign up to leave a comment.

Articles