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

Генератор на 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
Просмотров: 33086 | Комментарии: 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)
Зачетно! Интересная задумка совместить порты кнопок и дисплея на одних лапках МК, надо взять на вооружение :)

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






   EasyEDA:  бесплатный редактор схем

   ✓ Создание схем
   ✓ Возможность симуляции
   ✓ Быстрое создание печатных плат
   ✓ Интуитивно понятный интерфейс

   Нарисуй свою схему прямо сейчас!
   Изготовление печатных плат   https://easyeda.com/order
авторизация
Логин:
Пароль:
Комментарии
Сетевой диммер 220V на микроконтроллере
09.12.2016 - vakulyuk:
Спасибо) Я принцип действия понял, а вот откуда взялась именно цифра 195 не поня...
Сетевой диммер 220V на микроконтроллере
09.12.2016 - exersizze:
pchela5, ну так это в военное, а у нас в мирное время все примерно)) Наше...
Сетевой диммер 220V на микроконтроллере
09.12.2016 - pchela5:
> Полуволна в нашей электросети по времени длится примерно 10 мс

...
Сетевой диммер 220V на микроконтроллере
09.12.2016 - exersizze:
Чтобы понять откуда взялась цифра 195 надо сначала въехать в принцип работы: ког...
Сетевой диммер 220V на микроконтроллере
09.12.2016 - vakulyuk:
А почему минимальный накал при 195? Насколько минимум можно занизить Wt?
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
08.12.2016 - exersizze:
yorx выдалось немного свободного времени, проверил в симуляторе. Проблема...
Логгер температуры 2.0
05.12.2016 - Evgeny6873:
Хотел повторить схему и долго ждал дисплей, два раза заказывал с Китая, пришел. ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
01.12.2016 - yorx:
Доброго времени суток, exersizze попробовал Ваш код все равно не работает как на...
Помни об усадке!
30.11.2016 - pchela5:
Автомобильные никакие не лезут?


Лучшие цены на 3D принтеры
успей сделать себе подарок к Новому Году! ;)


Prusa i3

Prusa i3 от 12500 р.



Rostoсk

Rostock от 15000 р.