Генератор импульсов на базе Arduino, управляемый из Labview

Рейтинг:  5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

С. Смирнов, В. Мошкин, г. Москва
Предлагаемый комплекс программного виртуального прибора, взаимодействующего с микроконтроллерным устройством, разработан как студенческий курсовой проект. Он демонстрирует возможности реализации гибкого управления программным генератором импульсов с помощью виртуального прибора, реализованного в среде графического программирования Labview.

В радиоэлектронике распространена задача формирования импульсов определённой длительности с заданной задержкой относительно перепадов синхросигнала. Генерацию импульсов или последовательностей импульсов с запрограммированными параметрами широко используют и в экспериментальной науке.
В классической реализации цифровые импульсы задерживают с помощью микросхем стандартной логики, используя RC-цепи для получения равномерно нарастающего или спадающего напряжения. Это напряжение, достигнув определённого уровня, вызывает изменение состояния логического элемента, сопровождающееся резким перепадом напряжения на его выходе. Регулировка длительности выходного импульса также может быть осуществлена с помощью логических элементов и RC-цепей.
Недостаток подобных устройств — зависимость параметров формируемых импульсов от подверженных разбросу при изготовлении и изменяющихся в процессе эксплуатации характеристик как активных логических, так и пассивных элементов (конденсаторов, резисторов).
Современные устройства формирования импульсов с заданными параметрами нередко разрабатывают на основе тактированных высокоточным кварцевым генератором логических узлов и микроконтроллеров. В отличие от описанных выше практически аналоговых формирователей, они позволяют цифровыми и программными методами задавать и регулировать параметры импульсов, а также наращивать число выходных импульсных последовательностей, каждая из которых может иметь собственные параметры. Для удобства пользования таким генератором возникает необходимость создания человеко-машинного интерфейса.
Далее описан разработанный комплекс.
Основные технические характеристики
Уровни входных и выходных сигналов ....................ТТЛ
Генерируемые сигналы:
— одиночные импульсы;
— пачки импульсов;
— непрерывные последовательности импульсов;
— импульсы с внешней синхронизацией
Максимальный период следования синхроимпульсов, мс.....................4000
Задержка генерируемого импульса относительно синхроимпульса, мс.......0...3200
Длительность генерируемого импульса, мс.........0,1...3200
Синхронизация — по нарастающему или спадающему перепаду синхроимпульса.
Связь с компьютером реализована на базе последовательного интерфейса платы Arduino, настроенного на работу со скоростью 9600 Бод, восемью информационными и одним стоповым разрядами без контроля чётности. Для передачи символов использована кодовая таблица ASCII, командную строку завершает символ "возврат каретки".
Согласно рекомендациям [1], для аппаратной части генератора выбрана микроконтроллерная плата Arduino Uno, работающая с тактовой частотой 16 МГц и предоставляющая пользователю 14 цифровых линий ввода-вывода, 32 Кбайт памяти программ, 2 Кбайт оперативной памяти. Плата имеет встроенный интерфейс USB. Операционная система компьютера создаёт при подключении к нему этой платы виртуальный СОМ-порт, используемый как для программирования имеющегося на плате микроконтроллера, так и для обмена информацией между компьютером и платой во время работы загруженной в микроконтроллер программы.
Для управления генератором использована среда графического программирования Labview — один из широко распространённых инструментов для моделирования устройств и приборов.
Генератор синхросигналов подключают к линии D2 Arduino Uno, что соответствует линии PD2 её микроконтроллера. Выходные импульсы Arduino Uno формирует на линии D12 (РВ4). Сюда подключают потребитель этих импульсов, а также (для контроля) осциллограф и мультиметр в режиме вольтметра. Выводы общего провода всех приборов и потребителя соединены с выводом GND платы Arduino Uno.
Розетку USB-A компьютера, на котором установлены программы AVR Studio 4, XLoader и Labview 2016, соединяют с розеткой USB-B платы Arduino Uno стандартным кабелем. Индикатором режима работы прибора служит имеющийся на плате Arduino Uno свето-диод, соединённый с её линией D13.
В процессе разработки программы была выявлена следующая особенность применённой платы Arduino Uno китайского производства. В отличие от оригинальной итальянской платы Arduino Uno, цепь DTR-RESET, идущая от микросхемы интерфейса USB/COM к микроконтроллеру, на применённой плате не имеет джампера, позволяющего при необходимости разорвать её. При любом нормальном открытии виртуального СОМ-порта компьютер изменяет уровень сигнала DTR. Этим микроконтроллер платы автоматически устанавливается в исходное состояние, и работа загруженной в него и ранее запущенной программы начинается заново. Эта особенность учтена при разработке программы виртуального прибора Labview, описанного далее.
Для управления прибором реализованы приём и исполнение им команд компьютера, синтаксически совместимых со стандартными командами управления согласно IEEE 488.2 [2]. Эти команды перечислены ниже, а приводимые скриншоты показывают вид окна виртуального прибора после их приёма и исполнения.
*IDN? — запрос идентификатора устройства (рис. 1).

При правильно подключённом и функционирующем приборе ответ на неё — ARDUINO 328P BASED GENERATOR.
*RESET — установка прибора в исходное состояние (рис. 2).
Команда обрабатывается при любом статусе прибора. Генерация импульсов, если она была включена, прекращается. Ответ прибора — RESET OK.
*STATUS? — запрос состояния прибора (рис. 3).
Команда обрабатывается в любом состоянии прибора. Возможные ответы:
IDLE — исходное состояние;
RUN SYNC — генерация импульсов по синхросигналу;
RUN ONCE — генерация одиночного импульса;
RUN CYCLE — генерация пачки импульсов;
ERROR — глобальная ошибка (зарезервировано).
*RUN:ONCE WIDTH=X — генерация одиночного импульса длительностью X миллисекунд (рис. 4).
Максимальная длительность импульса — 30 с. Ответ ОК означает, что команда успешно распознана и прибор приступает к генерации. Иначе возвращается осмысленное сообщение об ошибке.
*RUN:CYCLE WIDTH=X
PERIOD=Y COUNT=Z — генерация пачки из Z одинаковых импульсов длительностью X миллисекунд, следующих с периодом Y миллисекунд (рис. 5).
Максимальная длительность импульса — 30 с. Максимальный период их следования — 32 с. Максимальное число импульсов — 30000. Если Z = О, прибор переходит в режим непрерывной генерации импульсов длительностью X с периодом следования Y Ответ ОК означает, что команда успешно распознана и прибор приступа- ет к генерации. Иначе возвращается осмысленное сообщение об ошибке.
*RUN:SYNC WIDTH=X DELAY=Y RAISE=A MIN=B MAX=C — генерация импульсов длительностью X сотен микросекунд с задержкой Y сотен микросекунд. А = 0 — синхронизация по нарастающим перепадам синхроимпульсов, А = 1 — синхронизация по спадающим перепадам синхроимпульсов, В — минимальный период следования синхроимпульсов в миллисекундах, С — максимальный период следования синхроимпульсов в миллисекундах (рис. 6).
Длительность импульса — 0,1 мс...3,2 с. Задержка — 0...3.2 с. Допустимый период следования синхроимпульсов — от В до С, лежащих в интервале 1 МС...32 с. Ответ ОК означает, что команда успешно распознана и прибор приступает к генерации. Иначе возвращается осмысленное сообщение об ошибке.
Синтаксис команд и подача их заглавными буквами принципиальны. Например, команды 'Status? или *RUN:CYCLE PERIOD=Y WIDTH=X COUNT=Z распознаны не будут.
Виртуальный прибор Labview разработан для подачи команд управления генератором и отображения его статуса в текстовом виде. Графическая программа прибора приведена на рис. 7.

В файле ArduinoGenerator.vi находится её исходный текст.
Функционирует прибор следующим образом:
— открывает порт, указанный в поле VISA resource name;
— ожидает 2,5 с успешной перезагрузки Arduino Uno;
— подаёт команду *IDN? для идентификации подключённого устройства и перед чтением ответа ожидает 250 мс;
— подаёт команды, набираемые вручную в поле command, перед чтением ответа на каждую команду ожидает 250 мс.
В полях IDN WRITE или CMD WRITE программа показывает число байтов переданной команды. В полях IDN READ или CMD READ — число байтов ответа
на неё. Поля IDN RESPONSE и CMD RESPONSE отображают тексты ответов генератора на команды Labview.
Поле command предназначено для ввода команд. Все они должны начинаться символом "звёздочка". В поле error выводится сообщение об ошибке, если она зафиксирована (рис. 8).

В файле ArduinoGenerator.c находится исходный текст программы микроконтроллера платы Arduino Uno. В ней использованы приёмы работы с портами ввода-вывода, описанные в [3], с таймерами, описанные в [4], с прерываниями, описанные в [5], и с UART, описанные в [6].
TIMERO микроконтроллера использован для отсчёта задержки генерируемых импульсов. TIMER1 управляет миганием светодиода индикации режима работы. Частота миганий — переменная:
0,5 Гц— режим простоя;
1 Гц — генерация одиночного импульса или их пачки:
2 Гц — генерация с внешней синхронизацией;
4 Гц — неверная команда.
Для синхронизации использованы запросы прерываний, поступающие по линии PD2 (INTO). Процедура InitlntO (табл. 1), в зависимости от значения параметра RAISE команды *RUN:SYNC, устанавливает направление перепада синхросигнала, по которому формируется запрос прерывания.

При инициализации UART необходимо обратить внимание на то, что, если при чтении регистра UCSROA обнаружена единица в разряде U2XO, в асинхронном режиме обмен информацией происходит с удвоенной скоростью. Поэтому инициализация должна проводиться на скорость 4800, а не на 9600 Бод. Эта особенность характерна лишь для Arduino Uno китайского производства.
Подпрограмма настройки USART приведена в табл. 2.
Симуляция работы программы в среде AVR Studio не производилась. Она доведена до состояния трансляции без ошибок и предупреждений, после чего проверена её работа в микроконтроллере.
При старте системы контрольный светодиод на плате некоторое время мигает с частотой 0,5 Гц. Затем виртуальный прибор последовательно формирует команды *IDN и *RESET и получает ответы от платы Arduino Uno, отображая их на экране компьютера. Далее система ожидает ввода в соответствующее поле команд пользователя и исполняет их, генерируя на выходе D12 Arduino Uno заданные импульсы и их последовательности. Во время исполнения команд светодиод на плате мигает с увеличенной частотой. По его завершении мигание продолжается с частотой 0,5 Гц.
Импульсы на выходе D12 можно наблюдать на экране подключённого к нему осциллографа, а при их сравнительно большой длительности и низкой частоте следования — с помощью вольтметра (мультиметра в режиме измерения напряжения). Амплитуда импульсов — около 5 В. В паузах между ними напряжение на выходе D12 близко к нулю.
Программы для генератора импульсов
ЛИТЕРАТУРА
1. Сравнение характеристик различных платформ Arduino. — URL: http://www. my-arduino.ru/sravnenie-xarakteristik-razlichnyx-platform-arduino/(30.06.2018).
2. Стандартные команды стандарта IEEE 488.2. — URL: http://rfmw.em.keysight. com/spdhelpfiles/truevolt/webhelp/RU/Content/__l_SCPI/IEEE-488_Common Commands.htm (30.06.2018).
3. Занятие № 3. Мигание светодиодом. — URL: http://radioparty.ru/prog-avr/program-c/229-lesson3(30.06.2018).
4. AVR. Учебный курс. Таймеры. — URL: http://easyelectronics.ru/avr-uchebnyj-kurs-tajmery.html (30.06.2018).
5. AVR. Урок 42. Внешние прерывания. — URL: http://narodstream.ru/avr-urok-42-exint-ili-vneshnie-preryvaniya/ (30.06.2018).
6. Последовательный интерфейс USARTO. — URL: http://avrprog.blogspot.ru/2013/03/usart0.html (30.06.2018).
Программы прибора находятся по адресу http://ftp.radio.ru/pub/2018/10/vgen.zip на РТР-сервере.
Радио №10 2018
Еще схемы на Arduino
Ёлочная мигалка на ARDUINO как средство от боязни микроконтроллеров
Частотомер на ARDUINO
Двойной термометр на ARDUINO UNO
Спидометр и тахометр на ARDUINO для автомобиля с сигнализатором превышения скорости
Измеритель толщины лакокрасочного покрытия на Arduino

Оставлять комментарии могут только зарегистрированные пользователи