Генерация сигнала прямоугольной формы
- Studentka419
- beginner
- Сообщения: 29
- Зарегистрирован: 16 мар 2015, 12:06
- Версия LabVIEW: 2013
Генерация сигнала прямоугольной формы
Добрый день! Я работаю с платой sb-RIO 9636. Пытаюсь получить на ПЛИС сигнал прямоугольной формы с помощью Square Wave. На осциллографе у меня выводится нормальный сигнал, а вот в программе для компьютера какие-то треугольники. И то, они выводятся не динамически, а сразу после запуска программы, потом они застывают. Подскажите, пожалуйста, что здесь можно сделать?
- Вложения
-
- Square.rar
- (312.71 КБ) 151 скачивание
- inmaze
- user
- Сообщения: 75
- Зарегистрирован: 21 сен 2011, 10:43
- Версия LabVIEW: 2011
- Откуда: Dresden/Germany
- Контактная информация:
Re: Генерация сигнала прямоугольной формы
Так вроде все правильно - если выбрать для отображения графика другой тип (точки), то видно, что сигнал - это сменяющиеся +10 и -10 значения. По оси ординат идут отсчеты, а не время, так как функция, которая возвращает сигнал - дает только массив у-ов.
По поводу "одноразовости", к сожалению, ничего сказать не могу. Вроде в цикле имеется запрос на 1000 тиков и ожидается ответ в 500. Может инициализировать можно только 1 раз? или все тики вычитывать необходимо? или случается ошибка, когда цикл не вычитав 1000-500 заявленных тиков, пытается еще 1000 запросить?
По поводу "одноразовости", к сожалению, ничего сказать не могу. Вроде в цикле имеется запрос на 1000 тиков и ожидается ответ в 500. Может инициализировать можно только 1 раз? или все тики вычитывать необходимо? или случается ошибка, когда цикл не вычитав 1000-500 заявленных тиков, пытается еще 1000 запросить?
- Studentka419
- beginner
- Сообщения: 29
- Зарегистрирован: 16 мар 2015, 12:06
- Версия LabVIEW: 2013
Re: Генерация сигнала прямоугольной формы
Спасибо Вам, но мне необходимо, чтобы у меня график выводился динамически и не треугольниками, а прямоугольными импульсами, как на осциллографе. Когда я помещаю Square Wave Generator в Single-Cycle-Timed-Loop (SCTL), то на графике получается всё красиво, только на выходы сигнал подать не получается (на скриншоте показан код). Когда запускаю программу в Numeric число появляется только при нажатии кнопки stop. Что делать? Подскажите, пожалуйста, кто знает.
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Генерация сигнала прямоугольной формы
Во-первых надо AO0 write внести внутрь цикла, тогда значение будет обновляться на каждой итерации.
Во-вторых надо смотреть какой у него тип данных. Скорее всего INT16. Тогда это означает, что значению 32767 соответствует величина 10В, а величине -32768 - -10В. Это если у ЦАП выходной сигнал +-10В и разрешение 16бит. Если разрешение 12 бит, тогда максимальное значение будет 2047. Надеюсь, логика преобразования вам понятна?
таким образом, для получения 10В на выходе ЦАПа, надо сигнал ( Output 0 (FXP) * 32767.0 (SGL) ) / 10.0 (SGL) и потом преобразовать в I16. Можно, конечно, обойтись без плавающей точки, но тут надо будет аккуратно настраивать параметры промежуточных чисел с фиксированной точкой (FXP).
Во-вторых надо смотреть какой у него тип данных. Скорее всего INT16. Тогда это означает, что значению 32767 соответствует величина 10В, а величине -32768 - -10В. Это если у ЦАП выходной сигнал +-10В и разрешение 16бит. Если разрешение 12 бит, тогда максимальное значение будет 2047. Надеюсь, логика преобразования вам понятна?
таким образом, для получения 10В на выходе ЦАПа, надо сигнал ( Output 0 (FXP) * 32767.0 (SGL) ) / 10.0 (SGL) и потом преобразовать в I16. Можно, конечно, обойтись без плавающей точки, но тут надо будет аккуратно настраивать параметры промежуточных чисел с фиксированной точкой (FXP).
- Studentka419
- beginner
- Сообщения: 29
- Зарегистрирован: 16 мар 2015, 12:06
- Версия LabVIEW: 2013
Re: Генерация сигнала прямоугольной формы
Дело в том, что, во-первых, Single-Cycle-Timed-Loop не позволяет работать с входами/выходами. Во-вторых, у АО0 тип данных FXP. Borjomy_1, посмотрите, пожалуйста в моём первом сообщении самый первый вариант кода. В первом случае, на осциллографе всё хорошо, а на графике - застывшие треугольники, во втором (с Single-Cycle-Timed-Loop) случае на графике всё красиво, но на выход АО0 подать не получается.
-
Vasiliy Baev
- leader
- Сообщения: 545
- Зарегистрирован: 31 окт 2011, 09:02
- Награды: 4
- Версия LabVIEW: 2019
- Откуда: Санкт-Петербург
- Благодарил (а): 9 раз
- Поблагодарили: 10 раз
- Контактная информация:
Re: Генерация сигнала прямоугольной формы
Studentka419, Вы посмотрите описание аналогового выхода - мегагерцовую частоту не получите. Скорее всего килогерцы. Так что ни какого Single-Cycle-Timed-Loop с аналоговыми сигналами, только с дискретными.
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Генерация сигнала прямоугольной формы
Значит так... прямоугольник надо воспроизводить действительно через 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МГц.Мегагерцовую частоту не получите. Скорее всего килогерцы. Так что ни какого Single-Cycle-Timed-Loop с аналоговыми сигналами, только с дискретными.
Что касается ошибки связи, то похоже, необходимо согласовывать формат фиксированной точки.
- Studentka419
- beginner
- Сообщения: 29
- Зарегистрирован: 16 мар 2015, 12:06
- Версия LabVIEW: 2013
Re: Генерация сигнала прямоугольной формы
Borjomy_1, Спасибо Вам! Про параллельный цикл я тоже как раз подумала. Сейчас всё работает! Ещё вопросик. Дело в том, что я брала эту программу из примеров и модифицировала её для своей задачи. И мне не совсем понятен участок кода для программы UI для My Computer, где последовательно соединяются два Invoke Method, которые считывают информацию из буфера FIFO (если это имеет значение, размер этого буфера перед циклом While был увеличен до 25000). Зачем здесь используются два Invoke Method ? И можно ли обойтись одним? Объясните, пожалуйста.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Генерация сигнала прямоугольной формы
Studentka419, я не специалист по RT-платформам, но рискну предположить, что в первом узле считывается длина пакета в буфере (Elements Remaining), а во втором - собственно сам пакет (Data). Это стандартный подход, когда размер данных неизвестен. И, по-видимому, одним узлом не обойтись.
- Studentka419
- beginner
- Сообщения: 29
- Зарегистрирован: 16 мар 2015, 12:06
- Версия LabVIEW: 2013
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 14 Ответы
- 594 Просмотры
-
Последнее сообщение IvanLis