USB-контроллер крейта КАМАК для отладочного стенда на основе Arduino Mega 2560
- Autores: Сидоркин В.В.1
-
Afiliações:
- Объединенный институт ядерных исследований
- Edição: Nº 4 (2024)
- Páginas: 217-219
- Seção: ПРИБОРЫ, ИЗГОТОВЛЕННЫЕ В ЛАБОРАТОРИЯХ
- URL: https://ogarev-online.ru/0032-8162/article/view/280176
- DOI: https://doi.org/10.31857/S0032816224040277
- EDN: https://elibrary.ru/NWXVMY
- ID: 280176
Citar
Texto integral
Texto integral
В настоящее время интерфейс USB широко используется в различных системах управления, в том числе и в физических установках. В частности, на его основе был создан ряд контроллеров крейтов КАМАК (КК) [1, 2]
Для реализации данного КК была выбрана плата Arduino Mega 2560 (Arduino), характеризующаяся наличием большого числа программируемых цифровых входов-выходов (54 шт.), которые можно использовать непосредственно для генерации и приема как сигналов управления, так и сигналов данных. Функциональная схема КК представлена на рис. 1.
Рис. 1. Функциональная схема КК.
КК взаимодействует с ЭВМ путем обмена сообщениями через USB-интерфейс, используя для этого два независимых буфера в памяти контроллера – один из них предназначен для приема данных от ЭВМ, другой – для отправки данных в ЭВМ. Сообщения представлены в виде последовательности байтов. Программа на стороне микроконтроллера отслеживает состояние буфера, предназначенного для приема данных от ЭВМ. Формат передаваемых сообщений выбран так, что первым передается байт, содержащий код N, и он же первым анализируется при считывании его из буфера. Анализ кода N позволяет определить тип команды. Если N=30, то это соответствует внутренним командам КК – в этом случае на контакте 3 генерируется сигнал En(N), блокирующий дешифратор кода номера станции. Для внутренних команд дешифрация производится программным способом, по ее результатам происходит обращение к определенным контактам платы Arduino, выбранным для выполнения той или иной операции, например, генерации сигнала Z (контакт 5) или запуска цикла КАМАК сигналом Start (контакт 38).
Если 0 ≤ N ≤ 23, то это указывает на адресное взаимодействие КК с модулями крейта. Сигнал En(N) не вырабатывается. На контакты 22– 26 платы Arduino выводится код номера станции CN1-CN5, с этих контактов код поступает на 24-разрядный дешифратор (D3), после чего сформированный дешифратором сигнал выбора модуля N через буферную схему подается на соответствующую линию магистрали крейта.
Коды субадреса СA1-CA4 и функции CF1-CF5 выводятся, соответственно, на контакты 49– 46 и 33– 37 и далее через буферные схемы подаются на магистраль КАМАК. Аналогично коду N анализируется и код функции F.
Если код функции соответствует команде вывода данных на магистраль, то из буфера дополнительно считываются три байта данных – W(1– 8), W(9– 16) и W(17– 24), которые затем загружаются в регистр D6, организованный по схеме “последовательный вход– параллельный выход”. После загрузки регистра D6 высоким уровнем сигнала Start (при инициализации КК данный вывод устанавливается в нулевое состояние) запускается цикл КАМАК (генерируются сигналы B, S1 и S2). Функциональная схема генератора цикла КАМАК (CAMAC Cycle Generator) выделена на рис. 1 штриховой линией. Для формирования временных меток с шагом 100 нс используется сдвиговый регистр (D10), по разрядам которого под действием тактовых импульсов 10 МГц перемещается единичное состояние, начало и конец которого на соответствующих выводах задают временное положение сигналов B, S1 и S2. Появление единичного состояния на выводе 11 (D10) приводит к окончанию генерации цикла. Низким уровнем сигнала Start схема генерации цикла возвращается в исходное состоянии, после чего она готова к следующему запуску. Далее осуществляется проверка состояний линий CX (D1) и CQ (D2) магистрали КАМАК на предмет успешности прохождения команды и выполнения условий ее реализации адресуемым модулем.
Если код функции соответствует команде чтения данных с линий R1–R24, то, после того как сформируется соответствующая команда NAF, сигналом Start запускается цикл КАМАК. Затем проверяются состояния линий X и Q. Если команда прошла успешно, то полученные данные, которые к этому времени уже должны быть зафиксированы в 24-разрядном регистре D5 (“параллельный вход– последовательный выход”), поразрядно-последовательно байтами считываются в микроконтроллер, после чего эти данные через буфер обмена пересылаются в ЭВМ.
Сигналы с линий L1–L24 объединяются 24-разрядной схемой “ИЛИ”, выход которой подается одновременно на контакты 2 (LAM_Intr) и 9 (LAM). Контакт 2 при инициализации платы сконфигурирован как вход для сигнала прерывания. При появлении сигнала запроса на нем (LAM_Intr) будет вызваться подпрограмма обработки прерывания. Сигналы L1–L24 могут маскироваться содержимым 24-разрядного регистра D4, организованного по схеме “последовательный вход–параллельный выход”. Команда записи данных в этот регистр относится ко внутренним командам КК.
Загрузка регистров D6 (W1–W24), D4 (L1–L24) и, соответственно, чтение регистра D5 (R1–R24) производятся по SPI-протоколу (Serial Peripheral Interface) с частотой, кратной частоте работы микроконтроллера, которая равна 16 МГц. Коэффициент деления задается программным образом и выбирается из ряда 2, 4, 8, 16, 32, 64, 128. По умолчанию коэффициент деления равен 4.
Текущее состояние КК представлено значениями логических уровней на линиях X, Q, I*, LAM. Сигналы с указанных линий поступают, соответственно, на контакты 6, 7, 9 и 8. Их логические состояния считываются по отдельности, после чего из них формируется байт, представляющий слово-состояние КК, который затем передается в ЭВМ.
На лицевой панели расположен двухпозиционный переключатель SA1. Он предназначен для ручного безаварийного прерывания выполняемой КК программы. Если состояние входа EnP соответствует нулевому уровню, то программа на стороне КК переходит в режим ожидания.
К преимуществам данного КК прежде всего можно отнести простоту программирования при использовании встроенных команд ИСР. К недостаткам – относительно невысокое быстродействие при некоторых операциях КК из-за отсутствия в составе ИСР команд побайтного ввода/вывода данных. Например, вывод на магистраль КАМАК 24-разрядного слова занимает примерно 66 мкс. В составе команд самого микроконтроллера ATmega2560 такие операции есть, но их использование приводит к усложнению кода (при этом нередко требуется использование сторонних ИСР) и, как следствие, к росту вероятности появления трудно устранимых ошибок. Для задач, решаемых на отладочном стенде, приоритетом является достоверность измерений за счет минимизации источников ошибок, а не быстродействие. Данный КК был разработан для замены другого контроллера, использовавшегося для связи с компьютером шину ISA.
Внутренние команды, используемые в данном КК:
N(30)A(0)F(0) – чтение слова-состояния КК;
N(30)A(0)F(25) – генерация сигнала Z;
N(30)A(1)F(25) – генерация сигнала C;
N(30)A(2)F(25) – установка Inhibit;
N(30)A(3)F(25) – сброс Inhibit;
N(30)A(4)F(25) – генерация сигнала Start (эта команда введена специально на случай многократного перезапуска какой-либо команды, загруженной в предыдущем цикле);
N(30)A(5)F(25) – запрет прерывания;
N(30)A(6)F(25) – снятие запрета прерывания;
N(30)A(0)F(16) – запись кода маски для сигналов LAM (W1-W24);
N(30)A(7)F(25) – генерация сигнала CReset;
N(30)A(8)F(25) – генерация сигнала ClrW;
N(30)A(9)F(25) – генерация сигнала Clr-Msk-L.
Sobre autores
В. Сидоркин
Объединенный институт ядерных исследований
Autor responsável pela correspondência
Email: sidorkin@jinr.ru
Лаборатория ядерных проблем, Сектор № 1 научно-экспериментального отдела физики элементарных частиц
Rússia, Дубна, Московская обл.Bibliografia
- Темников А.Н. // ПТЭ. 2010. №1. С.81-86.
- Тубольцев Ю.В., Чичагов Ю.В., Хилькевич Е.М., Симуткин В.Д. // ПТЭ. 2010. №1. С.87.
Arquivos suplementares
