Чтение аналоговых значений и pwm с помощью labview fpga

Чтение аналоговых значений и pwm с помощью labview fpga
Чтение аналоговых значений и pwm с помощью labview fpga
Anonim

Чтение аналоговых значений и PWM с помощью LabVIEW FPGA

Изучите FPGA LabVIEW, программируя встроенную FPGA Xilinx встроенного устройства NI myRIO, ориентированного на учащегося.

Статьи по Теме

Использование LabVIEW FPGA для NI myRIO:

Часть 1: Что такое LabVIEW FPGA

Часть 2: Hello World (Мигает светодиодом)

Часть 3: Чтение аналоговых значений

Часть 4: ФИФО

Часть 5: сторонний код

обзор

Эта статья является третьей в серии из пяти тем, которые охватывают основы программирования LabVIEW FPGA на NI myRIO через простые практические примеры. В прошлый раз мы рассмотрели, как включать и выключать Светодиод (LED) через цифровую линию устройства. Сегодня мы увидим несколько дополнений к нашему предыдущему коду, как можно настроить яркость светодиода. Более того, мы рассмотрим показания аналоговых значений от компонента переменного сопротивления, такого как потенциометр. Наконец, мы свяжем эти два понятия, чтобы контролировать яркость светодиода через вращение переменного резистора.

Рекомендуемый список компонентов:

  1. 3.3V LED - 5V также должен работать, но ожидать меньше полной яркости
  2. 330 Ом Резистор - используется для ограничения тока, протекающего через светодиод, см. Статью 2 этой серии, где мы более подробно рассказываем об этом
  3. Потенциометр 10 кОм - любой другой компонент с изменяющимся сопротивлением также будет работать, включая линейный потенциометр или LDR. Хотя предлагается использовать базовое значение 10 кОм, большинство других значений также должны быть слишком хорошими
  4. (Опционально) 1kOhm Pull-Down Resistor - этот резистор следует использовать в качестве эталона при считывании компонентов с изменяющимся сопротивлением без третьего штыря (см. Ниже).
  5. (Дополнительно) Перемычки и макет

Компонентная проводка

В прошлый раз мы использовали порт C myRIO, который содержит два аналоговых входа, два аналоговых выхода и 8 цифровых линий. Однако это даже не половина периферийных устройств - у него есть еще два порта с 2x аналоговыми выходами, 4-кратными аналоговыми входами и 16-кратным DIO. Чтобы оценить огромное количество операций ввода-вывода, которое предоставляет данное устройство, и чтобы узнать об этом, воспользуемся портом B для следующего примера.

Чтобы наша схема была аккуратной по мере ее роста, давайте перейдем к макету. Токоограничивающий резистор 330 Ом перейдет к аноду светодиода, который затем будет подключен к разъему DIO0 порта myRIO B (см. Рис. 1). Подключите другой контакт светодиода к клемме Digital Ground (DGND). Затем нам нужно подключить переменный резистор (потенциометр) к myRIO. Для этого мы подключим средний контакт потенциометра (иногда называемый «очистителем») к аналоговому входу (AI0) порта B, а остальные контакты должны быть подключены к клеммам AGND и + 5V (см. Рис. 2). Более подробную схему соединения myRIO см. В его техническом описании (PDF). Электрическая схема также показана на рисунке 3 ниже для лучшей справки.

Image
Image

Рисунок 1 Порт B со всеми идентифицированными соединениями

Image
Image

Рисунок 2 Макет с указанием всех подключений

Image
Image

Рисунок 3 Схема

Код FPGA

Соединив все наши схемы, давайте создадим новый проект LabVIEW, как и в предыдущих статьях. В рамках недавно созданного проекта найдите цель NI myRIO и создайте новый VI под названием FPGA. VI в шасси >> FPGA Target (см. Нашу первую статью, чтобы получить полное объяснение, если вам нужно обновить). Наш основной FPGA VI должен выглядеть так, как показано на рисунке 4 ниже. Завершенный примерный код прилагается в нижней части статьи, если вы хотите проверить его сразу, но чтобы убедиться, что мы понимаем, что здесь происходит, давайте проанализируем его также.

На этот раз мы создадим два цикла while - один для сбора данных («DAQ Loop») и один для управления светодиодом («PWM Loop»). Первый из них будет считывать и масштабировать данные потенциометра, а второй будет генерировать сигнал модуляции с широтно-импульсной модуляцией на выводе DIO0. Вот короткая, но сладкая статья о PWM, если вы чувствуете себя немного ржавой в отношении темы. Как и раньше, нам нужно перетащить периферийные устройства в нашу блок-диаграмму. Нам понадобится один для аналогового входа от потенциометра (A) и один для создания сигнала модуляции широтно-импульсной модуляции (B) на линии DIO0. Обратите внимание, как имена, используемые в LabVIEW, соответствуют тем, которые мы указали на рисунке 3. Как только мы читаем значение потенциометра, нам также необходимо масштабировать его (B). Это масштабирование позволяет сопоставить 12-битное значение, поступающее с одностороннего аналогового входного канала (сэмплированного через бортовой АЦП), до единичного интервала, изменяющегося от 0 до 1. Поэтому значения, которые обычно будут составлять от 0 до 4096 для самых дальних позиции потенциометра теперь представлены как значения фиксированной точки от 0 до 1 на индикаторе под названием «Рабочий цикл» (C). Любое другое значение между ними также будет масштабироваться соответствующим образом; это будет существенно контролировать, насколько ярким мы хотим, чтобы наш светодиод был.

«Шлюз PWM» включает в себя структурированную структуру последовательности (D), которая обеспечивает последовательное поведение (помните, LabVIEW по своей сути параллелен!) Для четырех последовательных разделов. Первая секция управляет выводом светодиода (DIO0) HIGH. Следующий раздел ждет заданного количества времени, рассчитанного на основе рассчитанного Расчетного цикла. Обратите внимание, что в (C) мы читаем из одного места в нескольких местах, это называется локальной переменной. Локальная переменная может быть сделана в LabVIEW, щелкнув правой кнопкой мыши на индикаторе или элементе управления и выбрав «Создать >> Локальная переменная». Хотя они полезны в ряде сценариев, они иногда могут вызывать так называемое состояние гонки, поэтому они консервативны с их использованием. В нашем случае, поскольку мы пишем только переменную в одном месте, эту проблему избегают.

Продолжительность включения нашего светодиода также зависит от частоты, на которой мы запускаем наш код (F). Поскольку наши глаза не могут отличить мерцание света около отметки 50 Гц, мы удобно устанавливаем это на нашем контроле передней панели FPGA. VI под названием «Частота (Гц)» (F). Поэтому, вместо мерцания, мы фактически увидим, что светодиод мерцает пропорционально тому, как долго мы включаем и выключаем светодиод (разделы 3 и 4 структуры сложенной последовательности (D) отключают его и ждут оставшегося времени). Время, в течение которого светодиод остается включенным по отношению к выключенному, определяется циклом загрузки. В литературе вы часто увидите, что рабочий цикл представлен в процентах. В нашем случае это значение единства, варьирующееся от 0 (0%) до 1 (100%). Кроме того, все остальное остается прежним. Давайте также не забудьте настроить время (E) в mSec (миллисекунды). На этом этапе мы должны быть готовы скомпилировать наш код и проверить его.

Image
Image

Рисунок 4: Диагностика передней панели и блок-схемы LabVIEW FPGA

Запуск кода FPGA

Наконец, если наша схема соответствует тому, что показано на рисунках 2 и 3, а также имеет функциональность кода, отличную от рисунка 4, мы можем настроить яркость светодиода, вращая потенциометр. Функционально светодиод постоянно включается и выключается, однако наши глаза не могут отличить это, и на самом деле мы просто видим разные уровни освещенности. Чтобы проверить это, вы можете изменить «Частотный (Hz)» контроль на передней панели FPGA VI на меньшее значение, скажем, 1 Гц. Поскольку мы сделали это как Control, LabVIEW позволяет нам настраивать его «на лету», поэтому никакой дополнительной компиляции не требуется. В качестве дополнительного упражнения вы можете попытаться настроить масштабирование программного обеспечения на разные или инвертированные (либо через «Масштабирование» (B), либо собственный фрагмент кода). Если вы решили управлять набором светодиодов с одного и того же потенциометра, все, что вам нужно сделать, это сделать копию нижнего цикла и изменить цифровую линию, так как мы читаем значение «Duty Cycle» из «DAQ Loop» », который является независимым.

Поздравляем с созданием полного цикла аналогового ввода и вывода с использованием NI myRIO. В следующий раз мы перейдем к более продвинутой теме LabVIEW FPGA - Buffers. Используя их, мы узнаем, как высокоскоростные высокопроизводительные приложения могут быть реализованы как в проектах хобби, так и в индустрии!

Скачать код