Разработка программной части осциллографа-приставки
Выпускная квалификационная работа. Часть 4.
4.1 Программа для микроконтроллера
4.1.1 Инициализация
4.1.2 Режим DMA
4.1.3 Передача данных по UART
4.1.4 Алгоритм программы микроконтроллера
4.2 Программа для ПК
4.2.1 Обработка данных в LabVIEW
4.2.2 Цифровой фильтр
4.2.3 Синхронизация
4.2.4 Спектр сигнала
4.2.5 Графический интерактивный интерфейс пользователя
4.3 Вывод
Программное обеспечение (ПО) микропроцессорных систем состоит из двух частей: ПО микропроцессора и ПО для компьютера. ПО микропроцессора загружается во внутреннюю память микропроцессора, его задача обеспечить работу АЦП, мультиплексора, генератора тестового сигнала, обеспечить взаимодействия микроконтроллера с компьютером. Кроме того на ПО микропроцессора возлагается задача первичной обработки оцифрованного сигнала, дальнейшей обработкой занимается ПО компьютера.
При программировании микроконтроллера можно выбирать язык либо низкого, либо высокого уровня. К языкам программирования "низкого" уровня относятся языки программирования в которых каждому оператору соответствует не более одной машинной команды. Языки программирования низкого уровня в настоящее время называются ассемблерами. Языки программирования "высокого" уровня позволяют заменять один оператор несколькими машинными командами. Языки "высокого" уровня позволяют писать программы, которые могут выполняться на различных микропроцессорах. В настоящее время наиболее распространены такие языки программирования высокого уровня как С и PLM. При этом необходимо использовать программы-трансляторы для соответствующего процессора. Микроконтроллер ADUC842, относиться к семейству контроллеров MCS-51. Для микроконтроллеров семейства MCS-51 получили известность продукты таких фирм как FRANCLIN, IAR, KEIL. В состав современных средств написания и отладки программ для микроконтроллеров обычно входят эмуляторы процессоров или отладочные платы, текстовый редактор, компиляторы языка высокого уровня (чаще всего "C") и ассемблера, редактор связей и загрузчик программы в отладочную плату. Все программы обычно объединены интегрированной средой разработки программного проекта, позволяющую поддерживать один или несколько программных проектов. В СибГУТИ студенты изучают язык С в программной среде KEIL µVision, на котором и был сделан данный проект.
Разработка ПО для компьютера, работающего под управлением какой-либо операционной системой требует навыка профессионального программиста, знающего особенности операционных систем и языков программирования. Но существует способ создания профессионального программного обеспечения без участия высококвалифицированного программиста — технология виртуальных приборов. Эта технология позволяет создавать системы измерения, управления и диагностики различного назначения практически любой произвольной сложности, включая математическое моделирование и тестирование этих систем. Суть этой технологии состоит в компьютерной имитации с помощью программы реальных физических приборов, измерительных и управляющих систем. Программная среда LabVIEW является именно таким инструментарием технологии виртуальных приборов. [!]
Слово «виртуальный» не совсем оправдывает своего значения, поскольку приборы, реализованные по этой технологии, на самом деле являются реальными работающими с реальными физическими входными сигналами. Виртуальность здесь понимается в смысле виртуальной имитации функций прибора математическими и программными методами. Например, виртуальный осциллограф по функциям эквивалентен реальному осциллографу, поскольку имеет физический вход для электрического сигнала. Преобразование сигнала в цифровой сигнал осуществляется аналого-цифровым преобразователем. Дальнейшая обработка и управление сигналом, его отображение для наблюдения осуществляются программным способом. Такой осциллограф имеет виртуальный экран, виртуальные ручки управления (усиление, синхронизация, развертка и др.), графически отображаемые на экране монитора компьютера. Ручки, переключатели, кнопки виртуального прибора управляются с клавиатуры или посредством мыши.
Преимущество технологии виртуальных приборов состоит в возможности программным путем, опираясь на мощь современной компьютерной техники, создавать разнообразные приборы, измерительные системы и программно-аппаратные комплексы, легко их адаптировать к изменяющимся требованиям, уменьшить затраты и время на разработку.
Общепризнанным мировым лидером технологии виртуальных приборов является компания National Instruments, которая уже более 30 лет производит аппаратное и программное обеспечение, позволяющее создавать системы измерения, управления и диагностики. Программное обеспечение National Instruments (NI) включает в себя среды для разработки приложений LabVIEW, LabWindows/CVI и Measurement Studio, драйверы приборов и различного оборудования, а также высокоуровневые средства управления тестами и обработкой данных. Программное обеспечение использует последние версии операционных систем Windows, Mac OS X, Linux и может быть использовано на различных аппаратных платформах: на персональных и промышленных компьютерах, в распределенных системах.
Программная среда LabVIEW представляет собой высокоэффективную среду графического программирования. Широкие функциональные возможности среды LabVIEW позволяют использовать ее в практической работе студенту, инженеру. Интуитивно понятный процесс графического программирования позволяет специалисту уделять больше внимания решению самой проблемы, а не процессу программирования.
Особенности среды LabVIEW состоят в следующем:
- функционально полный язык графического программирования, позволяющий создавать программу в форме наглядной графической блок-схемы, которая традиционно используется радиоинженерами;
- встроенные программные средства для сбора данных, управления приборами и оборудованием, обработки сигналов и экспериментальных данных, генерации отчетов, передачи и приема данных и так далее;
- мощное математическое обеспечение, возможность интеграции программ, написанных в среде математического пакета Matlab;
- наличие более 2000 программ (драйверов), позволяющих сопрягать разработанную программу с разнообразными приборами и оборудованием различных фирм через стандартные интерфейсы;
- наличие большого количества шаблонов приложений, а также свыше 1000 примеров, позволяющих быстро создавать собственные программы, внося в них небольшие коррекции;
- возможность работы LabVIEW под управлением операционных систем Windows 2000/NT/XP, Mac OS X, Linux и Solaris.
Программу, написанную в среде LabVIEW, принято называть виртуальным прибором (ВП), или виртуальным инструментом (ВИ). Следует это из того, что любая программа, созданная в LabVIEW, представляется в виде некоторого прибора, основными составляющими которого являются лицевая панель, блок-схема, иконка и соединительная панель.
На лицевой панели располагаются элементы управления (регули-рующие ползунки, ручки, кнопки, переключатели), а также элементы отображения (экраны, цифровые табло, индикаторы). Лицевая панель является графическим интерактивным интерфейсом пользователя для управления программой.
Иконка и соединительная панель ВП служат для того, чтобы другие ВП могли передавать данные на входы ВП. Иконка является графическим изображением ВП. Соединительная панель – это графическое изображение полей ввода и вывода данных в ВП. Иконка и соединитель позволяют использовать ВП как основные программы (программы верхнего уровня) или как подпрограммы внутри других программ или подпрограмм. Графическим эквивалентом подпрограммы в LabVIEW будет виртуальный подприбор (виртуальный субинструмент) subVI.
Таким образом, LabVIEW придерживается концепции модульного программирования. При этом прикладная программа делится на ряд задач, которые можно делить снова, пока сложная прикладная программа не становится последовательностью простых подзадач. Далее формируются ВП, чтобы выполнить каждую подзадачу, а затем эти ВП объединяются на блок-схеме для выполнения общей задачи. В результате ВП верхнего уровня содержит совокупность подприборов.
Блок-схема представляет собой графическое изображение блоков, входящих в состав прибора, а также терминалы элементов управления, размещенных на лицевой панели. Как и в традиционной блок-схеме, сигнал в процессе обработки проходит через блоки от входа к выходу.
В среде LabVIEW применяется принцип обработки потока данных. По этой схеме обработка сигнала блоком начинается только тогда, когда поток данных сформирован на его входе. Последующий блок начинает обработку после окончания работы предыдущего блока. Поток данных движется от блока к блоку, подчиняясь естественной причинно-следственной связи в цепи обработки сигнала. Таким образом, обработка потока данных управляется самим потоком данных и зависит от самих данных (data dependent). В отличие от этого в обычных текстовых языках программирования порядок выполнения программы определяется последовательностью инструкций - потоком управления. Принцип потока данных LabVIEW упрощает разработку многопоточных и многозадачных программ.
4.1 Программа для микроконтроллера
Программа выполняется циклически, поскольку прекращает работать только тогда, когда этого захочет пользователь. Программа состоит из инициализации и настройки микроконтроллера, основной программы, в которой осуществляется преобразование сигнала, и передачи полученных данных по UART. Как уже было сказано, программа пишется на языке «высокого» уровня С.
4.1.1 Инициализация
Инициализация состоит из:
- настройки ядра микроконтроллера на работу на частоте 16МГц,
- настройка режима работы UART и скорости его передачи,
- активизирования АЦП, настройки режима работы и частоты дискретизации АЦП,
- конфигурация памяти ОЗУ микроконтроллера как внешней памяти XRAM.
ADUC842 тактируется от внешнего часового кварца с частотой 32,768 кГц. Интегрированная система фазовой автоподстройки частоты (ФАПЧ) умножает эту частоту на 512, получая 16,78 МГц. Ядро может работать непосредственно от этой частоты, либо от частот полученных делением 16,78 на кратные двоичные числа. По умолчанию ядро работает на частоте 2 МГц. А хотелось бы, чтоб было 16,78 МГц. Для этого существует регистр специальной функции (РСФ, SFR – special function register) PLLCON – регистр управления ФАПЧ, который настраивает микроконтроллер на необходимую рабочую частоту.
Таблица 4.1 – Описание регистра PLLCON
Номер бита | Название бита | Описание | ||||||||||||||||||||||||||||||||||||||||
7 | OSC_PD |
|
||||||||||||||||||||||||||||||||||||||||
6 | LOCK | Бит защелки ФАПЧ Автоматически устанавливается в «1», если ФАПЧ отслеживает синхроимпульсы корректно, иначе «0» |
||||||||||||||||||||||||||||||||||||||||
5 | – | По умолчанию значение «0». Без значения. | ||||||||||||||||||||||||||||||||||||||||
4 | – | По умолчанию значение «0». Без значения. | ||||||||||||||||||||||||||||||||||||||||
3 | FINT | Бит быстрого ответа прерывания. | ||||||||||||||||||||||||||||||||||||||||
2 | CD2 |
|
||||||||||||||||||||||||||||||||||||||||
1 | CD1 | |||||||||||||||||||||||||||||||||||||||||
0 | CD0 |
Установим PLLCON = 0x00;
Инициализация UART нужна для того, чтобы ее использовать для передачи данных в ПК.
Конфигурировать внутреннее ОЗУ микроконтроллера нужно для того, чтобы АЦП работало в режиме DMA. Тем самым мы получаем максимальную скорость работы АЦП и всей системы в целом. Для конфигурации внутреннего ОЗУ как внешнего существует регистр CFG842. Этот регистр содержит биты для конфигурации внутреннего ОЗУ, выбора внешних источников синхронизации, выбор вывода для широтно-импульсной модуляции (ШИМ), буфер ЦАП.
Таблица 4.2 – Описание регистра CFG842
Номер бита | Название бита | Описание | ||||||
7 | EXSP |
|
||||||
6 | PWP0 |
|
||||||
5 | DBUF |
|
||||||
4 | EXTCLK |
|
||||||
3 | RSVD | Всегда имеет значение 0 | ||||||
2 | RSVD | Всегда имеет значение 0 | ||||||
1 | MSPI |
|
||||||
0 | XRAMEN |
|
CFG842 = 0x21;
Функция инициализации выглядит следующим образом:
void ini() { PLLCON=0x00; //настройка ядра на 16МГц SCON=0x52; //первый режим работы UART T3CON=0x81; //настройка скорости передачи UART T3FD=0x09; ADCCON1=0xBC; //настройка АЦП ADCCON2=0x40; CFG842=0x21; //конфигурация внутреннего ОЗУ как внешней }
АЦП в микроконверторе ADUC842 может работать в особом режиме, называемом режим DMA. АЦП можно установить в режим передачи данных по каналу прямого доступа к памяти (ПДП, DMA – direct memory access), когда блок повторяет циклы преобразования и посылает выборки во внешнюю память данных, минуя процессор.
Внутренний АЦП способен осуществлять выборки каждые 2,4 мксек. Таким образом, программа пользователя должна обслужить прерывание (прочитать результат и записать его в оперативную память микроконтроллера для дальнейшей обработки) в течение 2 мксек, иначе результат следующей выборки может быть потерян.
Режим DMA включается битом ADCCON2.6, после чего АЦП работает в соответствии с запрограммированным режимом, а результат каждой выборки записывается во внешнюю память данных, минуя микропроцессор. Повторим, что результат преобразования сигнала записывается как 12-битный код. Этот результат записывается в регистры ADCDATAL и ADCDATAH. Причем, младшие 8 бит записываются в регистр ADCDATAL, а старшие 4 бита в младшие 4 бита регистра ADCDATAH. В старшие 4 бита регистра ADCDATAH записывается номер канала АЦП для дальнейшего их различения при необходимости. DMA режим обеспечивает реализацию максимального быстродействия АЦП. Конфигурация DMA режима:
1. В указатель адреса DMA, куда кладутся результаты преобразования, запивается начальный адрес. Начальный адрес записывается в регистры - указатели адреса DMAL, DMAH и DMAP. Причем, в обязательном порядке адрес пишется сначала в DMAL, затем в DMAH и DMAP.
2. Внешняя память должна быть размеченной. Разметка состоит в записи номера канала, с которого будут считываться данные. Номер канала записывается в старшие 4 бита каждого второго байта в области памяти ОЗУ. Так как АЦП в DMA режиме работает независимо от ядра контроллера, необходимо обеспечить его командой остановки. Это делается посредством записи в последнее место записи номера канала числа «1111» в двоичной системе счисления. Так как ОЗУ микроконтроллера составляет 2КБ, то количество двухбайтовых чисел, которые можно записать туда, будет 1000. Так как в последние два байта занимает стоп - команда, то количество данных, которые могут быть получены за один цикл DMA, составляет N=998.
3. Разрешение режима DMA (записываем в бит DMA = 1 регистра ADCCON2)
4. Конфигурация регистра ADCCON1. Устанавливаем скорость АЦП.
5. Старт преобразования. Устанавливаем бит CCONV = 1.
Когда цикл преобразования в режиме DMA окончен, бит прерывания ADCI автоматически устанавливается в «1». Результаты преобразования будут записаны в ОЗУ. В последние 2 байта результаты не записываются. После обработки полученным результатов, для следующего цикла DMA нужно флаг ADCI обнулить, и заново сделать шаги, указанные выше.
Логические операции, выполняемые при режиме DMA, тактируются от внутреннего генератора микроконвертора. АЦП и запись полученных результатов в память ОЗУ выполняется одновременно. Пока АЦП выполняет преобразование аналогового сигнала в цифровой, результат преобразования записывается во внешнюю память и происходит считывание номера следующего канала в соответствии с рисунком 4.3.
Настройка АЦП на нужный рабочий режим и конфигурация нужных свойств АЦП производиться через три SFR: ADCCON1, ADCCON2 и ADCCON3.
Регистр ADCCON1 управляет режимом работы АЦП, значением тактовой частоты АЦП, временем переключения каналов, внешним запуском, регистр не имеет отдельно адресуемых битов.
Таблица 4.3 – Значение битов регистра ADCCON1
Номер бита | Название бита | Описание | |||||||||||||||
ADCCON1.7 | MD1 |
|
|||||||||||||||
ADCCON1.6 | EXT_REF | Бит выбора источника опорного напряжения:
|
|||||||||||||||
ADCCON1.5 | CD2 | Биты деления тактовой частоты. Определяют коэффициент деления основной частоты микроконтроллера для получения тактовой частоты АЦП. Цикл преобразования АЦП занимает 16 тактов поделенной частоты, в дополнение к числу тактов переключения.
|
|||||||||||||||
ADCCON1.4 | CK0 | ||||||||||||||||
ADCCON1.3 | AQ1 | Биты задержки переключения. Выбирают время, необходимое для переключения мультиплексора:
|
|||||||||||||||
ADCCON1.2 | AQ0 | ||||||||||||||||
ADCCON1.1 | T2C | Бит запуска преобразования от Таймера 2. Если бит установлен, то сигнал переполнения Таймера 2 используется для запуска АЦП. |
|||||||||||||||
ADCCON1.0 | EXC | Бит разрешения внешнего запуска. Если установлен, то сигнал на выводе CONVST# будет использоваться как сигнал запуска (активный низкий уровень должен длиться не менее 100 нс). |
Переводим АЦП в нормальный режим, выбираем внутренний источник опорного напряжения, для максимального быстродействия ставим CK1 = 1 и CK0 = 1. В результате:
ADCCON1 = 10111100b = 0xBC.
Регистр ADCCON2 управляет установкой флага прерывания, режимами однократного и циклического преобразования. Имеется возможность индивидуального управления битами.
Таблица 4.4 – Значение битов регистра ADCCON2
Номер бита | Название бита | Описание | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ADCCON2.7 | ADCI | Бит прерывания АЦП устанавливается аппаратно по окончании однократного преобразования ил и по окончании передачи блока в режиме DMA. ADCI очищается аппаратно при переходе на процедуру обслуживания прерывания. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ADCCON2.6 | DMA | Бит разрешения режима DMA. Устанавливается пользователем для начала цикла DMA от АЦП. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ADCCON2.5 | CCONV | Бит циклического преобразования. Устанавливается пользователем для перевода АЦП в режим непрерывного циклического преобразования. В этом режиме АЦП выполняет преобразование в соответствии с типом синхронизации и конфигурацией каналов, определенными в других регистрах специальных функций. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ADCCON2.4 | SCONV | Бит запуска однократного преобразования. Устанавливается пользователем для однократного запуска АЦП. Бит сбрасывается автоматически по завершению преобразования. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ADCCON2.3 | CS3 | Выбрать номер канала АЦП. В режиме DMA номер канала записывается во внешнюю память.
|
ADCCON2 = 01000000b = 0x40.
Регистр ADCCON3 предназначен для калибровки АЦП. Откалиброванные значения АЦП на заводе производителя более чем удовлетворяют требованиям пользователя.
В лабораторном стенде LESO1 микроконтроллер связан с ПК с помощью универсального асинхронного последовательного порта (UART – Universal asynchronous receiver/transmitter).
Через универсальный последовательный порт осуществляются прием и передача информации, представленной в последовательном коде (младшими битами вперед). Наличие буферного регистра приемника позволяет совмещать операцию чтения ранее принятого байта с приемом очередного. Но если к моменту окончания приема байта предыдущий не был считан из SBUF, то он будет потерян. Работой последовательного порта управляют три регистра:
- регистр управления/статуса приемопередатчика SCON,
- бит SMOD регистра управления мощностью PCON,
- буферный регистр приемопередатчика SBUF.
Последовательный порт может работать в четырех различных режимах:
- Режим 0. Синхронный режим. Информация передается, и принимается через вывод входа приемника RxD. Принимаются или передается 8 бит данных. Через вывод TxD выдаются импульсы синхронизации, которые сопровождают каждый бит. Скорость передачи фиксирована и составляет 1/12 Fген.
- Режим 1. Асинхронный 8-ми битовый режим. Передаются (через TXD) или принимаются (через RXD) 10 бит: старт-бит (логический 0), 8 бит данных (младшим разрядом вперед) и стоп-бит (логическая 1). При приеме, стоп-бит поступает в бит RB8 регистра SCON. Скорость передачи в режиме 1 переменная: для управления скоростью передачи вы можете использовать таймер Т1 и/или Т2.
- Режим 2. Асинхронный 9-ти битовый режим с фиксированной скоростью передачи.
- Режим 3. Асинхронный 9-ти битовый режим совпадает с режимом 2 во всех деталях, за исключением частоты приема/передачи, которая задается таймером.
Во всех четырех режимах передача начинается любой командой, которая использует SBUF как регистр-приемник. Прием в режиме 0 начинается при условии RI = 0, REN = 1. Прием в других режимах начинается с приходом старт-бита, если бит REN установлен[!].
Нас интересует режим 1, так как данные будут отправляться побайтово и необходимо обеспечить максимально возможную скорость передачи данных.
Режим работы UART конфигурируется в регистре SCON.
Таблица 4.5 – Значение битов регистра SCON
Номер бита | Название бита | Описание | |||||||||||||||
7 | SM0 | Биты выбора режима работы UART.
|
|||||||||||||||
6 | SM1 | ||||||||||||||||
5 | SM2 | Бит управления режимом приемопередатчика. Устанавливается программно для запрета приема сообщения, в котором девятьй бит имеет значение 0 | |||||||||||||||
4 | REN | Бит разрешения приема. Устанавливается/сбрасывается программно для разрешения/запрета приема последовательных данных | |||||||||||||||
3 | TB8 | Передача бита 8. Устанавливается/сбрасывается программно для задания девятого передаваемого бита в режиме 9-битового передатчика | |||||||||||||||
2 | RB8 | Прием бита 8. Устанавливается/сбрасывается аппаратно для фиксации девятого принимаемого бита в режиме 9-битового приемника | |||||||||||||||
1 | TI | Флаг прерывания передатчика. Устанавливается аппаратно при окончании передачи байта. Сбрасывается программно после обслуживания прерывания | |||||||||||||||
0 | RI | Флаг прерывания приемника. Устанавливается аппаратно при приеме байта. Сбрасывается программно после обслуживания прерывания |
SCON = 0x52.
Скорость передачи в 1-режиме можно определять первым или вторым таймером и значением регистра SMOD. Но используя эти таймеры невозможно получить высокую скорость передачи данных (не выше 115200 бит/сек). Поэтому существует третий таймер, который предназначен для скоростных передач данных. Можно генерировать скорость от 12 бит/с до 1049000 бит/с . Для конфигурирования этого таймера есть два РСФ: T3CON и T3FD. В регистре T3CON включают таймер и устанавливают значение делителя частоты работы ядра DIV.
Таблица 4.6 – Значение битов регистра T3CON
Номер бита | Название бита | Описание | ||||||||||||||||||||||||||||||||||||
7 | T3BAUDEN |
|
||||||||||||||||||||||||||||||||||||
6 | - | Биты, зарезервированные для будущего использования. | ||||||||||||||||||||||||||||||||||||
5 | - | |||||||||||||||||||||||||||||||||||||
4 | - | |||||||||||||||||||||||||||||||||||||
3 | - | |||||||||||||||||||||||||||||||||||||
2 | DIV2 | Целочисленный делитель
|
Скорость передачи данных по UART определяется как:
где fядр = 16,777 МГц - частота ядра.
Максимальное значение V получим при DIV = 0 и T3FD = 0:
Получаем: T3CON=0х80 и T3FD=0x00. UART настроен на первый режим работы. Данные передаются (через TXD) или принимаются (через RXD) по 10 бит: старт-бит (логический 0), 8 бит данных (младшим разрядом вперед) и стоп-бит (логическая 1). При приеме, стоп-бит поступает в бит RB8 регистра SCON. Для того чтобы принять данные нужно обнулить флаг RI. Когда данные будут приняты, флаг RI установиться. Для принятия следующего бита нужно снова обнулить RI. Принятый байт записывается в регистр SBUF.
Функция приема данных по UART выгладит следующим образом:
unsigned char receive_uart( ) // процедура приема байта по UART { RI=0; // готовность принять данные while(!RI); // ждем окончания передачи return SBUF; // считываем данные с буфера }
При передаче данных, нужно обнулить флаг TI, по аналогии с приемом. Данные необходимо записать в регистр SBUF. Когда передача байта закончиться, установиться флаг TI. Функция передачи данных по UART:
void transmit_uart (unsigned char D) //процедура передачи байта по UART { TI=0; // готовность отправить данные SBUF=D; // записываем в буфер отправляемый байт while(!TI); // ждем окончания передачи }
4.1.4 Алгоритм программы микроконтроллера
Процедура обмена данными между микроконтроллером и ПК состоит в следующем: из ПК передается команда запроса. На алгоритме она указана кpак сигнал «принять данные». По этой команде производиться начинается конфигурирование и преобразование сигнала в режиме DMA.
Конфигурация режима DMA состоит в обнулении флага окончания передачи данных, настройки на непрерывный режим преобразования до поднятия флага окончания передачи данных, указания начального адреса, куда записываются преобразованный сигнал, установки флага разрешения DMA.
Старт передачи данных начинает преобразование. Пока это преобразование происходит, программа ждет установления флага передачи данных. После установления флага окончания передачи данные отправляются по последовательному порту в ЭВМ.
После отправки данных микроконтроллер ждет новую команду, для выполнения цикла программы.
4.2 Программа для ПК
4.2.1 Обработка данных в LabVIEW
Данные с АЦП приходят в виде последовательности байтов, первая которая содержит номер канала в верхних 4-х байтах и старшие 4 бита данных, вторая – остальную часть данных.
Для обработки необходимо собрать данные в одно 16-битное слово. Для этого в LabVIEW существует инструмент разделения матрицы «decimate 1D array».
Затем побитно умножим первый байт на число 0х0F, чтобы избавиться от номера канала, так как он больше нам не нужен.
Преобразуем первый байт в 16-битное слово. Для этого существует инструмент «to unsigned word». Передвигаем 4 бита данных в верхний байт 16-битного слова с помощью инструмента «swap bytes». Суммируем полученное 16-битное слово с младшим байтом данных. В результате получаем 16-битное слово, в котором записано 12-битная информация.
Аналоговый фильтр Бесселя имеет неравномерную АЧХ в полосе пропускания. Для измерения сигналов такой вид АЧХ фильтра не является приемлемым. После дискретизации и обработки данных, амплитуды сигналов следует исправить. Этого можно добиться цифровым фильтром с корректирующей АЧХ, показанной на рисунке 4.12.
Цифровая фильтрация является одним из наиболее мощных инструментальных средств цифровой обработки сигналов (ЦОС). Кроме очевидных преимуществ устранения ошибок в фильтре, связанных с флуктуациями параметров пассивных компонентов во времени и по температуре, дрейфом ОУ (в активных фильтрах) и так далее. Цифровые фильтры способны удовлетворять таким техническим требованиям по своим параметрам, которых, в лучшем случае, было бы чрезвычайно трудно или даже невозможно достичь в аналоговом исполнении. Кроме того, характеристики цифрового фильтра могут быть легко изменены программно. Поэтому они широко используются в телекоммуникациях, в приложениях адаптивной фильтрации, таких как подавление эха в модемах, подавление шума и распознавание речи.
Цифровые фильтры можно классифицировать по следующим типам:
- Фильтры с конечной импульсной характеристикой (КИХ);
- Фильтры с бесконечной импульсной характеристикой (БИХ);
- Нелинейные фильтры.
Выходной сигнал КИХ-фильтра зависит только от поступивших на вход отсчетов входного сигнала в предыдущие моменты времени и отсчета в рассматриваемый момент. Выходной сигнал БИХ-фильтра зависти от поступивших на вход отсчетов входного сигнала в предыдущие моменты времени и отсчета в рассматриваемый момент, а также и от отсчетов выходного сигнала в предыдущие моменты времени.
Требования, предъявляемые к проектируемому цифровому фильтру:
- линейная ФЧХ;
- требуемое АЧХ.
Линейную ФЧХ может обеспечить симметричный КИХ-фильтр. Поэтому свой выбор остановим на КИХ-фильтре. КИХ-фильтры также известны как нерекурсивные фильтры или фильтры свертки. КИХ-фильтры выполняют свертку своих коэффициентов с последовательностью входных отсчетов и производят последовательность выходных отсчетов, одинаково пронумерованные с входными отсчетами. Конечная свертка, которую выполняет КИХ-фильтр, определяется по уравнению:
где x – последовательность входных отсчетов, поступающий на вход фильтра, y – последовательность отсчетов на выходе фильтра, h – коэффициенты КИХ-фильтра.
КИХ-фильтры имеют следующие особенности:
- могут обеспечивать линейную ФЧХ при симметрии коэффициентов фильтра;
- всегда устойчивы;
- позволяют фильтровать сигналы на основе использования свертки.
Разработка КИХ-фильтров имеет целью приближение к желательной передаточной функции. Имеются самые общие методы приближения к желаемой АЧХ, в то время как выдерживается линейность ФЧХ. Линейность ФЧХ подразумевает, что все частотные составляющие имеют одинаковую задержку по времени.
Для получения желаемого АЧХ необходимо отталкиваться от АЧХ ранее рассчитанного аналогового фильтра. В результате должно получиться:
где Hрез(f) – результирующая передаточная функция системы; Hан(f) – передаточная функция аналогового фильтра; Hциф(f) – передаточная функция цифрового фильтра.
В полосе пропускания сигнала, нормированное значение Hрез(f) должно быть равномерным и равно 1. Требуемая АЧХ в полосе пропускания является обратной АЧХ аналогового фильтра. Действительно, из уравнения 4.3 получаем:
Но при этом в полосе непропускания цифровой фильтр также должен обеспечивать большое подавление. Самая простая методика для разработки КИХ-фильтров – метод «окон» (в иностранной литературе «Windowing»). При проектировании КИХ-фильтров с использованием Windowing применяют обратное БПФ к желательной передаточной функции и применяют окно сглаживания к результату. Окно сглаживания – окно в области времени. Необходимо выполнить следующие шаги для вычисления передаточной функции фильтра (вычисления коэффициентов КИХ-фильтра)[!]:
- выбрать идеальную частотную передаточную функцию;
- вычислить импульсную характеристику для идеальной частотной передаточной функции;
- усечь импульсную характеристику, чтобы определить конечное число коэффициентов; чтобы выполнить ограничение линейности фазовой характеристики, необходимо выдержать симметрию относительно центрального коэффициента;
- применить симметричное окно сглаживания.
Следует проверить соответствие полученного АЧХ КИХ-фильтра с требуемым. Для этого следует пропустить через фильтр дельта-функцию, то есть сделать свертку импульсной характеристики и дельта-функции. Затем опять сделать БПФ, ограничить количество отсчетов и взять модуль значений отсчетов.Сравнение полученного АЧХ КИХ-фильтра и требуемого АЧХ показано на рисунке 4.14.
Таким образом, результатом этой программы будет матрица, в которой будут записаны коэффициенты фильтра. Полученную матрицу коэффициентов фильтра будем использовать в основной программе LabVIEW.
4.2.3 Синхронизация
Если запуск развертки никак не связан с наблюдаемым сигналом, то изображение на экране будет выглядеть «бегущим» или даже совершенно размазанным. Это происходит потому, что в этом случае осциллограф отображает различные участки наблюдаемого сигнала на одном и том же месте. Для получения стабильного изображения все цифровые осциллографы содержат систему, называемую триггер. Триггер в осциллографе — это устройство, которое задерживает запуск развертки до тех пор, пока не будут выполнены некоторые условия. Этим условиями могут быть:
- уровень сигнала: задает входное напряжение, при достижении которого запускается развертка;
- тип запуска: по фронту или по спаду;
- определенное количество отсчетов.
Таким образом, триггер запускает развертку всегда с одного и того же места сигнала, поэтому изображение сигнала на осциллограмме выглядит стабильным и неподвижным.
Для синхронизации сигнала в LabVIEW существует инструмент «trigger&gate».
Поставим следующие настройки, показанные на рисунке 4.16:
- Уровень сигнала для запуска: 0;
- Тип запуска: по фронту;
- Количество отсчетов: 500.
Представление сигнала в области времени дает совокупность его мгновенных значений в интервале времени, в течение которого была получена выборка. Однако во многих случаях необходимо знать гармонические составляющие сигнала, а не значения единичных отсчетов в выборке.
Теорема Фурье устанавливает, что периодический сигнал любой формы в области времени может быть представлен взвешенной суммой синусов и косинусов с частотами, определяемыми периодом анализируемого сигнала.
Алгоритм, который обеспечивает преобразование выборки сигнала из области времени в область частот, является дискретным преобразованием Фурье (ДПФ). Необходимо отметить, что ДПФ по умолчанию исходный ограниченный во времени сигнал превращает в периодический с периодом, равным времени получения выборки. Если к полученным выборкам сигнала из N=998 единичных измерений от АЦП, представляющих сигнал в области времени, применить ДПФ, то результат преобразования также будет состоять из N=998 отсчетов в области частот.
ДПФ определяется следующим выражением:
В LabVIEW для ДПФ существует блок FFT.vi.
Уравнение (4.5) показывает, что даже если входной сигнал x[i] реальный, значения X[k] всегда являются комплексными, хотя мнимая часть может быть и нулевой. Другими словами, каждая частотная компонента имеет амплитуду и начальную фазу. Обычно основную информацию несет амплитудная составляющая спектра. Для этого применяется блок «Complex To Polar».
Для реальных сигналов ДПФ симметрично и это свойство можно описать следующими уравнениями:
По причине таких симметрии N выборок ДПФ содержат повторную информацию. Из-за этого повторения информации можно вычислить или отобразить только половину выборок ДПФ. Для этого применен «Array Subset» в соответствии с рисунком 4.18).
В результате получаем анализатор спектра в составе виртуального цифрового осциллографа.
4.2.5 Графический интерактивный интерфейс пользователя
Осциллограф используется для измерения широкого диапазона сигналов. Поэтому требуется переключение диапазона, как по времени, так и по амплитуде.
В соответствии с рисунком 4.19 вызываем свойство графопостроителя в LabVIEW «Plot Legend». В терминале появляется окно настройки, как показано на рисунке 4.19, к которому приводиться необходимое значение деления отображающего графика сигнала.
Пользователь может исследовать влияние сглаживающих окон во временном и частотном пространстве. Для этого существует инструмент «Scaled Time Domain Window.vi».
Выбирая нужное окно, пользователь может изучать влияние окон сглаживания на сигнал во временном и частотном пространстве в соответствии с рисунком 4.22.
Как видно из рисунка 4.23, в графическом индикаторе во временной области есть курсор с цифровым отображением, который можно передвигать и снимать амплитудные данные сигнала. А в частотной области есть ползунок, с помощью которого можно подстраивать относительный уровень сигнала. Подстроив основную гармонику на 0 дБ, можно посмотреть на сколько дБ меньше или больше уровень остальных гармоник относительно основной.
4.3 Вывод
В главе разработки программного обеспечения цифрового осциллографа-приставки была написана программа для микроконтроллера, которая инициализирует микроконтроллер, запускает АЦП и передает данные в ПК, и программа на LabVIEW, которая работает как виртуальный осциллограф. Здесь мы обрабатываем данные, пропускаем их через цифровой фильтр, обеспечиваем синхронизацию, визуализируем и совершая над сигналом ДПФ, рисуем спектр сигнала.
Программа для микроконтроллера приведена в приложении Б, а блок схема программы на LabVIEW – в приложении В.
Цифровой фильтр разработан по методу «окон», в результате которой получаются коэффициенты КИХ-фильтра. Свертка этих коэффициентов с входными отсчетами есть результат работы цифрового фильтра.
Интерфейс программы позволяет пользователю выбирать окна сглаживания в частотной области, переключать временные и амплитудные деления для удобства просмотра входного сигнала.