Генератор синуса и прямоугольника
Фигова эмбеддерская жизнь без генератора синуса! Вот и я решился сделать себе такой девайс.
Сначала хотел на atXmega сделать – там есть суперский такой 12-битный ЦАП. Посчитал, написал (вот одно из тех мест, где нужно писать на асме!), получилось, но плохо – всего 800kSps, тоесть можно рассчитывать на 100кГц синуса максимум. Не густо! Подумал я еще и прикупил ad9833.
Введение
Этот проект – один из долгоиграющих проектов. С одной стороны пришлось принять много компромиссных решений (а я жутко не люблю компромиссы 🙂 ) с другой пришлось отказаться от части задуманного, так как слишком сложно. С третей типичные дешевые отмазки – лень, и куча других дел.
Но ничего, в конце концов я его таки добил.
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 микросхеме (угу, редкий изврат, чисто для прикола).
Операционники выбраны такими просто потому, что такие были.
Тот кусочек который в желтом квадратике – не собирается! Он не работает (по крайней мере, как ожидалось)! Именно из-за того, что он пожелтел, измеритель напряжения был выброшен из головы.
Эту фотку я уже показывал на форуме пару раз, но покажу еще. Это и есть генератор синуса, только без выходного разъема. (кликабельно)
Источник питания
Тут все намного проще. Сначала я долго раздумывал – делать питание двуполярным или ограничится одной полярностью. Но решил так двуполярное делать – можно использовать непосредственную связь с выходом.
Три кренки и готово! Да-да, там именно кр142енХХ стоят! Нужно-ж куда-то старье сдувать )
Если кого-то может удивить схема на трех кренках, вот она:
Контроллер и генератор прямоугольников
Сначала я долго думал – как-же реализовать регулировку прямоуольников? Умники советовали поставить ОУ, он я ведь знал, что можно проще! В итоге додумался до просто го переключателя! Ведь что может быть проще, чем переключать с нуля до некоторого фиксированного напряжения! Аналоговый переключатель 74hc4066 меня вполне устроил! Единственное, пришлось увеличить выходное сопротивление до 100 Ом – 50 у самого 74hc4066 и еще 50 внешних. Это чтобы не сжечь микрушку. Можно, конечно поставить переключалку покруче, но лень одолела. Тем более, не так уж это и критично!
Откуда взять напряжение для переключения? Тут нужен low-drop притом не простой, а очень хороший. Чтобы этот самый drop был не больше, скажем 100мВ. Если такие и есть в природе, то их нужно долго и нужно искать. Проще сделать самому на rail-to-rail ОУ и транзисторе.
С контроллерной частью все просто – в ход пошла старая atmega8 от эпического запаса которых пора избавляться. Она-то и генерит управление аналоговому переключателю. В отличии от режима генерации синуса, пользователь задает период, а не частоту. Так удобнее и точнее.
Посыпаем это все индикатором и энекодером, добавляем кнопочек по вкусу, разъемчиков так всяких и засовываем в корпус.
Традиционно схема и плата:
Софт
По большей своей части – говнокод, ведь хотелось слепить побыстрее, что и было сделано.
Софт организовывает менюшку настройки частоты. При этом разряд в котором настраивается частота можно менять кнопочками, а частоту настраивать энкодером.
Если не трогать кнопки в течении 10сек, то выбранная частота запоминается и сама включится после включения питания.
Еще есть кавайный счетчик запусков,
Результаты
Как и ожидалось, С/Ш порядка 60дБ, тоесть мы наткнулись на фундаментальное ограничение по возможностям ЦАП’а. На спектрограмме видно, что пролазит небольшая постоянная составляющая. Ее я уберу конденсатором.
Спектрограммы сняты звуковухой E-MU 0202USB.
Спектр для 1кГц:
Спектр для 10кГц:
Сигнал выглядит довольно синусоидальным, что не странно.
Видушник с демонстрацией. К сожалению, фотик фигово записывает видео и что написано в менюшках разобрать невозможно, извиняюсь, но перезаписывать лень.
Бонус
Ну и на последок – бонус. Фотография под названием “жысть эмбеддера”, кликабельно:
Платы
По требованию трудящихся, все платы для ЛУТа/позитивного резиста кипой:
Печатать как есть, верхний слой уже отзеркален.
Зачетная конструкция, качество изготовления прямо заводское)
Маленький вопрос: а что такие звоны на прямоугольнике сильные? Ёмкость монтажа? Кабель? Миллер? Или шумы генератора?
Это — звон кабеля. Используется кусок 50омного кабеля который подключается к щупу 1/10, тут и происходит отражение. На видео развертка — 200нс/деление.
Несогласование выходного сопротивления генератора и кабеля с осцилом?
Типа того, ну еще и делитель в щупе косячит.
Спасибо за статью, отличный генератор! Нужно будет обязательно сделать что-нибудь подобное, только dds достать..
На счет развязки dds с контроллером — скопом не глядел, есть ли шумы ? Сдается мне, что эта развязка лишняя.. Никогда не видел подобных развязок в ВЧ/СВЧ схемах.. А если и есть, спасет ли от них этот буфер ?
Там наносекнудные иголки простакивают — скопом их очень сложно увидеть. Этот буффер есть в документе от аналога, поэтому оставил.
А если и есть, спасет ли от них этот буфер ?
Спасает, скорее всего. Транзисторы внутри буффера неповоротливые, не успивают переключиться.
Можно, конечно ферритовые бусинки ставить — это дело вкуса.
А как лудил плату “генератора синуса”, особенно хорошо видно качество лужения на полигонах возле генератора на 25 MHz ?.
Знаю есть две технологии: “КипящаяВода+ЛимоннаяКислота+СплавРозе+РастираемПоПлатеВатой” и вторая
“ОплеткаОтКабеля+СплавРозе+ПаяльникНа100Градусов”
Извиняюсь если не по теме статьи 🙂
Ууу, нее, я такими дзеновскими технологиями не владею. У меня все проще — Кууууча флюс + ало паяльника, даже без оплетки. А лудил я не специально, а просто похожу пайки припой растекался, дак я излишки вытерал о плату.
а можно поставить мега8L-8pi
Можно, но это будет превышение его спецификаций по частоте, хотя обычно работает, никаких гарантий дать нельзя.
А вот на схеме singen.pdf (там где стоит ad9833) немогу понять номинал конденсатора C9. Написано DNP и все, что это значит?!!!
Ну и второй, менее важный вопрос — чем бы заменить ОУ. Как понимаю основное требование к ним Rail-To-Rail. Думаю даже поставить однополярные, пускай синусоида всегда будет положительная…
DNP — Do Not Place. Наверняка, ты видел на китайских платах места с незапаянными деталями. Вот так они и обозначаются. Это конденсатор, который стоит поставить, если не хватит крутизны фильтров.
ОУ тут не только rail to rail, они должны еще выдавать правильный ток. Особенно, OPA698. Не каждый ОУ может работать на 50 ом. Ну, и, ОУ должны иметь достаточную полосу.
А как слои печатки переключать, Вы какой программой пользуетесь?
Слои — никак, этоже пдфник. Я пользуюсь Altium Designer.
эээ.. а с какой целью тогда плата выкладывалась? может сможете выложить рисунок под лут?
я немного не вьезжаю, простите если что.
Добавил платы для ЛУТ’а в конец статьи.
не могу найти в продаже KOYO KCO-010T-25.000…,
можна ли заменить обычным двухногим кварцом?
Нет, KOYO — это именно генератор, а не резонатор — это большая разница )
Ищи кварцевый генератор на нужный номинал, и заменяй им )
ааа… теперь понял, благодарю.
Привет Сергей, не могли бы вы внести изменения в программное обеспечение так, что генератор может оставить только прямоугольные режиме? То есть, в начале не вводить режим выбора и непосредственно вводить только в прямоугольном режиме? Также, если можно ограничиться верхней частоты до 1 МГц. Я был бы признателен, если вы сделаете эту корректировку.
Прошу прощения, если мой русский не хорошо, я из Болгарии.
Дак возьми сам и подкорректируй, там ничего сложного нет. А мне лезьть в прожект — леньки.
Да и смысла такой махины для режима только прямоугольников нет особого.
Сергей, а вы много штук AD9833 спалили??
а то я уже две умудрился. И не совсем понимаю в чем причина. Одна все таки работала, но не долго. Потом перестала отзываться.
Может у вас совет по этому поводу найдется))
Я не спалил ни одной. Что посоветовать — не знаю. Тут подойдет все, что подсказывает здравая логика — проверить питание, проверить направление входов/выходов, итп.
Может только и одну спалил. Ща вроде заработало))
Может, статика? В даташите написано, что AD9833 боится статики.
У меня типа «маленькая просьба»…
Я — начинающий радиолюбитель. В программировании разбираюсь достаточно, а вот в схемотехнике — туго. Схемку повторить могу, разработать с нуля — мягко говоря «трудно». Ваш приборчик понравился, а вот повторить его мне сложно по нескольким причинам:
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 на какую-нибудь другую микросхему или же вообще принять решение генерировать сигнал самим МК (естественно, это был бы ОСОЗНАННО подобранный МК под конкретные выходные параметры), а после него только какой-нибудь усилитель (или два).
Просьба: пожалуйста, разработчики, как можно чаще используйте поясняющие блок-схемы в своей документации и логически отделяйте ВСЕ функциональные блоки на схеме (например — прямоугольник с желтым фоном вокруг нереализованной части) в соответствии с блок-схеммой. Этим вы ускорите процесс самообучения новичков и избавите себя от значительной массы вопросов.
Ого, какой эпос )
1. Принцип очень простой — ключи (74HC4066) переключают выход между двух состояний, одно из них — ноль, второе — регулируются. Это сделано для того, чтобы можно было регулировать амплитуду прямоугольников.
> для чего там целых два вывода SQ_OUT_PH1 и SQ_OUT_PH2
Для того, чтобы переключать ключи. Когда одна пара ключей подключается к плюсу, вторая отключается от минуса, ну и наоборот. На эти выводы подаются противоположные сигналы.
2. OPA698 помощнее, он работает в основном, как буффер на нагрузку. AD8066 работаетю просто как усилители.
3. 74HC244 работает для развязки цифровых сигналов от аналоговых — чтобы помехи, которые всегда присутствуют на цифровых выходах не попали на аналоговую часть схемы. В принципе, тут этого не нужно было делать.
Кстати, если ты заюзаешь не 10minute mail, то на почту будут приходить ответы на твои комменты.
можна ли заменить OPA698 на OPA628?
ОРА698 нигде нету….
1) Почему использованы OPA698 и AD8066 вместе? Почему не оставлен только OPA698? Логика подсказывает только один вариант: AD8066 имеет большую чувствительность.
2) Почему AD9833 используется для генерации только синусоидального сигнала, если она способна выдавать синус, треугольник и меандр? Вначале статьи была оговорка о присутствии многих компромиссов в ходе проэктирования устройства. Эти компромиссы как-то связаны с трудностями в реализации треугольника и меандра на базе AD9833? (Полагаю, что возникли сложности при изменении амплитуды/периода сигнала на выходе AD9833)
>Почему не оставлен только OPA698?
Усиления одного OPA698 не хватило бы. Операционники обладают таким свойством — чем больше усиление, тем меньше полоса пропускания. Пришлось ставить два операционника подряд. Заодно и измерялку напряжения прикрутить удалось (правда, она оочень фигово работала)
>Почему AD9833 используется для генерации только синусоидального сигнала
Спектр прямоугольника и треугольника очень широк, соответственно, от фильтра на выходе пришлось бы отказаться. Нужно было выбрать — хороший синус или плохой синус +прямоугольник + треугольник. Я выбрал синус.
Как я понял генерация прямоугольника идет средствами МК.
Эт че Мега выдает 8МГц аппаратного ШИМ?
Именно так.
Если внешний кварц на 12М. Сколько макс частоту сможет мега выдать на ШИМ. И сколько бит на заполнение будет отводиться? и почему у тебя 2 ноги шима используются?
>Если внешний кварц на 12М
Угу, в схем ошибка — кварц на 16МГц.
Две ножки, так как выходой каскад пуш-пульный.
Жуем дальше )))
т.е. аппаратный шим в атмеле работает 2 ногами — 1 вкл, 2 выкл. (просто я то на PICе сижу) я так понимаю это особенность меги.
к Р8 подкл переменник я так понимаю.
судя по видео надписи на морде — sine sq.. расположены не правильно ? )))
ага, но переделывать уже лень )) мне бы вашу наблюдательность!
Я понимаю что лень побеждает всё и всех И что фильтр бутеррброда стоит ))) но все же нельзя ли посмотреть осцилограмму прямоугольника, треугольника, который выдаст 9833 собственными средствами.
не по теме — что то восстановление пароля барохлит — если просто клацнуть по ссылке в письме по вываливается ошибка»неверный код», а если ссылку скопировать то проходит нормально!!!
я так понял лень победила :'(((
)))
Смотри ответ на следующий коммент.
Уважаемый Автор, возможно ли все таки добавить регулировку десятых долей герца синуса
Если вопрос действительно в том, возможно ли, то возможно.
Если вопрос был в том, буду ли я этим заниматься? То нет, не буду. Я уже успел сжечь этот генератор, а восстанавливать его мне не особо хочется. Возможно, позже появится другой генератор.
Поддержка этого генератора прекращена.
тогда последний вопрос — как ты его сжег?
ну чтобы типа на чужих ошибка учиться)
Питал от него силовой трнанзюк, транзюк пробило и 50вольт оказалось на входе. Что именно сгорело, не разбирался.
ладно ну а теперь совсем не по теме — расчет фильтра — как расчитать? каким образом? пример расчета? направление копания траншеии!
Фильтр считается прогами. думаю, эти проги гугляться. Фильтр считается так, чтобы искажения из-за дискретизации на нужном диапазоне были меньше желаемых.
гуглятся то гуглятся! гугл беспорно велик — но ничего внятно по расчету пассивных LC фильтров пока не нашел. активных навалом а вот с пассивом дошленько (((
Доброго времени суток!
Пытаюсь собрать аналогичный генератор, очень нужен для проведения некоторых экспериментов. Но не могу найти таких операциоников у нас в городе, подскажите пожалуйста аналоги AD8066 и OPA698(необязательно с такой же распиновкой выводов) или вообще можно заменить их на пару транзисторов.
Уважаемый BSVi, какие недостатки варианта с использованием твердотельного реле для переключения источника сигнала (синус, меандр) на один выходной разьём?
Чет я не понимаю, зачем тут реле. Если вы имели ввиду обычный аналоговый перключатель — то особо никаких, разве что невозможно сразу использовать и прямоугольник и синус.
Генератор синуса и генератор меандра выполнены как отдельные функциональные блоки. Если добавить еще несколько блоков типа «генератор треугольника» и «генератор сигнала произвольной формы», то получиться замечательный универсальный генератор. Для такого случая возникает желание выводить все сигналы через один и тот же выход, коммутируя требуемый источник с помощью реле.
Если уже есть «генератор произвольно формы», то остальные не нужны, не нужен и коммутатор = профит 🙂
Только быстродействие «генератора произвольной формы» сильно отличается от «генератора синуса/меандра»
так что каждый генератор обладает своими преимуществами, а сам прибор — совокупностью преимуществ его отдельных составляющих.
Дак я не особо понял задачу. Кстати, если проект новый и не связан с этим генератором, то лучше создайте ветку на форуме.
напишите пожалуйста фьюзы для микроконтроллера, буду благодарен).