Форум: Техническая поддержка

Тема: LTR-35 перевод кодов ЦАП в Вольты

Вы не вошли.

 Поиск | Регистрация | Вход 

21.10.2022 13:33:00
#1

Участник
Здесь с 02.04.2018
Сообщений: 190

LTR-35 перевод кодов ЦАП в Вольты

Подскажите, как правильно выяснить, сколько Вольт получится выдаст на выходе LTR-35 в ответ на загрузку данного кода ЦАП.
Есть ли для этого функция API? Или какую формулу для этого использовать?

(Задача, для которой это понадобилось: ведётся управление развёртками мелкими шагами (1 шаг = единица младшего разряда кода ЦАП), но при этом есть ограничения по напряжению, которые нельзя превышать. Причём эти ограничения меняются со временем. Поэтому про каждый код ЦАП нужно выяснять, попадает ли он в безопасный диапазон по напряжению.)

21.10.2022 16:18:35
#2

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,187

Re: LTR-35 перевод кодов ЦАП в Вольты

Во первых в LTR35 по умолчанию используется калибровка на уровне ПЛИС (пункт 3.5 https://www.lcard.ru/download/ltr35api.pdf), если Вы управляете по кодам напрямую, то насколько я понимаю перед LTR35_Configure() Вы устанавливаете коэффициенты равные Scale = 1 и Offset = 0?

Тогда для точного сопоставления Вольт и кодов Вам нужно использовать калибровку в обратную сторону, т.е. после Open прочитать значения Scale и Offset нужных выходов и сохранить их перед установкой в 1 и 0. Далее по обратной формуле вычислить какой некалиброванный код соответствует выставленному X = Y/Scale - Offset.

Далее перевести этот код в Вольты, путем V = (X/CodeMax) * AmpMax, где CodeMax - код, который при калибровке соответствует верхней границе номинального диапазона - 0x600000 (константа LTR35_DAC_SCALE_CODE_MAX), а AmpMax - само верхнее значение диапазона - 10 или 1 В, в зависимости от того, какой выход используется (1:1 или 1:10) для LTR35-1 или 20 для LTR35-2 (ну или они же сохранены в соответствующих полях ModuleInfo.DacOutDescr).

21.10.2022 16:37:10
#3

Участник
Здесь с 02.04.2018
Сообщений: 190

Re: LTR-35 перевод кодов ЦАП в Вольты

Вышеописанное верно для всего диапазона возможных кодов ЦАП?

21.10.2022 18:38:15
#4

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,187

Re: LTR-35 перевод кодов ЦАП в Вольты

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

21.10.2022 23:26:30
#5

Участник
Здесь с 02.04.2018
Сообщений: 190

Re: LTR-35 перевод кодов ЦАП в Вольты

Подскажите, в каком порядке в структуре .Module.CbrCoef расположены структуры с калибровочными коэффициентами. Там их 8 пар, как я понимаю, по одной паре на канал вывода, соответственно для выходов 1:1 и 1:10. Но в Руководстве программиста не указано, какой элемент пары относится к 1:1, а какой к 1:10.

22.10.2022 01:05:57
#6

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,187

Re: LTR-35 перевод кодов ЦАП в Вольты

Сперва идут коэффициенты канала 1 для выхода 1:1, затем для выхода 1:10, и так далее для остальных 7.
Для доступа можно использовать значения из перечисления e_LTR35_DAC_OUTPUT как значение индекса, т.е. номер выхода в конфигурации соответствуют позиции в калибровках и в описании каналов в ModuleInfo.DacOutDescr.

22.10.2022 16:43:56
#7

Сотрудник "Л Кард"
Здесь с 05.04.2019
Сообщений: 524

Re: LTR-35 перевод кодов ЦАП в Вольты

Кулыгин Алексей пишет:

...(Задача, для которой это понадобилось: ведётся управление развёртками мелкими шагами (1 шаг = единица младшего разряда кода ЦАП), но при этом есть ограничения по напряжению, которые нельзя превышать. Причём эти ограничения меняются со временем. Поэтому про каждый код ЦАП нужно выяснять, попадает ли он в безопасный диапазон по напряжению.)

Мне остаётся добавить к сказанному выше Алексеем, что данный метод калибровки соответствия "код-напряжение" реализуется для условия нулевого тока нагрузки. В реальных рабочих условиях для пересчёта выходного напряжения (в диапазоне рабочих нагрузок) необходимо также учесть собственное выходное сопротивление ЦАП 50,0 ± 2,5 Ом  и 389,0 ± 4,0 Ом (на диапазонах 1:1 и 1:10 соответственно) и величину сопротивления внешней нагрузки.   
Также для учёта непревышения пикового значения напряжения на выходе ЦАП в динамическом режиме следует учесть, что в тракте ЦАП имеются фильтры, создающие переходный процесс  (аппаратные в микросхеме ЦАП и корректирующее звено ФВЧ в FPGA). Для того, чтобы воспроизвести этот переходный процесс нужно создать на выходе ЦАП "ступеньку" максимальной величины для данной задачи - отклик будет носить затухающий колебательный характер. В частности, если задача не требует компенсации спада АЧХ на высоких частотах, то корректирующее звено ФВЧ можно программно отключить, что уменьшит переходный процесс (но не исключит его полностью). Отключение  звена ФВЧ не влияет на калибровку ЦАП по постоянному напряжению, но вызовет дополнительную погрешность по переменному напряжению на высоких частотах полосы частот воспроизведения сигнала.

03.11.2022 23:39:15
#8

Участник
Здесь с 02.04.2018
Сообщений: 190

Re: LTR-35 перевод кодов ЦАП в Вольты

Возник ещё вопрос. Возможно ли, зная настройки арифметического генератора, узнать точную последовательность кодов, которые будут выданы на ЦАП? Т. е. алгоритм, по которому LTR-35 эти коды вычисляет.

04.11.2022 16:21:49
#9

Сотрудник "Л Кард"
Здесь с 05.04.2019
Сообщений: 524

Re: LTR-35 перевод кодов ЦАП в Вольты

Здравствуйте, Алексей.

Кулыгин Алексей пишет:

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

Возможно. Для этого необходимо воспользоваться режимом получения данных от эхо-канала LTR35 ( https://www.lcard.ru/download/ltr35api.pdf , п. 3.2.5). При этом, полученные эхо-данные будут соответствовать физическим кодам, отправленным в соответствующий канал микросхемы сигма-дельта ЦАП. Но эти коды арифметического генератора будут с коррекцией (в соответствии с калибровочными коэффициетами данного канала и после корректирующего ФВЧ, о котором я писал выше). В то же время, эти коды не будут отражать реальную физическую переходную характеристику микросхемы сигма-дельта ЦАП с внутренним фильтром высокого порядка. С другой стороны, если допустить, что в Вашей задаче упраление ЦАП происходит малыми приращениями сигнала, то переходными (динамическими) характеристиками системы (и реакцией фильтров на переходный процесс) можно пренебречь. В случае арифметического генератора SIN(a) и  СOS(a), малые приращения сигнала соответствуют очень низкой частоте генерации и малому приращению угла a.

Кулыгин Алексей пишет:

...Т. е. алгоритм, по которому LTR-35 эти коды вычисляет.

Вообще, предоставление пользователям алгорима арифметического генератора не планировалось... Но, я полагаю, что здесь достаточно знать, что это - алгоритм непосредственного вычисления SIN(a), и  СOS(a), где угол а имеет целочисленное 32-битное двоичное представление с возможностью установки целочисленного приращения угла, с обычной 32-битной циклической логикой (число значений угла 2^32). Разрядность результата вычисления SIN, COS - 24 бита.
Алексей, прошу пояснить, какая пользовательская задача (или обнаруженная проблема) вызвала подобные специфические вопросы?

05.11.2022 00:04:46
#10

Участник
Здесь с 02.04.2018
Сообщений: 190

Re: LTR-35 перевод кодов ЦАП в Вольты

Инженер пишет:

Алексей, прошу пояснить, какая пользовательская задача (или обнаруженная проблема) вызвала подобные специфические вопросы?

Речь идёт о физическом процессе (эксперименте), чувствительность которого превышает единицу младшего разряда кода ЦАП LTR-35 (а именно, речь идёт о сканировании электронной дифракционной картины, выдаваемые LTR-35 напряжения используются для генерации токов развёрток в отклоняющих катушках).

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

05.11.2022 11:27:19
#11

Сотрудник "Л Кард"
Здесь с 05.04.2019
Сообщений: 524

Re: LTR-35 перевод кодов ЦАП в Вольты

Чтобы считанный из LTR35 эхо-сигнал арифметического генератора снова отправить в LTR35 c целью воспроизведения "цифровой копии" сигнала в потоковом режиме, необходимо считать этот эхо-сигнал в режиме LTR35 с предустановленными в начальные значения калибровочными коэффициентами (и коэффициентами фильтра ФВЧ). Но это - нештатный режим работы с LTR35  - необходима консультация с нашим программистом Алексеем на предмет возможности специального режима работы LTR35 с начальными значениями всех коэффициентов (но без изменения информации во flash-памяти LTR35).  После получения эхо-сигнала в этом специальном режиме необходимо будет снова отправить этот сигнал в LTR35 в потоковом режиме, вернувшись к штатным калибровочным коэффициентам, повторяя все остальные условия эксперимента, включая условия начальной синхронизации старта LTR35.     
Но понятно также, что при воспроизведении "цифровых копий", могут проявиться и малые "аналоговые отличия" (аналоговые шумы и помехи), термозависимые отличия,  а также тонкие отличия в задержке сигнала, связанные с начальной фазой частоты преобразования сигма-дельта ЦАП.

05.11.2022 11:58:59
#12

Сотрудник "Л Кард"
Здесь с 05.04.2019
Сообщений: 524

Re: LTR-35 перевод кодов ЦАП в Вольты

Кулыгин Алексей пишет:

... была бы полезна возможность точно повторить сигнал арифметического генератора с помощью режима циклического или потокового воспроизведения...

Применение циклического режима LTR35 для получения "цифровой копии" арифметического генератора вряд ли возможно, поскольку:
- Размер цикла пробега уникальных целочисленных значений тригонометрического угла не должен быть больше, чем количество отсчётов данного канала, записанных в страницу циклической памяти (это накладывает сильные ограничения на возможные значения приращения тригонометрического угла).
- В текущей реализации LTR35 временнЫе интервалы смены страниц циклической памяти не могут иметь постоянный периодический интервал (интервалы смены страниц будут кратны времени цикла, но кратность будет непостоянной из-за асинхронного характера обновления страниц).

05.11.2022 18:03:05
#13

Сотрудник "Л Кард"
Здесь с 05.04.2019
Сообщений: 524

Re: LTR-35 перевод кодов ЦАП в Вольты

Кулыгин Алексей пишет:

...Т. е. алгоритм, по которому LTR-35 эти коды вычисляет.

Алексей, арифметическая модель работы LTR35 - это нетривиальная задача и для Вас и для нас, поскольку:
1. Для запуска модели Вам потребуется применение той или иной среды симуляции (интерпретации) с VHDL исходными текстами.
2. Кроме выдачи самой модели в читабельном варианте (п.1), нам потребуется подготовка подробного низкоуровневого описания LTR35, поскольку в модели будут использованы низкоуровневые объекты (работа с которыми осуществляется через API-функции LTR35).
Как альтернатива пп.1,2, если пытаться выдать для Вас максимально удобную арифметическую модель на языке С относительно всех сущностей, описанных на уровне LTR35 API, то это ещё более нетривиальная задача, с учётом необходимой задачи верификации полученной модели относительно оригинальной VHDL-логики (после перевода этой логики на язык С).

05.11.2022 19:36:02
#14

Сотрудник "Л Кард"
Здесь с 05.04.2019
Сообщений: 524

Re: LTR-35 перевод кодов ЦАП в Вольты

С другой стороны, если работать в потоковом режиме со сброшенными коэффициентами в начальное состояние, то в FPGA LTR35 никакой арифметической обработки не будет и необходимую обработку можно делать и на верхнем уровне. Правда, и в этом случае применение режима "эхо канала" далеко не бессмысленно - он может выполнять важную контрольную функцию высылаемых кодов в микросхему ЦАП, правда только - по одному каналу. Как работать с LTR35 со сброшенными коэффициентами в начальное состояние без порчи заводской информации во flash-памяти LTR35 - об этом может рассказать наш Алексей.

06.11.2022 12:26:34
#15

Участник
Здесь с 02.04.2018
Сообщений: 190

Re: LTR-35 перевод кодов ЦАП в Вольты

Инженер пишет:

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

Инженер пишет:

Как работать с LTR35 со сброшенными коэффициентами в начальное состояние без порчи заводской информации во flash-памяти LTR35 - об этом может рассказать наш Алексей.

Да, такая возможность была бы очень полезной для наших экспериментов.

07.11.2022 11:46:55
#16

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,187

Re: LTR-35 перевод кодов ЦАП в Вольты

Для отключения фильтра АЧХ достаточно установить флаг LTR35_CFG_FLAG_DISABLE_AFC_COR (поле Cfg.Flags) до вызова LTR35_Configure(), действительно для работы на уровне кодов это по хорошему нужно делать для любого режима. Про калибровочные коэффициенты  уже в начале данной темы писалось, что соответствующие Sacale и Offset нужно установить в 1 и 0 также до LTR35_Configure().

10.11.2022 21:05:59
#17

Участник
Здесь с 02.04.2018
Сообщений: 190

Re: LTR-35 перевод кодов ЦАП в Вольты

Установка флага LTR35_CFG_FLAG_DISABLE_AFC_COR решила имевшиеся проблемы. Спасибо за подсказку.

Но после этого (не знаем, вследствие ли этого) после нескольких часов работы с конфигурацией с установленным флагом модуль LTR-35 завис. После чего на всех выходах появились близкие к нулю, но не равные нулю точно, постоянные напряжения. Содержимое журнала (время записи об ошибке 20:42:24, 10.11.2022 совпадает с фактическим временем возникновения ошибки):

14:16:22, 10.11.2022	Информация	Service:ltrd (v2.1.8.9) started
14:16:22, 10.11.2022	Информация	Service:New host address: intf name: eno1, addr 192.168.0.99, msk 255.255.255.0
14:16:22, 10.11.2022	Информация	Crate init [TCP, 192.168.0.35]:Start connection
14:16:22, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:New crate initialized successfully: 
14:16:22, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Location            = 192.168.0.35
14:16:22, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Crate type name     = LTR-CEU-1
14:16:22, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Serial              = 2T728370
14:16:22, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Firmware version    = 1.0.4.0
14:16:22, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Bootloader version  = 2.1.0.0
14:16:22, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   CPU Type            = LPC4337
14:16:22, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Board revision      = 1
14:16:22, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   FPGA name           = LTR-CEU-1
14:16:22, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   FPGA version        = 1.0.4
14:16:22, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   mode                = 2
14:16:22, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Protocol version    = 1.1
14:16:22, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:New module detected in slot 1
14:16:22, 10.11.2022	Информация	LTR35-1 (Crate LTR-CEU-1 [TCP, 2T728370], slot 1):Initialized successfully
14:16:24, 10.11.2022	Информация	Service:New host address: intf name: tun0, addr 10.8.0.102, msk 255.255.255.255
20:42:24, 10.11.2022	Ошибки (-505)	Crate LTR-CEU-1 [TCP, 2T728370]:Crate ping failed: Command reply timeout
20:42:24, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:Crate closed
20:42:39, 10.11.2022	Информация	Service:New host address: intf name: eno1, addr 192.168.0.99, msk 255.255.255.0
20:42:39, 10.11.2022	Информация	Crate init [TCP, 192.168.0.35]:Start connection
20:42:39, 10.11.2022	Предупреждения	Crate init [TCP, 192.168.0.35]:Connection already established! Force primary connection!
20:42:39, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:New crate initialized successfully: 
20:42:39, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Location            = 192.168.0.35
20:42:39, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Crate type name     = LTR-CEU-1
20:42:39, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Serial              = 2T728370
20:42:39, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Firmware version    = 1.0.4.0
20:42:39, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Bootloader version  = 2.1.0.0
20:42:39, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   CPU Type            = LPC4337
20:42:39, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Board revision      = 1
20:42:39, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   FPGA name           = LTR-CEU-1
20:42:39, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   FPGA version        = 1.0.4
20:42:39, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   mode                = 2
20:42:39, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:   Protocol version    = 1.1
20:42:39, 10.11.2022	Информация	Crate LTR-CEU-1 [TCP, 2T728370]:New module detected in slot 1
20:42:39, 10.11.2022	Информация	LTR35-1 (Crate LTR-CEU-1 [TCP, 2T728370], slot 1):Initialized successfully
11.11.2022 00:22:41
#18

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,187

Re: LTR-35 перевод кодов ЦАП в Вольты

А каким образом крейт был подключен к ПК? Напрямую, через свич, еще каким-то способом?

11.11.2022 00:53:55
#19

Участник
Здесь с 02.04.2018
Сообщений: 190

Re: LTR-35 перевод кодов ЦАП в Вольты

Подключение через WiFi-роутер по проводам. В одно из гнёзд LAN роутера подключён компьютер, в другое - крейт с LTR-35.

11.11.2022 13:33:42
#20

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,187

Re: LTR-35 перевод кодов ЦАП в Вольты

В приведенном журнале есть строка:

20:42:39, 10.11.2022	Информация	Service:New host address: intf name: eno1, addr 192.168.0.99, msk 255.255.255.0

Насколько я понимаю eno1 это и есть интерфейс связи ПК -> роутер (судя по его адресу и адресу LTR), к которому подключен LTR.
Это строка свидетельствует, о том, что этот интерфейс заново появился, т.е. до этого он исчезал (про исчезновение в ltrd не выводит сообщений, он отслеживает только появление новых, поэтому точное время не известно, по идее оно должно быть незадолго до ошибки, скорее всего это можно посмотреть по логам системы). Это свидетельствует о полном пропадании канала связи между роутером и ПК (причины могут быть разные: отключен кабель, роутер перезагрузился, каким-то образом интерфейс был выключен в ПК). При этом сам LTR-крейт на это повлиять не мог (он подключен к другому порту), как и софт верхнего уровня (отключение сетевого интерфейса не выполняется какими-либо программами LTR и вообще как правило требует прав рута).

Соответственно из-за отсутствия связи на участке ПК-роутер была разорвана связь ltrd -> крейт, из-за чего и была ошибка.
Далее после появления сетевого интерфейса ltrd снова установил связь с крейтом (я так понимаю стоит флаг автоподключения "A" у записи IP-адреса крейта).
Далее запись в журнале:

20:42:39, 10.11.2022	Предупреждения	Crate init [TCP, 192.168.0.35]:Connection already established! Force primary connection!

дает понять, что крейт исправно работал все это время, и у него осталось незвершенное старое содинение с ltrd для передачи данных (о том что оно разорвано со стороны ПК LTR не знает, сообщений о закрытии ему не приходило, т.к. не было связи), которое при новом подключении ltrd отключает соответствующем запросом, после чего устанавливает новое.

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

Но в общем в любом случае судя по журналу этот разрыв связи никак не связан с LTR крейтом или модулем LTR35.

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25
Факс: +7 (495) 785-95-14

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск

L-CARD в проектах