Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


E14-440 - вход синхронизации

Вы не вошли.

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

26.06.2015 12:16:15
#1

Участник
Откуда: Челябинск
Здесь с 18.06.2015
Сообщений: 24

E14-440 - вход синхронизации

Доброго времени суток! Подскажите пожалуйста, каким образом можно измерить период или частоту внешнего сигнала ? Возможно с использованием входа синхронизации

26.06.2015 13:27:30
#2

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: E14-440 - вход синхронизации

denprox пишет:

Доброго времени суток! Подскажите пожалуйста, каким образом можно измерить период или частоту внешнего сигнала ? Возможно с использованием входа синхронизации

Вопрос был рассмотрен в теме http://www.lcard.ru/forums/viewtopic.php?id=9528

Технически частотомер можно сделать на основе специально написанного BIOS для ADSP, использующего вход прерывания модуля.

Готового ПО частотомера нет.

По данной теме см. статьи:
http://www.lcard.ru/support/faq/fs_measur_ltr_e14
http://www.lcard.ru/lexicon/pulse_count_problem

26.06.2015 14:19:32
#3

Участник
Откуда: Челябинск
Здесь с 18.06.2015
Сообщений: 24

Re: E14-440 - вход синхронизации

Спасибо за ответ!

Еще такой вопрос:
В старой версии программы для нашего оборудования, с использованием L791 (библиотека lcomp), применялся такой код, для решения выше описанной задачи:

DWORD WINAPI ServiceThread(LPVOID lpParameter)
{
        ASYNC_PAR DI;
        ASYNC_PAR DO;
        USHORT DI_save = 0;
        ULONG i,j;
        double Value;
        ULONG TimeN;
        pos = 0;
        AnsiString str;

        while(true)
        {

        write_log("TTheard : proceed = true");
           ::Sleep(1);

                DO.s_Type = L_ASYNC_TTL_OUT;
                DO.Data[0]=DO1|DO2|DO4;
                pI->IoAsync(&DO);
                i=0;

                try
                {

                   EnterCriticalSection(section_harvest);

                        CountDI = 0;
                        ULONG StartTime = GetTickCount();
                        for(int i=0; GetTickCount()-StartTime < 1000; i++)  // кол-во отчетов за 1 сек.
                        {

                                TimeN = GetTickCount();
                                while(GetTickCount() - TimeN < 10) // считываем состояние в т. 10 мс.
                                {

                                        DI.s_Type = L_ASYNC_TTL_INP;
                                        //DI.Data[0] = 1;
                                        pI->IoAsync(&DI);
                                        DI1 = DI.Data[0]&0x1;

                                        if (DI1!=DI_save){
                                        DI_save = DI1;
                                        CountDI++;
                                        }

                                }

                        }

                                DI_countSaved[pos] = CountDI;    // записываем кол-во отчетов за секунду в массив

Задача состоит в том, чтобы выполнить примерно ту же задачу, средствами Е14-440 (библиотека lusbapi).

Не могли бы вы прокомментировать, на сколько он пригоден для решения данной задачи?

26.06.2015 15:16:54
#4

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: E14-440 - вход синхронизации

denprox пишет:

...применялся такой код, для решения выше описанной задачи...
... на сколько он пригоден для решения данной задачи?

Простите, но Вы ссылаетесь на задачу, которая не описана.
Для формулировки задачи измерения частоты или периода следует знать:
1. Диапазон измерения (частоты или периода).
2. Требуемая точность измерения (частоты или периода) в течение заданного (какого?) интервала времени.
3. Минимальная длительность импульса (если сигнал импульсный).
4. Амплитуда сигнала (в вольтах) и его форма.

30.06.2015 12:47:04
#5

Участник
Откуда: Челябинск
Здесь с 18.06.2015
Сообщений: 24

Re: E14-440 - вход синхронизации

Постараюсь описать более подробно задачу:

На некотором оборудовании установлен расходомер (водяной счетчик) СГВ-15 БЕТАР.

Необходимо написать программу, которая показывала бы текущий расход воды.
Для определения расхода, необходимо частоту умножить на вес импульса (константа 8,14).

Амплитуда сигнала примерно 5В.
Минимальная длительность импульса 1/3 периода, это ~8 млс
Диапазон измерения примерно от 8 грамм/сек до 200 грамм/сек
Максимальная частота: 0..40 Гц

Данная задача, решалась с помощью приведенного выше примера, на карте L791 (библиотека lcomp). На данный момент, необходимо изменить данный пример под новое оборудование E14-440 (библиотека lusbapi).

30.06.2015 15:35:47
#6

Участник
Откуда: Челябинск
Здесь с 18.06.2015
Сообщений: 24

Re: E14-440 - вход синхронизации

Если упростить приведенный пример выше, для L791 (lcomp), то получится следующее:

ULONG CountDI = 0;
ULONG DI_countSaved[10];
ULONG TimeN;

ASYNC_PAR DI;
IDaqLDevice* pI;

USHORT DI1;

//--------------------------------------------------------------------------------

CountDI = 0;
ULONG StartTime = GetTickCount();
   for(int i=0; GetTickCount()-StartTime < 1000; i++)  // кол-во отчетов за 1 сек.
   {
      TimeN = GetTickCount();
      while(GetTickCount() - TimeN < 10) // считываем состояние в т. 10 мс.
      {
         DI.s_Type = L_ASYNC_TTL_INP; //Для ввода одного отсчета с TTL линий
         pI->IoAsync(&DI);
         DI1 = DI.Data[0]&0x1; // Записываем введенные данные
         
         if (DI1!=DI_save){    // Если состояние изменилось
         DI_save = DI1;        //Запишем последнее состояние
         
         CountDI++;            //Счетчик изменения состояний импульса (кол-во отчетов)
         } 
      }
    
   }
DI_countSaved[pos] = CountDI;    // записываем кол-во отчетов за секунду в массив

Далее еще следуют некоторые расчеты, но меня больше интересует, как будет выглядеть данный пример для E14-440 (lusbapi)

01.07.2015 22:54:54
#7

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: E14-440 - вход синхронизации

denprox пишет:

..Минимальная длительность импульса 1/3 периода, это ~8 млс..

Асинхронным чтением цифровых линий E14-440 нельзя гарантировать отсутствие пропуска импульса длительностью 8 мс на цифровом входе. Эта реал-тайм задача должна решаться либо на уровне ADSP, либо синхронным опросом АЦП.

02.07.2015 14:45:28
#8

Участник
Откуда: Челябинск
Здесь с 18.06.2015
Сообщений: 24

Re: E14-440 - вход синхронизации

Ясно. Не подскажите, нет ли каких-то стандартных примеров по подсчету количества импульсов за некоторый промежуток времени (в частности за секунду)?

Опишу немного иначе задачу:
На цифровой вход IN1, который запараллелен с входом синхронизации INT, подается прямоугольный сигнал от тактового генератора. Необходимо посчитать, сколько раз изменится импульс за секунду.

В потоке, в момент сбора/отправки данных делаю запрос :

WORD TtlIn;

!pModule->TTL_IN(&TtlIn);   
DI1 = TtlIn;  

   

Если добавить цикл, вида:

CountDI = 0;

ULONG StartTime = GetTickCount();
   for(int i=0; GetTickCount()-StartTime < 1000; i++)  // кол-во отчетов за 1 сек.
   {
        !pModule->TTL_IN(&TtlIn);   // Запрос состояния
        Form1->DI1 = TtlIn;         // Записываем ответ

        if (Form1->DI1!=DI_save){    // Если состояние изменилось
         DI_save = Form1->DI1;        //Запишем последнее состояние
         CountDI++;            //Счетчик изменения состояний импульса
         }

   }  

То в таком случае, получаем кол-во отчетов, но при этом программа подвисает, при попадании в данный цикл. Плюс идет привязка к системному счетчику, что может выйти боком в будущем.

03.07.2015 09:06:36
#9

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: E14-440 - вход синхронизации

Предложу инженерную идею,  каким образом построить расходомер с использование E14-440 и вожделенного асинхронного ввода с цифровых линий:
Использовать внешний  счётчик в коде Грея, допустим, 10-битный, чтобы поделить на 1024 входную частоту от датчика расхода. 10 бит этого счётчика параллельно асинхронно опрашивать с помощью E14-440, на верхнем программном уровне вычислять приращения последовательно считанных значений счётчика и пересчитывать в количество принятых импульсов на входе счётчика. Поскольку в коде Грея изменяется только один бит, то параллельное считывании такого кода можно делать без какой-либо синхронизации момента чтения.   

Счётчик Грея можно реализовать не только на CPLD, FPGA или микроконтроллере, но и на "россыпи", например, на основе обычного бинарного счётчика, линейки элементов "исключающее или" ) 
http://electronicsinourhands.blogspot.r … inary.html ) и параллельного выходного регистра (засинхронизированного от частоты счётчика), чтобы исключить на выходе "гонки" в цепочке элементов "исключающее или".

03.07.2015 09:51:12
#10

Участник
Откуда: Челябинск
Здесь с 18.06.2015
Сообщений: 24

Re: E14-440 - вход синхронизации

Нашел одну тему на вашем форуме: Счетчики в цифровых линиях внешних модулей

Во втором посте вы написали:

Если речь идёт о цифровых входах, то в Е14-440 потенциально возможно написать "счётчики импульсов" на уровне сигнального процессора ADSP-2185M. Но для этого придётся заняться низкоуровневым программированием Е14-440.

Правильно ли я понимаю, что если реализовать данный счетчик, то на программном уровне не придется ни чего дописывать? Т.е. Е14-440 будет сразу выдавать кол-во импульсов на цифровом входе ?

03.07.2015 10:55:07
#11

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: E14-440 - вход синхронизации

denprox пишет:

Правильно ли я понимаю, что если реализовать данный счетчик, то на программном уровне не придется ни чего дописывать? Т.е. Е14-440 будет сразу выдавать кол-во импульсов на цифровом входе ?

Вероятно, можно модифицировать ПО ADSP под задачу расходомера так, чтобы, например, пользоваться той же самой функцией верхнего уровня асинхронного чтения цифровых линий. При этом,  ADSP, вместо считанных значений цифровых линий, будет подставлять готовое  накопленное  значение внутреннего  счётчика импульсов, реализованного в ADSP. Изучайте программирование ADSP-21xx - Вам откроется уйма возможностей. Низкоуровневое описание Е14-440 и исходные коды общедоступны. Если изучите, можете свой бизнес открывать! - писать пользователям встроенное ПО под разные приложения.

03.07.2015 11:05:59
#12

Участник
Откуда: Челябинск
Здесь с 18.06.2015
Сообщений: 24

Re: E14-440 - вход синхронизации

Есть ли возможность заказать готовую прошивку с данной функцией? У нас сроки ограничены, на изучение времени практически нет.

03.07.2015 11:10:59
#13

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: E14-440 - вход синхронизации

denprox пишет:

Есть ли возможность заказать готовую прошивку с данной функцией? У нас сроки ограничены, на изучение времени практически нет.

Обратитесь в наш отдел продаж для согласования организационных вопросов. Возможно, Вам посоветуют кого-то из системных интеграторов, кто возьмётся за эту задачу.

03.07.2015 11:12:16
#14

Участник
Откуда: Челябинск
Здесь с 18.06.2015
Сообщений: 24

Re: E14-440 - вход синхронизации

Хорошо, Спасибо!