Генератор синуса и прямоугольника

Опубликовано в рубрике "Инструменты", 24.02.2010.
Тэги: , , автор:

Фигова эмбеддерская жизнь без генератора синуса! Вот и я решился сделать себе такой девайс.

Сначала хотел на atXmega сделать – там есть суперский такой 12-битный ЦАП. Посчитал, написал (вот одно из тех мест, где нужно писать на асме!), получилось, но плохо – всего 800kSps, тоесть можно рассчитывать на 100кГц синуса максимум. Не густо! Подумал я еще и прикупил ad9833.

 

dds

 

Введение

Этот проект – один из долгоиграющих проектов. С одной стороны пришлось принять много компромиссных решений (а я жутко не люблю компромиссы 🙂 )  с другой пришлось отказаться от части задуманного, так как слишком сложно. С третей типичные дешевые отмазки – лень, и куча других дел.

Но ничего, в конце концов я его таки добил.

 

AD9833

Итак, почему именно ad9833? Тут все просто – это самый дешевый ДДС ) Ну посудите сам, 25MSps, тоесть 12.5МГц нефильтрованного синуса или 5Мгц отфильтрованного 4тым порядком. Мне показалось, что синус больше 5МГц для настройки разных поделок типа тесел, источников питания и звуковых девайсов не нужен.

У ad9833 10-битный ЦАП, а значит, максимальный сигнал/шум порядка 60дБ, но так как сигнал чисто синусоида часть шума мы можем легко отфильтровать. Попробуем выжать максимальный С/Ш на который способна микруха.

Для любознательных:
Откуда цифра 5 ? И почему 25мегасемплов на глазах таят до 5МГц синуса? Логарифмическое расстояние между 25МГц и 5МГц — log(25/5) = 0.698 Декады. Скорость спада фильтра 4 порядка – 4 * 20 = 80дБ/дек. Отсюда на 0.698 декады подавиться 56дБ шума. С/Ш ЦАПа – 60Дб, поэтому, дальше давить смысла нет, там уже шумит сам ЦАП.

 

Чего хотелось получить?

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

Итак, хотелось:

  • Синус: 0.1Гц – 5Мгц синуса 0-5в, 50Ом
  • Прямоугольник – 0-5МГц, 0-12в, 50Ом

При этом на обоих должен был быть как показометр частоты, так и показометр напряжения с точностью до милливольта.

А вот, что получилось:

  • Синус 10Гц4МГц, 0-5в, 50Ом
  • Прямоугольник 0-8МГц, 0-5в, 100Ом

На показометры я решил забить.

Как видно, поменялось почти все.

 

Генератор синуса

Это место я проработал довольно хорошо – и схема и плата получились в лучших цифро-аналоговых традициях.

Посмотреть на схемоплату этого чуда можно тут:

 

Как видно, используются три земли – цифровая, смешанная и аналоговая. Высокочастотный шум, который может передаваться по сигнальным проводам отвязывается буфером на 244 микросхеме (угу, редкий изврат, чисто для прикола).

Операционники выбраны такими просто потому, что такие были.

Тот кусочек который в желтом квадратике – не собирается! Он не работает (по крайней мере, как ожидалось)! Именно из-за того, что он пожелтел, измеритель напряжения был выброшен из головы.

Эту фотку я уже показывал на форуме пару раз, но покажу еще. Это и есть генератор синуса, только без выходного разъема. (кликабельно)

dds1

Источник питания

Тут все намного проще. Сначала я долго раздумывал – делать питание двуполярным или ограничится одной полярностью. Но решил так двуполярное делать – можно использовать непосредственную связь с выходом.

Три кренки и готово! Да-да, там именно кр142енХХ стоят! Нужно-ж куда-то старье сдувать )

Если кого-то может удивить схема на трех кренках, вот она:

side1

 

Контроллер и генератор прямоугольников

Сначала я долго думал – как-же реализовать регулировку прямоуольников? Умники советовали поставить ОУ, он я ведь знал, что можно проще! В итоге додумался до просто го переключателя! Ведь что может быть проще, чем переключать с нуля до некоторого фиксированного напряжения! Аналоговый переключатель 74hc4066 меня вполне устроил! Единственное, пришлось увеличить выходное сопротивление до 100 Ом – 50 у самого 74hc4066 и еще 50 внешних. Это чтобы не сжечь микрушку. Можно, конечно поставить переключалку покруче, но лень одолела. Тем более, не так уж это и критично!

Откуда взять напряжение для переключения? Тут нужен low-drop притом не простой, а очень хороший. Чтобы этот самый drop был не больше, скажем 100мВ. Если такие и есть в природе, то их нужно долго и нужно искать. Проще сделать самому на rail-to-rail ОУ и транзисторе.

С контроллерной частью все просто – в ход пошла старая atmega8 от эпического запаса которых пора избавляться. Она-то и генерит управление аналоговому переключателю. В отличии от режима генерации синуса, пользователь задает период, а не частоту. Так удобнее и точнее.

Посыпаем это все индикатором и энекодером, добавляем кнопочек по вкусу, разъемчиков так всяких и засовываем в корпус.

side2

Традиционно схема и плата:

 

Софт

По большей своей части – говнокод, ведь хотелось слепить побыстрее, что и было сделано.

Софт организовывает менюшку настройки частоты. При этом разряд в котором настраивается частота можно менять кнопочками, а частоту настраивать энкодером.

Если не трогать кнопки в течении 10сек, то выбранная частота запоминается и сама включится после включения питания.

Еще есть кавайный счетчик запусков,

 

Результаты

Как и ожидалось, С/Ш порядка 60дБ, тоесть мы наткнулись на фундаментальное ограничение по возможностям ЦАП’а. На спектрограмме видно, что пролазит небольшая постоянная составляющая. Ее я уберу конденсатором.

Спектрограммы сняты звуковухой E-MU 0202USB.

Спектр для 1кГц:

 fft1

 

Спектр для 10кГц:

fft2

 

Сигнал выглядит довольно синусоидальным, что не странно.

sin

 

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

 

 

 

Бонус

Ну и на последок – бонус. Фотография под названием “жысть эмбеддера”, кликабельно:

embedding

 

Платы

По требованию трудящихся, все платы для ЛУТа/позитивного резиста кипой:

 

Печатать как есть, верхний слой уже отзеркален.




Комментарии
  1. ExEcUtE написал(а) 28th Февраль, 2010 в 18:11

    Зачетная конструкция, качество изготовления прямо заводское)
    Маленький вопрос: а что такие звоны на прямоугольнике сильные? Ёмкость монтажа? Кабель? Миллер? Или шумы генератора?

  2. BSVi написал(а) 28th Февраль, 2010 в 18:13

    Это — звон кабеля. Используется кусок 50омного кабеля который подключается к щупу 1/10, тут и происходит отражение. На видео развертка — 200нс/деление.

  3. ExEcUtE написал(а) 28th Февраль, 2010 в 18:16

    Несогласование выходного сопротивления генератора и кабеля с осцилом?

  4. BSVi написал(а) 28th Февраль, 2010 в 18:27

    Типа того, ну еще и делитель в щупе косячит.

  5. aeore написал(а) 9th Март, 2010 в 21:16

    Спасибо за статью, отличный генератор! Нужно будет обязательно сделать что-нибудь подобное, только dds достать..

    На счет развязки dds с контроллером — скопом не глядел, есть ли шумы ? Сдается мне, что эта развязка лишняя.. Никогда не видел подобных развязок в ВЧ/СВЧ схемах.. А если и есть, спасет ли от них этот буфер ?

  6. BSVi написал(а) 9th Март, 2010 в 21:21

    Там наносекнудные иголки простакивают — скопом их очень сложно увидеть. Этот буффер есть в документе от аналога, поэтому оставил.

    А если и есть, спасет ли от них этот буфер ?
    Спасает, скорее всего. Транзисторы внутри буффера неповоротливые, не успивают переключиться.

    Можно, конечно ферритовые бусинки ставить — это дело вкуса.

  7. SchDoc написал(а) 9th Июнь, 2010 в 10:42

    А как лудил плату “генератора синуса”, особенно хорошо видно качество лужения на полигонах возле генератора на 25 MHz ?.
    Знаю есть две технологии: “КипящаяВода+ЛимоннаяКислота+СплавРозе+РастираемПоПлатеВатой” и вторая
    “ОплеткаОтКабеля+СплавРозе+ПаяльникНа100Градусов”
    Извиняюсь если не по теме статьи 🙂

  8. BSVi написал(а) 9th Июнь, 2010 в 10:54

    Ууу, нее, я такими дзеновскими технологиями не владею. У меня все проще — Кууууча флюс + ало паяльника, даже без оплетки. А лудил я не специально, а просто похожу пайки припой растекался, дак я излишки вытерал о плату.

  9. doger83 написал(а) 14th Июль, 2010 в 20:48

    а можно поставить мега8L-8pi

  10. BSVi написал(а) 14th Июль, 2010 в 22:30

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

  11. smex написал(а) 23rd Август, 2010 в 7:39

    А вот на схеме singen.pdf (там где стоит ad9833) немогу понять номинал конденсатора C9. Написано DNP и все, что это значит?!!!

    Ну и второй, менее важный вопрос — чем бы заменить ОУ. Как понимаю основное требование к ним Rail-To-Rail. Думаю даже поставить однополярные, пускай синусоида всегда будет положительная…

  12. BSVi написал(а) 23rd Август, 2010 в 7:57

    DNP — Do Not Place. Наверняка, ты видел на китайских платах места с незапаянными деталями. Вот так они и обозначаются. Это конденсатор, который стоит поставить, если не хватит крутизны фильтров.

    ОУ тут не только rail to rail, они должны еще выдавать правильный ток. Особенно, OPA698. Не каждый ОУ может работать на 50 ом. Ну, и, ОУ должны иметь достаточную полосу.

  13. Wiew написал(а) 14th Ноябрь, 2010 в 22:35

    А как слои печатки переключать, Вы какой программой пользуетесь?

  14. BSVi написал(а) 14th Ноябрь, 2010 в 22:47

    Слои — никак, этоже пдфник. Я пользуюсь Altium Designer.

  15. Wiew написал(а) 15th Ноябрь, 2010 в 16:34

    эээ.. а с какой целью тогда плата выкладывалась? может сможете выложить рисунок под лут?
    я немного не вьезжаю, простите если что.

  16. BSVi написал(а) 15th Ноябрь, 2010 в 19:59

    Добавил платы для ЛУТ’а в конец статьи.

  17. Wiew написал(а) 25th Ноябрь, 2010 в 21:13

    не могу найти в продаже KOYO KCO-010T-25.000…,
    можна ли заменить обычным двухногим кварцом?

  18. BSVi написал(а) 25th Ноябрь, 2010 в 23:46

    Нет, KOYO — это именно генератор, а не резонатор — это большая разница )
    Ищи кварцевый генератор на нужный номинал, и заменяй им )

  19. Wiew написал(а) 26th Ноябрь, 2010 в 20:47

    ааа… теперь понял, благодарю.

  20. Yassen написал(а) 2nd Март, 2011 в 12:52

    Привет Сергей, не могли бы вы внести изменения в программное обеспечение так, что генератор может оставить только прямоугольные режиме? То есть, в начале не вводить режим выбора и непосредственно вводить только в прямоугольном режиме? Также, если можно ограничиться верхней частоты до 1 МГц. Я был бы признателен, если вы сделаете эту корректировку.

    Прошу прощения, если мой русский не хорошо, я из Болгарии.

  21. BSVi написал(а) 2nd Март, 2011 в 19:15

    Дак возьми сам и подкорректируй, там ничего сложного нет. А мне лезьть в прожект — леньки.

    Да и смысла такой махины для режима только прямоугольников нет особого.

  22. 9ICOH написал(а) 26th Май, 2011 в 18:17

    Сергей, а вы много штук AD9833 спалили??
    а то я уже две умудрился. И не совсем понимаю в чем причина. Одна все таки работала, но не долго. Потом перестала отзываться.
    Может у вас совет по этому поводу найдется))

  23. BSVi написал(а) 26th Май, 2011 в 19:41

    Я не спалил ни одной. Что посоветовать — не знаю. Тут подойдет все, что подсказывает здравая логика — проверить питание, проверить направление входов/выходов, итп.

  24. 9ICOH написал(а) 26th Май, 2011 в 21:10

    Может только и одну спалил. Ща вроде заработало))

  25. lpa написал(а) 26th Май, 2011 в 21:35

    Может, статика? В даташите написано, что AD9833 боится статики.

  26. Galina написал(а) 6th Июль, 2011 в 18:24

    У меня типа «маленькая просьба»…
    Я — начинающий радиолюбитель. В программировании разбираюсь достаточно, а вот в схемотехнике — туго. Схемку повторить могу, разработать с нуля — мягко говоря «трудно». Ваш приборчик понравился, а вот повторить его мне сложно по нескольким причинам:
    1) какой принцип генерации прямоугольника, а именно для чего используется связка 74HC4066+TS912+IRLML6302 (для чего там целых два вывода SQ_OUT_PH1 и SQ_OUT_PH2, ведь прямоугольник можно генерировать всего лишь одним GPIO);
    2) для каких целей на выходе установлены два усилителя AD8066 и OPA698, а не какой-то один (какую роль выполняет каждый из них);
    3) почему AD9833 используется для генерации только синусоидального сигнала, ведь с её помощью можно генерировать форму и прочих сигналов;
    4) для каких целей используется 74HC244 на входе AD9833.

    Отвечу, что темы вроде кнопки/энкодер/дисплей/питание для меня понятны, так как во многих конструкциях они повторяются и имею не только опыт работы с ними, а и понимаю принцип их функционирования. То, что «AD9833 — генератор сигнала», «AD8066 и OPA698 — усилители» понимаю, а вот какие компоненты на схеме относятся к AD9833, какие к фильтру Баттерворта, какие к усилителям или для каких целей на схеме генератора синусоидальных сигналов стоит перемычка P4(MPW) между AD8066 и OPA698 — вот это для меня сложные вопросы. А без этих ответов мне остается только повторить конструкцию, ведь ни улучшить ни сделать аналогичное устройство мне просто не хватает знаний.

    Ответы на эти вопросы я могла бы найти в документации, оформленной в виде блок-схеммы с описанием принципа работы каждого блока. С такой блок-схемой скорость понимания работы устройства увеличивается очень сильно — по себе знаю. Имея понимание работы каждого функционального блока я могла бы повторить конструкцию используя другой МК (не рабтаю с Atmega), удалить 74HC244 (полагаю, можно обойтись без неё, если ставить рядом с управляющим МК, а не на отдельно плате), ОСОЗНАННО заменить связку AD8066+OPA698 на какую-нибудь другую микросхему или же вообще принять решение генерировать сигнал самим МК (естественно, это был бы ОСОЗНАННО подобранный МК под конкретные выходные параметры), а после него только какой-нибудь усилитель (или два).

    Просьба: пожалуйста, разработчики, как можно чаще используйте поясняющие блок-схемы в своей документации и логически отделяйте ВСЕ функциональные блоки на схеме (например — прямоугольник с желтым фоном вокруг нереализованной части) в соответствии с блок-схеммой. Этим вы ускорите процесс самообучения новичков и избавите себя от значительной массы вопросов.

  27. BSVi написал(а) 6th Июль, 2011 в 19:04

    Ого, какой эпос )

    1. Принцип очень простой — ключи (74HC4066) переключают выход между двух состояний, одно из них — ноль, второе — регулируются. Это сделано для того, чтобы можно было регулировать амплитуду прямоугольников.

    > для чего там целых два вывода SQ_OUT_PH1 и SQ_OUT_PH2
    Для того, чтобы переключать ключи. Когда одна пара ключей подключается к плюсу, вторая отключается от минуса, ну и наоборот. На эти выводы подаются противоположные сигналы.

    2. OPA698 помощнее, он работает в основном, как буффер на нагрузку. AD8066 работаетю просто как усилители.

    3. 74HC244 работает для развязки цифровых сигналов от аналоговых — чтобы помехи, которые всегда присутствуют на цифровых выходах не попали на аналоговую часть схемы. В принципе, тут этого не нужно было делать.

    Кстати, если ты заюзаешь не 10minute mail, то на почту будут приходить ответы на твои комменты.

  28. Bodia написал(а) 6th Июль, 2011 в 21:59

    можна ли заменить OPA698 на OPA628?
    ОРА698 нигде нету….

  29. Galina написал(а) 7th Июль, 2011 в 16:34

    1) Почему использованы OPA698 и AD8066 вместе? Почему не оставлен только OPA698? Логика подсказывает только один вариант: AD8066 имеет большую чувствительность.
    2) Почему AD9833 используется для генерации только синусоидального сигнала, если она способна выдавать синус, треугольник и меандр? Вначале статьи была оговорка о присутствии многих компромиссов в ходе проэктирования устройства. Эти компромиссы как-то связаны с трудностями в реализации треугольника и меандра на базе AD9833? (Полагаю, что возникли сложности при изменении амплитуды/периода сигнала на выходе AD9833)

  30. BSVi написал(а) 8th Июль, 2011 в 21:17

    >Почему не оставлен только OPA698?
    Усиления одного OPA698 не хватило бы. Операционники обладают таким свойством — чем больше усиление, тем меньше полоса пропускания. Пришлось ставить два операционника подряд. Заодно и измерялку напряжения прикрутить удалось (правда, она оочень фигово работала)

    >Почему AD9833 используется для генерации только синусоидального сигнала
    Спектр прямоугольника и треугольника очень широк, соответственно, от фильтра на выходе пришлось бы отказаться. Нужно было выбрать — хороший синус или плохой синус +прямоугольник + треугольник. Я выбрал синус.

  31. DD написал(а) 14th Октябрь, 2011 в 8:40

    Как я понял генерация прямоугольника идет средствами МК.
    Эт че Мега выдает 8МГц аппаратного ШИМ?

  32. BSVi написал(а) 14th Октябрь, 2011 в 8:48

    Именно так.

  33. DD написал(а) 14th Октябрь, 2011 в 9:22

    Если внешний кварц на 12М. Сколько макс частоту сможет мега выдать на ШИМ. И сколько бит на заполнение будет отводиться? и почему у тебя 2 ноги шима используются?

  34. BSVi написал(а) 14th Октябрь, 2011 в 9:59

    >Если внешний кварц на 12М
    Угу, в схем ошибка — кварц на 16МГц.

    Две ножки, так как выходой каскад пуш-пульный.

  35. DD написал(а) 14th Октябрь, 2011 в 12:34

    Жуем дальше )))
    т.е. аппаратный шим в атмеле работает 2 ногами — 1 вкл, 2 выкл. (просто я то на PICе сижу) я так понимаю это особенность меги.
    к Р8 подкл переменник я так понимаю.
    судя по видео надписи на морде — sine sq.. расположены не правильно ? )))

  36. BSVi написал(а) 14th Октябрь, 2011 в 12:39

    ага, но переделывать уже лень )) мне бы вашу наблюдательность!

  37. DD написал(а) 18th Октябрь, 2011 в 5:51

    Я понимаю что лень побеждает всё и всех И что фильтр бутеррброда стоит ))) но все же нельзя ли посмотреть осцилограмму прямоугольника, треугольника, который выдаст 9833 собственными средствами.

    не по теме — что то восстановление пароля барохлит — если просто клацнуть по ссылке в письме по вываливается ошибка»неверный код», а если ссылку скопировать то проходит нормально!!!

  38. DD написал(а) 21st Октябрь, 2011 в 12:10

    я так понял лень победила :'(((

    )))

  39. BSVi написал(а) 21st Октябрь, 2011 в 12:12

    Смотри ответ на следующий коммент.

  40. Alexvega написал(а) 21st Октябрь, 2011 в 11:45

    Уважаемый Автор, возможно ли все таки добавить регулировку десятых долей герца синуса

  41. BSVi написал(а) 21st Октябрь, 2011 в 12:12

    Если вопрос действительно в том, возможно ли, то возможно.

    Если вопрос был в том, буду ли я этим заниматься? То нет, не буду. Я уже успел сжечь этот генератор, а восстанавливать его мне не особо хочется. Возможно, позже появится другой генератор.

    Поддержка этого генератора прекращена.

  42. DD написал(а) 25th Октябрь, 2011 в 11:28

    тогда последний вопрос — как ты его сжег?
    ну чтобы типа на чужих ошибка учиться)

  43. BSVi написал(а) 25th Октябрь, 2011 в 11:59

    Питал от него силовой трнанзюк, транзюк пробило и 50вольт оказалось на входе. Что именно сгорело, не разбирался.

  44. DD написал(а) 25th Октябрь, 2011 в 21:33

    ладно ну а теперь совсем не по теме — расчет фильтра — как расчитать? каким образом? пример расчета? направление копания траншеии!

  45. BSVi написал(а) 26th Октябрь, 2011 в 0:21

    Фильтр считается прогами. думаю, эти проги гугляться. Фильтр считается так, чтобы искажения из-за дискретизации на нужном диапазоне были меньше желаемых.

  46. DD написал(а) 26th Октябрь, 2011 в 6:13

    гуглятся то гуглятся! гугл беспорно велик — но ничего внятно по расчету пассивных LC фильтров пока не нашел. активных навалом а вот с пассивом дошленько (((

  47. asmild написал(а) 27th Октябрь, 2011 в 12:23

    Доброго времени суток!
    Пытаюсь собрать аналогичный генератор, очень нужен для проведения некоторых экспериментов. Но не могу найти таких операциоников у нас в городе, подскажите пожалуйста аналоги AD8066 и OPA698(необязательно с такой же распиновкой выводов) или вообще можно заменить их на пару транзисторов.

  48. Galina написал(а) 29th Декабрь, 2011 в 14:17

    Уважаемый BSVi, какие недостатки варианта с использованием твердотельного реле для переключения источника сигнала (синус, меандр) на один выходной разьём?

  49. BSVi написал(а) 29th Декабрь, 2011 в 14:27

    Чет я не понимаю, зачем тут реле. Если вы имели ввиду обычный аналоговый перключатель — то особо никаких, разве что невозможно сразу использовать и прямоугольник и синус.

  50. Galina написал(а) 29th Декабрь, 2011 в 16:25

    Генератор синуса и генератор меандра выполнены как отдельные функциональные блоки. Если добавить еще несколько блоков типа «генератор треугольника» и «генератор сигнала произвольной формы», то получиться замечательный универсальный генератор. Для такого случая возникает желание выводить все сигналы через один и тот же выход, коммутируя требуемый источник с помощью реле.

  51. BSVi написал(а) 29th Декабрь, 2011 в 16:49

    Если уже есть «генератор произвольно формы», то остальные не нужны, не нужен и коммутатор = профит 🙂

  52. Galina написал(а) 29th Декабрь, 2011 в 19:29

    Только быстродействие «генератора произвольной формы» сильно отличается от «генератора синуса/меандра»

  53. Galina написал(а) 29th Декабрь, 2011 в 19:32

    так что каждый генератор обладает своими преимуществами, а сам прибор — совокупностью преимуществ его отдельных составляющих.

  54. BSVi написал(а) 29th Декабрь, 2011 в 19:42

    Дак я не особо понял задачу. Кстати, если проект новый и не связан с этим генератором, то лучше создайте ветку на форуме.

  55. Bodia написал(а) 17th Декабрь, 2012 в 21:03

    напишите пожалуйста фьюзы для микроконтроллера, буду благодарен).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.