Easyelectronics.ru

Электроника для всех
Текущее время: 18 июл 2019, 10:03

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 101 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Создаем полноценный функциональный генератор
СообщениеДобавлено: 20 окт 2015, 20:22 
Старожил

Зарегистрирован: 20 окт 2015, 18:14
Сообщения: 297
Отпуск! Время, когда можно плотно заняться тем, что тебе интересно, что давно вынашивал в планах, но по каким-то причинам не начинал делать.
Моей навязчивой идеей давно является функциональный генератор. Но не те поделки, что встречаются на просторах интернета. Я хочу полноценный прибор, с дисплеем, кнопками, и функционалом не хуже, чем у своих дорогих старших братьев. Ну как не хуже... Понятно, что частота будет меньше, но все остальное должно быть таким же, а может и лучше. Поэтому список требований выглядит так:
- максимальная частота выходного сигнала 1 МГц (по 20 точкам);
- максимальный размах сигнала ±5 В;
- выходное сопротивление 50 Ом;
- форма сигнала: синус, прямоугольник, треугольник, прямая и обратная пила, шум, постоянный уровень, пользовательская форма (предварительно загруженная через ПО);
- режимы: циклический, ГКЧ, пакет, модуляция (сложение и умножение);
- наличие перестраиваемого ФНЧ (минимум 3 порядка);
- режимы запуска: авто, ручной, внешний (с входа синхронизации);
- удобный интерфейс;
- связь с ПК.

Структурная схема выглядит так:
Изображение

Я решил разделить сигнальную и интерфейсную часть. Каждой из них управляет свой МК. Решение довольно спорное, но, учитывая сложность софта самого генератора и интерфейса, думаю оно не плохое. Можно сделать интерфейс хоть на меге и 7-сегментниках). А вот мои первые прототипы:

Изображение

Подробно расскажу о каждой плате...

Плата питания

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

Изображение
Изображение

На выходе платы следующие напряжения: 5 и 3.3 В для питания цифровой части (МК и дисплей), ±2,7 В для питания тракта генератора, ±5,5 В для питания выходного каскада.
Такой зоопарк будет понятен из описания платы генератора.

Заранее скажу, что все платы потребовали доработок. Но я сначала закончу описание первых прототипов, а потом расскажу про изменения. Так понятней будет.

Интерфейсная плата

Эта плата находится на втором месте по сложности. Центром ее является STM32F107R. Можно использовать STM32F103R, тем более прошивка скомпилена именно под 103-ю. EmBlocks почему-то не захотел делать .hex под 107-ю, хотя она поддерживается. Ну да ладно, работает и так. Кстати, основным требованием была частота SPI не менее 18 МГц. Поэтому отпала F100.

Изображение
Изображение

На плате находятся:
- МК (64-ногий корпус, частота 72 МГц, частота SPI 18 МГц);
- панелька для подключения TFT-дисплея на базе контроллера ILI9341 2,2”;
- энкодер;
- кнопки влево-вправо-пуск-выход (все под энкодером);
- блок цифровой клавиатуры;
- блок режимных и функциональных кнопок;
- 9 светодиодов, показывающих текущее состояние генератора;
- пищалка.

Схемы я не рисовал, но по картинке выше видно, что блоки кнопок объединены в матрицы, а 4 оставшиеся кнопки и светодиоды идут сразу на ноги МК. Энкодер механический, без кнопки. Кнопки взял такие из-за мягкости хода и наличия колпачков. Дребезг обрабатывается программно.
Работа интерфейсной платы опробована и требует минимальных доработок.
По софту интерфейса возможно сделаю обширную статью, т.к. он не простой и не в формате форума. Хотя… Все может быть.
Интерфейсная и сигнальная плата общаются по UART. При нажатии на кнопку или при повороте энкодера по интерфейсу отправляется соответствующая команда в формате «CC DD DD DD DD», где СС-параметр, DD-значение (signed). Если старший бит параметра равен 1, то генератор вернет текущее значение параметра, при этом переданное значение DD игнорируется. Параметры могут быть следующими: частота, период (да-да, можно указать и то, и это), амплитуду, смещение, верхнее и нижнее значение сигнала, режим, состояние выхода и многие другие. Полный список приведу, когда закончу проект.
В целом, софт интерфейса у меня продуман достаточно хорошо. Он имеет все те возможности, которые мне хотелось видеть в генераторе: он структурен, легко масштабируется, позволяет выводить и редактировать как текстовые (константные) так и числовые данные. Готовность софта можно оценить в 95%.
Я постараюсь в ближайшее время сделать видео, демонстрирующее работу интерфейса.

Плата генератора

Ну и наконец, самая сложная плата, сердцем которой является STM32F405RG.

Изображение
Изображение

На плате находятся:
- МК;
- 10-разрядный ЦАП R2R;
- ФНЧ 1 порядка 1 МГц по 0.1 дБ;
- ФНЧ 2 порядка (баттерворт) перестраиваемый: 1 кГц, 10 кГц, 100 кГц, 1 МГц. Все по 0.1 дБ;
- узел предварительного смещения сигнала (приведение сигнала к ±1,25 В);
- узел пользовательского смещения и усиления (применен цифр. пот-р AD5144);
- подключаемый ФВЧ 2 порядка (баттерворт) 100 Гц;
- выходной каскад, обеспечивающий выходное сопротивление 50 Ом;
- реле.

Как уже было указано выше, применен контроллер STM32F405RG как один из самых доступных (в моем случае так вобще без вариантов) кортексов М4. На нем я выжал синус 1.35 МГц по 16 точкам. На частоте 168 МГц.

Сигнал в разных точках тракта выглядит следующим образом:

Изображение

ЦАП собран из 1 и 2 кОм-ных резисторов. После них стоит фильтр 1 порядка и делитель. Последний уменьшает максимальный размах сигнала до 2.5 В (почти весь тракт питается от 2.7 В). Причиной такого питания является потенциометр AD5144, который имеет независимое питание цифровой части (связь с МК) и аналоговой части (4 потенциометра по 256 шагов). Так вот, питание аналоговой части максимум может быть ±2.75 В (по абсолютным значениям больше, но это не дело гонять микруху на предельном питании).
Далее идет перестраиваемый ФНЧ (баттерворт), обеспечивающий следующие частоты среза (по 0.1 дБ): 1 кГц, 10 кГц, 100 кГц, 1 МГц. Переключаются резисторы с помощью сдвоенного мультиплексора ADG609.
После этого мы смещаем сигнал ровно наполовину, чтобы он был симметричен относительно земли. Теоретически это можно не делать, но практически надо. Сильно упрощает программирование.
Далее идет пользовательское смещение и усиление сигнала. На смещение выделен один потенциометр, т.е. 256 шагов, а на усиление два, включенных последовательно. Получается 511 шагов. Причем усилитель сделан таким образом, что если выставлено значение усиления больше 127 (условно) то сигнал усиливается (до 2-х раз), а если меньше, то уменьшается.
Далее ФВЧ 100 Гц. Просто оставался один ОУ, почему бы не использовать.
И выходной каскад, умножающий сигнал на 2, где два операционника работают параллельно на общую нагрузку для увеличения выходного тока.

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

Конструктив

Планирую использовать корпус Gianta 768. Соответственно, передняя панель имеет размер 140х80. Вариант оформления показан на рисунке ниже.

Изображение
Изображение

С задней стороны будет стандартный силовой разъем, вентилятор 40х40 и разъем, на который будут выведены UART и SWD интерфейсной и сигнальной плат. Таким образом будет обеспечиваться связь с ПК (через преобразователь USB-UART конечно).

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

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

P.S. Собственно для чего я создал топик... Отпуск закончился, соответственно времени заниматься проектом уже не так много. И если есть желающие принять участие в разработке - буду только рад! Проект открытый! Работы впереди еще очень много. Но результат обещает быть достойным.


Последний раз редактировалось sva_omsk 23 окт 2015, 17:30, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 20 окт 2015, 21:49 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:19
Сообщения: 6390
Откуда: Из тех... Из бывших...
Заход... мощный!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 21 окт 2015, 00:27 
Старожил

Зарегистрирован: 19 июн 2012, 14:17
Сообщения: 3440
sva_omsk писал(а):
Как уже было указано выше, применен контроллер STM32F405RG как один из самых доступных (в моем случае так вобще без вариантов) кортексов М4. На нем я выжал синус 1.35 МГц по 16 точкам. На частоте 168 МГц.

Мда, 20MSPS... для выжимания всё же ПЛИС надо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 21 окт 2015, 18:53 
Старожил

Зарегистрирован: 20 окт 2015, 18:14
Сообщения: 297
Продолжаем тему. На очереди разбор косяков и начнем с интерфейсной платы. Схемы на нее по прежнему нет, возможно в будущем и появится, но приоритет у нее минимальный. По картинкам из первого поста в принципе должно быть все понятно.
Видео пока не снял, но зато сделал несколько фоток интерфейса. Оказывается, сделать нормальное фото TFT-экрана - та еще задача.

Изображение
Изображение
Изображение

Правильная цветопередача только на последнем фото, правда в реале все гораздо контрастнее и красивее. Фон черный.
Интерфейс не пестрит всякими рюшечками, он достаточно минималистичен. Есть заголовок экрана (в данном случае Calibration), две секции параметров и вкладки. Активная секция и вкладка выделена другим цветом. Справа в каждой секции предусмотрено место под иконку параметра. В софте тоже все готово, надо только подготовить иконки. Как видно из первого и второго фото, параметр может быть текстовым (константным) или числовым. Во втором случае в активной секции появляется черта под цифрой. Вращение энкодера будет изменять именно ее. Кнопками Влево-Вправо черта перемещается, при этом учитывается текущая разрядность числа.

Собственно главный косяк уже виден: функциональные кнопки не по центру вкладок. Надо их сместить на 3 мм влево. Дело в том, что я рисовал плату когда еще дисплей не пришел. Думал, что активная зона дисплея по центру. Оказывается нет. Кроме того, сам не знаю почему, не провел несколько проводников в матрицах кнопок. Пришлось запаять проводами.

Изображение
Изображение

Остальное работает. Файл ПП я уже поправил, так что с аппаратной точки зрения интерфейсная часть готова на 100%.


Последний раз редактировалось sva_omsk 23 окт 2015, 17:32, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 21 окт 2015, 19:02 
Старожил

Зарегистрирован: 20 окт 2015, 18:14
Сообщения: 297
яверт, проблема совсем не в том, чтобы выжать частоту. Проблема в том, что с ней потом делать. Преобразование сигнала (смещение и усиление) осуществляется с помощью потенциометров. Найти их с такой широкой полосой - это большая проблема. Мои имеют полосу 3 МГц. Для синуса достаточно, а вот пилу и прямоугольник заметно искажают даже на 1 МГц (можете смоделировать в протеусе, используя RC-цепь). С операционниками попроще, но тоже могут быть проблемы. Поэтому я остановился на указанных в самом начале параметрах.
Кроме того, несмотря на доступность отладки DE0 от терасика, связываться с ПЛИСками ну ооочень не хочется. Не лежит у меня душа к ним.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 21 окт 2015, 19:25 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1373
160 МГц мк, 1 МГц синус по 20 точкам - это 160/20 = 8 тактов на точку - что-то не верю )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 21 окт 2015, 19:36 
Старожил

Зарегистрирован: 20 окт 2015, 18:14
Сообщения: 297
DMA)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 21 окт 2015, 20:53 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1373
Тогда получается дискретный ряд частот - 168/(8*20)=1050 КГц, 168/(9*20)=933 КГц, 168/(10*20)=840 КГц и т.д., ну и джиттер в 1-2 такта на каждую точку. А навороченный кортекс m4 получается просто тактированный код наружу выдаёт как простая ПЗУ-шка со счётчиком? )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 21 окт 2015, 21:18 
Старожил

Зарегистрирован: 20 окт 2015, 18:14
Сообщения: 297
vt340 писал(а):
А навороченный кортекс m4 получается просто тактированный код наружу выдаёт как простая ПЗУ-шка со счётчиком? )

Не совсем так. Да, я получал такие частоты путем последовательного вывода значений массива в порт. Но для того, чтобы реализовать все режимы, такой способ не пойдет. Надо динамически просчитывать значения массива. Поэтому алгоритм будет выглядеть так:
- заполняем массив рассчитанными значениями (принцип DDS, накопление фазы);
- запускаем контроллер DMA, выдающий отсчеты в порт;
- по прерыванию Half Transfer пересчитываем и заполняем первую половину массиву;
- по прерыванию Transfer Complete пересчитываем и заполняем вторую половину массива;
- зацикливаемся.

Скорей всего на всех режимах я не получу желаемых частот. Может быть даже просто на синусе при таком методе не выжму 1 МГц. Буду пробовать. Эту часть я еще только поверхностно прорабатывал.

Кстати без DMA я реализовал все режимы. Частоты на порядок скромнее желаемых. Но зато получены формулы, осталось прикрутить DMA.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 22 окт 2015, 01:46 
Старожил

Зарегистрирован: 31 янв 2013, 03:01
Сообщения: 222
sva_omsk писал(а):
На плате находятся:
- ФНЧ 1 порядка 1 МГц по 0.1 дБ;
- ФНЧ 2 порядка (баттерворт) перестраиваемый: 1 кГц, 10 кГц, 100 кГц, 1 МГц. Все по 0.1 дБ;

проект вообще масштабный - какой нибудь НИИ срубил бы за такое кучу денег на какой нибудь НИОКР в рамках нано- и импортозамещения))

не могли бы пояснить - как реализованы ФНЧ?
программно типа FIR-фильтров или как-то аппаратно?
и как организуется перестраивание?
и что означает "по 0.1 дБ"? это нелинейность АЧХ чтоль?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 22 окт 2015, 02:30 
Старожил

Зарегистрирован: 19 июн 2012, 14:17
Сообщения: 3440
sva_omsk писал(а):
яверт, проблема совсем не в том, чтобы выжать частоту. Проблема в том, что с ней потом делать. Преобразование сигнала (смещение и усиление) осуществляется с помощью потенциометров. Найти их с такой широкой полосой - это большая проблема. Мои имеют полосу 3 МГц. Для синуса достаточно, а вот пилу и прямоугольник заметно искажают даже на 1 МГц (можете смоделировать в протеусе, используя RC-цепь). С операционниками попроще, но тоже могут быть проблемы. Поэтому я остановился на указанных в самом начале параметрах.

Я начинал как то делать двухканальный генератор на мелкой флеш ФПГА, но забросил. Для грубого изменения усиления планировал резистивный делитель и аналоговый мультиплексор, более точное в цифре до ЦАП. Смещение на ОУ и вспомогательных ЦАП.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 22 окт 2015, 12:29 
Старожил

Зарегистрирован: 02 дек 2010, 13:52
Сообщения: 4851
Откуда: п. Борок, Ярославская область
Круто! А зачем R2R если есть готовые ЦАП, причем даже на советской элементной базе? ИМХО для хорошего R2R ЦАП-а резюки надо адово точно подбирать...

_________________
Ёж птица гордая, пока не пнешь - не полетит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 22 окт 2015, 20:26 
Старожил

Зарегистрирован: 20 окт 2015, 18:14
Сообщения: 297
яверт писал(а):
Для грубого изменения усиления планировал резистивный делитель и аналоговый мультиплексор, более точное в цифре до ЦАП. Смещение на ОУ и вспомогательных ЦАП.


Неплохое решение. Может быть даже единственное для очень высоких частот.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 22 окт 2015, 20:52 
Старожил

Зарегистрирован: 20 окт 2015, 18:14
Сообщения: 297
Продолжаем разбор первого полета, если можно так выразиться. Ответы на вопросы будут по тексту.

Сегодня на меня что-то нашло, нарисовал схему первой сигнальной платы. Но не совсем точно. Аналоговая часть соответствует прототипу, а вот подключение к МК я не стал проверять. Сейчас это не важно, управляется вход A0 мультиплексора ногой PC13 или какой-то другой. Но ЦАП остался на месте, его больше некуда подключить). Разнесение портов по всем сторонам МК до сих пор остается для меня загадкой от производителя. Невольно вспоминаются AVR, где все линии порта идут последовательно. Это их один из малочисленных плюсов.
Я буду разбирать отдельно узлы. Полную схему приведу позже и уже доработанную.

МК сейчас нам не интересен, начнем сразу с ЦАП.

Изображение

Как я уже говорил, он собирается из резисторов 1 и 2 кОм точностью 1%. Да, я знаю, есть микросхемы ЦАП, но параллельный больше 8 разрядов я не смог найти поблизости, а последовательный проходит мимо из-за недостаточной частоты. Внизу видим делитель, уменьшающий максимальный размах сигнала с 3.3 В до 2.5 В, и конденсатор, образующий ФНЧ с частотой среза … точно не помню какой, но больше 1 МГц по уровню 0.1 дБ.
Кстати, был вопрос про 0.1 дБ. Представим фильтр, пусть это будет баттерворт.

Изображение

Формально его частота среза составляет 100 кГц (по -3 дБ). Это означает, что уровень сигнала на такой частоте будет 0.7 от первоначального. Но генератор то должен выдавать заданный сигнал, поэтому частоту среза фильтров я беру по уровню 0.1 дБ. В этом случае уровень сигнала на частоте среза будет составлять 0.99 от заданного. Получается в данном случае наша частота среза уже не 100 кГц, а всего 17 кГц. Выбранный уровень 0.1 дБ позволяет в софте не учитывать ослабление сигнала, мы просто сравниваем заданную частоту и включаем соответствующий фильтр. Точнее конфигурируем его.

Изображение

Перестраиваемый фильтр Баттерворта 2 порядка собран на ОУ (К.О. не даст соврать). Выбор такого типа фильтра очевиден – он имеет самую гладкую АЧХ в полосе пропускания. Используя сдвоенный мультиплексор, мы подключаем попарно разные резисторы, тем самым меняя частоту среза. При этом надо учитывать сопротивление и емкость ключей. И вот тут момент, который я не учел в моделировании, а именно резисторы ЦАПа, буфера то после них нет. Все частоты среза оказались неправильными, и сделать ФНЧ на 1 МГц не получилось. Расчетный конденсатор фильтра единицы пикофарад, при этом емкость ключей десятки пФ. И обходного пути не предусмотрено. Фильтр всегда включен. Поэтому я его временно обошел проводком МГТФ.
Кстати еще один косяк, он больше по невнимательности, это используемые ОУ тракта. Изначально были AD8042. К сожалению, они rail-to-rail только по выходу. А максимальной входной сигнал на 1 В ниже питания. Поэтому треугольный сигнал на выходе ОУ фильтра выглядел так (осциллограмма не сохранилось)

Изображение

Вариантов два: либо повышать напряжение питания ОУ (в принципе есть же ±5,5 В на выходном каскаде), либо брать ОУ с такими требованиями:
- полоса пропускания (Bandwidth) от 20 МГц;
- скорость нарастания сигнала (Slew rate) от 40 В/мкс;
- Rail-to-Rail по входу и выходу.

Первый вариант плох по той причине, что после ОУ стоит потенциометр с максимальным входным напряжением 2.7 В. А вдруг ОУ вдует туда все 5.5 В? Будет печально. Поэтому ОУ тракта (кроме выходного каскада) были просто заменены на AD8652. И стало все хорошо.
Требование к скорости нарастания взяты не с потолка. В ТЗ указаны формы сигнала, среди которых есть пила и прямоугольник

Изображение

Время Т не может быть бесконечно малым. Оно напрямую зависит от скорости нарастания. При 40 В/мкс оно будет равно: Т = 1(мкс)*2,5(В)/40(В) = 62,5 нс. При периоде 1000 нс (1 МГц) это, думаю, нормально.

Идем дальше, следующий узел – это начальное смещение. Вспоминаем картинку с сигналами из первого поста.

Изображение

Просто инвертирующий усилитель с коэффициентом передачи 1. Так как потенциометр счетверенный, а используются только 3, то 4-й решил задействовать в смещении, хотя это и постоянная величина. Можно было подобрать резисторами, но уж больно хорошо разводилась плата под потенциометр). Протеус показал требуемое напряжение смещения примерно 0.6 В. Этот узел работает, но вот по поводу применения потенциометра у меня долго скреблись кошки на душе. Точность смещения я пока не проверял.
Есть еще конденсатор, образующий еще один ФНЧ с не помню какой частотой среза (больше 1 МГЦ).

Самый интересный узел. Пользовательское смещение и усиление.

Изображение

В принципе все просто. Опять инвертирующий усилитель. Опять смещение. А вот усиление осуществляется двумя потенциометрами. Это дает коэффициент передачи >1 (но не больше 2) при суммарном сопротивлении обоих больше 10 кОм, и <1 при суммарном сопротивлении меньше 10 кОм. Естественно, полное сопротивление каждого потенциометра также равно 10 кОм. Во вложении есть файл протеуса (версия 7.7 вроде), в котором смоделирована эта часть тракта.

На последнем свободном ОУ собран ФВЧ 100 Гц. Его можно обойти, для чего предусмотрен еще один мультиплексор. Избыточно, но, как говорится, незачем плодить номенклатуру). Тут никаких сюрпризов быть не должно.

Изображение

Выходной каскад собран на усилителях AD825. Правда они могут выдать выходной ток только 50 мА (могут больше, но опять же, зачем гонять микруху на пределе), поэтому включены параллельно.

Изображение

Обратите внимание, обратная связь берется не сразу с выходов, а после резисторов 100 Ом. В паре они дают выходное сопротивление 50 Ом. Благодаря резисторам обратной связи сигнал усиливается ровно в 2 раза.
Косяк в этой части опять же по невнимательности. Я почему то решил, что эти ОУ Rail-to-Rail по выходу. Облом. Можно было бы использовать освободившиеся AD8042, но смотрим в datasheet и видим

Изображение

То есть при малом сопротивлении нагрузки максимальное выходное напряжение не дотягивает до верха по ТЗ аж 1.5 В. А питание задирать настолько нельзя! Absolut maximum rating! Поэтому остаемся на AD825, но надо задрать питание выходного каскада с ±5,5 В до ±7 В. К огромному сожалению это повлекло замену трансформатора платы питания, имеющего напряжения вторичных обмоток 6 В. Пришлось купить транс тоже с двумя обмотками (правда он оказался немного больше), но уже по 9 В. Что повлекло перегрев 5-вольтового регулятора для питания цифровой части. Его тоже заменил, поставил пока в корпусе ТО-220 с радиатором. Но будет в D-PAKe. На сегодня плата питания выглядит так:

Изображение
Изображение

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


Вложения:
Комментарий к файлу: Узел пользовательского смещения и усиления
proteus.zip [25.17 Кб]
Скачиваний: 188
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 24 окт 2015, 17:14 
Старожил

Зарегистрирован: 02 дек 2010, 13:52
Сообщения: 4851
Откуда: п. Борок, Ярославская область
2 sva_omsk
Есть очень серьезный недочет в R2R ЦАП, навешенном прямо на ноги МК. 10 разрядов это 1024 отсчета. Следовательно при питании например 5В, цена младшего бита будет около 5мВ. Нагрузка одного резюка в 1кОм на ногу МК вызовет просадку напряжения на этой ноге более 5мВ. И это не предел - МК нагружен еще много чем. Такой ЦАП свои 10 разрядов никак не оправдает, т.к. будет адово нелинейно шуметь, особенно на высоких частотах, т.к. там еще и эффекты емкости/индукивности будут выползать. Да и 1% для 10 разрядов это уже мало. Для 8-ми еще куда ни шло - да и то баловство.

Чтобы этого избежать нужен CMOS буффер, запитанный от отдельного источника опорного напряжения, и дабы снизить эффекты от просадки напряжения на этом источнике, резисторы в R2R следует брать в сотни килоом, с последующим заведением сигнала на буфер из малошумящего ОУ (AD711JN - весьма кошерно, на крайняк OP07 или отечественный 140УД17). Но и даже в этом случае результаты будут далеки от удовлетворительных (я уж не говорю про хорошо и отлично).

Естественно термостатирование узла ЦАП и аналоговой части приветствуется.

P.S. Готовый быстрый умножающий (считай параллельный) ЦАП на 12 разрядов есть даже в советской элементной базе: КР572ПВ1А - это ЦАП с фичей АЦП если прикрутить снаружи компаратор. Не дорог, а местами даже нахаляву... Я вот свои уже все продал. В зарубежной их навалом - http://terraelectronica.ru имеет удобный поиск.

P.P.S. Говорю это все не на пустом месте, ибо уже вкусил собачатины на этом поприще.

_________________
Ёж птица гордая, пока не пнешь - не полетит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 24 окт 2015, 21:42 
Старожил
Аватара пользователя

Зарегистрирован: 28 мар 2012, 10:33
Сообщения: 1183
Откуда: Сочи
Дополню предыдущего оратора, с которым полностью согласен.

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

По сути, у вас получается почти аналоговый прибор.

Конечно, ЦАПы подходящие есть. Но я бы, если бы была подобная задача, осваивал бы ПЛИС, в которой был бы реализован набор блоков генерации, цифровой фильтрации, и чего там еще надо, а параметры загружались бы как-либо снаружи, например с помощью маленького МК, читающего файлы конфигурации с флешки. Файлы могли бы содержать как форму сигнала, так и параметры фильтров или даже прошивку для ПЛИС, сгенерированную Матлабом.

Даже недорогая ПЛИСка типа Циклона 2 позволяет вместить очень мощный функционал.

Конечно, это все сопряжено с ломкой стереотипов при изучении языков HDL, но я ни разу не пожалел, что начал этим заниматься. Многие вещи на ПЛИС можно сделать неимоверно проще и лучше, чем на МК.

Это мое собственное ИМХО, не претендующее на истину.

И ни в коем случае не оставляйте свою затею. Добейтесь наилучшего результата, какой возможен при вашем подходе!

Желаю успеха и с интересом слежу за ходом вашей работы!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 24 окт 2015, 21:54 
Старожил

Зарегистрирован: 20 окт 2015, 18:14
Сообщения: 297
VivalzarD
Я очень хорошо понимаю важность качества ЦАП. Но такие микросхемы с подходящими параметрами - сама по себе редкость в магазинах, да еще и стоят недешево. Поэтому вынужден использовать R2R.
Просадка напряжения на ногах МК действительно есть, но она практически одинаковая на всех, по крайней мере своими приборами я разницы не заметил. То есть, можно считать, что питание ЦАП составляет не 3.25 В, а 3.10 В. Это не страшно, так как я все-равно привожу размах к 2.5 В. Для начала сразу после ЦАП будет стоять грубый делитель, потом буфер на ОУ (AD711 тут вобще не подходит, ни по полосе пропускания, ни по скорости нарастания, ни по питанию, скорей все останется AD8652). Потом схема начального смещения, которая в ООС будет иметь параллельные резисторы для точной подстройки сигнала. Потенциометры здесь не хочу использовать.
Насчет нелинейности шумов есть опасения, но применение точных SMD-резисторов сводит к минимуму влияние паразитной емкости и индуктивности. Кстати, номиналы резисторов ЦАП увеличу на порядок, ну и выберу с наиболее близкими параметрами. Больше, думаю, не стоит. При такой схеме сомневаюсь в целесообразности буфера сразу после МК. Спектры покажут.

КР572ПВ1А на удивление оказался в магазине) Но корпус... это же четверть всей сигнальной платы, вобщем, это не совсем то, что нужно. Кроме того, в документации я не нашел информации о точности резисторов ЦАП.

О термостатировании речи не идет, не тот уровень. Это необходимо при изменении сигналов на доли и единицы мВ. А у меня 256 шагов на смещение ±5 В.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 24 окт 2015, 21:59 
Старожил

Зарегистрирован: 20 окт 2015, 18:14
Сообщения: 297
Это чисто хоббийный проект. Сделать аналогичный по возможностям генератор на ПЛИС для меня было бы несравнимо сложнее.

antonluba писал(а):
И ни в коем случае не оставляйте свою затею. Добейтесь наилучшего результата, какой возможен при вашем подходе!

Желаю успеха и с интересом слежу за ходом вашей работы!

Спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 25 окт 2015, 01:00 
Старожил

Зарегистрирован: 02 дек 2010, 13:52
Сообщения: 4851
Откуда: п. Борок, Ярославская область
2 sva_omsk

Цитата:
Это необходимо при изменении сигналов на доли и единицы мВ.

При 10-ти разрядах именно на такие величины и будет меняться сигнал. Зачем тогда 10 разрядов, если в них нет необходимости?

Цитата:
Просадка напряжения на ногах МК действительно есть, но она практически одинаковая на всех, по крайней мере своими приборами я разницы не заметил. То есть, можно считать, что питание ЦАП составляет не 3.25 В, а 3.10 В.

Дак дело не в перманентной просадке, а в том что она зависит от кода выставленного на ЦАП. Отсюда и нелинейность. Не хилая отнюдь. Ибо даже в галимых старых советских ЦАП-ах нелинейность обычно оценивалась в 1-2 младших разряда. Здесь же может быть и больше. Вот за тем буфер, запитанный от опорного источника напряжения, и нужен. Причем это самый лучший ход в соотношении эффективность/затраты.

_________________
Ёж птица гордая, пока не пнешь - не полетит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 25 окт 2015, 01:16 
Старожил

Зарегистрирован: 20 окт 2015, 18:14
Сообщения: 297
Почему нет необходимости? Размер "ступенек" сигнала будет меньше, меньше шум, хотя фильтроваться все равно будет, но все же. К тому же у МК 10 линий порта удобно расположены. То, что двигать сигнал относительно земли я буду бОльшими шагами, так это другое совсем.
Просадку линий я проверил на разных кодах. Спорить я конечно не буду, физику не обманешь) Но искажения минимальные, как раз наверно тот самый 1 разряд. Я все думаю, можно ли пренебречь? И если ставить буфер, то какой? Типа 244-го?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 25 окт 2015, 16:13 
Старожил

Зарегистрирован: 30 авг 2010, 00:02
Сообщения: 926
sva_omsk писал(а):
Просадку линий я проверил на разных кодах. Спорить я конечно не буду, физику не обманешь) Но искажения минимальные, как раз наверно тот самый 1 разряд. Я все думаю, можно ли пренебречь? И если ставить буфер, то какой? Типа 244-го?


В контроллерах СТМ в электрических характеристиках попадались данные о разбросе напряжения на выходах ( не больше 50 мВ, ЕМНИП). Так что, даже при наличии точной линейки можно погореть. Хорошо то, что реальности разброс оказывается гораздо меньше, во всяком случае в АВР и ПИКах.
Простой способ без точных измерений убедиться в пригодности такого решения ЦАП - сформировать пилу и на осциллографе сразу будет видно по равномерности ступенек.
Что может влиять - изменения нагрузки на других ножках, температура корпуса и неравномерность температуры корпуса, просадки питания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 25 окт 2015, 17:30 
Старожил

Зарегистрирован: 20 окт 2015, 18:14
Сообщения: 297
Пила взята с выхода повторителя после ЦАП

Изображение
Изображение
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 25 окт 2015, 18:29 
Старожил

Зарегистрирован: 30 авг 2010, 00:02
Сообщения: 926
sva_omsk писал(а):
Пила взята с выхода повторителя после ЦАП

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 25 окт 2015, 19:17 
Старожил

Зарегистрирован: 20 окт 2015, 18:14
Сообщения: 297
У осцилла собственные шумы больше, чем шаг ступенек.
Вот самое некрасивое место на пиле, которое я смог найти.

Изображение

Меня такая форма вполне устраивает. Это притом, что резисторы я не подбирал по сопротивлениям. Вобщем ЦАП останется R2R, буфера после ног МК не будет, буфер после резисторов на ОУ AD8652.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создаем полноценный функциональный генератор
СообщениеДобавлено: 26 окт 2015, 00:17 
Старожил

Зарегистрирован: 02 дек 2010, 13:52
Сообщения: 4851
Откуда: п. Борок, Ярославская область
sva_omsk писал(а):
У осцилла собственные шумы больше, чем шаг ступенек.

Конечно. Только у очень дорогих осциллографов разрядность АЦП внутри более 8 бит. Вопрос по линейности ЦАП-а решается только с помощью АЦП с бОльшим числом разрядов. Потому если уж реально необходимо сделать оценку характеристик - то надо либо готовую систему сбора использовать (Руднев-Шиляев - фирма такая есть: делает всякие блоки АЦП для сбора цифро-аналоговой информации), либо сделать эту систему самому.

Наиболее простой вариант - взять ADS1250/ADS1251 + MAX6325ESA + МК и этим набором оцифровать выход ЦАП-а. А уже на компе в какой нибудь среде типа матлаба аппроксимировать линейный участок пилы функцией y=kx+b и построить разность реального сигнала и его аппроксимации. Вот тогда будет видно нелинейность и на графике качественно, и после стат.расчетов - количественно.

А осциллограф - это грубо слишком... Там и Covox из МЛТ резюков с точностью 5% ровно пилу выдает :-) Проверял :-)

_________________
Ёж птица гордая, пока не пнешь - не полетит.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 101 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB