МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ В.П. Заярный, И.В. Евстратов, Д...
51 downloads
185 Views
494KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ В.П. Заярный, И.В. Евстратов, Д.В. Сарана, Р.Н. Романов
СОПРЯЖЕНИЕ КОМПЬЮТЕРОВ С ВНЕШНИМИ УСТРОЙСТВАМИ В СТАНДАРТЕ КАМАК
Учебно-методическое пособие по системному программированию функциональных модулей в стандарте КАМАК
ВОЛГОГРАД 2003
ББК 32.973.26-04я73 З-40 Рецензенты: д-р физ.-мат. наук, проф. М.Б. Белоненко (ВолГАСА); канд. техн. наук, доц. А.Н. Шилин (ВолгГТУ) Печатается по решению редакционно-издательского совета университета
З-40
Заярный В.П., Евстратов И.В., Сарана Д.В., Романов Р.Н. Сопряжение компьютеров с внешними устройствами в стандарте КАМАК: Учебно-методическое пособие по системному программированию функциональных модулей в стандарте КАМАК. — Волгоград: Изд-во ВолГУ, 2003. — 60 с.
В пособии изложен необходимый минимум теоретического материала, позволяющий освоить основные принципы построения и функционирования средств сопряжения ЭВМ с внешними устройствами в стандарте КАМАК. Для закрепления знаний по освоению указанной системы в пособии также предлагается проведение шести лабораторных работ. Работы приводятся со всеми необходимыми пояснениями, схемами и вопросами для контрольной проверки. Предназначено для студентов физического факультета Волгоградского государственного университета и других профильных специальностей вузов.
© Издательство ВолГУ, 2003 © В.П. Заярный, И.В. Евстратов, Д.В. Сарана, Р.Н. Романов,
2
ВВЕДЕНИЕ Автоматизированная система в стандарте КАМАК представляет собой набор модулей стандартных размеров, расположенных в стандартной корзине, называемой крейтом. В крейте также располагается управляющий модуль, называемый крейт-контроллером (К-К). Модули, на вход которых поступают внешние аналоговые сигналы (с выходов датчиков, от внешних приборов и т. д.), преобразуют его в цифровой код. К-К по определенным правилам стандарта КАМАК управляет работой модулей и обменом информацией между К-К и модулями. Кроме того, К-К может обеспечивать обмен информацией между модулями КАМАК и ЭВМ по программе, заложенной в ЭВМ. Номенклатура модулей КАМАК в настоящее время составляет несколько сотен наименований и включает модули самого различного назначения. В общем случае автоматизированная система в стандарте КАМАК с применением ЭВМ имеет структуру, приведенную на рис. 1. КАМАК
ОБЪЕКТ
Датчик
АЦ
Усилитель
АЦ
ЭВМ
Принтер
Клавиатура
С–
Рис. 1. ЦА
Такая система обладает гибкостью и универсальностью. Добавление ЦАП еще одного входа для связи с объектом исследования (экспериментальной Дисплей Нормализатор установкой) сводится к добавлению соответствующего модуля в крейт. Плата Крейтсопряжения Смена ЭВМ в такой системе сводится к смене К-К. контроллер Низшим функциональным звеном в стандарте КАМАК является модуль. Это элемент в виде сменного стандартного блока. Модули объединяются в более крупный функциональный блок — крейт (рис. 1). Крейт разделен на 25 отдельных секций (станций), в которые вставляются сменные модули. Станции № 1—24 являются рабочими, станция № 25 — управляющая. Каждая станция снабжена разъемом, обеспечивающим соединение сменного блока с магистралью крейта. Магистралью крейта называется система шин (проводников), соединяющих контакты разъемов станций. Она содержит сигнальные шины и шины питания. Сигнальные шины могут быть сквозными и индивиду3
альными. Сквозные шины связывают одноименные контакты разъемов всех рабочих станций с соответствующими контактами разъема управляющей станции. Каждая индивидуальная сигнальная шина связывает один контакт рабочей станции с одним контактом управляющей станции. Обмен информацией между К-К и рабочими модулями производится с помощью операций по магистрали крейта. Операции могут быть командными и безадресными. Безадресные команды К-К выставляет на сквозные сигнальные шины общего управления [например, сигналы «Сброс на ноль» (Z), «Сброс» (С)]. Сигналы Z и C воспринимаются одновременно всеми модулями. Сигнал Z имеет абсолютный приоритет над всеми командами, т. е. при Z = 1 все командные операции блокируются, регистры данных и управления всех модулей устанавливаются в начальное состояние. Сигнал С очищает все регистры и триггеры модулей. Для запрещения обмена информацией между рабочими модулями и исследуемым объектом К-К формирует сигнал общего управления «Запрет» на сквозной шине I. То есть при I = 1 входы и выходы рабочих модулей блокируются. Во время обращения к рабочим модулям К-К генерирует команду, состоящую из сигналов на рабочих шинах «Номер станции» (N), «Субадрес» (А) и «Функция» (F). Каждый рабочий модуль адресуется с помощью индивидуального сигнала на шине N, связанной с определенным контактом разъема управляющей станции. Станции нумеруются, начиная с левой стороны крейта (номера станций нанесены на панели крейта). Номер станции для рабочего модуля, занимающего более одной секции, определяется по положению крепежного винта модуля. Различные функциональные узлы в одном и том же модуле адресуются с помощью сигналов на четырех сквозных шинах А (А8, A4, A2, A1). Эти сигналы субадреса декодируются в данном рабочем модуле. Коды субадреса обозначаются А(1), А(2), А(4), А(8) Например, сигналы на шинах А1 = 1, А2 = 1, А4 = 1, А8 = 0 образуют код А(7). Функция, подлежащая исполнению в выбранном модуле, определяется сигналами на пяти сквозных шинах F (F16, F8, F4, F2, F1). Коды функции обозначаются F(0), F(1), F(2), ... F(31). Например, сигналы F1 = 0, F2 = 0, F4 = 0, F8 = 1, F16 = 1 образуют код F(24). Все выполняемые функции делятся на четыре группы. Коды F(0) — F(7) соответствуют командам чтения информации из модуля в К-К. Коды F(16) — F(23) соответствуют командам записи из К-К в модуль. Коды F(8) — F(15) и F(24) — F(31) — команды управления и проверки состояния рабочих модулей. Для обмена данными между рабочими модулями и К-К используются 24-разрядные сквозные шины «Чтение» (R1 — R24) и «Запись» (W1 — W24). R1 и W1 являются младшими разрядами. Информацию о состоянии 4
отдельного модуля можно получить, используя сигналы «Команда принята» (X), «Запрос на выполнение» (L) и «Ответ» (Q). При выполнении командной операции адресуемый модуль генерирует на сквозной шине Х сигнал «Команда принята» в случае, если модуль воспринял команду и может ее выполнить. Отсутствие сигнала Х указывает на серьезный сбой (отсутствие модуля, нет питания, нарушены внешние соединения, модуль не предназначен для выполнения требуемых действий). В модуле от различных узлов может формироваться сигнал LAM. Он логически умножается на сигнал блокировки и проходит на шину L магистрали, образуя сигнал «Запрос на выполнение». Сигнал L можно блокировать, деблокировать и сбрасывать с помощью соответствующих команд. Для модулей, имеющих несколько функциональных узлов, есть возможность индивидуальной проверки и сброса LAM-сигнала от каждого узла. Во время командной операции модуль может генерировать сигнал «Ответ» на сквозной шине Q, который несет информацию о состоянии модуля или его функционального узла. При выполнении операции проверки LAM-запроса от функционального узла модуля с заданным субадресом состояние сигнала Q будет соответствовать состоянию сигнала LAM. Во время выполнения операции на магистрали К-К генерирует сигнал «Занято» на сквозной шине В и синхронизирующие сигналы «Строб 1» и «Строб 2» на сквозных шинах S1 и S2 соответственно. Эти стробы служат для синхронизации операций на магистрали крейта. При выполнении командных операций по стробу S1 происходит обмен данными и информацией по шинам R, W, X, Q. Состояние сигналов на шинах R и W во время действия строба S1 изменяться не должно. Любые действия, приводящие к изменению состояния шин R и W, начинаются по стробу S2. Двоичная система счисления Недесятичные системы счисления с основанием n применяются для записи чисел с помощью цифр, принимающих значение от 0 до n-1. Например, в восьмеричной системе счисления используются 8 знаков: 0, 1, ... 7; в шестнадцатиричной — 16 знаков: 0, 1, ... 9, A, B, C, D, E, F. Для кодирования чисел в вычислительной технике используется двоичная система записи. В двоичной системе применяются две цифры: 0 и 1 (биты). Широкое применение двоичной системы счисления обусловлено тем, что числам 0 и 1 можно сопоставить физические события: наличие сигнала и отсутствие сигнала. 5
Перевод чисел из двоичной системы счисления в десятичную и обратно Техника перевода чисел из двоичной системы в десятичную такова: бит, стоящий на последнем справа месте (нулевой бит), умножается на 20, следующий за ним по старшинству бит — на 21 и т. д. Результаты перемножения суммируются. Для перевода числа из десятичной системы в двоичную необходимо последовательно делить исходное десятичное число на 2, выписывать остатки от деления (записывать 1) и записывать 0, если число делится без остатка. Пример перевода числа из двоичной системы счисления в десятичную: 1 · 24 + 1 · 23 + 1 · 22 +0 · 21 + 1 · 20 = 16 + 8 + 4 +1 = 29.
6
ЛАБОРАТОРНАЯ РАБОТА № 1
ПРОГРАММИРОВАНИЕ ФУНКЦИОНАЛЬНЫХ БЛОКОВ В СТАНДАРТЕ КАМАК С ИПОЛЬЗОВАНИЕМ РУЧНОГО КРЕЙТ-КОНТРОЛЛЕРА РК-К предназначен для испытания и контроля правильности работы исполнительных блоков КАМАК, подключенных к магистрали крейта. Он также может использоваться для проверки правильности работы цифровых систем КАМАК. Контроллер типа 140 Обеспечивает генерирование на магистраль одиночных команд, а также сигналов безадресных операций, устанавливаемых манипуляторами, расположенными на передней панели блока. Генерирование команд может осуществляться в одном из трех режимов работы: - RUN CONTINUOUS — непрерывное генерирование; - SINGL TRANSFER — генерирование одного цикла; - SINGL STEP — пошаговое генерирование. Блок обеспечивает прием сигналов с магистрали, составляющих ответ или запрос управляемого блока, с их оптической индикацией. РК-К обеспечивает ручную установку команд, состоящих из сигналов: - номер станции N; - внутренний адрес (субадрес) А; — код операции F. Манипуляторы номеров станций N позволяют набирать адреса из первых 18 станций. Этого достаточно, поскольку станции 19—25 занимают сам РК-К и блоки обслуживания, не использующие команды КАМАК. Манипуляторы субадреса А1, А2, А4, А8 обеспечивают набор внутреннего адреса исполнительного блока. Манипуляторы F1 — F16 обеспечивают набор кода операции. Субадрес и код операции (функция) набираются по правилу, описанному во введении. РК-К сигнализирует состояние шины Q (индикатор Q светится, если Q = 1). Состояние шины X проверяется в течение строба S1 и запоминается в блоке (светится индикатор X). Переключатель Xoff позволяет отключать шину Х магистрали от блока, подавая одновременно сигнал Х = L на запоминающую сигнал Х схему. Блок также сигнализирует логическую сумму сигналов LAM-запросов (индикатор L). 7
Блок обеспечивает генерацию сигналов общего управления Z, С и I, что подтверждается свечением соответствующих индикаторов. Клавиша EXT.OSC вместе с одноименным разъемом используется для внешнего генератора импульсов. Разъем TRIGGER OUT позволяет запустить цикл КАМАК от внешнего генератора. На разъем TRIGGER OUT подается сигнал в начале выполнения команды КАМАК для синхронизации внешнего устройства. Примечание. В данном исполнении РК-К типа 140 клавиша EXT.MATR. не используется.
Ручной генератор слов ФК446 Предназначен для работы совместно с РК-К для генерации 24разрядных слов на шинах R и W. Модуль размещается в ближайшей к РК-К станции (например с N =17,18) для удобства его использования. Для выдачи слова на шины R/W, необходимо: - задать на наборном поле РК-К адрес модуля (в данном случае N = 18); - набрать слово на наборном поле генератора слов, предварительно нажав клавиши R и W; - задать на РК-К код соответствующей операции. При подаче команд N(18)А(0)F(0) или N(18)A(0)F(16) набранное слово выдается на R или W соответственно. Данное слово можно обнаружить с помощью «Индикатора магистрали ФК-440» (см. далее). Контроллер типа МКТ 001 Предназначен для тех же целей, что и РК-К типа 140. Контроллер обеспечивает ручной набор: - кода номера станции в соответствии с таблицей 1; - кода субадреса — А1, A2, A4, A8; - кода операции (функции) — F1, F2, F4, F8, F16; - данные по шинам — W1 — W24; - сигнал «Сброс на ноль» — Z; - сигнал «Сброс» — C; - сигнал «Запрет» — I.
8
Таблица 1 Номер станции 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
N10 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
Обозначение клавиши N8 N4 N2 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 1 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 1 0 1 1
N1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
РК-К обеспечивает индикацию сигналов: - X, Q — с предварительной фиксацией в соответствующие регистры; - Z, C, I, B, L — без фиксации. РК-К работает в следующих режимах: - непрерывная генерация временных последовательностей сигналов; - однократная генерация временной последовательности сигналов. РК-К обеспечивает: - генерацию последовательности сигналов командных и безадресных операций N, A, F, B, C, Z, I, S1, S2; - запрещение генерации временной последовательности сигналов (СТОП); - генерацию сигналов синхронизации по началу временной последовательности для внешних устройств (через разъем СИНХР.). РК-К устанавливается в начальное состояние клавишей СБРОС. Индикатор магистрали ФК 440 Предназначен для получения визуальной информации о состоянии шин крейта, в том числе и при работе с РК-К. 9
Индикатор отображает состояние следующих шин: - «Чтение» (R1 — R24); - «Запись» (W1 — W24); - «Занято» (B); - «Субадрес» (A1, A2, A4, A8); - «Функция» (F1, F2, F4, F8, F16); - «Сброс на ноль» (Z); - «Запрет» (I); - «Сброс» (C); - «Номер станции» (N); - «Команда принята» (X); - «Ответ» (Q); - «Строб 1» (S1); - «Строб 2» (S2); - «Свободные сквозные шины» (P1, P2); - «Шина питания 6 В» (6V). Синхронизатор-таймер Синхронизатор-таймер (СТ) предназначен для преобразования цифрового кода, поступающего с магистрали крейта, во временной интервал, пропорциональный коду (режим таймера), а также для выработки синхроимпульсов запуска и синхронизации работы различных устройств (режим синхронизатора). Управление модулем производится: а) Стандартными командами и сигналами, подаваемыми с магистрали крейта. Команды: - A(0)F(16) — запись информации в счетчик модуля и запуск работы устройства; - A(0)F(9) — остановка работы устройства; - A(0)F(8) — проверка сигнала запроса «L»; - A(0)F(10) — сброс сигнала запроса «L»; - A(0)F(24) — запрещение сигнала запроса «L»; - A(0)F(26) — разрешение сигнала запроса «L». б) С помощью расположенных на передней панели тумблера выбора режима работы «Таймер» — «Синхр.» и кнопочных переключателей «Пуск» — «Стоп». Счетчик Счетчик РS (Сч 2/10) предназначен: - для подсчета числа импульсов, поступающих с внешнего устройства; - вывода числа в двоично-десятичном коде на магистраль КАМАК; 10
- индикации десятичного шестиразрядного числа на передней панели модуля; - записи числа в двоично-десятичном коде с магистрали КАМАК. Частота счетных импульсов, подаваемых на вход счетчика через разъем PULSE, не должна превышать 10 МГц. Емкость счетчика — (106–1). Двоично-десятичный код (1-2-4-8), записываемый в счетчик и состоящий из шести десятичных разрядов, поступает с магистрали крейта КАМАК по шинам W1 — W24 (W1 — младший разряд, W24 — старший разряд). Двоично-десятичный код, считываемый из счетчика, поступает на шины R1 — R24 (R1 — младший разряд, R24 — старший разряд). Модуль управляется следующими стандартными командами и сигналами, поступающими с магистрали крейта: - A(0)F(0) — считывание кода числа, содержащегося в счетчике; - A(0)F(16) — запись кода числа в счетчик; - A(0)F(8) — проверка L-запроса; - A(0)F(9) — сброс счетчика и L-запроса; - A(0)F(10) — сброс L-запроса; - A(0)F(24) — запрещение L-запроса; - A(0)F(26) — разрешение L-запроса; - A(0)F(25) — добавление в счетчик единицы. Модуль также может управляться командами, подаваемыми через разъем, и органами управления, расположенными на передней панели: через разъем GATE подается стробирующий сигнал (временные ворота), через разъем RESET, а также одноименной кнопкой можно приводить счетчик в исходное состояние (обнулять). ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ ПРЕДВАРИТЕЛЬНАЯ ПОДГОТОВКА 1. Изучить настоящее описание (при необходимости использовать рекомендуемую литературу). 2. Произвести предварительную подготовку в рабочей тетради (изложить цель работы, изобразить схему лабораторной установки, изложить порядок проведения работы). 3. Ответить на дополнительные вопросы. При оформлении отчета основные результаты работы проанализировать в выводах. Схема лабораторной установки приведена ниже.
11
КАМАК Магистраль крейта
CТ
PS
Генератор сигнала
058А
ФК-440
140 (МКТ-011)
Осциллограф
Рис. 2
ВЫПОЛНЕНИЕ РАБОТЫ Убедиться в наличии модулей РК-К (140), ручного генератора слов (ФК446) или заменяющего их РК-К МКТ 011, конвертора напряжения (058А), дисплея магистрали (ФК-440), синхронизатора-таймера (СТ) и счетчика (РS) в составе крейта КАМАК. Включить питание крейта. 1. Работа с синхронизатором в автономном режиме 1.1. Привести все модули крейта в исходное состояние подачей на магистраль из РК-К команды Z. Все клавиши наборного поля субадреса (А), функции (F) и номеров станций (N) должны находиться в отжатом положении. Остальные клавиши должны находиться в следующем состоянии: Х, I, RUN — в нажатом (off), остальные — в отжатом. Циклический режим работы РК-К обеспечивается нажатием клавиши «ЦИКЛ». Работая с модулями, наблюдать состояние магистрали по дисплею магистрали ФК-440. 1.2. Подключить осциллограф, включив его питание, к разъему F1 (СТ). Тумблер на передней панели (СТ) должен быть в положении «Синхронизатор» (CLOCK). Запуск модуля в этом режиме производится нажатием клавиши «START» и сопровождается свечением светодиода. Наблюдая последовательность импульсов на экране осциллографа, измерить ее параметры (длительность импульса, период Т, амплитуду U). 1.3. Подключая осциллограф поочередно к разъемам F2, F3, F4 соответственно, наблюдать изменение временной диаграммы. Зарисовать ос12
циллограммы. Определить кратность изменения частоты синхронизации (во сколько раз). Остановить работу СТ нажатием клавиши STOP. 1.4. Включить питание генератора импульсов. Подключить его выход к осциллографу, установить следующие параметры импульсной последовательности: длительность импульсов τ = 10 мкс, период Т = 1 кГц, амплитуда импульсов U =+5 В, зарисовать полученный сигнал. 1.5. Подать сигнал с выхода генератора на разъем EXT. Запустить модуль СТ и, изменяя период следования импульсов от генератора, убедиться в возможности плавной регулировки частоты синхронизации. Убедиться в том, что дискретность изменения частоты на разъемах F1-F4 осталась прежней. Остановить работу СТ, отключить генератор импульсов. 2. Работа с синхронизатором в программируемом режиме 2.1. Привести систему в исходное состояние нажатием и отжатием клавиши Z. Подключить осциллограф к любому из разъемов F1— F4. 2.2. На наборном поле номеров станций N нажать клавишу, соответствующую номеру станции ручного генератора слов (указан под крепежным винтом). 2.3. Выдать на магистраль крейта команду N А(0)F(16) (N — номер станции синхронизатора-таймера). Клавиша F16 должна оставаться в нажатом состоянии. Нажимая последовательно клавиши 2—7 ручного генератора слов, наблюдать изменение временной диаграммы. Определить диапазон изменения периодов синхронизации (Тmin и Тmax) и зарисовать осциллограммы. 2.4. Отжать клавишу F(16). При этом синхронизатор работает в режиме, аналогичном автономному, о чем свидетельствуют осциллограммы на разъемах F1 — F4 (убедиться в этом). 2.5. Подачей на магистраль команды А(0)F(9) остановить работу синхронизатора. 3. Работа с таймером в программируемом режиме 3.1. Клавиши на наборном поле A и F должны быть все отжаты. Клавишей Z привести систему в исходное состояние. Тумблер на панели СТ перевести в положение TIMER, осциллограф подключить к разъему GО. 3.2. Выдать на магистраль крейта команду А(0)F(16). Нажать клавиши 2, 3 ручного генератора слов (клавиша 1 должна быть отжата). По полученной осциллограмме определить минимальное значение устойчивого интервала времени таймера. 3.3. Нажимая последовательно клавиши 4, 5 и т. д., наблюдать изменение осциллограммы. Зная, во сколько раз увеличивается временной интер13
вал при нажатии очередной клавиши, определить его максимальное значение для данного таймера. 3.4. Отжатием клавиши F(16) остановить работу таймера. Отжать клавишу N(СТ). 4. Программирование и работа счетчика PS совместно с синхронизатором-таймером 4.1. Привести систему в исходное состояние клавишей Z. 4.2. Выдать на магистраль код N(PS)A(0)F(25). По световому индикатору счетчика убедиться в его работоспособности. Снять указанный код, обнулить счетчик нажатием кнопки RESET на его панели. 4.3. Коротким проводом с разъемами в стандарте КАМАК соединить любой из выходов F1 — F4 CT с входом счетчика (PULSE). Тумблер на передней панели СТ перевести в режим CLOCK. Нажав клавишу START на панели СТ, по световому индикатору счетчика убедиться его работоспособности. Остановить СТ нажатием клавиши STOP. Обнулить счетчик нажатием кнопки RESET. 4.4. Выдать на магистраль крейта код N(PS)A(0)F(16). С помощью ручного генератора слов записать в счетчик число 068928 (число записывается вертикально, начиная с последней цифры, в двоично-десятичном коде с разбиением клавиш на группы по четыре). После снятия кода N(PS)A(0)F(16) число на индикаторе счетчика должно оставаться. 4.5. Тумблер на панели СТ перевести в положение TIMER. Вход счетчика соединить с выходом F1 CT и нажать на его панели клавишу START. В таком режиме СТ выдает ограниченную последовательность импульсов и через некоторое время должен сам остановиться. При этом на индикаторе PS должно быть округленное до старшего разряда число. 4.6. Повторить пункты 4.4, 4.5, записывая в счетчик числа 34464, 67232 и 83616 и подключая вход счетчика к выходам СТ F2, F3, F4 соответственно. 4.7. Снять код NAF (по всему наборному полю). Выключить питание крейта и всех работающих приборов лабораторной установки. КОНТРОЛЬНЫЕ ВОПРОСЫ 1. Что такое стандарт КАМАК, для каких целей он используется? 2. В чем удобство использования системы в стандарте КАМАК? 3. Что представляет собой модуль в стандарте КАМАК, всегда ли он является функционально законченным? 4. Что представляет собой код NАF? Зачем он нужен? 5. Зачем нужен крейт-контроллер? Можно ли обойтись без него? 14
6. Могут ли модули в составе крейта взаимодействовать между собой без участия крейт-контроллера? 7. По какому признаку на индикаторе магистрали можно судить о серьезной неисправности в данном модуле или о его отсутствии в станции при обращении к нему крейт-контроллера? 8. Что означает сигнал LAM? Для какого режима обмена информацией он необходим? 9. Какие требования предъявляются к синхронизатору и таймеру? 10. Для каких целей могут быть использованы синхронизатор и таймер? Привести примеры систем с их использованием.
15
ЛАБОРАТОРНАЯ РАБОТА № 2
ПРОГРАММИРОВАНИЕ КРЕЙТ-КОНТРОЛЛЕРА КАМАК ДЛЯ СВЯЗИ С IBM-КОМПЬЮТЕРОМ Контроллер крейта КАМАК СС-08 Контроллер крейта КАМАК СС-08 предназначен для управления оборудованием одного крейта КАМАК от IBM PC-совместимого компьютера. Модуль контроллера СС-08 должен быть установлен в 24 и 25 станции крейта. Плата сопряжения устанавливается в любой свободный разъем магистрали компьютера. Установка интерфейсного кабеля производится ТОЛЬКО ПРИ ВЫКЛЮЧЕННОМ ПИТАНИИ крейта и компьютера!!! Связь контроллера СС-08 с компьютером осуществляется через плату сопряжения, на которой установлены буферные схемы шины данных, адреса и схема функционирования сигнала ожидания (READY), позволяющая увеличить длительность цикла обмена контроллера с компьютером. Собственно контроллер СС-08 представляет собой набор регистров N, A, F, R, W, Z, L, S. Обмен информацией между ними осуществляется по внутренней байтовой шине D0-D7. Адреса и назначение байтов регистров приведены ниже. Синхронизация и управление обменом информацией по магистрали осуществляется генератором цикла. Запуск генератора для проведения адресуемых операций по передаче данных в магистрали происходит автоматически после занесения в регистр F номера функции, а для безадресных операций — после занесения команды C или Z в регистр Z. Для функций с номерами F(0)-F(7) осуществляется запись информационного слова с магистрали R1-R-24 в регистр R, для F(16) — F(24) — выдача слова из регистра R на магистраль W1-W24. Относительно портов компьютера контроллер представляет собой область портов ввода-вывода с адресами 101Н — 10СН. Адреса приведены в таблице 2.
16
Таблица 2 Шестнадцатеричный адрес порта Регистр IBM PC
D7
D6
D5
D4
D3
D2
D1
D0
A8
A4
A2
A1
F8
F4
F2
F1
C
Z
101Н
А
102Н
F
103Н
Z
104Н
R
R8
R7
R6
R5
R4
R3
R2
R1
105Н
R
R16
R15
R14
R13
R12
R11
R10
R9
106Н
R
R24
R23
R22
R21
R20
R19
R18
R17
104Н
W
W8
W7
W6
W5
W4
W3
W2
W1
105Н
W
W16
W15
W14
W13
W12
W11
W10
W9
106Н
W
W24
W23
W22
W21
W20
W19
W18
W17
10АН
L
L8
L7
L6
L5
L4
L3
L2
L1
10ВН
L
L16
L15
L14
L13
L12
L11
L10
L9
10СН
L
L24
L23
L22
L21
L20
L19
L18
L17
107Н
S
B
I
INIT
R
L
Q
108Н
N
N16
N8
N4
N2
F16
N1
Для управления контроллером при обмене словами по шине КАМАК рекомендуется следующая последовательность действий: 1. Занести в регистр N номер модуля (N1 — N23), с которым будут проводиться операции обмена. 2. При необходимости занести в регистр А субадрес регистра в модуле. 3. При передаче слова занести в регистр W передаваемую информацию. 4. Занести в регистр F номер функции (F1 — F32). После занесения будет запущен генератор цикла КАМАК и произведен обмен информацией между контроллером и модулем с номером N и субадресом А. Для выполнения команд подготовки Z и сброса C нужно в регистр Z контроллера записать необходимую команду, после чего запустится генератор цикла КАМАК. После выполнения цикла регистр Z будет сброшен.
17
Программирование контроллера СС-08 Как описывалось в предыдущем разделе, программирование контроллера СС-08 для обмена данными с модулями КАМАК производится посредством выдачи в порты с номерами 101Н — 10СН управляющих команд и данных. Например, требуется инициализировать систему, то есть выдать на магистраль КАМАК сигнал Z. Такая процедура состоит в выдаче в порт с номером 103Н числа 01Н. Рассмотрим, что необходимо сделать, чтобы вывести какое-либо число в один из портов. Способ первый: написать программу, содержащую следующие строки: mov dx,103h — заносим в регистр DX номер порта mov ax,01h — заносим в регистр АX данные для СС-08 out dx,ax — собственно выдача числа в порт и воспользоваться одним из трансляторов языка низкого уровня Ассемблер, например TASM или MASM. Запустив полученный ЕХЕ-файл, получим искомый результат — сигнал Z на магистрали КАМАК. Способ второй: использовать какой-либо язык высокого уровня, допускающий обращение к портам. Например, при использовании версии Turbo Pascal v7.0 порты компьютера представлены в виде массива размерностью 256 × 1. Присваивание элементу этого массива какого-либо значения будет означать на самом деле выдачу в соответствующий порт этого значения. Таким образом, на языке Паскаль выдача в порт 103Н числа 01Н будет выглядеть так: Port[$103]:=$01;. Написав в IDE (Integrated Developer's Environment) Turbo Pascal 7.0 следующее: Uses Dos; Begin Port[$103]:=$01; End. и нажав [Ctrl-F9], получим искомый результат. Способ третий (предпочтительный): воспользоваться готовой программой, написанной специально для этих целей. Такая программа носит название самас.ехе и позволяет выполнять следующие функции: 1. Программировать ЦАП в стандарте КАМАК на выдачу синусоиды или пилообразной функции. 2. Изменять параметры (амплитуду, частоту) функции (см. п. 1). 3. Осуществлять выдачу в порты с номерами 101Н — 108Н числовых значений, заданных в десятичном виде (т. е. в виде числа 0—255). 4. Осуществлять выдачу в порты с номерами 101Н — 108Н числовых значений, заданных в двоичном виде (т. е. в виде последовательности нулей и единиц). 5. Перевод чисел из двоичной системы счисления в десятичную и обратно. 18
6. Калькулятор. Очевидно, в данной работе нам потребуются функции 3 и 4. Как ими пользоваться, вы узнаете из следующего раздела. Руководство по работе с программой Запустите программу. Вам будет предложено ввести номер варианта. Это необходимо при работе с ЦАП. В ответ на запрос номера варианта введите 0. В верхней строке экрана вы увидите меню, состоящее из следующих пунктов: - «Работа», - «Порт», - «Сервис», - «Выход». Перемещение между пунктами меню производится с помощью клавиш [Влево], [Вправо], а выбор пунктов меню производится нажатием клавиши [Enter]. Пункт «Работа» служит для работы с ЦАП и в данной работе не используется. Пункт «Порт» состоит из следующих подпунктов: - «Программирование в десятичных кодах», - «Программирование в двоичных кодах». Перемещение между подпунктами производится с помощью клавиш [Вниз], [Вверх], а выбор подпунктов производится нажатием клавиши [Enter]. Эти подпункты позволяют вывести в заданный вами порт заданное вами число. Пункт «Сервис» состоит из следующих подпунктов: - «Калькулятор», - «Информация», - «Установка», - «Двоичная система». Перемещение между подпунктами производится с помощью клавиш [Вниз], [Вверх], а выбор подпунктов производится нажатием клавиши [Enter]. Подпункт «Калькулятор» служит для сервисных функций и позволяет эмулировать работу простейшего калькулятора. Подпункт «Информация» выдает краткую информацию о программе. Подпункт «Установка» позволяет задать номер станции ЦАП в крейте КАМАК и номер используемого ЦАП. Подпункт «Двоичная система» служит для наглядного перевода чисел из двоичной системы счисления в десятичную и обратно. Все эти подпункты используются по мере надобности. Пункт «Выход» служит для завершения работы программы.
19
Для того, чтобы вывести число 01Н в порт 103Н, выберите в меню пункт «Порт», а в нем — подпункт «Программирование в десятичных кодах». На экране появится окно с двумя полями ввода: Выводим в порт 101Н Выводим число 255 ОК — Enter
Переключение между полями ввода производится клавишей [Tab]. Нажмите несколько раз клавишу [Tab]. Вы увидите, как курсор (подсвеченный прямоугольник) перемещается от одной области ввода к другой. Изменение содержимого областей ввода производится клавишами [Вверх], [Вниз] (для обеих областей ввода) и [PgUp], [PgDn] (только для выводимого числа). При нажатии на клавиши [Вверх], [Вниз] содержимое областей ввода увеличивается или уменьшается на 1, а при нажатии на клавиши [PgUp], [PgDn] содержимое областей ввода увеличивается или уменьшается на 10. После того, как в полях ввода будут выставлены необходимые номер порта и выводимое число, следует нажать [Enter]. При этом в данный порт будет выведено данное число. Например, если выставить порт 103Н и число 1, то после нажатия на [Enter] можно будет видеть, как на индикаторе магистрали ФК-440 загорится светодиод, соответствующий сигналу Z. Убрать окно можно клавишей [Esc]. Выводимое число можно задать и в виде последовательности нулей и единиц. Для этого выберите в меню пункт «Порт», а в нем — подпункт «Программирование в двоичных кодах». На экране появится окно с двумя полями ввода: Выводим в порт 101Н Выводим число
11111111 = 255
OK — Enter
Переключение между полями ввода производится клавишей [Tab]. Номер порта задается так же, как и в предыдущем подпункте — клавишами [Вверх] и [Вниз]. Выводимое число формируется следующим образом: 1. Выберите клавишей [Tab] поле «Выводимое число». 2. Клавишами [Влево] и [Вправо] подведите стрелочку (^) к тому биту, который хотите инвертировать. 3. Клавишей [Пробел] измените значение бита на требуемое (0 или 1). 4. Повторите шаги 2 и 3, пока не получите необходимое число. Проконтролируйте его десятичное значение. 5. Нажмите [Enter]. Число будет передано в порт. 6. Нажмите [Esc]. 20
Примеры I. Если мы хотим выдать на магистраль КАМАК сигнал С, то (см. таблицу 2) мы должны выдать в порт 103Н число, у которого второй бит будет равен 1, а остальные 0, то есть 00000010 в двоичной системе или 2 в десятичной системе. II. Требуется получить на магистрали КАМАК двоичную комбинацию вида: 101010100000000001010101. Для этого следует предпринять следующие действия: 1. Заносим в регистры СС-08 первые 8 бит этой комбинации. В порт 104Н выводим число 010101012. 2. Заносим в регистры СС-08 вторые 8 бит этой комбинации. В порт 105Н выводим число 000000002. 3. Заносим в регистры СС-08 последние 8 бит этой комбинации. В порт 106Н выводим число 101010102. 4. Заносим в регистр N номер пустой станции (например, 20), так как эти данные не предназначены для какой-либо станции, а лишь для индикации обмена данными. В порт 108Н выводим число 20. Содержание регистра А в этом случае значения не имеет. 5. Так как сами по себе на магистраль КАМАК эти значения не попадут, необходимо инициировать обмен данными между контроллером СС-08 и КАМАК. Такой обмен происходит после занесения в регистр F номера функции F(16) — F(32). Выберем, например, F(16). В порт 102Н выводим число 16. После всего этого мы можем наблюдать на магистрали КАМАК требуемую комбинацию. Итак, все требуемые действия можно свести в таблицу. Таблица 3 Порт 104Н 105Н 106Н 108Н 102Н
Число 010101012 000000002 101010102 20 16
Команда Данные для шин W8 — W1 Данные для шин W16 — W9 Данные для шин W24 — W17 A(20) F(16)
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ ПРЕДВАРИТЕЛЬНАЯ ПОДГОТОВКА 1. Ответить на контрольные вопросы. 2. Получить у преподавателя значения битовых комбинаций, которые необходимо вывести на магистраль КАМАК, а у инженера лаборатории — имена рабочих каталогов программ обмена данными и проверки связи. 21
3. Записать в таблице 3 действия, которые необходимо предпринять, для получения на магистрали КАМАК сигнала Z и каждой из заданных битовых комбинаций. 4. Собрать установку и убедиться в правильности сборки. Схема установки представлена на рис. 3.
IBM PC
Крейт КАМАК Плата сопряжения
Контроллер СС-08
Соединительный кабель
Дисплей магистрали ФК-440
Рис. 3
ВЫПОЛНЕНИЕ РАБОТЫ
Свободный слот Свободный слот
1. Убедиться в работоспособности системы с помощью программы ... проверки связи. Программа проверки связи специально создана для индикации прохождения информации по каналу «IBM -> КАМАК». В том случае, если связь межу компьютером и контроллером функционирует нормально, после запуска программы prov_sv.exe на магистрали КАМАК появляются сменяющие друг друга битовые комбинации 10101..1 и 01010...0, что выглядит как мигание светодиодов на индикаторе магистрали ФК-440. 2. Запустите программу обмена данными camac.exe. 3. Пользуясь заранее подготовленной таблицей команд и руководством пользователя к программе, произведите выдачу на магистраль КАМАК сигнала Z. Убедитесь в этом с помощью ФК-440. Покажите сигнал Z преподавателю. 4. Пользуясь заранее подготовленной таблицей команд, произведите выдачу на магистраль КАМАК заданных битовых комбинаций. Убедитесь в их наличии на магистрали с помощью ФК-440. Покажите их преподавателю. Таблицы команд зафиксируйте в рабочей тетради и используйте при составлении отчета о работе. 22
КОНТРОЛЬНЫЕ ВОПРОСЫ 1. Чем обусловлено широкое применение двоичной системы счисления в электронно-вычислительной технике? 2. Как осуществляется перевод чисел из двоичной системы счисления в десятичную и обратно? 3. Для чего используется контроллер СС-08? 4. С какими устройствами может производить обмен данными контроллер СС-08? 5. Как производить вывод чисел в порты ЭВМ с помощью программы, используемой в лабораторной работе? 6. Сразу ли после занесения в порт ЭВМ число попадает в контроллер КАМАК-IBM и на магистраль КАМАК? 7. Как произвести выдачу числа на магистраль КАМАК с помощью программирования контроллера СС-08?
23
ЛАБОРАТОРНАЯ РАБОТА № 3
ОПРЕДЕЛЕНИЕ ПАРАМЕТРОВ И ПРОГРАММИРОВАНИЕ ЦИФРОАНАЛОГОВОГО ПРЕОБРАЗОВАТЕЛЯ ФК-70 В СТАНДАРТЕ КАМАК Что такое цифроаналоговый преобразователь? Цифро-аналоговый преобразователь (ЦАП) представляет собой устройство, имеющее цифровой вход и аналоговый выход. Цифровой вход представляет собой совокупность линий, на каждую из которых может подаваться либо логический 0 (нулевое напряжение), либо логическая 1 (установленное напряжение положительной полярности в соответствии с принятой системой). Аналоговый выход представляет собой линию, напряжение на которой может принимать любые значения из установленного диапазона. Для ЦАП характерна прямо пропорциональная зависимость значения выходного напряжения от двоичного кода на выходе устройства. Это означает, что если двоичный код на входе увеличить в 2 раза, на выходе напряжение увеличится тоже в 2 раза; если двоичный код на входе увеличить в 3 раза, напряжение на выходе увеличится в 3 раза, и т. д. Таким образом, ЦАП позволяет получить однозначный аналоговый эквивалент двоичного сигнала (см. рис. 4). Uвых, В ЦАП
Uвых = 0,001B
ЦАП
Uвых = 0,01B
0,2
000000012=110 0,01
Вход 000010102=1010 0,00 ЦАП
Uвых = 0,2B
110010002=20010
Рис. 4 24
1
10
200 Вх код
Коэффициент пропорциональности между двоичным кодом на входе и аналоговым сигналом на выходе называется ценой младшего разряда. Физический смысл цены младшего разряда таков: при подаче на вход ЦАП числа 1 (нули во всех разрядах, кроме младшего), на выходе ЦАП появится аналоговое напряжение, численно равное цене младшего разряда δ. В том случае, если на входе ЦАП уже есть какое-либо двоичное число, то при увеличении (уменьшении) его на 1 выходное напряжение ЦАП увеличится (уменьшится) на значение, равное цене младшего разряда. Таким образом, для того, чтобы получить на выходе ЦАП какое-либо напряжение Ux, нужно на вход ЦАП подать двоичный код, равный целой части выражения Ux / δ, где δ — цена младшего разряда ЦАП. Если через равные промежутки времени подавать на вход ЦАП линейно нарастающий цифровой код, то на выходе ЦАП можно наблюдать линейно возрастающее напряжение («пилообразный» сигнал). Этот сигнал состоит из множества «ступенек», ширина которых определяется периодом изменения сигнала на входе, а высота — «скачком» сигнала на входе. Если через равные промежутки времени t0 сигнал на входе увеличивается на единицу, то на выходе через такие же промежутке сигнал будет увеличиваться на значение, равное цене младшего разряда ЦАП. Таким образом, высота «ступеньки» будет равна цене младшего разряда (см. рис. 5). Uвых
δ t0
Рис. 5
Время, в течение которого ЦАП обрабатывает входные данные, называ0 ется временем преобразования ЦАП и определяется его tбыстродействием. Количество входных линий для подачи двоичного сигнала называется разрядностью ЦАП. Диапазон значений чисел, которые могут быть поданы на вход ЦАП, напрямую связан с его разрядностью, и для n-разрядного ЦАП составляет от 0 (когда на все линии входа подается 0) до 2n–1 (когда на все линии входа подается 1). 25
Например, для 8-разрядного ЦАП диапазон входных значений от 0 (000000002 в двоичной системе) до 255 (111111112 в двоичной системе). Границы изменения выходного аналогового сигнала на выходе ЦАП определяют его динамический диапазон и могут быть вычислены через разрядность ЦАП n и цену младшего разряда δ следующим образом: для однополярного ЦАП, [0, δ•(2n–1)] n n для двухполярного ЦАП. [-δ•(2 –1), δ•(2 –1)] Двухполярный ЦАП позволяет получить на выходе аналоговый сигнал как положительной, так и отрицательной полярности. В двухполярном ЦАП существует дополнительный вход (знаковый разряд), сигнал на котором определяет знак выходного напряжения. Например, при цене младшего разряда, равной 0.1 В и числе 11012 на входе имеем на выходе: 1.5 В — при нуле на знаковом входе, –1.5 В — при единице на знаковом входе. Блок цифроаналоговых преобразователей ФК-70 Цифроаналоговый преобразователь ФК-70 выполнен в стандарте КАМАК в виде съемного модуля, вставляемого в свободную станцию крейта КАМАК. Блок имеет два одинаковых ЦАП (ЦАП1 и ЦАП2), каждый из которых предназначен для преобразования 14-разрядного двоичного кода с дополнительным знаковым разрядом в постоянное напряжение любой полярности. Каждый ЦАП формирует выходной сигнал в виде аналогового напряжения в диапазоне ± 10В, в зависимости от подаваемого входного кода. Дискретность входного сигнала 0.625 мВ, время преобразования — не более 10 мкс. Каждый ЦАП обеспечивает преобразование цифрового кода в постоянное напряжение по двум каналам. При этом производится преобразование параллельного кода (знаковый разряд и 14 двоичных разрядов), поступающего по шинам W1 — W14, W16 магистрали крейта КАМАК в аналоговое напряжение. Младший разряд принимается по шине W1, старший разряд — по шине W14, знаковый разряд — по шине W16. Блок принимает и выполняет команды с шин магистрали крейта КАМАК, приведенные в таблице 4. Таблица 4 NA(0)F(16) NA(1)F(16) NA(3)F(26) NA(3)F(24) NA(2)F(26)
Запись кода в регистр 1 (ЦАП1) Запись кода в регистр 2 (ЦАП2) Разрешение счета Блокирование счета Разрешение записи 26
NA(2)F(24) NA(2)F( 8) NA(0)F( 8) NA(1)F( 8) NA(0)F(10) NA(1)F(10)
Блокирование записи Проверка запроса Проверка запроса 1 Проверка запроса 2 Сброс запроса 1 Сброс запроса 2
Как заставить работать ЦАП ФК-70? Для того чтобы заставить работать ЦАП в стандарте КАМАК (т. е. получить на его выходе заданное постоянное или изменяющееся во времени напряжение), необходимо иметь в наличии следующее оборудование: 1. Собственно сам ЦАП — модуль ФК-70. 2. Место, куда мы его вставим, — крейт КАМАК. 3. Устройство, с помощью которого мы будем выдавать данные и управляющие сигналы на крейт КАМАК — контроллер крейта. Он может быть рассчитан на ручное программирование (РК-К типа 140) или на программмирование с помощью ЭВМ (контроллер СС-08). В этом случае нам понадобится следующее: 3а. IBM-совместимый компьютер. 3б. Программные средства. Их можно разработать самим (как это сделать, описывается в руководствах к следующим работам) или воспользоваться готовыми. В комплект оборудования для этой работы входит программа сamac.exe, которая позволяет выполнять следующие функции: 1. Программировать ЦАП в стандарте КАМАК на выдачу синусоиды или пилообразной функции: 2. Изменять параметры (амплитуду, частоту) функции (см. п. 1). 3. Осуществлять выдачу в порты с номерами 101Н — 108Н числовых значений, заданных в десятичном виде (т. е. в виде числа 0—255). 4. Осуществлять выдачу в порты с номерами 101Н — 108Н числовых значений, заданных в двоичном коде (т. е. в виде последовательности нулей и единиц). 5. Перевод чисел из двоичной системы счисления в десятичную и обратно. 6. Калькулятор. Кратко рассмотрим, как работать с этой программой. Руководство пользователя Запустите программу. Вам будет предложено ввести номер варианта. Это необходимо при работе с ЦАП. В ответ на запрос номера варианта 27
введите число, указанное вам преподавателем. В верхней строке экрана вы увидите меню, состоящее из следующих пунктов: - «Работа», - «Порт», - «Сервис», - «Выход». Перемещение между пунктами меню производится с помощью клавиш [Влево], [Вправо], а выбор пунктов меню производится нажатием клавиши [Enter]. Пункт «Порт» состоит из следующих подпунктов: - «Программирование в десятичных кодах», - «Программирование в двоичных кодах». Перемещение между подпунктами производится с помощью клавиш [Вниз], [Вверх], а выбор подпунктов производится нажатием клавиши [Enter]. Эти подпункты позволяют вывести в заданный вами порт заданное вами число. В руководстве к работе «Программирование контроллера крейта КАМАК СС-08» подробно рассматривается этот процесс. Пункт «Работа» служит для программирования ЦАП на вывод изменяющегося во времени напряжения. Функциональная зависимость от времени выбирается пользователем из двух возможных вариантов: «Синусоида» и «Пилообразная». Амплитуда и частота выходного сигнала также задаются пользователем. Пункт «Сервис» состоит из следующих подпунктов: - «Калькулятор», - «Информация», - «Установка», - «Двоичная система». Перемещение между подпунктами производится с помощью клавиш [Вниз], [Вверх], а выбор подпунктов производится нажатием клавиши [Enter]. Подпункт «Калькулятор» служит для сервисных функций и позволяет эмулировать работу простейшего калькулятора. Подпункт «Информация» выдает краткую информацию о программе. Подпункт «Установка» позволяет задать номер станции ЦАП в крейте КАМАК и номер используемого ЦАП. Подпункт «Двоичная система» служит для наглядного перевода чисел из двоичной системы счисления в десятичную и обратно. Все эти подпункты используются по мере надобности. Пункт «Выход» служит для завершения работы программы. Перед началом работы с ЦАП необходимо выставить номер станции ЦАП в крейте КАМАК и номер используемого ЦАП. Выберите в меню пункт «Сервис», а в нем — подпункт «Установка». На экране появится окно с двумя полями ввода: 28
Переключение между полями ввода осуществляется клавишей [Tab]. Активное поле ввода подсвечивается прямоугольником. Изменение содержимого поля ввода производится нажатием клавиш [Вверх], [Вниз]. Запоминание текущих настроек производится нажатием клавиши [Enter]. Пункт «Работа» служит для программирования ЦАП на вывод измеНомер станции ЦАПвыбора 6 няющегося во времени напряжения. После в меню пункта «Работа» на экране появляется окно с тремя полями ввода: Номер ЦАП в модуле 1 ОК — Enter
Переключая поля ввода с помощью клавиши [Tab], можно выбрать следующие параметры выходного сигнала: - Вид функции — «Синусоида» или «Пилообразная». - Амплитуда сигнала — от 0.00 до 15.00 В с шагом 0.01 В. - Частота сигнала — от 10 до 10000 Гц с шагом 1 Гц. Изменение содержимого полей ввода производится нажатием клавиш Вид функции: Синусоида [Вверх], [Вниз] для поля «Вид функции» и клавиш [Вверх], [Вниз], [PgUp], Частота: 1000 Гц Амплитуда: 1.00В [PgDn] для числовых полей. Нажав [Enter], можно наблюдать на выходе ЦАП сигнал с указанными ОК — Enter параметрами (если, конечно, вы не забыли подключить к нему осциллограф). После нажатия любой клавиши работа ЦАП будет прекращена. Примечание. Программа программирует ЦАП в однополярном режиме.
Как получить на выходе ЦАП постоянное напряжение? Вышеописанная программа использует обращение к ЦАП в цикле, периодически изменяя код на его входе. В случае же, если нам нужно постоянное напряжение, дело обстоит гораздо проще. Требуется всего лишь один раз подать на магистраль заранее рассчитанный двоичный код и выполнить функцию NAF(16). Рассмотрим пример. Пример Мы хотим получить на выходе ЦАП1 напряжение –1.7 В. 29
1) Рассчитаем необходимый двоичный код. Цена младшего разряда для ФК-70 равна 0.625 мВ, значит, код на входе ЦАП должен быть равен 1.7 / 0.000625 = 2720 в десятичной системе счисления, или АА0Н в шестнадцатеричной, или 101010100000 в двоичной. К тому же на шине W16 должна быть единица (так как напряжение отрицательное). Итак, на шинах W16-W1 должно быть 1000101010100000. 2) После этого переходим к программированию контроллера СС-08. Внимательно изучив описание регистров контроллера в руководстве к работе «Программирование контроллера крейта КАМАК СС-08», заносим: - в порт 103Н число 00000001 (Инициализация крейта КАМАК); - в порт 105Н число 10001010 (Шины W16 — W9); - в порт 104Н число 10001010 (Шины W8 — W1); - в порт 108Н номер станции ЦАП (это означает выбор соотв. N) - в порт 101Н число 00000000 [выдача А(0)]; - в порт 102Н число 00010000 [выдача F(16)]. Таким образом, мы выполнили команду NA(0)F(16), что соответствует (см. выше) записи кода в регистр ЦАП1. Остается только подключить к выходу ЦАП1 вольтметр или осциллограф и убедиться, что напряжение на выходе ЦАП1 равно в точности –1.7 В. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ ПРЕДВАРИТЕЛЬНАЯ ПОДГОТОВКА 1. Изучить руководство к лабораторной работе. При необходимости использовать рекомендуемую литературу. 2. Произвести предварительную подготовку в рабочей тетради (изложить цель работы, изобразить схему лабораторной установки, изложить порядок проведения работы). 3. Ответить на дополнительные вопросы. При оформлении отчета основные результаты работы проанализировать в выводах. 4. Получить у преподавателя значения выходного напряжения ЦАП, которые требуется получить на выходе. 5. Для 14-битного ЦАП, имеющего динамический диапазон 10 В, рассчитать цену младшего разряда. 6. Для каждого из напряжений рассчитать соответствующий двоичный код, подаваемый на вход ЦАП. 7. Записать последовательность действий, необходимых для получения на выходе ЦАП заданного напряжения (номера портов и данные, выводимые в них). 30
8. Собрать установку (см. схему на рис. 6).
КАМАК Магистраль крейта
Рис. 6 ФК-70
ВЫПОЛНЕНИЕ РАБОТЫ ФК-440
СС-08
I. Программирование ЦАП через контроллер СС-08 1. Убедиться в правильности подключения модулей и соответствии Осциллограф Плата схемы установки рисунку 6. Проверить наличие связи между компьютером сопряжения и крейтом КАМАК с помощью программы prov_sv.exe (при запуске проЭВМ ФК-440 должны появиться миграммы на дисплее индикатора магистрали гающие огни). 2. Записать номер станции ЦАП ФК-70 в крейте КАМАК. 3. Запустить программу обмена данными между компьютером и системой КАМАК. Убедиться в правильности перевода чисел в двоичную систему (см. п 6. предыдущего раздела). 4. Инициализировать систему. Для этого выдать на магистраль системы КАМАК сигнал Z. Убедиться в наличии сигнала Z на магистрали с помощью индикатора состояния магистрали ФК-440. 5. Выбрать пустую станцию в крейте КАМАК и отработать технику выдачи данных на магистраль КАМАК, используя N этой станции, А(1) и F(16). Убедиться в появлении на магистрали соответствующих сигналов после выдачи контроллеру крейта сигнала F. 6. Занести в контроллер крейта номер станции ЦАП. 7. Занести в контроллер крейта номер ЦАП в модуле. 8. Занести в контроллер крейта на шины W1 — W14, W16 данные, предназначаемые для подачи на вход ЦАП. 31
9. Занести в контроллер крейта номер функции ЦАП (F(16)). 10. Убедиться в том, что передача данных произошла, и в наличии сигналов, описанных в п. 6—9, на магистрали КАМАК. 11. Измерить напряжение на выходе ЦАП. Сравнить его с заданным преподавателем. 12. Запротоколировать последовательность своих действий в таблице: Номер порта
Данные
Смысл передачи данных
13. Инициализировать систему (см. п. 4). 14. Повторить п. 6—13 для всех значений напряжения, указанных преподавателем. 15. Завершите работу программы. II. Определение параметров ЦАП 1. Запустите программу camac.exe, указав в начале работы программы номер варианта, полученный у преподавателя. При задании отличного от нуля номера варианта программа имитирует работу ЦАП, у которого не проходит сигнал по одной или нескольким входным линиям. Маскировка соответствующих битов изменяет следующие параметры ЦАП: а) разрядность, б) динамический диапазон, в) цена младшего разряда. 2. Выберите в меню пункт «Работа», задайте следующие параметры выходного сигнала ЦАП: амплитуда 3В, частота 100 Гц. Наблюдайте на экране осциллографа выходной сигнал. 3. Определите динамический диапазон ЦАП. Для этого выберите вид функции «Синусоида» и постепенно увеличивайте амплитуду сигнала, пока не увидите на экране осциллографа отсечку сигнала. Запишите максимальное значение амплитуды выходного сигнала, которое можно получить на выходе ЦАП. Это и будет динамический диапазон ЦАП. 4. Определите время преобразования для данного ЦАП. Для этого задайте вид функции «Пилообразная», амплитуду сигнала равной динамическому диапазону, а частоту — достаточно большой, например, равной 5000 Гц. Измерьте на экране осциллографа ширину (т. е. длительность по времени) «ступенек» на наклонной части получившегося пилообразного сигнала. Это и будет время преобразования ЦАП. 5. Определите цену младшего разряда ЦАП. Для этого выберите вид функции «Пилообразная», частоту функции — в пределах 10—100 Гц, а амплитуду — около половины динамического диапазона. Наблюдая на экране осциллографа выходной сигнал, уменьшайте амплитуду сигнала до тех пор, пока высота «ступенек» на наклонной части получившегося пило32
образного сигнала не перестанет уменьшаться или не начнет увеличиваться ширина «ступенек» (подумайте, отчего может произойти такой эффект). Измерьте высоту «ступеньки». Это и будет цена младшего разряда ЦАП. 6. Рассчитайте, исходя из полученных данных, разрядность ЦАП. 7. Запишите в тетрадь, при каких значениях амплитуды и частоты выходного сигнала получены те или иные параметры. Сравните эти параметры с техническими параметрами ЦАП ФК-70. Попытайтесь сделать выводы о том, какие биты были маскированы. Полученные соображения отразите в отчете по работе. КОНТРОЛЬНЫЕ ВОПРОСЫ 1. Как определить динамический диапазон ЦАП, зная его разрядность и цену младшего разряда? 2. Как определить цену младшего разряда ЦАП, зная его разрядность и динамический диапазон? 3. Что такое однополярный и двухполярный ЦАП? В каких случаях применяют тот или иной вид ЦАП? 4. Как влияет на динамический диапазон ЦАП добавление знакового разряда? 5. Как будет изменяться напряжение на выходе ЦАП, если на его входе формировать плавно нарастающий двоичный код? Построить график. 6. От чего зависят высота и ширина «ступенек» на графике пилообразного сигнала на выходе ЦАП? 7. Сколько разрядов имеет ЦАП ФК-70? Каков его тип (однополярный, двухполярный)? Каково значение времени преобразования для ЦАП ФК-70? 8. Как производится выбор ЦАП для работы из двух субмодулей (ЦАП1 и ЦАП2), содержащихся в модуле ФК-70? 9. Какие команды NAF для управления ЦАП используются в данной лабораторной работе?
33
ЛАБОРАТОРНАЯ РАБОТА № 4
ПРОГРАММИРОВАНИЕ ЦАП В СТАНДАРТЕ КАМАК С ИСПОЛЬЗОВАНИЕМ ЯЗЫКА ПАСКАЛЬ Целью данной лабораторной работы является обучение основным принципам составления программ, предназначенных для вывода информации при помощи ЦАП. В руководстве к этой работе будут приведены примеры составления таких программ. Поставим перед собой задачу: получить на выходе ЦАП напряжение, изменяющееся во времени в соответствии с заданной функцией. Для примера возьмем следующую функцию: f(t)= а·sin(с·t)·sin(3·с·t), где с — множитель, зависящий от времени преобразования используемого ЦАП и от объема выходных данных, а а — масштабный множитель, зависящий от динамического диапазона ЦАП. График этой функции приведен на рисунке.
Рис. 7
Выберем язык программирования для выполнения данной задачи. Наиболее подходящим является Ассемблер как самый гибкий и мощный язык для организации низкоуровневого взаимодействия с периферийными аппаратными средствами. Он позволяет осуществить самый быстрый обмен данными между ЭВМ и внешними устройствами. Однако, как и все языки низкого уровня, он обладает такими недостатками, как сложность в освоении начинающими пользователями, неудобство составления и отладки программ, нечеткое структурирование, что влечет за собой неудо34
бочитаемость текстов программ, а также затруднения при работе с графикой. Среди языков высокого уровня предлагается выбрать Паскаль как язык относительно легкий в освоении (по сравнению с языком СИ) и в то же время предоставляющий удобный доступ к низкоуровневому вводу-выводу (через порты). Например, при использовании версии Turbo Pascal v7.0 порты компьютера представлены в виде массива размерностью 256 × 1. Присваивание элементу этого массива какого-либо значения будет означать на самом деле выдачу в соответствующий порт этого значения. Таким образом, на языке Паскаль выдача в порт 103Н числа 01Н будет выглядеть так: Port[$103]:=$01;. Рассмотрим основные действия, необходимые для достижения заданной цели. Эти действия перечислены ниже в порядке выполнения: 1. Инициализировать систему. 2. Подготовить массив данных для вывода через ЦАП. 3. Вывести данные через ЦАП. Следует заметить, что пункт 3 необходимо выполнять в цикле, для того чтобы получить возможность увидеть выходной сигнал на экране осциллографа. Структура программы на языке Паскаль такова: Описания модулей Описания констант
Uses ..., ...; Const ... = ...; ... = ...;
Описания переменных
var ... : ...; ... : ...;
Описания процедур
procedure ...; begin ... ... end;
Тело программы
begin ... ... end.
В соответствии с вышесказанным, на языке Паскаль тело программы будет выглядеть следующим образом:
35
BEGIN init; makemassiv; writegrafic; repeat workDAC; until keypressed; readkey; END. Здесь процедуры init, makemassiv, workDAC выполняют функции, соответствующие пунктам 1, 2, 3. Функция writegrafic выводит на дисплей график сигнала для сравнения с тем, что появляется на экране осциллографа. Цикл «repeat workDAC until keypressed» обеспечивает выдачу данных в цикле, прерываемом при положительном значении функции keypressed. Это стандартная функция языка Паскаль, которая выдает логическое значение TRUE, если была нажата какая-либо клавиша. Нажатие клавиши обрабатывается функцией readkey. Это тоже стандартная функция Паскаля. Она обрабатывает код нажатой клавиши. Поскольку принципиального значения в нашем случае этот код не имеет, значение функции не обрабатывается. В заголовке программы необходимо также описать, какие модули мы будем использовать: uses dos,crt,graph; Модуль dos работает с портами, crt — с клавиатурой, graph — с экраном. В этих модулях находятся стандартные процедуры, которые понадобятся нам при составлении программы. Выделим память под массив данных для ЦАП; обозначим сам массив а, а количество выводимых точек — n. Пусть оно будет равно 1000. Также определим номер станции ЦАП и номер используемого ЦАП в модуле. Во время работы программ они не изменятся, поэтому их можно обозначить как константы: const n = 1000; DACN = 6; SubDac = 0;
{Число точек для вывода} {Номер станции ЦАП} {Номер ЦАП}.
Значения индекса цикла и массива данных будут изменяться во время работы программы, поэтому их мы обозначим как переменные: var a:array[1..1000] of word; i:word;
{Массив данных} {Индекс цикла}.
36
Тип массива для данных выбран word (16-битные положительные целые числа), так как количество разрядов для чисел, подаваемых на вход ЦАП, равно 14. Перейдем к описанию процедур. Инициализация системы сводится к выдаче на магистраль КАМАК сигнала Z, что происходит при выдаче в порт 103Н числа 1. Таким образом, описание процедуры init будет выглядеть так: procedure init; begin port[$103]:=1; end; Подготовка данных для ЦАП производится следующим образом. Условимся использовать однополярный режим ЦАП (т. е. без задействования линии W16). Обозначим за s максимальное значение кода на входе ЦАП при выдаче 1 на все линии W1 — W14. Его легко вычислить: s: = (1 shl 14) – 1. Здесь оператор a1 shl a2 производит сдвиг числа а1 на а2 битов влево. Множитель с для функции f выбираем равным 2π/n для того, чтобы на всей длине массива данных укладывался ровно один период функции. Отобразим область значений функции на область входных значений ЦАП. Известно, что отображение отрезка [x1, x2] на отрезок [y1, y2] осуществляется линейным преобразованием у = y1+(x–x1)·(y2–y1) / (x2–x1). Так как значения функции лежат в диапазоне [-1,1], а диапазон входных значений ЦАП [0 ÷ S], то в массив данных а[i] следует заносит значения функции, подвергнутые линейному преобразованию f*(i) = 0.5·s·(f(i)+1) Несоответствия типов (a:Word — данные:Real) позволит избежать использование стандартной функции округления round (). Итак, процедура заполнения массива данных будет такова: procedure makemassiv; var s:word; begin s:=1 shl 14 -1; for i:=1 to n do a[i]:=round(0.5*s*((sin(i*6.28/n)*sin(3*i*6.28/n))+1)); end; Процедура вывода данных через ЦАП составляется следующим образом. Обращение к модулю производится при выполнении команды NAF(16). Значения, заносимые в регистры N и A, хранятся в программе в константах 37
DACN и SubDac. Взаимодействие контроллера крейта КАМАК и ЭВМ подробно описывалось в методическом руководстве к работе «Программирование контроллера СС-08». Адреса портов ЭВМ для обращения к регистрам контроллера N, F и A 108Н, 102Н и 101Н. Задание N, F и A будет выглядеть так: port[$108]:=DACN; port[$101]:=SubDac; port[$102]:=16; Выдача на магистраль данных производится через порты 104Н — 106Н. При этом 16-битное слово (элемент массива a[i]) распределяется в порты следующим образом: 0 Порт 106Н W24 .......W17
Старшие 8 бит <— a[i] —> младшие 8 бит Порт 105Н порт 104Н W16........W9 W8......W1
Для выделения младших и старших 8 бит из 16-битового числа типа word служат стандартные функции языка Паскаль Lo() и Hi(). Значения регистров контроллера N и A в теле цикла не изменяются, поэтому данные заносятся в них один раз в начале процедуры. В теле цикла выполняются лишь следующие действия: - подготовка данных для выдачи на магистраль КАМАК port[$104]:=lo(a[i]); port[$105]:=hi(a[i]); port[$106]:=0; - выдача данных на магистраль КАМАК port[$102]:=16; Итак, текст процедуры выдачи данных через ЦАП таков: procedure workDAC; begin port[$108]:=DACN; port[$101]:=SubDac; for i:=1 to n do begin port[$104]:=lo(a[i]); port[$105]:=hi(a[i]); port[$106]:=0; port[$102]:=16; end; end;
38
Вывод на дисплей содержимого массива а[i] не является принципиально сложной задачей. Ключевые моменты здесь состоят в том, чтобы отобразить массив [1,n] по горизонтали на ширину экрана [0,GetMaxX]: px:=round(1.0*i/n*getmaxx); и по вертикали [0, (1 shl 14)-1] — на высоту экрана [getmaxy,0]: py:=round(getmaxy*(1.0-1.0*a[i]/(1 shl 14-1))). Процедуры открытия графического режима InitGraph(), определения ширины экрана GetMaxX, высоты экрана GetMaxY, вывода точки на экран PutPixel() являются стандартными, содержатся в модуле graph и описаны в любом справочном руководстве по языку Паскаль, а также в справочной системе cреды Turbo Pascal 7.0. Учитывая это, составим процедуру вывода графика на экран следующим образом: procedure writegrafic; var j:integer; px,py:word; begin j:=detect; initgraph(j,j,'');
{Определяем наивысший граф. режим} {Открыв. режим; в каталоге запуска должен находиться драйвер egavga.bgi}
setcolor(white); rectangle(0,0,getmaxx,getmaxy); {Рамочка для красоты} for i:= 1 to n do begin px:=round(1.0*i/n*getmaxx); {Гориз. коорд. точки} py:=round(getmaxy*(1.0-1.0*a[i]/(1 shl 14-1))); {Верт. коорд. точки} putpixel(px,py,yellow); {Выводим точку желтого цвета} end; end; ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ ПРЕДВАРИТЕЛЬНАЯ ПОДГОТОВКА 1. Изучите основные операторы и принципы составления программ на языке Паскаль, пользуясь соответствующей литературой. 2. Получите у преподавателя функциональную зависимость от времени для сигнала, который необходимо вывести через ЦАП. 39
3. Используя методическое руководство к данной работе как пример, составьте программу на языке Паскаль для вывода заданного сигнала через ЦАП. 4. Наберите текст программы. 5. Соберите установку для выполнения лабораторной работы, в соотIBM PCсо схемой. Крейт КАМАК ветствии Плата сопряжения
Соединительный кабель
Контроллер СС-08
Дисплей магистр. ФК-440
Осциллограф
Модуль ЦАП ФК-70
Вход осциллографа соединяется с выходом одного из ЦАП Рис. 8
...
ВЫПОЛНЕНИЕ РАБОТЫ 1. Проверьте правильность сборки установки. 2. Убедитесь в наличии связи между ЭВМ и крейтом КАМАК с помощью программы проверки связи. В том случае, если связь межу компьютером и контроллером функционирует нормально, после запуска программы prov_sv.exe на магистрали КАМАК появляются сменяющие друг друга кодовые комбинации 10101..1 и 01010...0, что выглядит как мигание светодиодов на индикаторе магистрали ФК-440. 3. Произведите компиляцию написанной вами программы. Используйте компилятор Turbo Pascal 7.0. Его запуск производится из меню «Norton Commander». После появления на экране интегрированной оболочки системы Turbo Pascal откройте предварительно набранную вами программу путем нажатия F3 и выбора соответствующего файла с расширением *.pas. Если предварительно набранного файла с текстом программы нет, то создайте новый файл. Для этого нажмите [Alt-F] и затем N. Наберите текст программы. Стандартные операции с файлами (открытие, сохранение и т. д.) производятся из меню «File» системы Turbo Pascal. Вход в меню — клавиша [F10]. Произведите компиляцию программы. Компиляция происходит при нажатии на клавишу [F9]. Исправьте возможные ошибки в программе. 40
4. Запустите программу. Запуск программы производится при нажатии комбинации клавиш [Ctrl-F9]. 5. Убедитесь в наличии сигнала на экране осциллографа. Сравните этот сигнал с графиком функции на дисплее ЭВМ. 6. В случае отсутствия сигнала на экране осциллографа устраните возможные неполадки: а) проверьте еще раз наличие связи и правильность подключения кабелей; б) если во время работы программы на индикаторе ФК-440 не фиксируется наличие данных на магистрали КАМАК (светодиоды либо не горят, либо ярко горят, не мигая), проверьте: - правильность задания адресов портов при вызове F(16); - правильность заполнения и выдачи массива данных. в) Если во время работы программы на индикаторе ФК-440 прослеживается наличие данных на магистрали КАМАК (светодиоды горят вполнакала или видно мерцание светодиодов), но на выходе ЦАП сигнала нет, проверьте: - правильность задания номера станции ЦАП; - правильность задания номера ЦАП в модуле ФК-70; - правильность задания адресов портов при выдаче на контроллер задания номера станции ЦАП и номера ЦАП в модуле ФК-70. 7. Продемонстрируйте работу программы преподавателю. Зарисуйте выходной сигнал в рабочей тетради с указанием его характеристики. КОНТРОЛЬНЫЕ ВОПРОСЫ 1. Сколько разрядов имеет ЦАП ФК-70? Каков его тип (однополярный, двухполярный)? Каково значение времени преобразования для ЦАП ФК-70? 2. Какие команды NAF для управления ЦАП используются в данной лабораторной работе? 3. Из каких соображений выбран язык программирования для составления программы? 4. Опишите общую структуру программы на языке Паскаль для работы с ЦАП. Какие операции необходимо произвести, чтобы получить на выходе ЦАП заданную функциональную зависимость Uвых=f(t)? 5. Как осуществляется вывод числа в порт на языке Паскаль? 6. Как производится выбор ЦАП для работы из двух субмодулей (ЦАП1 и ЦАП2), содержащихся в модуле ФК-70?
41
ЛАБОРАТОРНАЯ РАБОТА № 5
ПРОГРАММИРОВАНИЕ АЦП В СТАНДАРТЕ КАМАК Описание модуля АЦП 4224 Данный АЦП выполнен в стандарте КАМАК и предназначен для преобразования непрерывного электрического сигнала в двоичные кода с записью в оперативное запоминающее устройство (ОЗУ), совмещенное с ним функционально и конструктивно. АЦП выполнен в виде сменного модуля, работающего в составе крейта КАМАК. У данного АЦП имеется возможность выводить из ОЗУ массив оцифрованной информации в аналоговой форме через встроенный ЦАП на монитор (осциллограф) для контроля качества работы АЦП. Программирование АЦП производится от РК-К или ЭВМ (через К-К), засылкой 14-разрядного слова состояния в регистр состояния (РС) АЦП. Структура слова состояния по разрядам РС приведена в таблице 5. Таблица 5 Разряд РС Поле регистра
14 13 12 11 10
9
Режим Предыстория
8
7
6
5 4 Диапазон Смещение преобразования
3
2
1
Тактирование
1)
0
0
0
0
0
0
0
0
0
0
2)
0
1
0
0
1
0
1
0
0
1
3)
1
0
0
1
0
1
0
0
1
0
4)
1
1
0
1
1
1
1
0
1
1
5)
1
0
0
1
0
0
6)
1
0
1
1
0
1
7)
1
1
0
1
1
0
8)
1
1
1
1
1
1
42
Расшифровка вариантов кодирования РС по соответствующим группам разрядов РС: 1. Режим Определяет режим накопления и передачи данных, получаемых в процессе оцифровки, в соответствии с выбранным кодом. 1) Чтение. Данные считываются из ОЗУ АЦП на магистраль КАМАК (в крейтконтроллер). 2) Запись. Данные записываются в ОЗУ АЦП с магистрали КАМАК (из крейтконтроллера). 3) Монитор. Данные циклически выводятся из ОЗУ АЦП через встроенный в него ЦАП на разъем МОНИТОР для наблюдения оцифрованного аналогового сигнала на видеоконтрольном устройстве (например, осциллографе). 4) Преобразование. Производится оцифровка подаваемого на разъем ВХОД аналогового сигнала с вводом оцифрованной информации в ОЗУ. При этом запуск АЦП производится автоматически (на один цикл преобразования). 2. Предыстория Это накопление информации до запуска АЦП в заданном объеме (первый этап преобразования, грубое представление информации в первой половине информационного слова). После поступления сигнала запуска АЦП производится второй этап преобразования (история), в результате чего информационное слово заполняется до конца с учетом предыстории. Такой режим работы АЦП выбран с целью повышения его быстродействия. В данной работе объем предыстории задать полный (все единицы в разрядах 9—12 РС). 3. Смещение Задавая соответствующие коды, можно производить смещение диапазона оцифровываемого аналогового сигнала. 1) Смещения нет. Смещение аналогового сигнала отсутствует. Оцифрованный сигнал — однополярный. 2) Плюс 1/8 диапазона. 3) Плюс 2/8 диапазона. 4) Плюс 3/8 диапазона. 5) Плюс 4/8 диапазона. 6) Плюс 5/8 диапазона. 43
7) Плюс 6/8 диапазона. 8) Плюс 7/8 диапазона. Кодами 2)—8) (см. табл. 5) производится смещение оцифровываемого сигнала на указанную часть диапазона. По коду 5) сигнал будет размещаться в середине динамического диапазона. 4. Диапазон преобразования Выбирается в соответствии с величиной оцифровываемого аналогового сигнала. 1) От 0 до минус 1.016 В. 2) От 0 до минус 2.032 В. 3) От 0 до минус 4.064 В. 4) От 0 до минус 8.128 В. На монитор аналоговый сигнал выдается в отрицательной области напряжения. 5. Тактирование По соответствующему коду производится выбор частоты тактового генератора, определяющей период оцифровки, чем задается быстродействие данного АЦП. 1) 25 нс. 2) 50 нс. 3) 100 нс. 4) 200 нс. 5) 400 нс. 6) 800 нс. 7) 1600 нс. 8) ≥ 25 нс. Внешнее тактирование с периодом тактовых импульсов ≥ 25 нс. После оцифровки данные заносятся в ОЗУ АЦП общим объемом 4096 слов. Команды КАМАК, реализуемые преобразователем приведены в таблице 6 (для данной лабораторной работы). Таблица 6 Код NAF
Выполняемая операция
NA(0)F(0)
Чтение ОЗУ на шину R
NA(0)F(1)
Чтение РС на шину R
NA(0)F(16)
Запись данных в ОЗУ с шины W
NA(0)F(17)
Запись данных в РС с шины W
NA(0)F(25)
Установка режима «Преобразование» 44
Запуск АЦП может быть как внутренним, так и внешним. Внутренний запуск производится автоматически по коду NA(0)F(17), внешний запуск производится для кода NA(0)F(25) внешним сигналом через разъем ЗАПУСК. Как заставить работать АЦП? Для того, чтобы исследовать с помощью ЭВМ изменяющийся во времени сигнал, требуется следующее: инициализировать систему, оцифровать входной сигнал, записать данные в ОЗУ АЦП, перенести данные из ОЗУ АЦП в ОЗУ ЭВМ и вывести на дисплей (или экран осциллографа) график сигнала. Все эти действия можно реализовать с помощью написания программы на языке высокого уровня или с использованием готовой программы, предназначенной специально для этих целей. Такая программа была специально разработана для выполнения этой лабораторной работы и носит название adc.exe. Она позволяет выполнять следующие функции: 1. Задание диапазона преобразования в пределах, предусмотренных техническим описанием АЦП 4224. 2. Задание смещения входного сигнала в пределах, предусмотренных техническим описанием АЦП. 3. Задание количества оцифровываемых точек в пределах 200, 500, 1000 или 2000 точек. 4. Вывод на магистраль рассчитанного слова состояния для РС АЦП, выдача команды АЦП на оцифровку данных, перенос данных из ОЗУ АЦП в ОЗУ ЭВМ. 5. Вывод графика оцифровываемого сигнала. Программа предоставляет пользователю удобный интерфейс с поддержкой «мыши». Период тактирования при оцифровке сигнала равен 25 нс. Руководство пользователя к программе 1. Запустите программу из командной строки или меню «Norton Commander». На экране появится рабочая оболочка следующего вида (рис. 9).
64000 63000 62000 61000
45 F8 — Диап. 0..-1.016 В F7 — Смещение
Рис. 9
2. Выберите диапазон преобразования. Выбор производится путем нажатия на клавишу [F8] или нажатия мышью на соответствующую экранную кнопку. При этом надпись на ней изменяется в пределах доступных значений. Нажимая на [F8] несколько раз, выберите требуемое значение параметра. 3. Выберите смещение оцифровываемого сигнала. Выбор производится путем нажатия на клавишу [F7] или нажатия мышью на соответствующую экранную кнопку. При этом надпись на ней изменяется в пределах доступных значений. Нажимая на [F7] несколько раз, выберите требуемое значение параметра. 4. Выберите количество точек оцифровываемого сигнала. Выбор производится путем нажатия на клавишу [F5] или нажатия мышью на соответствующую экранную кнопку. При этом надпись на ней изменяется в пределах доступных значений. Нажимая на [F5] несколько раз, выберите требуемое значение параметра. 5. Произведите оцифровку сигнала, нажав на [F3], [Enter] или нажав мышью на соответствующей экранной кнопке. При этом программа предпримет необходимые действия по обмену данными с системой КАМАК и выведет на экран график оцифрованного сигнала. Масштабируется график следующим образом: по оси Х — так, чтобы укладывалось выбранное количество точек; по оси У — в соответствии с вертикальной разметкой. Цифры по оси У означают соответствующие значения оцифрованного сигнала. 6. Выход из программы происходит при нажатии на [F10]. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ ПРЕДВАРИТЕЛЬНАЯ ПОДГОТОВКА 46
1. Изучите основные принципы работы АПЦ 4224 в стандарте КАМАК. 2. Соберите установку для выполнения лабораторной работы, в соответствии со схемой (рис. 10).
IBM PC
Рис. 10 Крейт КАМАК Плата сопряжения
Контроллер СС-08 ВСоединительЫПОЛНЕНИЕ РАБОТЫ ный кабель
1. Проверьте правильность сборки установки. Дисплей магистр. ФК-440 2. Убедитесь в наличии связи между ЭВМ и крейтом КАМАК с помощью программы проверки связи. В том случае, если связь межу компьютеГенератор синус. ром и контроллером функционирует нормально, после программы Модуль АЦПзапуска 4224 сигнала prov_sv.exe на магистрали КАМАК появляются сменяющие друг друга битовые комбинации 10101..1 и 01010...0, что выглядит как мигание светодиодов наОсциллограф индикаторе магистрали ФК-440. ... 3. Определите время преобразования для АЦП. Для этого задайте следующие параметры для работы: диапазон — 0..–1.016 В, смещение — 4/8 диапазона, выборка — 1000 точек. Подайте на вход АЦП сигнал с генератора частотой 100 кГц и амплитудой 0,5 В. Произведите оцифровку сигнала. После этого посчитайте количество периодов сигнала на протяжении времени работы. Рассчитайте период сигнала и суммарную длительность нескольких периодов. Разделите ее на количество точек оцифровки. Вы получите время оцифровки. Зарисуйте в тетради вид полученного графика сигнала. 4. Повторите пункт 3 для объема выборки 500 и 2000 точек. Сравните полученные результаты. 5. Определите динамический диапазон сигнала. Для этого, увеличивая понемногу амплитуду сигнала, добейтесь появления отсечки сигнала при оцифровке. Установите максимальную амплитуду сигнала, который оцифровывается без отсечки. По экрану осциллографа определите динамический диапазон оцифровки и сравните его с тем, который вы задали. 6. Повторите пункт 3 для диапазона 0.. -2.032 В. 47
7. Установите смещение 0, диапазон преобразования 0..–2.032 В, амплитуду входного сигнала 0.5 В. Наблюдайте явление отсечки полупериодов сигнала. Зарисуйте оцифрованный сигнал в тетради. Зарисуйте графики сигналов для других значений смещения. 8. Все полученные результаты представьте преподавателю и сравните с техническими характеристиками АПЦ. КОНТРОЛЬНЫЕ ВОПРОСЫ 1. Что такое АЦП, для чего он предназначен? 2. Как определить цену младшего разряда АЦП, зная число разрядов и динамический диапазон входного сигнала? Проиллюстрировать на примере. 3. Чем определяется точность, разрешающая способность и быстродействие АЦП? 4. Какие вы знаете схемы построения АЦП? Каковы их достоинства и недостатки? 5. С какой максимальной и минимальной частотами может производить оцифровку аналогового сигнала данный АЦП? 6. С какой верхней частотой аналогового сигнала может оцифровывать сигнал данный АЦП в случае максимального быстродействия? 7. Как определяется шаг дискретизации аналогового сигнала в данной лабораторной работе? 8. Как изменить режим работы АЦП (слово состояния) с помощью программы, используемой в данной лабораторной работе? 9. Будет ли наблюдаться явление отсечки при подаче на вход АЦП синусоидального сигнала с амплитудой 1/4 динамического диапазона и задании 0 смещения, 4/8 диапазона, 7/8 диапазона? Какая часть сигнала будет отсекаться в том или ином случае?
48
ЛАБОРАТОРНАЯ РАБОТА № 6
ПРОГРАММИРОВАНИЕ АЦП В СТАНДАРТЕ КАМАК С ИСПОЛЬЗОВАНИЕМ ЯЗЫКА ПАСКАЛЬ Целью данной лабораторной работы является обучение основным принципам составления программ, предназначенных для вывода информации при помощи ЦАП. В руководстве к этой работе будет изложен пример составления такой программы. Описание модуля АЦП 4224 Смотрите соответствующий раздел в лабораторной работе № 5. Структура программы Поставим перед собой задачу: ввести с помощью АЦП в память ЭВМ заданное количество отсчетов сигнала и вывести их на дисплей в виде графика. Рассмотрим основные действия, необходимые для достижения заданной цели. Очевидно, что программа будет состоять из трех функциональных блоков, которые производят следующие действия: 1. Инициализиация системы. 2. Оцифровка входного сигнала и запись данных в ОЗУ АЦП. 3. Перенос данных из ОЗУ АЦП в ОЗУ ЭВМ. 4. Вывод на экран графика сигнала. В соответствии с вышесказанным, на языке Паскаль тело программы будет выглядеть следующим образом: BEGIN init; adc; getdata; draw_gr; END. где процедуры init, adc, getdata, draw_gr выполняют функции 1—4 соответственно. В заголовке программы требуется описать номер станции АЦП и количество оцифровываемых точек (в нашем случае — 500). Эти величины не меняются по ходу программы, поэтому они описываются константами. 49
const n=500; adcaddr=10; Необходимо выделить память под массив данных и счетчик цикла var d:array[1..n] of word; i:word; а также описать, что в программе будут использоваться модули dos для обращения к портам, graph для работы с графикой, и crt для обработки нажатия клавиши. uses dos,crt,graph; Инициализация системы Инициализация системы выполняется путем выдачи на магистраль КАМАК сигнала Z. Согласно таблице портов контроллера СС-08, это происходит при выдаче в порт 103Н числа 1. Поэтому описание процедуры init будет таким: procedure init; begin port[$103]:=1; end; Оцифровка сигнала Для того чтобы АЦП мог оцифровать сигнал, необходимо: а) выдать на магистраль слово состояния, содержащее необходимые данные для регистра АЦП; б) считать его в регистр с магистрали; в) дать АЦП команду на оцифровку. Составим для каждой из этих операций процедуру, и тогда процедура оцифровки сигнала будет выглядеть так: procedure adc; begin delay(1); cc2mag(128); {cлово сост. — > магистраль} delay(10); writeRC; {магистраль — > регистр} delay(10); Fzapusk; {Запуск АЦП} delay(10); init; {Повторная инициализация для устойчивой работы системы} end; 50
Оператор delay(X) приостанавливает выполнение программы на Х микросекунд. Задержка требуется для того, чтобы система КАМАК успевала обрабатывать команду. Если попытаться работать без задержки, система будет срабатывать не при каждом запуске программы и будет работать неустойчиво. Выбираем слово состояния (12810=00000000100000002), исходя из следующего: Режим : чтение; Смещение : нет; Диапазон : 0 ÷ –1.016В; Тактирование: 25 нс. Процедура cc2mag() должна выдавать слово состояния на магистраль. Выдача данных на магистраль КАМАК происходит при запуске СС-08 на выполнение функции с номером F(16) — F(23). Выбираем F(16). Можно выбрать также F(17) как функцию чтения РС с магистрали. В этом случае имеем дублирование чтения, что при нестабильной работе системы повышает надежность работы программы. procedure cc2mag(a:word); begin port[$104]:=lo(a); port[$105]:=hi(a); port[$108]:=adcaddr; port[$102]:=16 end; Процедура вывода данных на магистраль описана также в руководстве к работе «Программирование ЦАП в стандарте КАМАК». Чтение данных с магистрали в регистр состояния АЦП происходит при выполнении функции NA(0)F(17). Запрограммировать этот процесс несложно. Заносим в регистр контроллера N (порт 108Н) номер станции АЦП, в регистр А (порт 101Н) — 0, в регистр F (порт 102Н) — 17: procedure writeRC; begin port[$108]:=adcaddr; port[$101]:=$0; port[$102]:=17; end; Запуск АЦП на оцифровку производится аналогично, но с использованием функции NA(0)F(25):
51
procedure Fzapusk; begin port[$108]:=adcaddr; port[$101]:=0; port[$102]:=25; end; Чтение данных из ОЗУ АЦП После выполнения команды «Запуск» АЦП производит оцифровку 2048 точек сигнала и записывает оцифрованные значения в ОЗУ, состоящее из 4096 7-битных ячеек. Чтение данных из ОЗУ АЦП производится многократной подачей F(0). Одно выполнение F(0) осуществляет чтение двух ячеек ОЗУ на магистраль КАМАК (и, соответственно, в регистр R контроллера CC-08). Чтение данных из контроллера в ОЗУ ЭВМ производится чтением из портов 104Н и 105Н. Итак, заполнение массива данных в ОЗУ компьютера происходит так: procedure getdata; begin for i:=1 to n do d[i]:=readOZU; end; где функция readOZU при ее вызове читает из ОЗУ АЦП одно значение оцифрованного сигнала: function readOZU:word; var a,b:byte; begin port[$108]:=adcaddr; {Номер станции АЦП} port[$101]:=0; {A(0)} port[$102]:=0; {F(0)} a:=port[$104] and 127; {младшие 7 бит} b:=port[$105] and 127; {старшие 7 бит} readOZU:=b shl 7 + a; {Рассчитываем оцифр. значение} end; Здесь после чтения из порта 104Н или 105Н мы сбрасываем старший бит путем применения операции «логическое И» с аргументом 011111112 (12710). Таким образом, путь прохождения данных можно представить схемой (рис. 11).
52
Вход АЦП оцифровка
F(25)
ОЗУ АЦП Магистраль КАМАК
F(0)
Регистры контроллера СС-08 Рис. 11
a:=port[$104] Вывод результатов работы программы ОЗУ ЭВМ b:=port[$105] Вывод на дисплей ЭВМ графика введенного сигнала (т. е. содержимого массива d[i]) является тривиальной задачей. Главная особенность этой процедуры будет состоять в том, чтобы предотвратить «вылезание» графика за пределы экрана. О том, как это сделать, рассказывалось в руководстве к работе «Программирование ЦАП». Упрощенный текст этой процедуры представлен ниже: procedure draw_gr; var j:integer; begin j:=detect; initgraph(j,j,''); for i:=1 to n do putpixel(i,round(400.0-d[i] shr 6),white); readkey; end; При n=500 график не выходит за горизонтальные пределы экрана при масштабе по оси Х 1:1, поэтому в качестве координаты Х можно использовать номер элемента в массиве (он обозначен i). По оси Y график путем выполнения операции d[i] shr 6 (сдвиг вправо на 6 бит) сжимается в 26=64 раза. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ ПРЕДВАРИТЕЛЬНАЯ ПОДГОТОВКА 1. Изучите основные операторы и принципы составления программ на языке Паскаль, пользуясь соответствующей литературой. 53
2. Получите у преподавателя количество оцифровываемых точек для сигнала, который необходимо ввести через АЦП. 3. Используя методическое руководство к данной работе как пример, составьте программу на языке Паскаль для ввода сигнала через АЦП. Настройки АЦП для оцифровки (смещение, диапазон преобразования, тактирование) выберите, посоветовавшись с преподавателем. 4. Наберите текст программы. Соберите установку для выполнения лабораторной работы, в соответствии со схемой:
Крейт КАМАК
IBM PC Плата сопряжения
Соединительный кабель
Рис. 12
Контроллер СС-08 Дисплей магистр. ФК-440
Генератор синус. ВЫПОЛНЕНИЕ РАБОТЫМодуль АЦП 4224 сигнала
1. Проверьте правильность сборки установки. 2. Убедитесь в наличии связи между ЭВМ и крейтом КАМАК с помоОсциллограф ... щью программы проверки связи. В том случае, если связь межу компьютером и контроллером функционирует нормально, после запуска программы prov_sv.exe на магистрали КАМАК появляются сменяющие друг друга битовые комбинации 10101..1 и 01010...0, что выглядит как мигание светодиодов на индикаторе магистрали ФК-440. 3. Произведите компиляцию написанной вами программы. Используйте компилятор Turbo Pascal 7.0. Исправьте возможные ошибки в программе. 4. Включите генератор синусоидального сигнала. Амплитуду сигнала установите исходя из выбранного диапазона преобразования. Частоту выберите исходя из периода тактирования и количества оцифровываемых точек так, чтобы в массиве оцифрованных данных укладывался ровно один период синусоиды. 5. Запустите программу. 6. Убедитесь в наличии сигнала на экране осциллографа. Сравните этот сигнал с графиком функции на дисплее ЭВМ. 54
7. В случае отсутствия сигнала на дисплее ЭВМ устраните возможные неполадки: а) Проверьте еще раз наличие связи и правильность подключения кабелей. б) Если на индикаторе ФК-440 не фиксируется наличие данных на магистрали КАМАК (светодиоды не вспыхивают на мгновение при запуске программы), проверьте: - правильность задания адресов портов при вызове F(25), F(17) и F(0); - правильность ввода массива данных. в) Если во время работы программы на индикаторе ФК-440 прослеживается наличие данных на магистрали КАМАК (светодиоды вспыхивают на мгновение при запуске программы), но на дисплее ЭВМ сигнал не похож на тот, который вы ожидаете увидеть, проверьте: - правильность задания слова состояния регистра АЦП; - правильность задания номера станции АЦП в крейте; - правильность задания адресов портов при выдаче на контроллер задания номера станции АЦП; - правильность вывода на дисплей графика оцифрованного сигнала. 8. Увеличивая понемногу амплитуду сигнала, добейтесь появления отсечки сигнала при оцифровке. Определите динамический диапазон оцифровки и сравните его с тем, который вы задали в слове состояния. 9. Увеличьте частоту сигнала до такого значения, чтобы в массиве оцифрованных данных укладывалось 10—20 периодов сигнала (но обязательно целое число). Определите период тактирования АЦП, разделив суммарное время оцифровки (посчитанное через частоту сигнала и количество периодов) на количество оцифровываемых точек. Сравните его с тем, которое вы задали в слове состояния. 10. Продемонстрируйте работу программы преподавателю. Зафиксируйте общий вид сигнала и результаты выполнения двух предыдущих пунктов в рабочей тетради.
КОНТРОЛЬНЫЕ ВОПРОСЫ 1. Как определить цену младшего разряда АЦП, зная число разрядов и динамический диапазон входного сигнала? Проиллюстрировать на примере. 2. С какой верхней частотой в спектре аналогового сигнала может оцифровывать сигнал данный АЦП в случае максимального быстродействия? 3. Как изменить режим работы АЦП (диапазон преобразования, период тактирования, смещение)? 4. Какие команды NAF для работы с АЦП используются в данной лабораторной работе? 55
5. Как вывести число в порт на языке Паскаль? 6. Как выполнить команду NAF с помощью программирования крейтконтроллера СС-08?
56
СПИСОК ЛИТЕРАТУРЫ По функционированию системы КАМАК 1. Задков В.Н., Пономарев Ю.В. Компьютер в эксперименте. Архитектура и программные средства систем автоматизации. М.: Наука, 1988. 2. Певчев Ю.Ф., Финогенов К.Г. Автоматизация физического эксперимента. М.: Энергоатомиздат, 1986. 3. Кузьмичев Д.А., Радкевич И.А., Смирнов А.Д. Автоматизация экспериментальных исследований. М.: Наука, 1983. 4. Курочкин С.С. Системы КАМАК-ВЕКТОР. М.: Энергоиздат, 1981. По программированию на языке Паскаль 1. Джонс Ж., Хароу К. Решение задач в системе Турбо Паскаль. М.: Финансы и статистика, 1991. 2. Хершель Р. TURBO PASCAL 4.0/5.0. М., 1991. 3. Зуев Е.А. Программирование на языке TURBO PASCAL 6.0, 7.0 М.: Веста, Радио и связь, 1993.
57
СОДЕРЖАНИЕ ВВЕДЕНИЕ .............................................................................................................. 3 Лабораторная работа № 1 ПРОГРАММИРОВАНИЕ ФУНКЦИОНАЛЬНЫХ БЛОКОВ В СТАНДАРТЕ КАМАК С ИПОЛЬЗОВАНИЕМ РУЧНОГО КРЕЙТ-КОНТРОЛЛЕРА ............................................................................. 7
Лабораторная работа № 2 ПРОГРАММИРОВАНИЕ КРЕЙТ-КОНТРОЛЛЕРА КАМАК ДЛЯ СВЯЗИ С IBM-КОМПЬЮТЕРОМ ...................................................................... 16 Лабораторная работа № 3 ОПРЕДЕЛЕНИЕ ПАРАМЕТРОВ И ПРОГРАММИРОВАНИЕ ЦИФРОАНАЛОГОВОГО ПРЕОБРАЗОВАТЕЛЯ ФК-70 В СТАНДАРТЕ КАМАК ........................................................................................ 24 Лабораторная работа № 4 ПРОГРАММИРОВАНИЕ ЦАП В СТАНДАРТЕ КАМАК С ИСПОЛЬЗОВАНИЕМ ЯЗЫКА ПАСКАЛЬ ................................................................ 34 Лабораторная работа № 5 ПРОГРАММИРОВАНИЕ АЦП В СТАНДАРТЕ КАМАК .......................................... 42 Лабораторная работа № 6 ПРОГРАММИРОВАНИЕ АЦП В СТАНДАРТЕ КАМАК С ИСПОЛЬЗОВАНИЕМ ЯЗЫКА ПАСКАЛЬ ................................................................ 49 СПИСОК ЛИТЕРАТУРЫ .......................................................................................... 57
58
Учебное издание
Заярный Вячеслав Петрович, Евстратов Игорь Владимирович, Сарана Дмитрий Владимирович, Романов Роман Николаевич СОПРЯЖЕНИЕ КОМПЬЮТЕРОВ С ВНЕШНИМИ УСТРОЙСТВАМИ В СТАНДАРТЕ КАМАК
Учебно-методическое пособие по системному программированию функциональных модулей в стандарте КАМАК Главный редактор А.В. Шестакова Редактор Н.Н. Забазнова Технический редактор Е.А. Мальченко Художник Н.Н. Захарова Подписано в печать 23.12 2002 г. Формат 60×84/16. Бумага офсетная. Гарнитура Таймс. Усл. печ. л. 3,49. Уч.-изд. л. 3,75. Тираж 50 экз. Заказ . Издательство Волгоградского государственного университета. 400062, Волгоград, ул. 2-я Продольная, 30.
59