|
Крошечный DDS - генератор с открытым исходным кодом
Статьи публикуются по мере поступления. Для упорядоченного тематического
поиска воспользуйтесь блоком "Карта сайта"
Этот проект представляет собой генератор DDS с открытым исходным кодом (аппаратно-программный) на основе: интеллектуального TFT-модуля , AD9834, LM7171, быстрого усилителя.
Схема
Сначала я начал искать дешевый чип DDS на eBay. Вы должны быть осторожны, потому что большинство DDS-чипов имеют только синусоидальный выход. Выбрал AD9834. Согласно его спецификации, этот компонент способен выводить частоту 37,5 МГц с тактовой частотой 75 МГц ... Но не ожидайте чистый сигнал на такой частоте: без внутреннего PLL этот сигнал будет определяться всего двумя точками. По моему личному опыту, я считаю, что сигнал должен быть определен на 10-20 баллов, чтобы быть хорошо восстановленным. Опираясь на 75MHz часы, максимальная выходная частота будет 7,5MHz ... Это не очень хорошая производительность для профессионального оборудования (даже если самые дешевые генераторы не идут выше 4MHz), но это вполне разумно для начинающих. Амплитуду AD9834 можно регулировать различными способами:
Постоянная амплитуда- 1Vpp (по умолчанию на большинстве COTS), проводя резистор между выводом FS_ADJUST и землей: это довольно раздражает, потому что дополнительный внешний усилитель должен будет устанавливать амплитуду на желаемый уровень.
Переменная амплитуда-подключая потенциометр между выводом FS_ADJUST и землей: это решение очень просто реализовать, но оно не позволит управлять программным обеспечением, например, амплитудной модуляцией.
Программная амплитуда - подключая ЦАП к выходу FS_ADJUST. Это решение немного сложнее, но это позволит реализовать некоторые полезные функции. Я выбираю этот путь.
Амплитуда будет устанавливаться микроконтроллером интеллектуального модуля TFT (PIC32MX795). Необходим внешний ЦАП (AD5310). Небольшой делитель напряжения помещается между ЦАП и выводом FS_ADJUST, чтобы преобразовать 0-3.3 В ЦАП в 0-1.2 В, обрабатываемые AD9834:
Обратите внимание: логические уровни инвертированы: минимальная амплитуда достигается, когда выход ЦАП равен 3 В3, и максимальная амплитуда достигается, когда выход ЦАП равен 0 В. AD9834 генерирует сигнал с ненулевым смещением, переменным в соответствии с амплитудой. На данный момент это смещение очень раздражает и должно быть удалено. Два возможных способа: Фильтр высоких частот (простой RC-фильтр): это решение обеспечивает идеальную связь с переменным током, но проблематично для низкочастотных сигналов (для частот ниже 100 Гц необходим огромный RC-фильтр). Дифференциальный усилитель: возможно с AD9834, потому что этот компонент уже имеет дифференциальный выход (выводы IOUT / IOUTB). Это решение делает связь переменного тока эффективной даже для очень низких частот, даже для сигнала постоянного тока. Поэтому соединение с переменным током не будет «идеальным»: небольшое смещение будет впрыскиваться и, возможно, некоторые дополнительные искажения из-за допуска компонентов (OPAMP и резисторы).
Отношение R15 / R12 установлено, например, максимальное напряжение, выдаваемое U6, составляет +/- 3,3 В. Управление смещением. Здесь нет ничего сложного: нам просто нужно генерировать сигнал постоянного тока между -3,3 В и 3,3 В. Я использую другой AD5310 с небольшим OPAMP:
Обратите внимание: здесь снова логические уровни изменяются на противоположные: минимальное смещение достигается, когда выход ЦАП равен + 3,3 В, а максимальное смещение достигается, когда выход ЦАП равен 0 В. Последний этап. Здесь у нас есть 2 сигнала: один, идущий от DDS (между -3,3 В и + 3,3 В, связанный переменным током), и сигнал, поступающий от управления смещением (также между -3,3 В и 3,3 В). Мы просто должны смешивать эти 2 сигнала и усиливать их, чтобы получить выход +/- 5V:
LM7171 способен выводить более 100 мА; Тем не менее, ток ограничен резистором 100R. Небольшой LC-фильтр также реализован перед основным выходом для фильтрации остаточного тактового сигнала 75 МГц. Выход ШИМ. Здесь нет ничего сложного: простой CMOS-вход для буферизации вывода PWM микроконтроллера. Я попытался использовать быстрый компаратор на треугольном выходе DDS, но джиттер был слишком важен; Я, наконец, отказался от этого решения.
Аналоговый вход . Простой резистор для ограничения входного тока и общий фильтр Pi. Частота дискретизации не очень велика (~ 1 кГц), потому что внутренний АЦП микроконтроллера также используется сенсорным экраном внутри ISR.
Генератор питается от стандартной 12-вольтовой вилки. Некоторые коммутационные регуляторы вырабатывают 5 В (для интеллектуального модуля TFT) и +/- 7 В (используется аналоговым каскадом). 3,3 В поступает непосредственно от смарт-TFT. LT1616 - дорогие компоненты в Farnell, но я нашел их на eBay за 0,8 доллара. Обратите внимание: здесь должен работать любой стабилизатор напряжения (+ 5В при 200 мА, +/- 7 В при 200 мА).
Печатная плата
Вся схема может быть легко маршрутизирована на небольшой печатной плате (меньше, чем на кредитной карте). Печатная плата состоит из двух макетов с общим GND.
В сборе с интеллектуальным TFT:
Программное обеспечение в архиве
Пользовательский интерфейс состоит из 4 «страниц»:
DDS (синус / треугольная форма волны, с управлением частотой / амплитудой / смещением)
PWM (только ШИМ-сигнал)
ARB (произвольные формы волны и модуляции)
Страница меню
Эти сигналы генерируются непосредственно AD9834, просто путем настройки его внутренних регистров через шину SPI. Тем не менее, небольшая деталь должна обрабатываться программой: частотный регистр кодируется по 28 битам, разделяется на два 16-разрядных регистра. Доступ к частотному регистру не является атомарной операцией и сначала буферизуется (через регистры FREQ0 / FREQ1).
Скачать