Главная » Статьи » Проекты

Генератор на DDS AD9851
автор: Pchelа5

 После того, как была проверена работоспособность модуля на AD9851, мною было принято решение попробовать уместить два генератора в одном: генератор синуса на основе AD9851 с частотой от 1 Гц до 90 МГц (теоретически, реально же, как заявлено, около 70 МГц) и НЧ-генератор DDS сигналов произвольной формы с частотой от 1 Гц до 100 кГц. 
 Кнопку Run/stop решено было перенести на тот же порт управления клавиатурой и в ту же часть программы – добавился один диод, но ушел один резистор. Светодиод и пьезокерамический буззер объединил на одну ногу (если применять другой тип буззера, то лучше использовать буферный транзистор через развязывающий конденсатор). Испытания показали, что для формирования сигнала Reset для AD9851 вполне подходит RC-цепочка – экономим еще одну ножку процессора. В итоге у нас остается порт D для формирования DDS 8-ми битного сигнала низкой частоты и три ноги порта С для последовательного управления модулем DDS AD9851. Схема приведена ниже:



 Сдвоенный операционный усилитель общего назначения используется как выходной буфер для формирования сигнала произвольной формы (верхняя по схеме половинка) и в качестве цифрового выхода (нижняя половинка). Питание операционника ±12 Вольт (обусловлено наличием у меня именно такого питания в корпусе)
 Плата разведена под корпус TQFP с шириной дорожек 0,32, резисторы для матрицы R-2R отобраны из ряда 10 кОм типоразмер 1206, остальные пассивные элементы в корпусах 1206 и 0805. Кварц на 12 МГц был найден в закромах – мелкий в корпусе SMD и на плате отмечен тремя круглыми контактными площадками с левой стороны:



 В принципе, подойдет любой из номинала от 8 МГц до 16 МГц – надо только в программе выставить нужную частоту. Резисторы номиналом на схеме 5 кОм (с левого края 7 шт. получены параллельным соединением резисторов по 10 кОм – запаяны бутербродом.) На плате присутствуют 4 перемычки 1206, переменный резистор для регулировки контрастности дисплея после замеров заменен двумя постоянными резисторами. Ввиду относительной простоты схемы на плате номера элементов и выводов не подписаны – разобраться несложно. С правой стороны микросхемы выведены три контактные площадки для аналоговых ножек – опорника и двух входов АЦП – на всякий случай. Плата получилась размером 45*36 мм., изготавливалась методом ЛУТ.  Фотография готовой платы приведена ниже:



 Теперь о программе. За исходник была применена программа итальянского коллеги, упоминавшаяся в части первой статьи про DDS. Я убрал большинство итальянских слов, поменяв их на более понятные английские аналоги, и изменил принцип вывода данных на дисплей. Основное тело программы (цикл DO LOOP) состоит из обращения к подпрограммам вывода на дисплей, опроса клавиатуры и навигации по дисплею). Для каждого раздела меню используется своя подпрограмма назначения кнопок, ну и при желании, пользователь может переделать их под свои пожелания. В качестве вывода данных на дисплей используется два строковых массива длиной по 16 знаков, в каждом из которых я меняю значения – цифры, буквы и т.п. Текущая позиция обозначается мигающим курсором.
  НЧ генератор DDS на данный момент формирует 8 сигналов: стандартных – синус, меандр, пила, треугольник и не очень – псевдошум, функцию типа cos(x) * sin(5x), затухающие волны синуса и прямоугольный сигнал с изменяющейся скважностью с шагом в ≈1%. Последние три таблицы были случайно найдены в недрах Интернета и вставлены для коллекции – при желании их можно поменять на что-то более полезное. Прямоугольный сигнал с изменяющейся скважностью – более полезная вещь и под него была написана подпрограмма. 

Как это работает.

Теоретический принцип работы DDS описан в статье http://www.compitech.ru/html.cgi/arhiv/01_07/stat_50.htm , но для нашего случая теорию можно опустить и довольствоваться следующими постулатами: выходная частота генератора AD9851 зависит от тактовой частоты, управляющего двоичного 32-х разрядного слова, задающего частоту, и 8-ми битовой посылки для конфигурации микросхемы прямого синтеза. Итого – 40-битная последовательная посылка DATA и CLOCK с защелкой данных по сигналу FQUD. Таким образом, задав нужную частоту для генератора AD9851, мы получаем на его выходах синусоидальный и прямоугольный сигналы, которые генерируются в дальнейшем самостоятельно до принудительной смены. Для генерации сигнала произвольной формы непосредственно микроконтроллером после нажатия кнопки Run/stop в его оперативную память загружается таблица данных и на порт D в замкнутом цикле выводятся значения формы сигнала. Выход из цикла осуществляется при повторном нажатии кнопки Run/stop.

 На приведенных ниже картинках показаны некоторые выходные результаты:

пила




синус



затухающий синус





прямоугольник



треугольник





Внимание:
 Так как у меня в корпусе TQFP были только Atmega88P, соответственно выходной файл скомпилирован под них же. Немножко был обескуражен отсутствием поддержки данного камня в Pony Prog под STK200, но проблему удалось решить программированием непосредственно из-под Васика. Версия 11.9.8 не поддерживает тип данных типа DWord. Для желающих перекомпилировать можно предложить следующее решение – поменять в строке данных Dta последние значения и тип переменной DWord поменять на Long. Или в принципе поменять алгоритм расчета на предложенный камрадом Aleks8383 - до частот 70 МГц он будет работать.


Категория: Проекты | Добавлено: 21.07.2012
Просмотров: 48301 | Комментарии: 25 | Теги: генератор, AD9851, dds | Рейтинг: 5.0/8
Всего комментариев: 25
25 pchela5   (15.12.2014 21:34) [Материал]
Меандра почему-то нет - засада ага :(

24 pchela5   (13.12.2014 18:23) [Материал]
нет, нельзя - там все жестко прошито. Это надо на других принципах реализовывать.

23 pchela5   (09.12.2014 16:25) [Материал]
Мелкосхемы одинаковы практически, так что допиливать, неверное, не придется.

22 vakulyuk   (09.12.2014 14:12) [Материал]
Ктонить пробовал заменить модуль на AD9850? Нужно ченить допиливать?

21 pchela5   (22.12.2012 11:03) [Материал]
Причина банальна - больше ног

20 marss70   (21.12.2012 21:53) [Материал]
И чем мега16 заслужила такое доверие?

19 pchela5   (19.12.2012 10:56) [Материал]
Ну ничего сложного я не вижу - дерзай на Atmega16.

18 marss70   (18.12.2012 21:59) [Материал]
С энкодером бы получилась бы вообще "мечта поэта". Синфазные выходы тоже вещь хорошая. Для разработки импульсных устройств- самое то. Мне бы было в тему.

17 pchela5   (18.12.2012 12:23) [Материал]
Удачи! Лучше, как мне кажется, все-таки реализовать это на Atmega16 - и ножек побольше - можно прикрутить энкодер, и простора для апгрейда - я подумывал насчет замены некоторых откровенно говоря ненужных таблиц на более правильные - синфазные выходы с регулируемым dead-time и т.п.

16 marss70   (17.12.2012 23:16) [Материал]
Ну что ж, уговорили. Буду воять в железе. А то эти симуляторы-шмимуляторы не дают точной картины.

15 pchela5   (17.12.2012 22:49) [Материал]
Дык она так и работает в данной схеме.

14 marss70   (17.12.2012 22:43) [Материал]
Для ADшки, я думаю так будет удобнее, чем вкл/выкл установка и т.д.

13 pchela5   (17.12.2012 22:40) [Материал]
Частоту какого из двух? Если 9851\9850, то да. Для ddS на камне - труднее, но можно, увеличив цикл с 9 до ...

12 marss70   (17.12.2012 22:09) [Материал]
Да знаю, что 51 покудрявее, просто в поднебесной заказал модуль AD9850... А такой вопрос, можно в программе допилить, чтобы частоту можно было менять без остановки?

11 pchela5   (17.12.2012 22:05) [Материал]
>Вообще проект зачётный!

Это микс из итальянского и немецкого проектов - я их просто сфранкенштейнил и допилил напильником.

>а насколько взаимозаменяемы AD9851 и AD9850

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

10 marss70   (17.12.2012 21:43) [Материал]
По кодам вроде как должно работать в режиме PWM, просто Протеус не тянет, поэтому решил спросить. И с переключением режимов разобрался. Баском только три дня юзаю, так что, не судите строго за вопросы. Вообще проект зачётный!И такой вопрос, а насколько взаимозаменяемы AD9851 и AD9850 по алгоритму управления?

9 pchela5   (17.12.2012 21:06) [Материал]
>Обнаружил ошибку в подключении выводов E и RS. Их надо поменять местами.

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

>смоделировав Ваш проект в Протеусе

Я, к своему стыду, его так и не осилил - все в железе тестирую.

> между режимами генерации- посредством резистивной матрицы и AD9851

Генератор AD9851 жужжит сам по себе - атмега только грузит в него частоту. Если нужна произвольная форма - то тут уже работает микропроцессор в ассемблерной вставке, выбирая из таблички в 256 байт размером, куда загружена форма сигнала. Изменение скважности в данном проекте реализовано - посмотри код внимательнее.

8 marss70   (17.12.2012 19:51) [Материал]
Спасибо, перекомпилировал. Обнаружил ошибку в подключении выводов E и RS. Их надо поменять местами. И ещё вопрос, смоделировав Ваш проект в Протеусе, не совсем понятен алгоритм управления и не подаются сигналы на резистивную матрицу. Вполне возможно что это глюк Протеуса.И ещё, можно пояснить, как происходит переключение между режимами генерации- посредством резистивной матрицы и AD9851, как происходит переход между формами сигналов? И планируется ли доработка программы для возможности изменения скважности импульса?

7 pchela5   (17.12.2012 16:48) [Материал]
В конце статьи написано, что используемый камень - Atmega 88p, приведены исходник, в котором указан кварц на 12 Мгц и файл для процессора m88pdef.DAT, и прошивка под данный камень. Если нужно скомпилировать под Atmega 8 - меняете на m8def.DAT и компилируете заново. Для кварца другой частоты меняете строчку $crystal = 12000000 на нужную.

6 marss70   (17.12.2012 01:36) [Материал]
Уважаемый автор, позвольте усомниться в работоспособности Вашей схемы. В исходнике на генератор для Atmega8 я не увидел таблиц форм сигналов. Они есть для меги88, но тогда надо менять схему.Плюс непонятки с частотой, в исходнике 8мгц, на схеме 12. Что-то не хочется непредсказуемого результата.

5 pchela5   (19.11.2012 13:11) [Материал]
Камрад, вообще-то это мое хобби, и зарабатываю я деньги другим способом, так что работа под заказ может дорого обойтись. Плюс физическое месторасположение - я из Рязани, если что. Какие параметры то нужны - частота, период и форма? На изиэлектроникс кажись даже женскую грудь на экран выводили )))

4 tribo   (18.11.2012 17:26) [Материал]
Вопрос автору. Под заказ осуществляется изготовление данного изделия? Нужен генератор с изменяемым периодом при неизменной частоте, и выходная форма сигналов иметь некоторые отличия от привычных. С уважением

3 pchela5   (26.07.2012 12:44) [Материал]
А какое спец назначение - так, функциональный. Чтобы что-то серьезное делать надо термостатирование применять да кварцы специальные - лучче военные.

2 sherman   (23.07.2012 22:49) [Материал]
Я так понимаю спец назначения для генератора не предвидится, будет генератор на все случаи жизни?

1 sherman   (23.07.2012 21:18) [Материал]
Зачетно! Интересная задумка совместить порты кнопок и дисплея на одних лапках МК, надо взять на вооружение :)

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






авторизация