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

Генерация сигнала с помощью LTR34

Вы не вошли.

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

poststudent
06.10.2017 16:14:33
#1

Гость

Генерация сигнала с помощью LTR34

Почему при задании параметра conf.AcknowledgeType=true частота генерации сэмплов уменьшается? Так должно быть?

06.10.2017 18:20:12
#2

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

Re: Генерация сигнала с помощью LTR34

Речь идет о каком-то примере или Вашей программе? Каким образом наблюдаете уменьшение "частоты генерации сэмплов"?
Вообще этот параметр не должен влиять на частоту генерации (она определяется кол-вом каналов и делителем частоты в настройках), а только обозначает, что модуль высылает подтверждение на каждое слово. При этом (в отличие от режима AcknowledgeType=false)  ltrd/LtrServer ну управляют автоматически загрузкой очереди модуля, а Вы сами должны в программе следить, что послали нужное кол-во данный вовремя и не переполнили очередь модуля.

poststudent
09.10.2017 12:34:53
#3

Гость

Re: Генерация сигнала с помощью LTR34

Разрабатываю на QtCreator под Ubuntu. Приложение должно генерировать синусоидальный сигнал частотой 50 Гц с возможностью интерактивного изменения амплитуды сигнала. Сейчас программа с периодом 20 мс функцией LTR34_Send отправляет массив данных. Напряжение на выходе LTR34 фиксирую LTR11 с выводом кривой на экран. Когда значение conf.AcknowledgeType=false, за время 100 мс чётко укладывается 5 периодов. Как только задаю conf.AcknowledgeType=true (ни каких других изменений в программу не вношу) за время 100 мс укладывается 3,5 периода.

poststudent
09.10.2017 12:41:09
#4

Гость

Re: Генерация сигнала с помощью LTR34

В первом случае амплитуда изменяется одновременно с движения ползунка, во втором с существенной задержкой.

11.10.2017 11:20:52
#5

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

Re: Генерация сигнала с помощью LTR34

При постоянной подкачке данных для генерации сигнала (пробовал синуса) не обнаружил никаких изменений частоты генерируемого сигнала AcknowledgeType. Видимо нужен какой-то минимальный пример, на котором описанное выше проявляется, либо более подробное описание, что делаете (все настройки LTR34, сколько точек и какой сигнал генерируете за раз, каким образом вычисляете этот период 20 мс и т.п.)

poststudent
11.10.2017 14:29:25
#6

Гость

Re: Генерация сигнала с помощью LTR34

Пробовал запускать под Windows10. Результат тот же. Высылаю текст программы:

Содержание файла mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>
#include <QThread>
#include <QLCDNumber>
#include <QSlider>
#include <QListWidget>

class MainWindow : public QWidget
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void onSliderChanged(int _value);
    void onLoad();
private:
    bool checkError(int _err);
    void showMessage(QString _str);
private:
    QLCDNumber* number;
    QSlider* slider;
    QListWidget* list;
};

#endif // MAINWINDOW_H

Содержание файла mainwindow.cpp

#include "mainwindow.h"

#include "/usr/include/ltr/include/ltr34api.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QTimer>
#include <math.h>

TLTR34 conf;
INT SlotNum = 1; // Номер посадочного места
INT err;
LPCSTR ErrorString;    // Строка для записи сообщений об ошибках
double value;

const double f = 50.0; //частота сигнала
const double T = 1/f;  //период сигнала
const double w = 2.0*M_PI*f; //угловая частота
double sf;
int dsize; // размер массива
double dt; //период дискретизации

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
    QVBoxLayout* vl = new QVBoxLayout();
    QHBoxLayout* hl = new QHBoxLayout();
    number = new QLCDNumber();
    slider = new QSlider();
    hl->addWidget(number, 1);
    hl->addWidget(slider, 1);
    vl->addLayout(hl);
    list = new QListWidget();
    vl->addWidget(list);
    setLayout(vl);
    setFixedSize(400, 400);
    QObject::connect(slider, SIGNAL(valueChanged(int)),
                    this, SLOT(onSliderChanged(int)));
    err = LTR34_Init(&conf);
    if(err){
        ErrorString = LTR34_GetErrorString(err);
        list->addItem(QString::fromLocal8Bit(ErrorString));
        return;
    }
    else{
        list->addItem("LTR34_Init()->OK");
    }

    err = LTR34_Open(&conf, SADDR_DEFAULT, SPORT_DEFAULT,"3T212062",SlotNum);
    if(err){
        ErrorString = LTR34_GetErrorString(err);
        list->addItem(QString::fromLocal8Bit(ErrorString));
        return;
    }
    else{
        list->addItem("LTR34_Open()->OK");
    }

    if(!LTR34_IsOpened(&conf)){
        conf.FrequencyDivisor = 54; // делитель частоты дискретизации //54
        conf.UseClb=true; // Используем заводские калибровочные коэффициенты
        conf.AcknowledgeType=true; // тип подтверждения - периодические
        conf.ExternalStart=false;   // внешний старт отключен
        conf.RingMode=false;        // включен режим автогенерации
        conf.ChannelQnt = 1;

        err = LTR34_Reset(&conf);
        if(err){
            ErrorString = LTR34_GetErrorString(err);
            list->addItem(QString::fromLocal8Bit(ErrorString));
            return;
        }
        else{
            list->addItem("LTR34_Reset()->OK");
        }

        err = LTR34_Config(&conf);
        if(err){
            ErrorString = LTR34_GetErrorString(err);
            list->addItem(QString::fromLocal8Bit(ErrorString));
            return;
        }
        else{
            list->addItem("LTR34_Config()->OK");
        }

        sf = conf.FrequencyDAC;
        dsize = conf.ChannelQnt * ((int)sf) / ((int)f); // размер массива
        dt = 1.0 / sf / conf.ChannelQnt; //период дискретизации

        // Запускаем генерацию
        err = LTR34_DACStart(&conf);
        if(err){
            ErrorString = LTR34_GetErrorString(err);
            list->addItem(QString::fromLocal8Bit(ErrorString));
            return;
        }
        else{
            list->addItem("LTR34_DACStart()->OK");
        }

        QTimer* timer = new QTimer(this);
        connect(timer, SIGNAL(timeout()), this, SLOT(onLoad()));
        double dtime = dt * dsize;
        timer->start(20);
    }
}
MainWindow::~MainWindow()
{
    LTR34_Close(&conf);
}
void MainWindow::onSliderChanged(int _value)
{
    number->display(_value);
    value = (qreal)_value/100.0;
}
void MainWindow::onLoad()
{
    DWORD* ArrayToSend = new DWORD[dsize];
    for (int i = 0; i < dsize; i++)
    {
        short v = 32767 * (value * sin(w * i * dt));
        DWORD code = DWORD(v) << 16;
        ArrayToSend[i] = code;
    }
    LTR34_Send(&conf, ArrayToSend, dsize, 5000);
}
11.10.2017 17:04:06
#7

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

Re: Генерация сигнала с помощью LTR34

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

Другой вопрос, что при используемом подходе любая задержка ПК приводит к задержкам между периодами синуса, но это должно проявляться в появлении постоянного значения между периодами.

poststudent
12.10.2017 17:47:34
#8

Гость

Re: Генерация сигнала с помощью LTR34

Подключение по USB.
Форма кривой синусоидальная, без промежутков. Измерял частоту тестером 36 Гц вместо 50 Гц.
Могу скинуть фото или файлы регистрации LGraph2, укажите только адрес куда сбрасывать.
Тип крейта LTR-U-1 покупали в этом году. Плата LTR34-8 покупали в 2013 или 2012. Может быть связано с версиями прошивок?

12.10.2017 19:15:29
#9

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

Re: Генерация сигнала с помощью LTR34

Понятно, дело скорее всего в LTR-U-1. У него в принципе максимальная скорость передачи 200 КСлов/с и Вы выводе на этой частоте, т.е. с обычным подтверждением статусом уже используете его пропускную способность по максимому. Когда включаете подтверждение каждого слова, то у Вас получается такой же поток в обратную строну, и LTR-U-1 уже не справляется с этим потоком и сам он замедляет вывод. У остальных крейтов (включая новый одноместный LTR-CEU-1), таких ограничений по скорости нет.
Соответственно, если хотите подтверждение каждого слова, то нужно либо понижать частоту дискретизации LTR34, либо менять крейт.

poststudent
13.10.2017 10:06:28
#10

Гость

Re: Генерация сигнала с помощью LTR34

Проблема решилась снижением conf.FrequencyDivisor с 54 до 44. Спасибо за поддержку

Контакты

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

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

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

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