Я хочу построить схему, которая может генерировать синусоидальные волны на частотах, контролируемых компьютером или микроконтроллером. Я хотел бы снизить частоту до 0,01 Гц (допустимо снижение до 0,05 Гц) и до 100 кГц; Мне нужно как минимум 10 частот на декаду, что соответствует разрешению примерно 12 мГц в нижней части шкалы (или 60 мГц, если нижняя граница составляет 0,05 Гц). Выходное напряжение не обязательно должно быть высоким — я все равно потом прогоню его через операционные усилители.
Каков стандартный способ сделать это? Подходит ли DDS (используя либо таблицу поиска синуса на uC, либо IC, такую как AD9850)? Есть ли простое аналоговое решение, которое мне не хватает?
Я хотел бы придерживаться деталей со сквозными отверстиями, если смогу.
Вы можете легко сделать очень гибкую DDS на плате STM32F4 Discovery примерно за 15 долларов, используя внутренний ЦАП, DMA, таймер и таблицу поиска синуса. Люди пишут в блогах примеры подобных вещей, если вы их ищете.
Чтобы получить требуемую частоту (ЦАП STM32F4xx может выдавать только 300 тыс./с при полном размахе, что соответствует ~1 В/сек. s) вам нужно будет ограничить диапазон ЦАП.
Для синусоиды максимальная скорость нарастания (в В/с) равна . Вставив значения из требований OP и предполагая, что Vref ЦАП составляет 3,3 В (что, если я правильно помню, имеет место для STM32F4Disco), синусоидальная волна 3,3 В пик-пик при 100 кГц, максимальная скорость нарастания В/с, или В/ с.
Чтобы соответствовать этому ограничению, амплитуда синусоиды должна быть ограничена от V к В.
Теперь это приводит к очевидной проблеме ограничения 300 ksps на ЦАП STM32F4. Этот предел - фурфи. Я не знаю, каков реальный физический верхний предел, но подозреваю, что это скорость шины APB1. Я знаю (потому что сам так делал), что вы можете записать на ЦАП не менее 2 Мбит/с, и пока вы соблюдаете скорость нарастания 1 В/мкс, он будет вести себя предсказуемо. Таким образом, вы можете сделать 16 выборок за цикл для синусоидальной волны 100 кГц, частоты обновления 1,6 Мвыб/с, если вы ограничите амплитуду синусоидальной волны до 3,18 В вместо 3,3 В.
В какой-то момент вам, вероятно, придется иметь дело с цифровыми потенциометрами, потому что реальность такова, что если вам нужен ровный, непрерывный выходной сигнал, особенно на низкой скорости, вам придется пропустить DDS через фильтр. и этот фильтр должен быть регулируемым - вы не можете просто поставить на него LPF 100 кГц и ожидать, что он будет полезен на частотах ниже 1 Гц.
Вот мой (РФ) грубый обзор решения DDS, которое изначально было предложено Ником Алексеевым. Я помечаю это как вики сообщества, поэтому не стесняйтесь улучшать детали и т. д.
Используя калькулятор AD , чтобы получить желаемый баланс между частотным разрешением 12 МГц (которое я просто округлю до 10 МГц) и безупречно гладкой кривой на выходе 100 кГц, вам потребуется от 10 до 40 МГц тактовой частоты DDS, при этом 20 МГц выглядят как хорошие. середина. При тактовой частоте ниже 10 МГц выход DDS на частоте 100 кГц начинает выглядеть довольно шумно. При тактовой частоте выше 40 МГц разрешение становится слишком грубым; при тактовой частоте 40 МГц вы получаете изменение чуть менее 0,01 Гц для каждого бита настройки, конечно, в нижнем диапазоне; слово настройки, являющееся делителем часов, дает нелинейную частотную кривую.
Что касается практических решений, то можно найти микросхемы DDS, уже установленные на платах, совместимых с Arduino (кажется, примерно за 5 долларов); Однако загвоздка в том, что они могут поставляться с фиксированными (и, возможно, неподходящими высокими) часами, но это можно улучшить с помощью некоторой доработки платы.
Также стоит упомянуть, что если вы используете микроконтроллер (uC), который имеет встроенный и достаточно быстрый ЦАП, то добавление DDS (который в основном представляет собой ASIC, очищающий таблицу поиска синуса и отправляющий это индексированное значение в ЦАП) довольно бессмысленно, поскольку поиск синуса может быть реализован в программном обеспечении UC. Подробнее об этом интегрированном ЦАП-подходе см. в ответе markt.
Я использовал конструкцию нецифрового генератора, который выдавал приличные синусоиды до частот ниже 0,1 Гц и выше 100 кГц. Теоретически это была параллельно настроенная LC-цепь в цепи обратной связи усилителя. L и C на самом деле были прецизионными схемами гиратора (именно поэтому их можно было настроить на такие смехотворно низкие резонансные частоты). Вы бы никогда не построили его с настоящими катушками индуктивности, и если бы вы это сделали, его нельзя было бы настроить.
И «C», и «L» отслеживались с помощью прецизионного двухклавишного потенциометра, и, если я правильно помню, с потенциометра можно было получить частотный диапазон более 50:1 до замены фиксированных конденсаторов в гираторах.
Конечно, в наши дни банки лучше обслуживать дигипоты, поскольку они могут «отслеживать» гораздо лучше, чем обычные банки. Я уверен, что с осторожностью он может работать до 0,01 Гц.
Индукторный гиратор: -
Есть гираторы более высокого качества (лучшая частотная характеристика), и вот еще одна ссылка на документ о гираторах другого типа. Преимущество гиратора с одним операционным усилителем в этом приложении заключается в том, что цепь CR (которая обычно предназначена для использования в качестве паразитной) может эффективно использоваться в качестве секции настройки, соединяющей L и C параллельно с помощью небольших последовательных резисторов.
Одним из подходов было бы синхронизировать 28-битный сумматор/накопитель с тактовой частотой 4 МГц. uController управляет младшими 20 битами с цифровым словом, а старшие восемь битов передают адреса в EROM для таблицы поиска синуса из 256 записей. Биты данных из EROM, суммированные в лестничную диаграмму R2R, будут емкостно связаны с каскадом усиления вашего операционного усилителя. Подайте высокое значение от микро в сумматор, и биты старшего порядка будут циклически выполняться быстрее, для более высокой частоты синусоиды. Низкое значение занимает гораздо больше тактов, чтобы пошаговый счет происходил в восьми старших битах, управляющих СППЗУ. С небольшой дополнительной работой в микропрограммном обеспечении; вы можете уменьшить таблицу EROM, просто сохраняя углы от 0 градусов до 90. Просто прочитайте таблицу вперед для первых 90 градусов (квадрант 1), затем назад для квадранта 2, снова вперед для третьего квадранта и т. д.
Ник Алексеев
Джордж Герольд
Физз
Грег д'Эон
Физз
Грег д'Эон
Грег д'Эон