Регистратор собран в корпусе Gainta G715, его внешний вид показан на рис. 6. На передней панели закреплены светодиоды и сделаны отверстия для разъёмов XP1, XP2, XP4, XP7. Со стороны задней панели имеется доступ к блоку выключателей SA1, разъёмам XS1, XP5, XP6.
Рис. 6. Внешний вид регистратора
Структура устройства, реализованного в ПлИс, описана на языке VDHL. Трансляция и отладка производились в среде разработки Quartus 11 Version 10.1.
Входные сигналы:
clk - синхросигнал;
P - массив сигналов, поступающих от микроконтроллера;
ADC_data - массив сигналов, поступающих от АЦП;
rx - сигнал, поступающий от FT2232H. Выходные сигналы:
P1 - сигнал, предназначенный для микроконтроллера;
tx - сигнал, предназначенный для FT2232H;
PHL - сигнал, управляющий светодиодом HL8;
PPD - сигнал выключения питания АЦП;
POE - сигнал включения выходов АЦП;
POUT - сигнал, выдаваемый на разъём XP7.
Переменные:
count - счётчик числа переданных байтов;
start_bit - признак начала передачи байта;
stop_bit - признак завершения передачи данных;
ADC_data_buf - буфер хранения информации от АЦП;
rx_bit - признак начала приёма информации.
По переходу синхросигнала с низкого на высокий уровень происходит проверка приёма стартового разряда (табл. 1 ). Затем, если передача идёт, содержимое счётчика переданных байтов увеличивается на единицу (табл. 2). При достижении содержимым счётчика значения 100 происходит согласно табл. 3, его обнуление и выполняется проверка наличия команды завершения передачи (P(6)=0).
Таблица 1
Таблица 2
Таблица 3
По переходу синхросигнала с высокого на низкий уровень перед началом передачи выполняется буферизация информации от АЦП (табл. 4), чтобы не допустить её изменения во время передачи.
Таблица 4
Остальные действия состоят в проверке разрешения или запрета передачи информации от микроконтроллера. В разрешённом состоянии включается светодиод HL8 и снимается признак завершения передачи, если был принят байт запроса (табл. 5). Передача стартового и стопового разрядов производится согласно табл. 6, а информации из буфера АЦП - табл. 7 (каждый разряд передаётся за два такта count).
Таблица 5
Таблица 6
Таблица 7
Программа для микроконтроллера написана на языке C в среде разработки ImageCraft. После включения питания устройства она инициализирует периферию микроконтроллера, затем входит в основной цикл, причём UART микроконтроллера находится в режиме ожидания приёма.
По приёму байта запускается обработчик прерывания (табл. 8). Этот байт записывается в массив rx_arr по индексу rx_count (если был принят первый байт пакета, то rx_count=0), после чего rx_count увеличивается на единицу. Далее следует перезапуск таймера 0, истечение выдержки которого служит признаком конца пакета.
Таблица 8
Если в течение заданного времени не принят очередной байт, то происходит прерывание по запросу таймера 0. В обработчике этого прерывания (табл. 9) выполняются остановка таймера и установка флага окончания приёма f_rx.
Таблица 9
Когда информационный пакет принят (f_rx= 1), в основном цикле начинаются его разбор, выполнение содержащихся в нём команд и формирование ответов. Сначала проверяются заголовок и окончание пакета, затем код команды. После успешной проверки начинается выполнение команды, содержащейся в пакете. При обнаружении ошибки формируется отрицательная квитанция.
В программе реализованы следующие команды:
- "Тест" - служит для проверки связи;
- "Установить состояния IO" - устанавливает на выводах микроконтроллера, соединённых с разъёмом XP2, заданные логические уровни. Контакт 2 разъёма (цепь IO1) соответствует младшему разряду байта данных команды, а контакт 9 (цепь IO8) - старшему;
- "Установить состояния IO, связанных с ПЛИС" - устанавливает на выходах микроконтроллера PD4-PD7, PB1, PC2, PC3, связанных с ПЛИС, заданные логические уровни. Выходы перечислены в порядке следования соответствующих им разрядов байта данных команды от первого до седьмого. Значение младшего (нулевого) разряда байта может быть произвольным, поскольку состояние вывода PD3 недоступно для изменения этой командой. Он использован для приёма запроса прерывания от ПЛИС;
- "Запустить генератор прямоугольных импульсов (с периодом, кратным 2 с)" - выполняет запуск указанного генератора прямоугольных импульсов (скважность всех формируемых регистратором импульсов равна двум). Байт данных команды должен содержать значение периода следования импульсов, которое с шагом в 2 с может находиться в интервале 2-254 с. Импульсы формируются на выводе микроконтроллера PB3 путём программного переключения его состояния в обработчике прерывания от таймера 1. Они выведены на контакт 5 разъёма XP2;
- "Запустить генератор прямоугольных импульсов (с периодом, кратным 2 с) по запуску АЦП" - отличается от предыдущей команды тем, что запускает генератор синхронно с началом передачи информации из ПЛИС в компьютер;
- "Запустить генератор прямоугольных импульсов" - запускает генератор прямоугольных импульсов частотой от 30 Гц до 8 МГц. Четыре байта данных должны содержать значение частоты в герцах. Выключают генератор, задавая нулевое значение частоты. Так как период повторения генерируемых импульсов всегда кратен длительности машинного такта микроконтроллера, фактическая частота их повторения может отличаться от заданной. Точное её значение (с дискретностью 1 Гц) содержится в ответе на команду. Импульсы выведены на контакт 5 разъёма XP2, соединённый с выходом PB3 микроконтроллера.
Для начала передачи информации из ПЛИС необходимо разрешить её, установив на входе 16 ПЛИС высокий логический уровень, а затем передать через СОМ-порт в ПЛИС один байт. Разрешение введено для удобства прекращения передачи установкой на входе 16 ПЛИС логического нуля. Так как передачу разрешает микроконтроллер, для синхронизации начала передачи из ПЛИС с началом приёма информации компьютером последний должен послать микроконтроллеру произвольный байт запроса. Микроконтроллер обменивается информацией с компьютером со скоростью 1 МБод при восьмиразрядных посылках без контроля чётности и одном стоповом разряде. Для обмена информацией по USB через микросхему FT2232H регистратора в операционной системе компьютера необходимо установить драйверы, которые можно найти на интернет-странице [1].
Загрузка программ в ПЛИС и микроконтроллер.
Программирование ПЛИС выполняется по методике, описанной в [2]. Перед его началом необходимо установить DIP-выключатели SA1 -
SA3 в положения, показанные на рис. 7,а. Микроконтроллер программировался с помощью программы AVRDude и графической оболочки SinaProg, скачанных по ссылкам на интернет-странице [3]. Для работы SinaProg требуется наличие в компьютере библиотеки времени исполнения LabView RunTime Library [4].
Рис. 7. Программирование ПЛИС
В файле avrdude.conf необходимо переназначить выводы программатора 2ftbb, дополнив текст файла разделом, показанным в табл. 10.
Таблица 10
В приложении к статье имеются программы AVRDude и SinaProg, в которых уже установлены все необходимые параметры.
Приступая к программированию микроконтроллера, следует установить выключатели SA1-SA3 регистратора в положения, показанные на рис. 7,б, после чего соединить разъём XS1 регистратора с USB-портом компьютера и запустить программу SinaProg. В поле "Programmer" её окна следует установить параметры 2ftbb, FTDI, 9600. Затем по очереди нажать на экранные кнопки "<" и "Search", после чего в окне сообщений должен появиться текст, аналогичный показанному в табл. 11 . С помощью меню, вызываемого нажатием на экранную кнопку "Advanced" поля "Fuses", задать конфигурацию микроконтроллера: high - 0xC9, low - 0xFF. В поле "Hex file" указать имя HEX-файла с кодами программы микроконтроллера и нажать на экранную кнопку Program в поле Flash. При успешном завершении программирования в поле сообщений должен появиться текст, оканчивающийся строками, приведёнными в табл. 12.
Таблица 11
Таблица 12
В случае использования регистратора для программирования устройств, подключённых к разъёму XP6 или XP7, выключатели SA1-SA3 должны быть установлены в положения, показанные на рис. 7,в. Положения выключателей при обычной работе регистратора - на рис. 7,г.
Компьютерная программа USB-960
была разработана в среде LabVIEW 2011. Если эта среда на компьютере отсутствует, то потребуется установка пакетов [5] и [6]. Программа содержит одиннадцать виртуальных подприборов (ВП):
- ACPPLISUC_IOUC устанавливает состояния портов вывода микроконтроллера, выведенных на внешний разъём;
- ACPPLISUC_FREQ запускает генератор с последующим измерением генерируемой частоты;
- ACPPLISUC_TEST проверяет связь с микроконтроллером;
- ACPPLISUC_AFR_H измеряет АЧХ внешней цепи при пяти значениях частоты (не ниже 30,5 Гц);
- ACPPLISUC_AFR_L измеряет АЧХ внешней цепи на частоте от долей до десятков герц;
- ACPPLISUC_GEN2S запускает генератор прямоугольных импульсов с периодом следования, кратным 2 с;
- ACPPLISUC_UNPACKDATA преобразует информацию, полученную из регистратора в массив значений кодов АЦП;
- ACPPLISUC_ADCDATA читает информацию, принимаемую из регистратора в течение заданного времени;
- ACPPLISUC_IOPLIS устанавливает состояния портов вывода микроконтроллера, связанных с ПЛИС;
- ACPPLISUC_GEN запускает генератор прямоугольных импульсов с частотой следования 30,5 Гц и выше;
- ACPPLISUC_GEN2Ss запускает генератор прямоугольных импульсов с периодом, кратным двум секундам, синхронно с запуском чтения информации от регистратора;
- ACPPLISUC_COM выполняет приём и передачу информации через виртуальный СОМ-порт, связанный с микроконтроллером.
Основная программа работает в бесконечном цикле while, внутри которого находится структура case, её текущая страница определяется выбором вкладки в главном окне программы.
Вкладка "Запись сигналов" показана на рис. 8. При нажатии на кнопку "ПУСК" начинается приём отсчётов исследуемого сигнала в течение времени, заданного в поле "Время измерения, с". Для этого разрешается передача информации из ПЛИС - в ВП ACPPLI-SUC_IOPLIS записывается значение 128. Собственно чтение выполняется с помощью ВП ACPPLISUC_ADCDATA, в качестве параметра которого задаётся время измерения. Этот ВП запрашивает информацию передачей нулевого байта и читает её в течение заданного времени. По его истечении передача запрещается записью нулевого значения в ВП ACPPLISUCJOPLIS.
Рис. 8. Вкладка "Запись сигналов"
Если предварительно была нажата экранная кнопка "Запись в файл", то исследуемый сигнал сохраняется в двоичном файле, имя которого указано в поле "Файл для сохранения сигнала". По умолчанию сохранение осуществляется в корневую папку диска С, из-за чего операционная система компьютера может потребовать запуск программы с правами администратора.
Запуск генератора прямоугольных импульсов осуществляется в полях "Запуск генератора" и "Запуск генератора с периодом, кратным 2 секундам".
По завершении приёма осциллограмма полученного сигнала отображается в поле "Сигнал", а в поле "Амплитудный спектр" выводится его спектр. В полях "СКО, В" и "Среднее значение, В" будут выведены соответственно среднеквадратическое и среднее значения сигнала.
Вкладка "Осциллограф" изображена на рис. 9. При нажатии на экранную кнопку "ПУСК" запускается цикл while, в котором многократно (до нажатия на кнопку "СТОП") выполняется приём информации от регистратора по алгоритму, аналогичному описанному выше. Для исключения обрезания сигнала при синхронизации и ручном смещении фактическая продолжительность записи в два раза больше заданной. По её завершении в сигнале выполняется поиск моментов пересечения заданного порога (устанавливается с помощью регулятора "Порог, В”), из которых формируется массив. Далее в этом массиве программа находит элемент, расположенный как можно ближе к1/3 длительности сигнала. Он и будет использован в качестве начальной точки осциллограммы, выводимой на экран.
Рис. 9. Вкладка "Осциллограф"
С помощью регулятора "Смещение, %" можно сдвигать осциллограмму. Кнопками "Сохранить текущий сигнал" и "Чтение" выполняются сохранение отображаемого в данный момент сигнала и чтение сохранённого ранее сигнала.
Вкладка "Снятие АЧХ" показана на рис. 10. Определить АЧХ линейной цепи [7] можно путём одновременного или поочерёдного воздействия на её вход гармонических сигналов различной частоты с последующим измерением амплитуды этих сигналов на выходе цепи. В рассматриваемом устройстве для измерения АЧХ вместо гармонических сигналов используются прямоугольные импульсы, генерируемые микроконтроллером. Сигнал в виде прямоугольных импульсов со скважностью 2 - сумма бесконечного числа гармонических сигналов (гармоник), частоты которых в нечётное число раз выше частоты повторения импульсов. Амплитуды его гармоник приблизительно равны 0,9 (первая), 0,3 (третья), 0,18 (пятая), 0,129 (седьмая), 0,1 (девятая) амплитуды импульсов. Зная соотношение гармоник (спектр) сигнала на входе исследуемой цепи и определив его на выходе, можно вычислить значения АЧХ этой цепи на частотах гармоник.
Рис. 10. Вкладка "Снятие АЧХ"
Регистратор снимает АЧХ с помощью прямоугольных импульсов со скважностью 2 и частотой повторения 0,1; 0,5; 30,5, 60,1, 120,2, 240, 480,8, 961,5, 1923, 3846, 7692,3, 15384,6, 31250 и 61538,5 Гц.
При нажатии на одну из экранных кнопок "ПУСК 0,1 Гц" или "ПУСК 0,5 Гц" запускается ВП ACPPLISUC_AFR_L с периодом 10 с и 2 с соответственно. Этот ВП работает следующим образом:
- с помощью ВП ACPPLISUC_ GEN2SS посылает команду запуска генератора прямоугольных импульсов с заданным периодом;
- выполняет приём информации от АЦП в течение 1,5 периода повторения импульсов;
- пропускает принятый сигнал через цифровой фильтр нижних частот с частотой среза 2000 Гц, чтобы избавиться от высокочастотных составляющих перед прореживанием сигнала. Если этого не сделать, возникнет эффект наложения спектров [8];
- прореживает сигнал, отбрасывая 47 из каждых 48 его отсчётов, с целью упрощения дальнейших расчётов;
- извлекает из сигнала фрагмент длительностью точно в один период повторения импульсов;
- рассчитывает амплитудный спектр этого фрагмента;
- извлекает из полученного спектра составляющие, соответствующие нечётным гармоникам испытательного сигнала, делит их на известные значения амплитуды тех же гармоник исходного сигнала. В результате получается АЧХ исследуемой цепи на частотах гармоник.
При нажатии на экранную кнопку "ПУСК 30 Гц" запускается цикл for, в котором выполняется ВП ACPPLISUC_AFR_H, на вход которого поступают значения частоты импульсов и времени измерения. На выходе этого ВП получают значения АЧХ на пяти гармониках сигнала заданной частоты. В результате выполнения цикла формируются три массива: частот, на которых измерялась АЧХ, сигналов, по которым вычислялась АЧХ, и значений АЧХ. Далее выполняется сортировка массива значений АЧХ для дальнейшего вывода её графика на экран.
ВП ACPPLISUC_ AFR_H работает следующим образом:
- с помощью ВП ACPPLISUC_GEN посылает команду запуска генератора;
- принимает информацию от АЦП в течение заданного времени;
- рассчитывает амплитудный спектр записанного сигнала;
- из полученного спектра извлекает пять составляющих, соответствующих гармоникам испытательного сигнала, их значения делит на относительные амплитуды гармоник сигнала, подаваемого на вход исследуемой цепи.В результате получается пять отсчётов АЧХ.
Следует отметить, что длительность анализируемых сигналов обязательно должна быть в точности кратна периоду повторения импульсов, в противном случае при расчёте спектра будет происходить его "растекание" [9] или "просачивание" [7], а результаты анализа будут искажены.
Нажатиями на экранные кнопки "Сохранить результаты" и "Чтение" выполняют запись в дисковый файл отображаемой в данный момент АЧХ и чтение АЧХ, записанных ранее.
Для проверки функционирования регистратора в режиме снятия АЧХ к нему был подключён узел, собранный на макетной плате по схеме, изображённой на рис. 11. Это фильтры нижних частот R1C2 и верхних частот R2C1. Буферные повторители на ОУ микросхемы DA1 устраняют влияние на аЧх фильтров сравнительно высокого выходного сопротивления выхода генератора и низкого (1,5 кОм) входного сопротивления регистратора. Напряжение +15 В и -15 В для питания микросхемы DA1 можно снять с разъёмаХр4 регистратора, если соединить на плате последнего между собой каждые три штыря, предназначенных для перемычек S1 и S2 (не путать с перемычками S1 и S2 на рис. 11, которыми переключают фильтры).
Рис. 11. Схема макетной платы
Для сравнения снятых АЧХ с полученными расчётным путём была создана программа "Сравнение_АЧХ_с_расчё-том", которая вычисляет АЧХ заданной RC-цепи и строит её в одних координатах с измеренной. Результаты представлены на рис. 12 (фильтр нижних частот) и рис. 13 (фильтр верхних частот). Красным показаны рассчитанные значения, белым - измеренные. Далее параллельно C1 и C2 были подключены конденсаторы ёмкостью 8 мкФ и получены характеристики, показанные на рис. 14 и рис. 15.
Рис. 12. Фильтр нижних частот
Рис. 13. Фильтр верхних частот
Рис. 14. Характеристики с подключенным конденсатором
Рис. 15. Характеристики с подключенным конденсатором
Вкладка "Калибровка" изображена на рис. 16. При выполнении этой операции необходимо задать зависимость между напряжением на входе регистратора и значением кода на выходе АЦП. Так как эта зависимость линейна, то достаточно ввести координаты двух её точек. Для этого на вход регистратора подают постоянное напряжение, близкое к максимальному. Его значение записывают в поле "Umax, В". В поле "Значение АЦП-средн." будет выведено усреднённое программой значение выходного кода АЦП. Его можно занести в поле "АЦП-max" вручную или воспользоваться экранной кнопкой "Записать текущее значение АЦП-средн. как АЦП-max".
Рис. 16. Вкладка "Калибровка"
Подав на вход прибора постоянное напряжение, близкое к минимальному, аналогично заносят значения в поля "Umin, В" и "АЦП-min".
Как уже было сказано, фактические частоты генерируемых при снятии АЧХ сигналов могут немного отличаться от заданных значений, из-за чего нельзя заранее знать точные длительности подлежащих анализу выборок, которые должны быть кратны целому числу периодов сигнала. Фактические значения частоты необходимо предварительно измерить и рассчитать длительности выборок. Эти действия выполняются в case-структуре, вызываемой кнопкой "Определить периоды для снятия АЧХ", результаты сохраняются в текстовом файле.
Калибровку выполняют следующим образом:
- соединяют вход прибора с общим проводом, соединив между собой контакты разъёмаXP1;
- подстроечным резистором R1 устанавливают в окне "АЦП-средн." значения от 511 до 513 (нажимая для обновления на экранную кнопку "Прочитать");
- подключают к разъёму XP1 источник постоянного напряжения +13...15 В, вводят точное значение этого напряжения в поле "Umax, В”;
- нажимают на экранную кнопку "Прочитать", чтобы выполнить оцифровку сигнала и определить среднее значение кода АЦП, затем нажимают на экранную кнопку "Записать текущее значениеАЦП-средн. какАЦП-max";
- изменяют на противоположную полярность поданного на разъём XP1 напряжения, вводят его значение в поле "Umin, В", нажимают на экранные кнопки "Прочитать", а затем "Записать теку-щеезначениеАЦП-средн. какАЦП-min";
- отключив источник напряжения от разъёма XP1, соединяют контакт 1 этого разъёма с контактом 5 разъёмаХР2 и нажимают на экранную кнопку "Определить напряжение логического уровня (ил1)". Это значение требуется для вычисления АЧХ;
- нажимают на экранную кнопку "Определить периоды для снятия АЧХ" и дожидаются окончания измерений (процесс занимает более двух минут). Результаты измерений сохраняются в текстовом файле на жёстком диске компьютера. Имя этого файла и путь к нему содержатся в поле "Файл с калибровочными коэффициентами";
- нажатием на экранную кнопку "ТЕСТ" в микроконтроллер посылают тестовую команду, если на неё получен правильный ответ, то будет включён индикатор "ТЕСТ ОК". В поле "IO" можно вручную задать состояния выходов микроконтроллера, выведенных на разъём XP2, а в поле "IO-PLIS" - тех, что связаны с ПЛИС.
В заключение можно отметить, что если построить регистратор на базе ПЛИС Xilinx Spartan-3 с процессорным ядром MicroBlaze, то отпадёт необходимость использования микроконтроллера.
Литература
1. Drivers. - URL: http://www.ftdichip. com/FTDrivers.htm (21.07.14).
2. Программатор MBFTDI в среде Altera Quartus II. - URL: http://www.marsohod.org/ index.php/ourblog/11/196-qprog10b (21.07.14).
3. SinaProg - графическая оболочка для AVRDude. - URL: http://easyelectronics.ru/ sinaprog-graficheskaya-obolochka-dlya-avrdude.html (21.07.14).
4. LabView Run-Time Library. - URL: http:// ftp.ni.com/support/softlib/labview/labview_ runtime/8.6.1 /Windows/lvrte861min.exe (21.07.14).
5. LabVIEWRun-TimeEngine 2011 -(32-bit Standard RTE) - Windows 7 64-bit/7 32-bit/ Vista 64-bit/Vista 32-bit/XP 32-bit/Server 2008 R2 64-bit/Server 2003 R2 32-bit/. - URL: http://joule.ni.com/nidu/cds/view/p/id/2534/ lang/ru (21.07.14).
6. NI-VISA Run-Time Engine 5.1.1 - Pocket PC 2003, Real-Time OS, Windows 7 64-bit/ 7 32-bit/Vista 64-bit/Vista 32-bit/XP/XP Embedded/Server 2008 R2 64-bit/Server 2003 R2 32-bit/Mobile 5/. - URL: http://joule.ni.com/ nidu/cds/view/p/id/2662/lang/ru (21.07.14).
7. Марпл-мл. С. Цифровойспектральный анализ и его приложения. - М.: Мир, 1990.
8. Айфичер Э., Джервис Б. Цифровая обработка сигналов: практический подход. 2-е издание.: Пер. с англ. - М.: Издательский дом "Вильямс", 2004.
9. Сергиенко А. Цифровая обработка сигналов: Учебникдля вузов. 2-е изд. - СПб.: Питер, 2006.
Файл печатной платы в формате Sprint Layout 5.0 и программы для ПЛИС, микроконтроллера и компьютера можно скачать здесь
Автор: В. Чайковский, г. Пенза