Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АФЭ_уч_пособие_3Б.doc
Скачиваний:
12
Добавлен:
01.03.2025
Размер:
21 Мб
Скачать
☆

Аналого-цифровой канал (ацк)

Основное назначение АЦК – преобразование исследуемого аналогового сигнала в цифровую форму. АЦК состоит из входного мультиплексора, полного инструментального усилителя, программируемого усилителя, АЦП с УВХ. Режим работы АЦК (однополюсный или дифференциальный) задаётся программно. С помощью программируемого усилителя можно программно задать входной диапазон АЦП. При задании для работы одновременно

нескольких каналов (группы каналов) – коэффициент усиления в каждом канале может быть задан раздельно на каждый канал.

Источник тактовой частоты АЦП может быть внешний ТТЛ-совместимый сигнал, импульсная последовательность отрицательной полярности; длительность импульсов не менее 100 нс (частота от 1 до 50 кГц), подаваемый на соответствующий контакт разъема XP2 или ХР1. или внутренний – 1 МГц с 16 разрядным счетчиком-делителем (216 -1=65535), таким образом, минимальная задаваемая частота для платы может быть приблизительно 15,26 Гц. Внутренним источником тактовой частоты АЦП служит кварцевый генератор. Сетка задаваемых частот образуется так: максимальная частота 50 кГц, образуется как 1 МГц/20=50 кГц, следующая частота 1МГц/21, еще следующая 1МГц/22 и т.д. до 1МГц/65535.

Выбор режима работы аналогово-цифрового преобразователя - от кварцевого генератора или внешнего источника тактовой частоты, задается программно.

Цифровой порт ввода/вывода

Цифровой порт ввода/вывода содержит 16 линий - 8 на ввод (порт PB) и 8 на вывод (порт PA). Линии ввода и вывода независимы. Ввод может стробироваться сигналом STR_DIO с соответствующего контакта разъёма XP1. Стробирование осуществляется уровнем логического нуля. Кроме режима программного ввода/вывода возможен ввод 4-х битов данных синхронно с данными АЦП. Это может использоваться в задачах, где необходимо фиксировать состояние цифровых линий параллельно с оцифровкой аналоговых входов. Также в задачах синхронизации собираемых данных, при объединении нескольких устройств в единую систему.

Карта битов для ла-20usb:

Табл. 24

D15

D16

D13

D12

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

PB7

PB6

PB5

PB4

Табл. 25

Бит

Имя

Описание

D<0…D3>

PB<4…7>

4 старших бита цифрового порта ввода (читаются синхронно с данными АЦП)

D<4…15>

D<0…D11>

биты данных АЦП

Технические характеристики ЛА-20USB

Табл. 26

АНАЛОГО-ЦИФРОВОЙ КАНАЛ

Число аналоговых входов

32 однополюсных / 16 дифференциальных

Входное сопротивление

Не менее 5 МОм

Разъем

DHR-44

Диапазоны входного напряжения

±10.0 В; ±5.0 В; ±2.5 В; ±1.0 В;

±0.5 В; ±0.25 В; ±0.1 В; ±0.05 В;

Защита по напряжению аналоговых входов

±15 В

Время установления рабочего режима

5 мин

АНАЛОГО-ЦИФРОВОЙ ПРЕОБРАЗОВАТЕЛЬ

Тип

последовательного приближения

Разрешение

12 бит

Время преобразования

20 мкс

Максимальная частота дискретизации

50 кГц

Запуск АЦП

от внутреннего кварцевого генератора; от внешней тактовой частоты

Внешняя тактовая частота

ТТЛ-совместимый сигнал, импульсная последовательность отрицательной полярности; длительность импульсов не менее

100 нс , период не менее 20 мкс, но не более 1 мс

ЦИФРОВОЙ ПОРТ

Число линий

8 ввода / 8 вывода (с защёлкой)

Уровни и пороговые значения

ТТЛ – совместимые

Режимы работы

программное чтение/запись; чтение четырёх старших битов синхронно с данными АЦП

Состав базовых функций для работы с модулем ЛА-20USB

int InitADC(void); //инициализация платы (задаем указатель, устанавливаем базовый адрес, DRQ и IRQ)

int ADCSetting (void); //настройка работы платы

int StopADC(void); //прекращение работы с платой

int DataRead(void); //чтение данных из памяти платы и вывод их на экран с одновременной записью в файл

int PrintData(void); //вывод полученных данных на экран и запись в файл

// Получить от драйвера входной диапазон (Допустимый диапазон входного напряжения в вольтах в двухполюсном режиме)

UniDriverGet(DeviceHandle, ADC_GET_RANGE_BIPOLAR, &MaxVoltage);

// Получить от драйвера амплитуду в МЗР'ах

UniDriverGet(DeviceHandle, ADC_GET_MAXAMP, &MaxMSC);

//запуск АЦП

ansGet = UniDriverStart(DeviceHandle);

// Инициализируем структуру параметров измерения

UADCParametersDMA a;

a.m_nStartOf = ADCPARAM_START_TIMER; // Запуск АЦП от таймера

a.m_nIntOf = 0; // Без прерывания

a.m_nDMABlockSize = m_nBlockSize; // Размер блока собираемых данных

a.m_nDMAMode = 1; // Режим DMA передачи (0 - Single, 1 - AutoInit)

a.m_fFreqStart = m_fQuantFreq; // Частота дискретизации, Гц

a.m_nTimerStart = 0; // Номер канала таймера для запусков АЦП

a.m_fFreqPack = 0; // Частота кадров (режим отключен)

a.m_nTimerPack = 1; // Номер канала таймера для формирования кадров

a.m_nFirstChannel = 0; // Первый канал в режиме автосканирования

a.m_nChannelNumber = m_nChan; // Сколько всего каналов сканировать

a.m_nGain = 1; // Коэффициент усиления

//Инициализация платы

temp = UniDriverInit(DeviceHandle, ADC_INIT_MODE_INIT, &a)

Лабораторная работа. Мобильные системы сбора данных с интерфейсом USB

Целью лабораторной работы является изучение методики использования средств LabWindows/CVI 8.0 API8 и проектирования на языке Visual С++ библиотек функций для работы с аппаратурой, подключенной к компьютеру с помощью интерфейса USB, сеpвисной части пpогpамм, включающей сpедства гpафического пользовательского интеpфейса, и математической обpаботки, разработки виртуальных приборов.

Теоретические основы

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

Программное обеспечение для работы с модулями сбора данных и управления может быть создано средствами LabWindows/CVI 8.0 API с тем, чтобы программное обеспечение затем функционировало в среде LabWindows/CVI 8.0. Это не исключает последующего переноса созданной программы в другие программные системы.

Концепция LabWindows/CVI 8.0 API (NI DAQmx API) включает универсальный подход к программированию устройств сбора данных и управления, выпускаемых фирмой National Instruments, в частности, модуля USB-6008. Главные элементы этой концепции – каналы и задачи. Физический канал – это терминал или контакт, на котором генерируется или принимается аналоговый или цифровой сигнал. Один физический канал может включать более, чем один, терминал, например, дифференциальный аналоговый канал или цифровой порт, содержащий 8 линий. Каждый физический канал устройства (модуля сбора данных) имеет уникальное имя, например, Dev1/port 0/line0:7, которое соответствует соглашению NI DAQmx о именах.

Виртуальные каналы это программная категория, которая инкапсулирует физические каналы со специфической информацией канала: диапазоном, терминальной конфигурацией, шкалированием, форматирующим данные. Чтобы создать виртуальный канал, нужно воспользоваться функцией Create Channel function/VI. Можно создать виртуальный канал также, используя DAQ Assistant.

Если Вы создаете виртуальные каналы с помощью DAQ Assistant, вы можете использовать их в других задачах и ссылаться на них вне контекста задачи. Поскольку эти каналы могут использоваться в нескольких задачах, они

называются глобальными каналами. Можно выбрать глобальные каналы с помощью NI DAQmx API или DAQ Assistant и добавить их к задаче. Если Вы добавляете глобальный канал к нескольким задачами модифицируете глобальный канал с помощью DAQ Assistant, изменения будут действительны во всех задачах, использующих этот глобальный канал.

ПРИМЕР.

Содержание задачи. Требуется создать средствами LabView или LabWindows/CVI виртуальный канал NI DAQmx для измерения температуры в диапазоне от 50 до 200 градусов, используя термопару J-типа, соединенную с каналом 0 модуля М-серии, конфигурируемого как Device 1.

Решение:

  1. Используем функцию Create AI Thermocouple Channel function/VI.

  2. Используем Dev1/ai0 как физический канал устройства, на вход которого подается сигнал с термопары.

  3. Определим myThermocoupleChannel как имя, назначенное виртуальному каналу.

  4. Выберем соответствующие значения для типа термопары и диапазон входного сигнала. NI DAQmx свяжет эти атрибуты с виртуальным каналом.

Программы, созданные средствами LabWindows/CVI 8.0 API, могут быть использованы и в другой программной среде, например, Visual C++.

Для этого можно создать исполняемую программу и DLL, которые вызывают библиотеки LabWindows/CVI. LabWindows/CVI содержит DLL реального времени, которые включают все библиотеки. Исполняемые программы в среде LabWindows/CVI создаются также с использованием этих DLL. Директория EXLIB содержит импортируемые DLL-библиотеки и Startup-библиотеку; все они совместимы с внешними компиляторами.

Примечание. Никогда не используйте .lib файлы в \bin директории внешнего компилятора.

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

cvisupp.lib /* startup библиотеку */ cvirt.lib /* библиотеку импорта DLL содержащую:*/ /* User Interface Library */ /* Formatting and I/O Library */ /* RS-232 Library */ /* DDE Support Library */ /* TCP Support Library */ /* Utility Library */

Можно добавить статический библиотечный файл из \extlib в проект во внешнем компиляторе:

analysis.lib /* Analysis or Advanced Analysis Library */

Можно добавить файл DLL-библиотеки импорта из \extlib в проект во внешнем компиляторе:

gpib.lib/* GPIB/GPIB 488.2 Library*/ dataacq.lib/* Traditional NI-DAQ Library*/ visa.lib/* VISA Library*/ nivxi.lib/* VXI Library*/ ivi.lib/* IVI Library*/ nidaqmx.lib/* NI-DAQmx Library*/ cviauto.lib/* ActiveX Library*/ cvintwrk.lib/* Internet Library*/ cviddc.lib/* DIAdem Connectivity Library*/

Если Вы используете инструментальный драйвер, который относится к библиотекам GPIB/GPIB 488.2 and VXI, можно использовать две библиотеки: gpib.lib and nivxi.lib, чтобы разрешить ссылки на символы этих библиотек. Если Вы не имеете доступа к одному из этих файлов, вы можете заменить его одним из следующих файлов:

gpibstub.obj/* stub GPIB functions*/ vxistub.obj/* stub VXI functions*/

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

cviwmain.lib /* contains a WinMain() function that*/ /* calls main() */

Схема лабораторной установки

Рис. 63. AI0…AI7 – аналоговые входы, AO0…AO1 – аналоговые выходы, DO0…DO9 – цифровые входы/выходы.

Модули с интерфейсом USB (USB-6008/6009) обеспечивают многоканальный ввод и вывод аналоговых и цифровых сигналов: 10 цифровых программируемых линий ввода/вывода, 16 линий аналогового ввода, 2 линии аналогового вывода и один вход счетчика импульсов. Структура модуля приведена на рис. 64.

Рис. 64

Программное управление модулем USB-6008 должно включать, как минимум, следующие функции:

а) многоканального ввода аналоговых сигналов;

б) вывода аналоговых сигналов;

в) ввода/вывода цифровых сигналов;

г) управления таймером/счетчиком импульсов;

с различными способами синхронизации.

Электрические соединения модуля USB-6008 с терминальным модулем выполнены следующим образом: аналоговые входы AI0…AI7 соединены с гнездами AI0…AI7 терминального модуля, аналоговые выходы АО1...АО2 модуля USB-6008 соединены с коаксиальными разъемами АО1...АО2 терминального модуля, цифровые выходы DO0…DO7 модуля USB-6008 соединены с входами светодиодных индикаторов DO0…DO7 терминального модуля и модели объекта.

Программное обеспечение модуля USB-6008 включает библиотеку программных модулей LabWindows/CVI 8.0.

Программа работы

1. Изучить структуру и состав элементов лабораторной установки, состав и функции библиотеки программ для работы с модулем USB-6008.

  1. Разработать программу многоканального ввода, отображения и обработки аналоговых сигналов.

  2. Оценить экспериментально максимально достижимые характеристики скорости ввода с анализом факторов, определяющих быстродействие (характеристики компьютера, операционной системы, системы программирования, интерфейса, функциональной части модуля).

  3. Разработать программу ввода и вывода цифровых данных.

  4. Оценить экспериментально максимально достижимые характеристики скорости ввода и вывода цифровых данных с анализом факторов, определяющих быстродействие (характеристики компьютера, операционной системы, системы программирования, интерфейса, функциональной части модуля).

Указания к выполнению лабораторной работы

При выполнении п. 1 Программы изучить состав и функции библиотеки программ для работы с модулем USB-6008, приведенную в приложении, произвести тестирование работы модуля USB-6008 с использованием программы Test Panels. Для этого:

а) запустить MAX (Measurement and Automation Explorer) с рабочего стола Windows, затем выбрать Devices and Interfaces>>NI DAQmx Devices;

б) вызвать контестное меню щелчком правой кнопки мыши;

в) выбрать пункт Test Panels и открыть нужную панель тестирования.

Проверить с помощью панелей тестирования функционирование цифровых и аналоговых каналов ввода/вывода.

При выполнении п.1 Программы необходимо также изучить принципиальную схему и схему соединений внешних приборов (генератора стандартных сигналов и осциллогорафа), входящих в состав лабораторной установки рис. 63, обратив внимание на порядок подготовки установки к работе, порядок включения и отключения. Внимание! Несоблюдение правил включения и отключения может привести к выходу из строя компьютера!

При выполнении п.2 Программы разработать программу ввода аналоговых сигналов с выхода генератора стандартных сигналов и программу вывода цифровых данных на светодиодные индикаторы, программу снятия статической и динамической модели объекта.

Программа должна создаваться в виде проекта в среде LabWindows/CVI 8.0. При выполнении п.2 Программы разработать в среде LabWindows/CVI программу просмотра данных в графической форме.

Примеры программ в среде LabWindows/CVI 8.0 можно найти, вызвав в меню Help>>FindExamples.

Содержание отчета

  1. Схема лабораторной установки.

  2. Задание к работе.

  3. Текст прикладной программы сбора данных выполненной в среде. LabWindows/CVI 8.0.

  4. Текст программы, выполненной в среде Visual C++.

  5. Графический экран разработанного пользовательского интерфейса.

  6. Результаты измерения достигнутой максимальной скорости ввода/вывода цифровых и аналоговых сигналов.

  7. Графический экран разработанного виртуальных приборов ввода/вывода цифровых и аналоговых сигналов.

  8. Выводы.

Примечание. Тексты программ должны содержать необходимые комментарии.

Приложение . Примеры функций библиотеки

    1. DAQmxCreateTask

Описание

Создание задачи.

Синтаксис.

ANSI C(LabWindows/CVI 8.0)

DAQmxCreateTask(“ ”, &taskHandle)

Аргументы

taskHandle:

    1. DAQmxClearTask

Описание

Выгрузка задачи.

Синтаксис.

ANSI C(LabWindows/CVI 8.0)

DAQmxClearTask(taskHandle)

Аргументы

taskHandle:

Возвращаемый код

    1. DAQmxStartTask

Описание

Запуск задачи на исполнение.

Синтаксис.

ANSI C(LabWindows/CVI 8.0)

DAQmxStartTask(taskHandle)

Аргументы

taskHandle:

Возвращаемый код

    1. DAQmxStopTask

Описание

Останов задачи.

Синтаксис.

ANSI C(LabWindows/CVI 8.0)

DAQmxStopTask(taskHandle)

Аргументы

taskHandle:

Возвращаемый код

    1. DAQmxCreateDOChan

Описание

Создание канала цифрового вывода.

Синтаксис.

ANSI C(LabWindows/CVI 8.0)

DAQmxCreateDOChan(taskHandle, chan,””,DAQmx_Val_ChanForAllLines)

Аргументы

taskHandle:

chan: номер канала

DAQmx_Val_ChanForAllLines:

Возвращаемый код

Пример:

DAQmxCreateDOChan(taskHandle, chan,””,DAQmx_Val_ChanForAllLines)

DAQmxCreateDOChan(taskHandle, “Dev1/port0/line0:7” , ”” , DAQmx_Val_ChanForAllLines)

    1. DAQmxWriteDigitalLines

Описание

Запись данных цифрового канала.

Синтаксис.

ANSI C(LabWindows/CVI 8.0)

DAQmxCreateDOChan(taskHandle, 1, 1, 10.0, DAQmx_Val_GroupByChannel, data, NULL, NULL)

Аргументы

taskHandle:

chan:

DAQmx_Val_ChanForAllLines:

Возвращаемый код

Пример

DAQmxCreateDOChan(taskHandle, 1, 1, 10.0, DAQmx_Val_GroupByChannel, data, NULL, NULL)

    1. DAQmxReadDigitalLines

Описание.

Чтение данных цифрового канала.

Синтаксис.

ANSI C(LabWindows/CVI 8.0)

DAQmxReadDigitalLines (taskHandle, 1, 10.0, DAQmx_Val_GroupByChannel, data, 100, &read)

Аргументы

taskHandle:

chan:

DAQmx_Val_ChanForAllLines:

Возвращаемый код

Пример

DAQmxReadDigitalLines (taskHandle, 1, 10.0, DAQmx_Val_GroupByChannel, data, 100, &read)

  1. DAQmxCreateAIVoltageChan

Описание

Создание задачи ввода аналогового канала.

Синтаксис.

ANSI C(LabWindows/CVI 8.0)

DAQmxCreateAIVoltageChan (taskHandle, “Dev1/ai0 ” , ”” , DAQmx_Val_Cfg_Default, -10.0, 10.0, DAQmx_Val_Volts, NULL)

Аргументы

taskHandle:

chan:

DAQmx_Val_Cfg_Default:

DAQmx_Val_Cfg_Default

Возвращаемый код

Пример:

DAQmxCreateAIVoltageChan (taskHandle, “Dev1/ai0 ” , ”” , DAQmx_Val_Cfg_Default, -10.0, 10.0, DAQmx_Val_Volts, NULL)

  1. DAQmxReadAnalogF64

Описание

Чтение данных аналогового канала.

Синтаксис.

ANSI C(LabWindows/CVI 8.0)

DAQmxReadAnalogF64 (taskHandle, 1000 , 10.0 , DAQmx_Val_GroupByChannel,data,1000,&read, NULL)

Аргументы

taskHandle:

chan:

DAQmx_Val_GroupByChannel:

Возвращаемый код

Пример:

DAQmxReadAnalogF64 (taskHandle, 1000 , 10.0 , DAQmx_Val_GroupByChannel,data,1000,&read, NULL)

Пример программы

Цифровой вывод

#include <NIDAQmx.h>

#include <cvirte.h>

#include <userint.h>

#include "second.h"

static int panelHandle;

int main (int argc, char *argv[])

{

if (InitCVIRTE (0, argv, 0) == 0)

return -1; /* out of memory */

if ((panelHandle = LoadPanel (0, "second.uir", PANEL)) < 0)

return -1;

DisplayPanel (panelHandle);

RunUserInterface ();

DiscardPanel (panelHandle);

return 0;

}

int CVICALLBACK rQuit (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

{

switch (event)

{

case EVENT_COMMIT:

QuitUserInterface (0);

break;

}

return 0;

}

int CVICALLBACK rWrite (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

{

TaskHandle taskHandle=0;

char chan[256];

uInt8 data[8];

/*char errBuff[2048]={'\0'};*/

switch (event)

{

case EVENT_COMMIT:

GetCtrlVal (panel, PANEL_CHANNEL, chan);

GetCtrlVal (panel, PANEL_SW_0, &data[0]);

GetCtrlVal (panel, PANEL_SW_1, &data[1]);

GetCtrlVal (panel, PANEL_SW_2, &data[2]);

GetCtrlVal (panel, PANEL_SW_3, &data[3]);

GetCtrlVal (panel, PANEL_SW_4, &data[4]);

GetCtrlVal (panel, PANEL_SW_5, &data[5]);

GetCtrlVal (panel, PANEL_SW_6, &data[6]);

GetCtrlVal (panel, PANEL_SW_7, &data[7]);

DAQmxCreateTask ("", &taskHandle);

DAQmxCreateDOChan (taskHandle, chan, "", DAQmx_Val_ChanForAllLines);

DAQmxStartTask (taskHandle);

DAQmxWriteDigitalLines (taskHandle, 1, 1, 10.0, DAQmx_Val_GroupByChannel, data, NULL, NULL);

DAQmxStopTask (taskHandle);

DAQmxClearTask (taskHandle);

break;

}

return 0;

}

Пример панели интерфейса пользователя приведен на рис. 65.

Рис. 65

Примеры проектов в LabWindows/CVI 8.0

Аналоговый вывод

#include <utility.h>

#include <NIDAQmx.h>

#include <ansi_c.h>

#include <cvirte.h>

#include <userint.h>

#include "ContGen.h"

static int panelHandle;

char chan[256];

TaskHandle taskHandle=0;

int waveformType;

double min,max,frequency,rate,amp;

uInt32 sampsPerCycle;

float64 cyclesPerBuffer;

uInt32 bufferSize;

bool32 done=0;

int32 written;

int i,rr;

double data[20000];

int main (int argc, char *argv[])

{

if (InitCVIRTE (0, argv, 0) == 0)

return -1; /* out of memory */

if ((panelHandle = LoadPanel (0, "ContGen.uir", PANEL)) < 0)

return -1;

DisplayPanel (panelHandle);

RunUserInterface ();

DiscardPanel (panelHandle);

return 0;

}

int CVICALLBACK StartCallback (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

{

switch (event)

{

case EVENT_COMMIT:

GetCtrlVal(panel,PANEL_CHANNEL,chan);

GetCtrlVal(panel,PANEL_MINVAL,&min);

GetCtrlVal(panel,PANEL_MAXVAL,&max);

GetCtrlVal(panel,PANEL_AMP,&amp);

SetCtrlAttribute(panel,PANEL_GRAPH,ATTR_XAXIS_GAIN,1.0/rate);

for (i=0;i<100;i++) { data[i]=0;}

DAQmxCreateTask("",&taskHandle); DAQmxCreateAOVoltageChan(taskHandle,chan,"",min,max,DAQmx_Val_Volts,NULL);

DAQmxStartTask(taskHandle);

for (i=0;i<100;i++){ data[i]=i/20.0;

DAQmxWriteAnalogScalarF64 (taskHandle, 1, 1.0, data[i], 0);

DeleteGraphPlot(panel,PANEL_GRAPH,-1,VAL_DELAYED_DRAW);

PlotY(panel,PANEL_GRAPH,data,100,VAL_DOUBLE,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_RED);

Delay(0.05);

}

SetCtrlAttribute(panel,PANEL_START,ATTR_DIMMED,1);

ProcessDrawEvents();

DAQmxStopTask(taskHandle);

DAQmxClearTask(taskHandle);

break;

}

return 0;

}

int CVICALLBACK StopCallback (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

{

switch (event)

{

case EVENT_COMMIT:

QuitUserInterface (0);

break;

}

return 0;

}

Пример панели интерфейса пользователя приведен на рис. 66.

Рис. 66