Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Как сгенерировать высокоточный сигнал с помощью ЦАП и специальной печатной платы

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

Недавно я разработал печатную плату генератора сигналов произвольной формы (AWG), которая построена на микроконтроллере C8051F360 и TxDAC от Analog Devices.

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

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

Цель

Цель этого проекта - создать структуру прошивки, которая позволит нам удобно перемещать цифровые данные с микроконтроллера на ЦАП, а затем преобразовывать эти данные в аналоговый сигнал. Эта плата AWG обладает потенциалом для некоторых интересных функций, но наиболее важным шагом является создание надежного, расширяемого и высокоточного интерфейса между MCU и DAC. Мы проверим этот интерфейс, сгенерировав линейно нарастающую форму волны и выполнив анализ осциллографа.

Требования

Высокоточная синхронизация

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

Эффективное использование процессора

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

Максимальная скорость

Мы живем в мире высоких частот, и от этого AWG будет мало толку, если он будет работать на максимальной частоте 1 кГц. Честно говоря, это простой и недорогой дизайн, и мы не можем ожидать, что он создаст сигналы DQPSK с полосой пропускания 915 МГц, готовые для передачи в диапазоне ISM. Но мы хотим получить от этого устройства как можно большую полосу пропускания, и это становится еще более сложной задачей, если вспомнить, что частота дискретизации значительно выше, чем фактическая частота сигнала. Несмотря на теорему Найквиста – Шеннона, мне нужно как минимум пять выборок за цикл, и я предпочитаю десять. Таким образом, даже если нам удастся поднять частоту дискретизации до 10 МГц, наши сигналы будут в диапазоне 1-2 МГц.

Аппаратный дизайн уже отражает важность оптимизации скорости:я выбрал микроконтроллер, который работает с частотой ядра до 100 МГц, и реализовал параллельную шину, которая минимизирует накладные расходы, необходимые для перемещения данных из памяти MCU на входные контакты ЦАП.

Частота дискретизации

Плата AWG имеет высокопроизводительный источник тактовой частоты (генератор MEMS с общей стабильностью частоты ± 50 ppm). Прошивка должна использовать эту временную развертку для создания стабильного тактового сигнала, который управляет схемой обновления ЦАП. Когда мне нужны высококачественные синхронизирующие сигналы, я всегда обращаюсь к оборудованию, и в этом случае я использую массив программируемых счетчиков (PCA) для генерации тактовой частоты 500 кГц от внешнего генератора 10 МГц.

Я использовал программу Silicon Labs Config2 для конфигурации своего оборудования, потому что C8051F360 не поддерживается инструментом настройки, встроенным в Simplicity Studio. Вот общая конфигурация модуля PCA:

PCA включен, а базой времени являются системные часы. На этом этапе тактовая частота системы такая же, как и частота внешнего генератора (10 МГц), но позже мы будем использовать контур фазовой автоподстройки частоты микроконтроллера, чтобы получить более высокую частоту ядра. Тактовый сигнал ЦАП генерируется модулем 0 PCA, настроенным на режим «частотного выхода»:

Давайте посмотрим на часы с частотой дискретизации. Мой прицел MDO3104 от Tektronix имеет несколько довольно продвинутых измерительных возможностей, которые помогут нам оценить его качество.

Как подтверждают измерения, отображаемые в нижней части снимка осциллографа, частота в точности такая, как ожидалось (500 кГц), и у нас также есть идеальный рабочий цикл 50%; кроме того, статистика «Мин» и «Макс» показывает, что частота и рабочий цикл стабильны во времени.

Особенно полезным дополнением к этой функции измерения является стандартное отклонение («Std Dev»). Стандартное отклонение показывает, насколько значения имеют тенденцию отклоняться от среднего, и в этой ситуации это быстрый и простой способ оценить недостатки в частоте и рабочем цикле тактового сигнала. Оба стандартных отклонения очень низкие:13,54 Гц составляет 0,0027% от номинальной частоты, а 2,117 × 10 –3 составляет всего 0,0042% от типичного рабочего цикла.

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

Внешнее прерывание

Теперь у нас есть прямоугольная волна, которая управляет выходной схемой ЦАП; следующая задача - синхронизировать обновления данных MCU с этой прямоугольной волной. Мы сделаем это, подключив внешнее прерывание к выводу PCA, который выводит тактовый сигнал. ЦАП фиксирует входные данные при повышении край часов, поэтому мы хотим обновить сигналы данных при падении край. Этот метод противоположного фронта является фундаментальным способом обеспечить обновление и стабилизацию цифровых данных до того, как устройство ввода получит активный фронт синхросигнала.

Итак, я включил внешнее прерывание 0 (обозначено / INT0), подключил его к выходному выводу тактового сигнала (P0.7) и сделал его чувствительным к заднему фронту.

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

ISR

Основное действие происходит в программе обработки прерывания / INT0. Следующий байт данных ЦАП извлекается из памяти (или генерируется непосредственно микроконтроллером) и затем передается на P2; Я использовал оператор #define, чтобы сделать «DAC_WORD» альтернативой «P2»:

SI_INTERRUPT (INT0_ISR, INT0_IRQn)
{
DAC_WORD–;
}

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

Одиночный оператор, показанный выше (DAC_WORD–), создает линейно нарастающую форму волны, потому что значение DAC линейно уменьшается до нуля, а затем возвращается к 255 и снова начинает уменьшаться. Вот результат работы ЦАП:

Возможно, вы заметили, что секции аналоговой рампы увеличиваются в сторону максимального напряжения, тогда как значения DAC уменьшаются к нулю. Это происходит из-за того, что выходной усилитель ЦАП использует инвертирующую конфигурацию.

Прежде чем мы закончим, давайте посмотрим на последний снимок осциллографа.

Подробнее…

Как сгенерировать высокоточный сигнал с помощью ЦАП и специальной печатной платы


Производственный процесс

  1. Датчик температуры Python и Raspberry Pi
  2. Как проверить и откалибровать датчик влажности
  3. Как сгенерировать высокоточный сигнал с помощью ЦАП и специальной печатной платы
  4. Вольтметр своими руками с использованием Arduino и смартфона
  5. FM-радио с использованием Arduino и RDA8057M
  6. Как сделать компас с помощью Arduino и Processing IDE
  7. Как выбрать компанию по производству прототипов печатных плат
  8. Почему производство печатных плат такое точное?
  9. Распространенные ошибки при изготовлении печатных плат и способы их исправления
  10. Печатные платы и принцип их работы?