Как менять фазу генератора сигнала "на лету"?

Захват, обработка и генерирование сигнала
Andrey Petrzhik
user
user
Сообщения: 81
Зарегистрирован: 17 ноя 2015, 11:57
Версия LabVIEW: 12
Благодарил (а): 4 раза
Контактная информация:

Как менять фазу генератора сигнала "на лету"?

Сообщение Andrey Petrzhik »

Добрый день.
Стоит задачка генерить в 2 канала через плату NI USB-6218 триггерный сигнал для синхронизации лазеров. Причём важно уметь не выключая их делать финишную подстройку по фазе. Сделал так, что это можно делать, но приходится останавливая программу, т.е. перезапускать лазеры. Как бы так сделать, чтобы и буферизацию оставить, и добавить возможность изменять сдвиг фаз "на лету". Спасибо большое за ликбез! P.S. Думал мутить что-то с очередями, но слабо пока их понимаю, может можно попроще?
Вложения
ni usb-6218 версия 23-04-21.png
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение jane_wild »

Посмотрите эту тему может поможет
viewtopic.php?f=21&t=10689
Andrey Petrzhik
user
user
Сообщения: 81
Зарегистрирован: 17 ноя 2015, 11:57
Версия LabVIEW: 12
Благодарил (а): 4 раза
Контактная информация:

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение Andrey Petrzhik »

Спасибо, глянул.
Но у меня кажись нужно было просто поставить галочку на "reset signal". Погляжу ещё на осциллографе, но кажись всё ок.
Вложения
reset signal.png
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение Andrew Lunev »

Если генерировать нужно только прямоугольный сигнал, то лучше всего использовать для этого выходы счётчиков. Их два на вашей плате. У счётчиков налету можно менять все параметры сигнала без останова задачи. Не надо ни осциллограммы создавать заранее ни буфер использовать.
Andrey Petrzhik
user
user
Сообщения: 81
Зарегистрирован: 17 ноя 2015, 11:57
Версия LabVIEW: 12
Благодарил (а): 4 раза
Контактная информация:

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение Andrey Petrzhik »

Да, в курсе про счётчики, но чего-то решил что он у меня один, как на старой плате был. Спасибо!
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение jane_wild »

Andrey Petrzhik писал(а): 30 апр 2021, 14:20 Спасибо, глянул.
Но у меня кажись нужно было просто поставить галочку на "reset signal". Погляжу ещё на осциллографе, но кажись всё ок.
Может я не права, но мне кажется Вы просто издеваетесь над своей платкой. Timing задается один раз перед выполнением задачи. Посмотрите в папке с примерами Help -> Find Examples "Voltage (non-regeneration) - Continuous Output.vi"
Andrey Petrzhik
user
user
Сообщения: 81
Зарегистрирован: 17 ноя 2015, 11:57
Версия LabVIEW: 12
Благодарил (а): 4 раза
Контактная информация:

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение Andrey Petrzhik »

В целом наверное так и есть, но как мне тогда менять частоту и фазу, если в тайминг приходит осциллограмма?
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение jane_wild »

Andrey Petrzhik писал(а): 30 апр 2021, 18:08 но как мне тогда менять частоту и фазу, если в тайминг приходит осциллограмма?
Я бы попробовала вот так
Phase shift 1.png
Вложения
Continuous Output.vi
LV2012
(52 КБ) 73 скачивания
Artem.spb

Activity Автор
professor
professor
Сообщения: 3396
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение Artem.spb »

Andrey Petrzhik писал(а): 30 апр 2021, 18:08 В целом наверное так и есть, но как мне тогда менять частоту и фазу, если в тайминг приходит осциллограмма?
У вас же частота сэмплирования сигнала не меняется? Меняется только начала-конец высокого фронта. Поэтому задавать "скорость" на каждом сигнале нет необходимости. Да и вряд ли это получится если частота будет другая.
Эти две use waveform надо за цикл вынести
Andrey Petrzhik
user
user
Сообщения: 81
Зарегистрирован: 17 ноя 2015, 11:57
Версия LabVIEW: 12
Благодарил (а): 4 раза
Контактная информация:

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение Andrey Petrzhik »

Andrew Lunev писал(а): 30 апр 2021, 14:42 Если генерировать нужно только прямоугольный сигнал, то лучше всего использовать для этого выходы счётчиков. Их два на вашей плате. У счётчиков налету можно менять все параметры сигнала без останова задачи. Не надо ни осциллограммы создавать заранее ни буфер использовать.
Решил попробовать таки по вашему совету счётчики. И как-то оказалось не просто... отдельно счётчики 0 и 1 подключенные соответственно к PFI4 и PFI5 моей платы работают на генерацию отлично, а вот как их запустить вместе, да ещё и с чётким сдвигом фазы? Для аналоговой генерации в daqmx write выбирается N канальный режим работы, а тут как? Что-то не соображу. Подскажите пожалуйста!
генератор_на_счётчике.png
Т.е. вариант на картинке рабочий, но вот как его дополнить чтобы работало 2 счётчика не соображу...

P.S. Да, глянул повнимательнее осциллографом на генерируемый одиночный сигнал. 300Гц показывается стабильно, правда картинка сигнала скачет вправо-влево на ~80нс.
сигнал_чуток_двоится_счётчик.jpg
Не свой осциллограф, может это у него какие-то особенности развёртки просто. В любом случае такой сигнал мне скорее годится, чем нет. И он лучше, чем с ЦАП.
Вложения
KOLHOZNY generator 2.vi
(17.1 КБ) 63 скачивания
Последний раз редактировалось Andrey Petrzhik 06 май 2021, 20:16, всего редактировалось 1 раз.
Andrey Petrzhik
user
user
Сообщения: 81
Зарегистрирован: 17 ноя 2015, 11:57
Версия LabVIEW: 12
Благодарил (а): 4 раза
Контактная информация:

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение Andrey Petrzhik »

Artem.spb писал(а): 30 апр 2021, 20:08
Andrey Petrzhik писал(а): 30 апр 2021, 18:08 В целом наверное так и есть, но как мне тогда менять частоту и фазу, если в тайминг приходит осциллограмма?
У вас же частота сэмплирования сигнала не меняется? Меняется только начала-конец высокого фронта. Поэтому задавать "скорость" на каждом сигнале нет необходимости. Да и вряд ли это получится если частота будет другая.
Эти две use waveform надо за цикл вынести
Пытаюсь вытащить use waveform за цикл. Получилось только как на картинке, всё работает, но кажется так не феншуй делать, как же правильно? И да, идеальных 300Гц как не было, так и нет. Осциллограф даёт 299.999...300.003, сигнал двоится, маркерами получается разброс 3.92мкс, хоть может и врёт. В любом случае со счётчиками должно быть лучше, но хочется сперва этот вариант "причесать". Всем спасибо за внимание и мудрые советы!
лишняя waveform.png
сигнал_двоится.jpg
Вложения
KOLHOZNY generator.vi
(29.04 КБ) 63 скачивания
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение Andrew Lunev »

Примерно так можно синхронизировать два счетчика. Они должны использовать один опорный генератор и обе задачи должны стартовать по одному триггеру.
В примере я использовал фронт сигнала со счетчика 1 для запуска задачи счетчика 0, но тут могут быть проблемы.
Лучше обе задачи запускать от какого-то единого события, но для этого нужно это событие как-то выдать. Например это может быть приход фронта сигнала на какой-то из PFI или старт задачи аналогового сбора или генерации. Все доступные варианты можно посмотреть в списке.
В верхнем цикле идет расчет времен для каждого счетчика исходя из необходимой частоты генерации и сдвига фазы в процентах. Счетчик 0 генерирует меандр на заданной частоте, а счетчик 1 сдвигает фазу переднего фронта сигнала на заданный процент.
Проверить не на чем, поэтому сразу может не заработать, но общая идея должна быть понятна.
Вложения
2 counter.png
generator 2 counter LV2012.vi
(22.17 КБ) 62 скачивания
Andrey Petrzhik
user
user
Сообщения: 81
Зарегистрирован: 17 ноя 2015, 11:57
Версия LabVIEW: 12
Благодарил (а): 4 раза
Контактная информация:

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение Andrey Petrzhik »

Так, идею я понял, реализацию пока не очень, но авось осилю.
Опорный генератор какой-то мутный 4-битный есть, на 10кГц вроде работает.
Спасибо большое за помощь, кажется должно взлететь!
Вложения
опорный.png
Andrey Petrzhik
user
user
Сообщения: 81
Зарегистрирован: 17 ноя 2015, 11:57
Версия LabVIEW: 12
Благодарил (а): 4 раза
Контактная информация:

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение Andrey Petrzhik »

Andrew Lunev писал(а): 06 май 2021, 21:36 счетчик 1 сдвигает фазу переднего фронта сигнала на заданный процент
Попробовал. Что-то работает. Хватило ума пока только сменить везде имя девайса, на лицевой панели 300% поменять на 50% и перекинуть низкий уровень и фронт (где галочки).
corr_lvportal.png
Генерация работает, но меняется у нас только заполняемость второго сигнала, а мне бы хотелось менять фазу. Т.е. просто сдвигать один сигнал от другого. Мало того, поменяв скважность от 50% до скажем 60%, обратно мы вернуться не останавливая программу не можем... а это совсем не годится. К тому же я не могу выставить сдвиг 180 градусов. Может как-то можно таки менять именно фазу?..
оффсет50.jpg
Старт. Оффсет 50%
оффсет65.jpg
Меняю оффсет. 65%
возвращаемся на 50.jpg
Снова 50%. Но явно видно смещение, что-то пошло не так... при перезапуске все чинится.
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Как менять фазу генератора сигнала "на лету"?

Сообщение Andrew Lunev »

Andrey Petrzhik писал(а): 07 май 2021, 00:09Генерация работает, но меняется у нас только заполняемость второго сигнала, а мне бы хотелось менять фазу. Т.е. просто сдвигать один сигнал от другого. Мало того, поменяв скважность от 50% до скажем 60%, обратно мы вернуться не останавливая программу не можем... а это совсем не годится. К тому же я не могу выставить сдвиг 180 градусов. Может как-то можно таки менять именно фазу?..
Сдвигать именно фазу я сходу не могу придумать как. Ведь при синхронном генерировании один фронт должен совпадать, а другой смещаться. Для задач синхронизации важно смещение активных фронтов, а не длительность самих сигналов. Можно или нарастающие фронты смещать или спадающие.
Для понимания, как всё работает и на что влияет попробуйте задать смещение в 10% и поиграться с параметрами, указанными галочками на картинке. Желательно попробовать все комбинации и сделать фото с осциллографа. То есть должно получиться 8 вариантов. Скорее всего какие-то сместят сигналы на 180 градусов, другие будут смещать спадающие фронты.
После можно проверить возникает ли проблема при изменении смещения в диапазоне от 0 до 50% и от 50 до 100%. Расчет low и high time я привел в качестве примера. Понятно, что при вариантах 0% и 100% алгоритм не работает и возможно при каких-то других параметрах надо его доработать.
Вложения
counter test.PNG
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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