Генерация сигнала прямоугольной формы

Захват, обработка и генерирование сигнала
Ответить
Аватара пользователя
Studentka419
beginner
beginner
Сообщения: 29
Зарегистрирован: 16 мар 2015, 12:06
Версия LabVIEW: 2013

Генерация сигнала прямоугольной формы

Сообщение Studentka419 »

Добрый день! Я работаю с платой sb-RIO 9636. Пытаюсь получить на ПЛИС сигнал прямоугольной формы с помощью Square Wave. На осциллографе у меня выводится нормальный сигнал, а вот в программе для компьютера какие-то треугольники. И то, они выводятся не динамически, а сразу после запуска программы, потом они застывают. Подскажите, пожалуйста, что здесь можно сделать?
Вложения
Square.rar
(312.71 КБ) 151 скачивание
Аватара пользователя
inmaze
user
user
Сообщения: 75
Зарегистрирован: 21 сен 2011, 10:43
Версия LabVIEW: 2011
Откуда: Dresden/Germany
Контактная информация:

Re: Генерация сигнала прямоугольной формы

Сообщение inmaze »

Так вроде все правильно - если выбрать для отображения графика другой тип (точки), то видно, что сигнал - это сменяющиеся +10 и -10 значения. По оси ординат идут отсчеты, а не время, так как функция, которая возвращает сигнал - дает только массив у-ов.
По поводу "одноразовости", к сожалению, ничего сказать не могу. Вроде в цикле имеется запрос на 1000 тиков и ожидается ответ в 500. Может инициализировать можно только 1 раз? или все тики вычитывать необходимо? или случается ошибка, когда цикл не вычитав 1000-500 заявленных тиков, пытается еще 1000 запросить?
Вложения
Signal.png
Аватара пользователя
Studentka419
beginner
beginner
Сообщения: 29
Зарегистрирован: 16 мар 2015, 12:06
Версия LabVIEW: 2013

Re: Генерация сигнала прямоугольной формы

Сообщение Studentka419 »

Спасибо Вам, но мне необходимо, чтобы у меня график выводился динамически и не треугольниками, а прямоугольными импульсами, как на осциллографе. Когда я помещаю Square Wave Generator в Single-Cycle-Timed-Loop (SCTL), то на графике получается всё красиво, только на выходы сигнал подать не получается (на скриншоте показан код). Когда запускаю программу в Numeric число появляется только при нажатии кнопки stop. Что делать? Подскажите, пожалуйста, кто знает.
Вложения
Безымянный.png
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2211
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 27 раз

Re: Генерация сигнала прямоугольной формы

Сообщение Borjomy_1 »

Во-первых надо AO0 write внести внутрь цикла, тогда значение будет обновляться на каждой итерации.
Во-вторых надо смотреть какой у него тип данных. Скорее всего INT16. Тогда это означает, что значению 32767 соответствует величина 10В, а величине -32768 - -10В. Это если у ЦАП выходной сигнал +-10В и разрешение 16бит. Если разрешение 12 бит, тогда максимальное значение будет 2047. Надеюсь, логика преобразования вам понятна?
таким образом, для получения 10В на выходе ЦАПа, надо сигнал ( Output 0 (FXP) * 32767.0 (SGL) ) / 10.0 (SGL) и потом преобразовать в I16. Можно, конечно, обойтись без плавающей точки, но тут надо будет аккуратно настраивать параметры промежуточных чисел с фиксированной точкой (FXP).
Аватара пользователя
Studentka419
beginner
beginner
Сообщения: 29
Зарегистрирован: 16 мар 2015, 12:06
Версия LabVIEW: 2013

Re: Генерация сигнала прямоугольной формы

Сообщение Studentka419 »

Дело в том, что, во-первых, Single-Cycle-Timed-Loop не позволяет работать с входами/выходами. Во-вторых, у АО0 тип данных FXP. Borjomy_1, посмотрите, пожалуйста в моём первом сообщении самый первый вариант кода. В первом случае, на осциллографе всё хорошо, а на графике - застывшие треугольники, во втором (с Single-Cycle-Timed-Loop) случае на графике всё красиво, но на выход АО0 подать не получается.
Аватара пользователя
Vasiliy Baev

Activity Gold Bronze
leader
leader
Сообщения: 545
Зарегистрирован: 31 окт 2011, 09:02
Награды: 4
Версия LabVIEW: 2019
Откуда: Санкт-Петербург
Благодарил (а): 9 раз
Поблагодарили: 10 раз
Контактная информация:

Re: Генерация сигнала прямоугольной формы

Сообщение Vasiliy Baev »

Studentka419, Вы посмотрите описание аналогового выхода - мегагерцовую частоту не получите. Скорее всего килогерцы. Так что ни какого Single-Cycle-Timed-Loop с аналоговыми сигналами, только с дискретными.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2211
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 27 раз

Re: Генерация сигнала прямоугольной формы

Сообщение Borjomy_1 »

Мегагерцовую частоту не получите. Скорее всего килогерцы. Так что ни какого Single-Cycle-Timed-Loop с аналоговыми сигналами, только с дискретными.
Значит так... прямоугольник надо воспроизводить действительно через Single-Cycle-Timed-Loop, только в этом случае можно получить максимальную точность. Ошибка Studentka419, заключается в том, что она задает число Periods/tick слишком большое. Для получения 1 кГц на цикле 40МГц, надо это значение задавать как 1 000/40 000 000 ( 0,000025), таким образом, на один период придется 40000 итераций цикла. Результат надо класть в индикатор (например "ToOut") внутри цикла. И сделать еще один параллельный цикл, но уже не Single-Cycle-Timed-Loop, а обычный, настроенный на частоту выдачи АЦП. В нем значение берется из локальной переменно этого индикатора "ToOut" и кладется в AO0. В результате получим минимально возможное "дрожание" меандра (джиттинг), и частота генерируемого сигнала будет привязана к основному генератору 40МГц.
Что касается ошибки связи, то похоже, необходимо согласовывать формат фиксированной точки.
Аватара пользователя
Studentka419
beginner
beginner
Сообщения: 29
Зарегистрирован: 16 мар 2015, 12:06
Версия LabVIEW: 2013

Re: Генерация сигнала прямоугольной формы

Сообщение Studentka419 »

Borjomy_1, Спасибо Вам! Про параллельный цикл я тоже как раз подумала. Сейчас всё работает! Ещё вопросик. Дело в том, что я брала эту программу из примеров и модифицировала её для своей задачи. И мне не совсем понятен участок кода для программы UI для My Computer, где последовательно соединяются два Invoke Method, которые считывают информацию из буфера FIFO (если это имеет значение, размер этого буфера перед циклом While был увеличен до 25000). Зачем здесь используются два Invoke Method ? И можно ли обойтись одним? Объясните, пожалуйста.
Вложения
Безымянный.png
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Генерация сигнала прямоугольной формы

Сообщение dadreamer »

Studentka419, я не специалист по RT-платформам, но рискну предположить, что в первом узле считывается длина пакета в буфере (Elements Remaining), а во втором - собственно сам пакет (Data). Это стандартный подход, когда размер данных неизвестен. И, по-видимому, одним узлом не обойтись.
Аватара пользователя
Studentka419
beginner
beginner
Сообщения: 29
Зарегистрирован: 16 мар 2015, 12:06
Версия LabVIEW: 2013

Re: Генерация сигнала прямоугольной формы

Сообщение Studentka419 »

dadreamer, спасибо!
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Обработка сигнала»