Свежие обсуждения
Измерения

DDS-генератор на AVR - нужна помощь

1 139 189

skb4: Леонид Иванович: С интересом прочитал о разработке любительского генератора на DDS.

Леонид Иванович спасибо за схему, а листинг и прошивкой вы поделитесь?
skb4@orel.ru

 

skb4: а зачем Вам прошивка? Неужели повторять будете? Эта конструкция весьма далека от "народной", так как содержит дорогие и редкие комплектующие (сам еще не смог всего достать). Да и печатная плата для домашнего изготовления сложновата. Я хотел сделать более "народную" конструкцию, даже закончил схему и дизайн.

Вот схема: http://caxapa.ru/upload/files/3d8ebea0bc380c0778b92fc2d9a1fc374bbf784d

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

 

Леонид Иванович: Нужно различать побочные компоненты в выходном спектре DDS, которые появляются в результате квантования амплитуды и образы несущей. Первые нельзя устранить с помощью выходного фильтра, так как они попадают в рабочую полосу частот. Для реального 8-разрядного ЦАП это немногим лучше -40 dBc. А вот вторые устраняются фильтром, и степень их подавления зависит только от качества фильтра. При отношении Fs/Fout = 4 требования к фильтру не такие уж жесткие, фильтр Чебышева 4-го порядка, который я применяю, вполне справляется.

1) Несколько слов в защиту нашего генератора с 8-разрядным цапом. Спуры, или цифровой шум, являются следствием квантования исходного сигнала. Мощность этого шума LSB^2/12 распределена на всей полосе частот от нуля до частоты Найквиста, т.е. fS/2. Ну и поскольку наша полоса 1250 кГц, а ваша только 103 кГц, мощность наших спуров размазывается в полосе в 12 раз большей, чем ваша. Далее, для корректности сравнения будем генерить сигнал в полосе 0-50 и использовать ваш фильтр 4-го порядка. Все спуры в полосе 50-1250 срежутся фильтром. Посчитал уровень спектрального шума при данных условиях - всего на 12.8 дБ выше, чем в вашем генераторе. Не так уж и плохо.

2) Для реального цапа уровень спуров у моего экземпляра генератора не выше -50..-55 дБс, причём снято прямо на выходе цапа, без всякого фильтра.

3) Фильтр должен давить все частоты от Найквиста и выше, в вашем случае выше 50, так что отношение частот 103\50=2.06, а не 4.

 

1)Спуры, или цифровой шум, являются следствием квантования исходного сигнала. Мощность этого шума LSB^2/12 распределена на всей полосе частот от нуля до частоты Найквиста, т.е. fS/2. Ну и поскольку наша полоса 1250 кГц, а ваша только 103 кГц, мощность наших спуров размазывается в полосе в 12 раз большей, чем ваша.

Никто не спорит, что передискретизация уменьшает шум квантования. Но в реальности не всё так гладко. Реальные ЦАПы имеют еще и нелинейность, которая порядка LSB. А нелинейность ЦАП приводит к появлению спуров на частотах гармоник сигнала. Причем все гармоники, попадающие в нечетные зоны Найквиста, поподут в 1-ю зону, т.е. почти наверняка в полосу пропускания выходного ФНЧ. Их обычно мы и слышим в сигнале DDS с низкой разрядностью ЦАП.

2) Для реального цапа уровень спуров у моего экземпляра генератора не выше -50..-55 дБс, причём снято прямо на выходе цапа, без всякого фильтра.

Уровень отдельных спуров - может быть. Но в целом отношение сигнал-шум для 8-битного ЦАП даже в теории не более 49.92 дБ.

3) Фильтр должен давить все частоты от Найквиста и выше, в вашем случае выше 50, так что отношение частот 103\50=2.06, а не 4.

Всё верно, отношение частоты Найквиста к максимальной выходной частоте у меня примерно равно 2. Но я говорил об отношении частоты дискретизации к максимальной выходной частоте, которое примерно равно 4.

 

Леонид Иванович: Уровень отдельных спуров - может быть. Но в целом отношение сигнал-шум для 8-битного ЦАП даже в теории не более 49.92 дБ.
А по-подробнее?

 

Отношение сигнал/шум примерно равно 10 * log(46/2^4*Np + 0.44/2^4*Na)^0.5 (этот вопрос рассмотрен, например, в книге "Гармонические сигналы в цифровых системах контроля и испытаний"). В Вашем случае разрядность квантования фазы Np = 10 (256 элементов таблицы на 1/4 периода), разрядность квантования амплитуды Na = 8. Подставляем всё в формулу, получаем -49.2 dB. Если не учитывать шум квантования фазы, то получим около -50 dB.
Кстати, шум квантования фазы далеко не белый, можно легко "словить" спур порядка -50 dB в полосе пропускания фильтра на какой угодно частоте. Частотное распределения шума квантования фазы зависит от значения отсекаемой при формировании адреса таблицы части аккумулятора фазы.
Отношение сигнал/шум учитывает полную мощность шума квантования во всей полосе до частоты Найквиста. А то, что отдельные спуры ниже этого уровня, вполне логично. Очевидно, что если сужать полосу, то отношение с/ш будет лучше. Но ведь реально у обсуждаемого здесь генератора частота среза фильтра, если не ошибаюсь, порядка 1 МГц. Это и есть основной плюс прибора. 8-разрядный генератор является значительно более широкополосным, в этом его бесспорное преимущество. 16-разрядный генератор работает всего до 50 кГц, но спектр его выходного сигнала чище. В каких-то случаях это может оказаться решающим. Это два разных прибора, каждый со своей сферой применения.

 

Ничего не имею против вашего прибора, просто свой вариант защищаю. Кстати, при смене частоты у вас генерация частоты прерывается или нет? А ГКЧ у вас можно реализовать?

Л.И.: Очевидно, что если сужать полосу, то отношение с/ш будет лучше
Неочевидно.

(Книга, наверное, хорошая, а вот формула непонятная. В нашем генераторе отношение сигнал/шум=10log(127*127*12)=53дБ. Если фильтровать от Найквиста и выше, добавится 3 дБ, всего 56 дБ. При цифровом синтезе спуры были, есть и будут, куда от них деваться)

 

GM: Ничего не имею против вашего прибора, просто свой вариант защищаю.

Так на Ваш вариант никто и не нападает
Просто в этой ветке интересовались моими успехами. Вот я и отметился с сообщением, что двухканальный генератор PG-642 готов, причем не в виде кучки плат, а в виде законченного прибора. Но пока еще сыровата версия 1.0 прошивки и программы на PC. Главным образом не устраивает отсутствие отображения амплитуды в RMS, что я сейчас и дописываю.

GM: Кстати, при смене частоты у вас генерация частоты прерывается или нет?

Генерация не прерывается, но присутствует скачок фазы. У меня центральный процессор по UART передает сопроцессору, на котором реализован двухканальный DDS, новый код частоты или фазы. Там он сохраняется в буфере, а когда будут приняты все байты, перегружается DDS (в случае управления фазой - оба канала). При этом я останавливаю DDS, на выходе ЦАП удерживается последний сформированный уровень. Затем перегружаю регистры частоты (или фазы, если регулируется фаза), затем снова запускаю DDS. Длительность загрузки составляет порядка 1.5 мкс.


;SET FREQUENCY:

SetF: lds temp,Comm ;load command code
StopDDS
bbrc temp,CHAN_A,f_b

ldx Buff ;load buffer base
ld AFreqK,X+ ;set frequency for channel A
ld AFreqL,X+
ld AFreqM,X+
ld AFreqN,X+

f_b: bbrc temp,CHAN_B,f_n

ldx Buff ;load buffer base
ld BFreqK,X+ ;set frequency for channel B
ld BFreqL,X+
ld BFreqM,X+
ld BFreqN,X+

f_n: StartDDS
sts Comm,zero ;clear command code
ret


Иначе никак, ведь внутри одного цикла DDS нужно перегрузить две 32-разрядных переменных, на это просто нет времени. На ПЛИС и в интегральных DDS делают два регистра частоты и фазы, при перестройке загружается неиспользуемый регистр, затем регистры переключаются. Можно нечто подобное сделать и в МК, например, написать две отдельных реализации DDS, использующих раздельные регистры частоты, а переключаться между ними по флагу. Но опять не ясно, что делать с регулировкой фазы. Да и в моем случае ресурсов не хватает для таких вещей.

GM: А ГКЧ у вас можно реализовать?

Быстрое качание частоты я не предусматривал. А снятие АЧХ может быть сделано под управлением компьютера, все необходимые команды в протоколе управления для этого есть.

GM: В нашем генераторе отношение сигнал/шум=10log(127*127*12)=53дБ

Если только под свой генератор Вы разработали свои собственные законы физики Отношение мощности синусоидального сигнала к мощности шумов квантования равно 1.76+6.02·N dB (http://en.wikipedia.org/wiki/Quantization_error). Т.е. в Вашем случае это 49.92 dB. Это максимальная теоретическая оценка, не учитывающая ни нелинейность ЦАП, ни шумы квантования фазы в DDS.
P.S. меряться децибелами уже порядком поднадоело Лучше бы перевести разговор в конструктивное русло, так как генераторы могут иметь много общего, например, в части управления.

 

Да уж: пришел Л.И. и внес смуту в мозги участников проекта.
Начались разброды и шатания...
Похоже, проект так и засохнет на корню - март уж к концу подошел.

Л.И., не в упрек, а в пожелание: Вы бы про свои генераторы отдельную темку открыли, а?
Чтобы, так сказать, отделить теплое от мягкого.
Уверяю Вас: недостатка в читателях не будет.

 

ATLab: Да уж: пришел Л.И. и внес смуту

Ладно, ладно, ухожу. Если кого-то интересуют какие-то технические подробности, пишите на мой e-mail: wubblick@yahoo.com