Перейти к содержанию

    

плата Digilent Nexus 3 (Xilinx Spartan 6) + ЦАП R-2R = искажения

Доброго времени суток всем!

Есть плата от Xilinx c ПЛИС Spartan 6 на борту (плата Digilent Nexus 3). Возникла потребность сделать простой DDS генератор, используя плату и самодельный ЦАП r-2r (6 бит, звуковые частоты, речь). ЦАП подключается через стандартные штырьковые разъемы к плате.

 

Схема ЦАП проста: r-2r цепь, потом RC-цепь (ФНЧ первого порядка), затем повторитель на ОУ ad8656 (одна половинка).

Для ПЛИС использую среду ISE WebPack 13.2

 

Собственно, неприятностей две:

1. DDS IP-core v.4 никак не хочет моделироваться в ISim. Тактовый сигнал идет на IP-блок, но на выходе DDS лог.1 по всем 6 битам. Что я делаю не так? Или это известный косяк симулятора? Схема top level проста - сам блок и вх/вых пины.

post-88386-1442172444_thumb.png

Все проверки в среде ISE схема проходит, разумеется.

 

2. Несмотря на вышеописанную ситуацию, после физического размещения схемы DDS на кристалле, она заработала. Осциллографом наблюдаю на выходах платы (входах ЦАП) то, что и должно для синуса (см. картинки).

 

НО на выходе самого ЦАП - чушь полная.

post-88386-1442172422_thumb.png

 

Сначала я думал, что это инверсия фазы выходного сигнала у ОУ (размах сигнала на входе ОУ большой, конечно, он rail-to-rail, в даташите сказано, что нет инверсии фазы). Отключил вход ОУ, тыкнулся осциллом после ФНЧ - та же картина.

 

И тут я заметил, что на осциллограммах логических сигналов - помеха в виде выходного сигнала, синуса. (завалены лог. уровни).

post-88386-1442172407_thumb.png

post-88386-1442172417_thumb.png

 

В чем может быть проблема? Неудачная разводка платы (ставил кондеры на землю по питанию - не помогло)? Не учел токоограничительные резисторы и диоды на выводах ПЛИС? (они по 200 Ом, а цап 2к-1к). ОУ возбуждается?

 

Вроде делов-то, на МК цап r-2r работают на ура, судя по поиску в гугле. Тут-то что? Как-то даже стыдно.

 

Подскажите, пожалуйста, куда копать? Или перенаправьте в более подходящую ветку форума.

Спасибо!

 

Прикрепляю картинки (скрины с осциллографа, плату, и схему отладочной платы с ПЛИС).

 

Схема

post-88386-1442173490_thumb.png

 

Плата

post-88386-1442172440_thumb.png

post-88386-1442172433_thumb.png

Изменено пользователем Блондин

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..а в каком формате выводите данные на ЦАП , в знаковом или беззнаковом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То, что форма цифровых сигналов немного искажена не проблема. Гонит dds. Попробуйте для начала написать простой генератор пилы и убедитесь, что железо работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Токоограничительные резиторы, и выходное сопротивление пинов FPGA(оно может быть порядка 20Ом), конечно, нужно было учесть, но таких искажений от этого не будет. Думаю, проблема в том, что DDS даёт знаковый синус, а для R-2R нужен беззнаковый, и надо его соответственно преобразовать(просто инвертировать старший бит, если не ошибаюсь ).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конечно, первым делом слелал пилу, все было отлично.

 

Елки-палки...ну и олень я. Конечно, выход-то знаковый у DDS.

 

Спасибо! Попробую завтра.

 

Токоограничительные резиторы, и выходное сопротивление пинов FPGA(оно может быть порядка 20Ом), конечно, нужно было учесть, но таких искажений от этого не будет. Думаю, проблема в том, что DDS даёт знаковый синус, а для R-2R нужен беззнаковый, и надо его соответственно преобразовать(просто инвертировать старший бит, если не ошибаюсь ).

А по первому вопросу (не могу промоделить DDS v.4 в ISim) что можете посоветовать?

Тип памяти DDS (distributed/block) менял, не помогло.

Изменено пользователем Блондин

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
и надо его соответственно преобразовать(просто инвертировать старший бит, если не ошибаюсь ).
Превратить код в беззнаковый можно на сумматоре - сложить с константой равной в нашем случае 32 (2^5). Простой инверсией битов ничего не выйдет.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А по первому вопросу (не могу промоделить DDS v.4 в ISim) что можете посоветовать?
Могу посоветовать использовать ModelSim :) .

Превратить код в беззнаковый можно на сумматоре - сложить с константой равной в нашем случае 32 (2^5). Простой инверсией битов ничего не выйдет.
Так 32+шестиразрядное число это и есть инверсия старшего бита, если не использовать перенос.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Превратить код в беззнаковый можно на сумматоре - сложить с константой равной в нашем случае 32 (2^5). Простой инверсией битов ничего не выйдет.

 

Вообще, операция 2's complement почти легально меняется на 1's complement, что есть банальный xor. А если фазу на вход PSM(phase-to-sine mapper) генерировать самостоятельно, то там также меняется 2's comp на 1's comp и получается сильная экономия вентилей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
.

Так 32+шестиразрядное число это и есть инверсия старшего бита, если не использовать перенос.

Да, согласен, протупил :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема с работой DDS решена - конечно, переводом выхода DDS в беззнаковый формат :smile3046:

 

Проблема с моделированием в ISim - пока нет, роюсь в гугле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация