Устройство калибровки цифрового трёхосного MEMS акселерометра

Разработка программ, позволяющих выполнять инициализацию MEMS-акселерометра, принимать байты данных, соответствующих текущему угловому состоянию датчика и его ускорению. Погрешность определения угловых координат объекта по сигналам трёхосных MEMS.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 14.10.2016
Размер файла 4,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru//

Размещено на http://www.allbest.ru//

СОДЕРЖАНИЕ

Введение

1. Технико-экономическое обоснование темы

2. Составление технических условий и их обоснование

3. Теоретическая часть

3.1 MEMS акселерометры

3.2 Углы Эйлера-Крылова

3.3 Выставка по сигналам MEMS акселерометра

3.4 Калибровка MEMS акселерометра

4. Разработка структурной схемы устройства

4.1 Структурная схема устройства калибровки трёхосного MEMS акселерометра

4.2 Описание протоколов передачи данных, используемых в устройстве калибровки трёхосного MEMS акселерометра

4.2.1 Протокол передачи данных RS_232

4.2.2 Протокол передачи данных SPI

5. Разработка и расчет принципиальной электрической схемы

6. Экспериментальная часть

6.1 Описание экспериментальной установки

6.2 Методика эксперимента и его результаты

Заключение

Библиографический список

Приложение

ВВЕДЕНИЕ

акселерометр инициализация данные датчик

Актуальность темы обусловлена необходимостью создания аппаратно-программных средств калибровки трёхосных MEMS акселерометров с целью уменьшения погрешности определения угловых координат.

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

1.ТЕХНИКО-ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ ТЕМЫ

Сфера применения MEMS акселерометров связана с устройствами, которые в процессе своей работы анализируют приложенное ускорение. В бесплатформенных инерционных навигационных системах (БИНС) трехосные MEMS акселерометры применяются для определения положения объекта в пространстве. Для беспилотных летательных аппаратов и иных мобильных объектов такие устройства являются наиболее востребованными и привлекательными. MEMS акселерометры также находят место в медицине и спорте: в хирургии в качестве вспомогательного средства навигации при совмещении искусственных суставов колена или бедра, с учетом индивидуальных особенностей пациента, в защитных каппах с целью выявления травм и сотрясений головного мозга, датчиках двигательной активности, стрельбе из лука и лыжных видах спорта Максимов В.А. и др. Тезисы докладов участников программы «УМНИК» в Рязанской области // РГРТУ. _ 2015. - С. 81-82..

Преимущество MEMS акселерометров перед пьезоэлектрическими состоит в том, что они показывают ускорение даже в состоянии покоя, а не только при его измерении. Это позволяет с их помощью определить положение объекта относительно линии горизонта (выполнить выставку).

Погрешность определения по сигналам MEMS акселерометров внешнего ускорения и углового положения объекта во многом зависит от точности поправочных коэффициентов, вычисляемых в ходе процедуры калибровки. Поэтому появление большого количества устройств и систем, в которых используются MEMS датчики, и постоянное развитие технологий производства инерциальных сенсоров, идущих по пути уменьшения размеров и улучшения технических характеристик, требует решения задачи тестирования и калибровки MEMS акселерометров.

Габариты разрабатываемого устройства предполагается минимизировать, используя компактные управляемые поворотные платформы (например, фирмы Standa), а саму оценку калибровочных параметров сократить по времени, используя упрощенный алгоритм калибровки (что позволит сократить среднее время калибровки одного датчика до нескольких минут).

Таким образом, проектируемое устройство позволит в условиях лимита времени и при ограниченной номенклатуре стендового оборудования калибровать MEMS акселерометры мобильного объекта или беспилотного летательного аппарата.

2. СОСТАВЛЕНИЕ ТЕХНИЧЕСКИХ УСЛОВИЙ И ИХ ОБОСНОВАНИЕ

Интерфейс SPI имеет следующие преимущества перед другим распространенным протоколом внутрисхемного обмена I2C:

Частота дискретизации 100 Гц является типовой для большинства БИНС как гражданского, так и военного применения.

Диапазон измеряемых ускорений ±4g обеспечит работу датчика на мобильных маневрирующих объектах, а также обеспечит динамический диапазон измерений при больших (до единиц g) постоянных смещениях.

Поскольку калибровку предполагается проводить внутри помещений, то диапазон температур, при которых выполняется калибровка, выбран равным 10…40°С.

Количество выходных калибровочных параметров (постоянные смещения, масштабные коэффициенты и коэффициенты неортогональности осей чувствительности) выбрано в соответствии с математической моделью сигнала трёхосного MEMS акселерометра более подробно описанной в пункте 3.4.

3.Теоретическая часть

3.1 MEMS акселерометры

Разработка этих датчиков началась в начале 60-х годов прошлого века. Именно тогда и появилась аббревиатура MEMS - Micro Electro Mechanical Sensors (Systems), микроэлектромеханические сенсоры (системы). В настоящее время, в связи с колоссальным техническим прогрессом в области электроники, эти датчики представляют собой интегрированные системы измерения с размерами до нескольких миллиметров, объединяющие в себе механические и электрические компоненты, физически размещенные на одном кристалле[Распопов В.Я. Микромеханические приборы. - М. Машиностроение, 2007. - 400 с.].

Трёхосный MEMS акселерометр предназначен для измерения приложенного к нему ускорения. Это небольшой по размерам элемент со структурой в виде ячеек. Каждая ячейка - основа акселерометра - по сути дифференциальный конденсатор, который образован несколькими пластинами: центральной, которая является частью подвижной балки и двумя фиксированными внешними пластинами.

Ячейка измерения ускорения

Если датчик находится в состоянии покоя, то есть при отсутствии ускорения, то емкости конденсаторов, образованных центральной и внешними пластинами, равны. В противном случае, за счет массы центральной балки, вызывается её смещение в сторону одной из фиксированных пластин и отдаление от другой. Изменение дифференциальной емкости является электрической основой для работы нормирующей электроники (3.2).

Принцип формирования выходного напряжения акселерометра

Дифференциальное напряжение (обычно меандр с частотой 1 МГц), подаваемое на фиксированные пластины, равно по амплитуде, но сдвинуто по фазе на 180 градусов. Емкости и в состоянии покоя равны, поэтому выходное напряжение в их электрическом центре (т.е. на центральной пластине, закрепленной на подвижной балке) равно нулю. При смещении балки появляется выходное напряжение обусловленное рассогласованием емкостей . Сигнал с центральной пластины буферизуется усилителем А1 и подается на синхронный детектор. Для получения информации об амплитуде вследствие воздействия на фазу сигнала перемещения балки применяется синхронное детектирование. Напряжение выходного сигнала с синхронного детектора прямо пропорционально приложенному к датчику ускорению. Направление приложенного ускорения определяется знаком дифференциальной емкости .

В состоянии покоя трёхосный MEMS акселерометр показывает значение ускорения свободного падения g=9,81 м/с2. Это является существенным преимуществом над пьезоэлектрическими, которые показывают ускорение только в случае его изменения. Это позволяет выполнить выставку, т.е. определить положение объекта относительно линии горизонта.

3.2 Углы Эйлера-Крылова

Однозначно задать угловое положение твердого тела в пространстве позволяют три угла Эйлера-Крылова и , отсчитываемые против часовой стрелки. На рисунке показана одна из разновидностей углов Крылова - так называемые самолетные углы, используемые в авиации

Углы Эйлера-Крылова

Неподвижная система отсчета, в которой рассматривается угловое положение твердого тела (летательного аппарата), образована правой тройкой векторов . Ось направляется по местной вертикали от центра Земли, ось располагается в плоскости горизонта и направляется на географический север (N, North), а ось дополняет систему координат до правой. С подвижным объектом - например, летательным аппаратом (ЛА), - жестко связана подвижная система координат . Её ось направляется вдоль строительной (продольной) оси летательного аппарата, ось - вдоль нормальной в направлении зенита, а ось - вдоль поперечной в направлении правого борта ЛА. Угловое положение (ориентация) ЛА в системе координат задается курсом (), тангажом () и креном (). Наличие знака минус перед самолетными углами обусловлено тем, что их положительные значения, в отличие от классических углов Эйлера-Крылова, отсчитывается по ходу часовой стрелки. Итоговое положение ЛА определяется последовательностью поворотов

3.3 Выставка по сигналам MEMS акселерометра

Процедура определения начальных угловых координат называется выставкой. Для выставки крена и тангажа с помощью трёхосного MEMS акселерометра, выдающего ускорения , и по осям X, Y и Z связанной с ним подвижной системы координат OXYZ, соответствующие значения углов можно найти по проекциям вектора ускорения свободного падения g=9,81 м/с2 на каждую из осей, используя математический аппарат матриц поворота (3.1)

,

(3.1)

где и - углы Эйлера-Крылова, - матрицы поворота.

При наличии крена и тангажа и отсутствии внешних ускорений справедливо равенство

,

(3.2)

представляет собой значения с соответствующих выходов трехосного акселерометра.

Выразим из (3.2) вектор ускорения свободного падения, для чего умножим обе части равенства слева на матрицу :

.

(3.3)

С учетом свойства ортогональности () и правила транспонирования произведения матриц (), перепишем (3.3):

(3.4)

Из первых двух уравнений системы (3.4) получим

,

.

(3.5)

3.4 Калибровка MEMS акселерометра

Погрешность определения угловых координат объекта по сигналам трёхосных MEMS акселерометров во многом зависит от точности определения поправочных коэффициентов, вычисляемых в ходе калибровки.

Ошибки показаний трёхосного акселерометра (ТОА) возникают из-за трех факторов [J.C. Hung, J.R. Thacher, H.V. White. Calibration of accelerometer triad of an IMU with drifting Z-accelerometer bias //Proceedings of the IEEE Aerospace and Electronics Conference NAECON-1989. - Vol. 1. - Pp. 153-158., Kong X. Inertial navigation system algorithms for low cost IMU. - Sydney, 2000. - 178 p., Kian S.T., Award M., Dehghani A. et al. Triaxial accelerometer static calibration // Proceedings of the World Congress on Engineering. July 6 - 8, 2011, London, U.K. 2011. - Vol. III. - WCE 2011.]:

Наличие постоянного смещения;

«просачивание» сигнала из одного канала в другой, вызванное неколлинеарностью троек векторов, образующих две системы координат: связанную с калибровочной поворотной платформой OXYZ и связанную с ТОА (3.4);

Собственные фликкер-шумы.

Неколлинеарность осей систем координат объекта и систем координат акселерометра

Из этого следует, что математическая модель сигнала трёхосного MEMS акселерометра будет выглядеть следующим образом [Bekkeng J.K. Calibration of a novel MEMS inertial reference unit // IEEE Transactions on Instrumentation and Measurement. - 2009. - Vol. 58, No. 6. - Pp. 1967-1974., Болотин Ю.В., Голиков В.П., Ларионов С.В., Требухов А.В. Алгоритмы калибровки платформенной инерциальной навигационной системы // Гироскопия и навигация. - 2008. _ №3. - С. 13-26.]:

,

(3.6)

где - вектор показаний акселерометра, - диагональная матрица масштабных коэффициентов, - матрица коррекции, - проекции вектора ускорения свободного падения на оси правой тройки векторов системы координат , связанной с акселерометром, - вектор постоянных смещений, - вектор собственных шумов ТОА.

Без учета шума систему уравнений (3.6), выполнив операции умножения матриц и векторов, можно записать в виде:

(3.7)

Из (3.7) следует, что для нахождения калибровочных параметров для одной из осей требуется количество измерений, равное количеству неизвестных параметров этой оси: для оси Z - 2, для оси Y-3, для оси X-4.

Калибровка трёхосного MEMS акселерометра подразумевает установку датчика в априорно известные положения и решение переопределенной системы уравнений для его выходных сигналов. При выполнении данной процедуры принято устанавливать акселерометр в 12 фиксированных положений

12 калибровочных положений MEMS акселерометра

В [static / imported-files / tech_articles/Gyrocalibration_EDN_EU_7_2010.pdf. Дата обращения 30.03.15.] показано, что для уменьшения погрешности оценивания следует выполнять усреднение калибровочных коэффициентов, найденных по числу сочетаний . Однако, с целью уменьшения времени калибровки можно использовать только шесть [Wang L., Wang F. Intelligent calibration method of low cost MEMS inertial measurement unit for an FPGA-based navigation system // International Journal of Intelligent Engineering and System. - 2011. - Vol. 4, No. 2. - Pp. 32-41.] так называемых ортогональных положений: 2), 4), 6), 7), 8) и 11); в этом случае уменьшение числа сочетаний до приводит к увеличению погрешности измерения элементов матрицы масштабных коэффициентов k и элементов вектора смещений b не более чем на 0,21% и 0,02% соответственно. Следует отметить, что погрешность измерения элементов матрицы коррекции T может возрастать до сотен процентов , но, так как недиагональные элементы T обычно не превосходят , при малых углах крена и тангажа (не более 30°), погрешность измерения указанных углов увеличивается не более чем на 0,5°.

Запишем для каждой оси чувствительности ТОА переопределенную систему из 6-и линейных алгебраических уравнений (3.7) для ортогональных положений в матричном виде:

(3.8)

где матрицы, составленные из значений векторов ускорения свободного падения, действующего на оси X, Y и Z соответственно, идеального акселерометра, и единичного вектора такие что:

, ;

,

, ;

- значения вектора ускорения свободного падения, действующего на оси X, Y и Z ТОА, полученные экспериментально. -матрица значений неизвестных масштабных коэффициентов и постоянного смещения. Решения могут быть найдены с использованием псевдообратной матрицы Мура - Пенроуза:

,

,

,

(3.9)

где , ,

.

После нахождения псевдорешений для осей X и Y коэффициенты, определяющие неортогональность осей ТОА, находятся из соотношений (3.10):

(3.10)

4. РАЗРАБОТКА СТРУКТУРНОЙ СХЕМЫ УСТРОЙСТВА

4.1 Структурная схема устройства калибровки трёхосного MEMS акселерометра

Представленная ниже структурная схема реализует следующий алгоритм калибровки:

1) запуск поворотной платформы сигналом ПЭВМ,

2) передача данных с калибруемого акселерометра на ПЛИС или микропроцессор,

3) преобразование данных для их передачи по USB,

4) обработка данных в ПЭВМ.

Структурная схема устройства калибровки MEMS акселерометра

Д - декодер;

ВКП - вычислитель калибровочных параметров;

МУПП - модуль управления поворотными платформами;

ЖД - жёсткий диск.

Программное обеспечение (ПО) реализует вычисления по формулам (3.7) и (3.10).

4.2 Описание протоколов передачи данных, используемых в устройстве калибровки трёхосного MEMS акселерометра

4.2.1 Протокол передачи данных RS_232

Протокол RS-232 (префикс «RS» означает «рекомендуемый стандарт», Recommended Standard) является асинхронным дуплексным протоколом передачи информации между терминальным (DTE, Data Terminal Equipment) и приемным (DCE, Data Communications Equipment) оборудованием на расстоянии до 20 м. Стандарт RS-232 был введен в 1962 г. и обеспечивал максимальную скорость передачи данных всего 20 000 Бод (бит/c). Современное оборудование позволяет повысить скорость передачи до 921 600 Бод. Для обеспечения большей устойчивости к помехам информация по линии RS-232 передается с уровнями сигналов, отличающимися от стандартных 5 В: логической «1» соответствуют отрицательные уровни напряжения (-5...-15 В), а логическому «0» - положительные (5...15 В). Преобразование уровней выполняется специальной микросхемой - транслятором (в отладочном макете такой микросхемой является MAX232 [Oliver H. Bailey. Embedded Systems: Desktop Integration. Wordware Publishing, Inc. - 2005. _ Pp. 196-197.]).

Асинхронная передача данных с установленной скоростью осуществляется при синхронизации уровнем сигнала стартового импульса. Устройства, реализующие обмен по такому протоколу, принято обозначать аббревиатурой UART (от англ. Universal Asynchronous Receiver-Transmitter - универсальный асинхронный приемопередатчик). При использовании RS-232 передаваемая посылка состоит из стартового бита, 4...8 бит данных, бита четности (опционально) и одного, полутора или двух стоповых бит. Сигнальная линия может находиться в двух состояниях: неактивном включенном (логическая «1») и активном выключенном (логический «0») и в состоянии ожидания всегда включена. Для начала передачи данных линию нужно перевести в состояние «выключено», что соответствует установке старт-бита на рисунке (4.2). Биты, передаваемые после старт-бита, являются битами данных, причем первым передается младший бит (на рисунке 4.2 показана передача бита x"CB"). По окончании передачи байта данных устанавливается стоп-бит (высокий уровень в линии). Опционально (при использовании контроля четности) перед установкой стоп-бита может выполняться подсчет единиц в байте передаваемых данных и в зависимости от результата устанавливаться бит четности (parity bit). Бит четности, устанавливаемый по правилу even, дополняет число единиц в передаваемых битах данных до четного числа, а бит, устанавливаемый по правилу odd, - до нечетного на рисунке (4.2). Приемное устройство также подсчитывает число единиц и затем сверяет бит четности, что позволяет обнаруживать ошибки нечетных кратностей. Приемник и передатчик UART должны производить подсчет бита четности одинаково. Тактовый сигнал clk на рисунке (4.2) является внутренним и по линиям RS_232 не передается.

Передача одного байта данных

Передача данных между DCE и DTE устройствами

Обмен между DCE и DTE реализуется с использованием так называемого модемного кабеля (прямого кабеля), состоящего из трех линий: передачи tx, приема rx и линии нулевого потенциала GND (рис. 3). Стрелками на рисунке (4.3) показано направление передачи данных.

Граф состояний Цифрового конечного автомата передачи данных по протоколу RS-232

4.2.2 Протокол передачи данных SPI

SPI (Serial Peripheral Interface) является последовательным дуплексным синхронным протоколом обмена данными с периферийными устройствами на расстоянии до 5 м и скоростью передачи до 10 Мбит/с. Для передачи данных по линии SPI требуется наличие сигнала синхронизации SCLK. Протокол SPI образован по принципу Master - Slave. Сигнал SCLK генерирует только Master.

На рисунке (4.5) показано подключение одного устройства к шине SPI. Для того, чтобы устройство принимало и передавало данные необходимо, чтобы линия (разрешение передачи данных) была переведена в состояние логического нуля. В противном случае устройство не активно. Передача данных по линии MOSI (Master Output - Slave Input) происходит синхронно с сигналом SCLK. Приём данных осуществляется по линии MISO (Master Input - Slave Output) синхронно с сигналом SCLK по переднему или заднему фронту (в зависимости от режима работы).

Подключение одного устройства к шине SPI

Протокол передачи SPI заключается в побитном вводе и выводе данных по фронтам сигнала синхронизации [Болл Стюарт Р. Аналоговые интерфейсы микроконтроллеров. -- М.: Додэка-XXI, 2007. -- 360 с]. Установка данных при передаче и их чтение при приеме выполняются по противоположным фронтам. Эти варианты получили название режимов SPI и описываются двумя параметрами[Лапин А.А. Интерфейсы. Выбор и реализация. -- М.: Техносфера, 2005. ]:

CPOL - исходный уровень сигнала синхронизации (если CPOL=0, то линия синхронизации до начала цикла передачи и после его окончания имеет низкий уровень (т.е. первый фронт нарастающий, а последний - падающий), иначе, если CPOL=1, - высокий (т.е. первый фронт падающий, а последний - нарастающий));

CPHA - фаза синхронизации; от этого параметра зависит, в какой последовательности выполняется установка и чтение данных (если CPHA=0, то по переднему фронту в цикле синхронизации будет выполняться чтение данных, а затем, по заднему фронту, - установка данных; если же CPHA=1, то установка данных будет выполняться по переднему фронту в цикле синхронизации, а чтение - по заднему). Информация по режимам SPI обобщена в таблице 4.1.

Режимы работы интерфейса SPI

Для передачи или приема одного байта данных по интерфейсу SPI необходимо передать два байта: первый - служебный, который определяет направление передачи и адрес регистра устройства; второй - информационный.

Запись одного байта данных показана на рисунке (4.6).

Запись одного байта данных по протоколу SPI

Обозначения параметров:

- чтение или запись (read - 1/ write - 0);

- количество считываемых или передаваемых байт (multiple - 1/ single - 0);

AD5-AD0 - адрес регистра (в протоколе SPI количество регистров равно 64) устройства, в которое будет производиться запись;

DI7-DI0 - байт данных, записываемый в регистр с адресом AD5-AD0.

Данные передаются последовательно, бит за битом, начиная со старшего. При передаче нескольких байт данных, байты данных, идущие за байтом, записываемым в регистр с адресом AD5-AD0, автоматически записываются в следующий регистр с адресом AD5-AD0+1 (рисунок 4.7):

Запись двух байт данных по протоколу SPI

Чтение заключается в получении устройством служебного байта по линии SDO и выдаче байт данных, хранящихся в регистре с адресом AD5-AD0, по линии SDI (рисунок 4.8):

Чтение одного байта данных по протоколу SPI

Чтение нескольких байт данных отличается от одного также как и запись. На рисунке (4.9) представлено чтение двух байт данных по протоколу SPI.

Чтение двух байт данных по протоколу SPI

4.3 Разработка и расчет принципиальной электрической схемы

При расчете принципиальной электрической схемы в первую очередь требуется выбрать режим питания устройства. Для разрабатываемого устройства был выбран общий режим питания, то есть все компоненты питаются от одного источника. Таким источником является USB порт, имеющий следующие параметры: выходное напряжение _ +5В, выходной ток - 500мА. Собственно, весь расчет направлен на то, чтобы удостовериться в достаточности тока и напряжения шины USB для питания преобразователя данных FT232R, микроконтроллера Atmega328 и цифрового трёхосного MEMS акселерометра ADXL345.

Подключение устройства преобразования к USB

Устройство преобразования данных может потреблять не больше 100 мА []. Во избежание сбоев при работе с максимальным током было решено взять значение входного тока 80 мА. Следовательно, значение сопротивления резистора :

,

.

Номинал резистора был выбран из ряда Е24 и равен 62 Ома.

Подключение светодидов к устройству преобразования данных

Из входной характеристики светодиода [] (рисунок 5.3) найдем значение напряжения на VD1 и VD2 для значения тока , а также напряжение на VD3 для тока .

Входная характеристика диода

Для значения напряжения 3,3 В рассчитаем резисторы и :

,

.

Для значения напряжения 3,2 В рассчитаем резисторы :

Номиналы резисторов были выбраны из ряда Е24 и равны 27 Ом и 200 Ом.

Для питания цифрового акселерометра и микроконтроллера необходимо напряжение 3,3 В. Так как шина USB выдает только 5 В, то требуемое напряжение получим с помощью преобразователя напряжения LM7833, выходное напряжение которого 3,3 В и минимальный выходной ток 5 мА. Цифровой акселерометр ADXL345 в режиме измерения потребляет 23 мкА и 0,1 мкА в режиме ожидания. Микроконтроллер Atmega328 потребляет 0,2 мА в рабочем режиме и 0,1 мкА в режиме ожидания. Из этого следует, что выходных токов и напряжений LM7833 достаточно для работы устройства.

Сброс микроконтроллера Atmega328

Для сброса микроконтроллера [] (рисунок 5.4) постоянная времени ф=RC должна быть не меньше 1 мс. Исходя из этих условий, номиналы резистора и конденсатора были выбраны из ряда Е24 следующим образом:

Номиналы конденсаторов (рисунок 5.5) , и взяты из ряда Е24 в соответствии с [].

Подключение преобразователя напряжения LM7833

Кварцевый резонатор ZQ1 в соответствии с [] может быть только на 8 МГц.

5.ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ

5.1 Описание экспериментальной установки

Экспериментальная установка представляет собой две поворотные платформы, выполняющие вращение во взаимно перпендикулярных плоскостях, на одной из которых фиксируется MEMS акселерометр, устройство преобразования для передачи данных по протоколу RS-232 через USB, микропроцессор или ПЛИС и ПЭВМ с программным обеспечением для калибровки. Выше описанная установка, собранная из поворотных платформ фирмы Standa (модель 8MR191-28) представлена на (6.1) и (6.2). Ниже представлена фотография установки не в рабочем положении: линейный транслятор установлен не вертикально.

Расположение ТОА на поворотной платформе в процессе калибровки

Вид экспериментальной установки

5.2 Методика эксперимента и его результаты

Целью эксперимента является оценка погрешности выставки по сигналам откалиброванного MEMS акселерометра.

После соединения всех компонентов экспериментальной установки поворотные платформы устанавливаются в нулевые положения, т.е. крен и тангаж при выставленной по уровню горизонта поверхности, на которой расположены платформы, должны быть равны нулю. В этом положении на ПЭВМ запускается программа, фиксирующая эти углы. Окно программы представлено на рисунке (6.3)

Окно программы, фиксирующей угловое положение ТОА

Далее, на поворотной платформе на определенное значение изменяется один из углов (крен или тангаж), в то время как второй остается неизменным. Это также фиксируется программой в ПЭВМ. После того, как были получены значения выходных сигналов акселерометра во всех угловых положениях (крена или тангажа) диапазона измерений, поворотная платформа, угловое положение которой менялось, выставляется в ноль и измерения повторяются со второй поворотной платформой.

Значения выходных сигналов MEMS акселерометра, полученные в процессе эксперимента, в истинных угловых положениях представлены в таблице 6.1.

Результаты эксперимента

Истинные положения (крен/тангаж), °/°

Ошибка (крен/тангаж), °/°

0/0

0,17/0,22

0/30

0,22/0,37

0/45

0,81/0,82

0/-30

0,24/0,6

0/-45

0,54/0,78

30/0

0,37/0,42

45/0

0,71/0,95

-30/0

0,54/0,36

-45/0

0,92/0,89

По полученным данным были построены зависимости (6.4) и (6.5), показывающие увеличение погрешности показаний ТОА при увеличении крена и тангажа.

Увеличение ошибки показаний акселерометра при изменении крена в диапазоне [-45°;45°] и заданном значении тангажа

Увеличение ошибки показаний акселерометра при изменении тангажа в диапазоне [-45°;45°] и заданном значении крена

ЗАКЛЮЧЕНИЕ

Вопросы калибровки трехосных MEMS акселерометров являются одним из важных факторов точности определения пространственного положения безинерционной навигационной системы и тем самым дают направление для разработки устройств калибровки.

В процессе выполнения выпускной квалификационной работы было разработано устройство калибровки трёхосных MEMS акселерометров. Был проведен обзор существующих методов калибровки и робастных к ошибкам измерений численных алгоритмов оптимизации. Были разработаны структурная и принципиальная схемы готового устройства.

Разработанное устройство может быть использовано для калибровки акселерометров поддерживающих протоколы передачи данных SPI или I2C. В соответствии с техническим заданием оно обеспечивает абсолютную ошибку определения крена и тангажа по откалиброванному акселерометру не превышающую 1 градус в заданном диапазоне температур.

ПРИЛОЖЕНИЕ 1

SPI-Master

--объявление пакета(собственной библиотеки)

package spi_pack is

type spi_states is (sleep, init, rw, iready, status); --iwait --ЦКА

subtype byte is natural range 0 to 255;

--регистр управления режимами работы по мощности и частотой вывода данных(дискретизации)

Constant BW_RATE: byte := 44;

--регистр управления спящим режимом и частотой показаний в спящем режиме

Constant POWER_CTRL: byte := 45;

--регистр управления прерыванием

Constant INT_ENABLE: byte := 46;

--регистр управления логическим уровнем прерывания, выравниванием бит данных и разрядностью

Constant DATA_FORMAT: byte := 49;

--готовность передачи

Constant Status_REG: byte := 48;

--ускорение акселерометра по трем осям чувствительности

Constant DATA_X0: byte := 50;

--частота дискретизации 100Гц, нормальный режим работы (по мощности)

Constant BW_RATE_WORD: byte := 10;--14;--12

--нормальный режим работы, режим измерения

Constant POWER_CTRL_WORD: byte := 8;

--прерывание разрешено

Constant INT_ENABLE_WORD: byte := 128;

--диапазон измеряемых ускорений _ ±4g, выравнивание бит - по левому краю, 11 разрядов

Constant DATA_FORMAT_WORD: byte := 13;

--кол-во инициализируемых регистров

Constant all_init_regs: byte := 4;

--кол-во читаемых регистров(по 2 байта на каждую ось чувствительности)

Constant all_read_regs: byte := 6;

type gyro_regs is array (0 to all_init_regs-1) of byte;

Constant init_addreses: gyro_regs := (BW_RATE, POWER_CTRL, INT_ENABLE,DATA_FORMAT);

Constant ctrl_data: gyro_regs := (BW_RATE_WORD, POWER_CTRL_WORD, INT_ENABLE_WORD, DATA_FORMAT_WORD);

--количество тактовых импульсов(частота дискретизации)1МГЦ/100Гц

Constant Discrete: natural range 0 to 16_383 := 10_000;--1_000_000/625 ;--10_000 -- 2500

end spi_pack;

--объявление библиотек

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

use work.spi_pack.all;

entity spi_core is

port

(

--сигнал разрешения передачи данных (передача по низкому логическому уровню)

cs: out std_logic;

--тактовый сигнал

scl: out std_logic;

--выходной сигнал SPI для подачи на вход акселерометра

sdi: out std_logic;

--входящий высокочастотный сигнал

clock: in std_logic;

--входной сигнал SPI для чтения данных с выхода SDO акселерометра

sdo: in std_logic;

--биты данных для одной оси чувчтвительности

data_out: out std_logic_vector(15 downto 0);

--выход передачи UART

tx: out std_logic;

--вход приема UART

rx: in std_logic

);

end spi_core;

architecture Behavior of spi_core is

--делитель

Component divider is

--настроечная константа

generic (N : natural := 8);

port

(

--тактовый сигнал

clk : in std_logic;

--сигнал сброса

reset: in std_logic;

--сигналы установки и чтения по разным фронтам

clk_out: out std_LOGIC;

clk_scl: out std_LOGIC

);

end Component;

--передатчик

Component tx_uart is

generic

(

--скорость передачи

Rapid: natural := 115_200;

--частота дискретизации

Fd: natural := 100;

--кол-во передаваемых байт по умолчанию

n_bytes: natural := 6

);

port

(

--тактовый высокочастотный сигнал

clock : in std_logic;

--сигнал сброса

rst : in std_logic;

--массив бит входных данных длиной 8*кол-во байт

data_tx: in std_logic_vector(8*n_bytes - 1 downto 0);

--выход UART

tx: out std_LOGIC

);

end Component;

type gyro_reads is array (0 to all_read_regs-1) of std_logic_vector(7 downto 0);

signal new_data, new_data_temp, init_ready, rst: std_logic;

signal clk, clk_for_scl, scl_ena: std_logic;

signal wd: std_logic;

signal n_bit: natural range 0 to 8*(all_read_regs + 1) -1;

signal num_init: natural range 0 to all_init_regs;

signal num_read: natural range 0 to all_read_regs;

signal D_out: gyro_reads;

signal ready: std_logic;

signal data_tx: std_logic_vector(8*all_read_regs - 1 downto 0);

signal cnt: std_logic;

signal state, next_state: spi_states;

begin

Div_freq: divider generic map (N => 24) port map (clock, '1', clk, clk_for_scl);

process (state, wd, init_ready, n_bit, new_data, num_read)

begin

case (state) is

when sleep => if (init_ready = '0') then next_state <= init;

elsif (wd = '1') then next_state <= status;

elsif (new_data = '1') then next_state <= rw;

else next_state <= sleep;

end if;

when init => if (n_bit = 15)

then next_state <= sleep;

else next_state <= init;

end if;

when status => if (n_bit = 15)

then next_state <= sleep;

else next_state <= status;

end if;

when rw => if (n_bit = (8*(all_read_regs + 1) -1))

then next_state <= iready;

else next_state <= rw;

end if;

when iready => next_state <= sleep;

when others => null;

end case;

end process;

process (clk, cnt)

begin

if (cnt = '0') then n_bit <= 0;

elsif (clk'event and clk = '0') then

n_bit <= n_bit + 1;

end if;

end process;

process (clk)

variable cycle: natural range 0 to Discrete;

begin

if (clk'event and clk = '0') then

state <= next_state;

if cycle = 0

then wd <= '1';

else wd <= '0';

end if;

if cycle = Discrete - 1

then cycle := 0;

else cycle := cycle + 1;

end if;

end if;

end process;

process (clock, state, n_bit, num_init, num_read)

variable cycle: natural range 0 to Discrete;

variable data: std_logic_vector(15 downto 0);

begin

if (clock'event and clock = '1') then

case (state) is

when sleep => sdi <= '0';

cs <= '1';

scl_ena <= '0';

cnt <= '0';

when init => cs <= '0';

scl_ena <= '1';

data := "00" & conv_std_logic_vector(init_addreses(num_init), 6) & conv_std_logic_vector(ctrl_data(num_init), 8);

sdi <= data(15 - n_bit);

cnt <= '1';

when status => cs <= '0';

scl_ena <= '1';

data := "10" & conv_std_logic_vector(Status_REG, 6) & "11111111";

sdi <= data(15 - n_bit);

cnt <= '1';

when rw => cs <= '0';

scl_ena <= '1';

data := "11" & conv_std_logic_vector(DATA_X0, 6) & "11111111";

if (n_bit < 16) then

sdi <= data(15 - n_bit);

else

sdi <= '1';

end if;

cnt <= '1';

when iready => cs <= '1';

scl_ena <= '0';

sdi <= '0';

cnt <= '0';

when others => null;

end case;

end if;

end process;

process (clk, state, n_bit, new_data)

variable data: gyro_reads;

begin

if (clk'event and clk = '0') then

case (state) is

when sleep => num_read <= 0;

when init => if (n_bit = 15) then

if (num_init = all_init_regs - 1)

then init_ready <= '1';

else init_ready <= '0';

num_init <= num_init + 1;

end if;

end if;

when status => if (n_bit = 8)

then new_data <= sdo;

end if;

when rw => if (n_bit > 7)

then data(num_read)(7 - (n_bit rem 8)) := sdo;

if (n_bit rem 8 = 7)

then num_read <= num_read + 1;

end if;

end if;

when iready => data_out <= data(1) & data(0);

new_data <= '0';

data_tx <= data(1) & data(0) & data(3) & data(2) & data(5) & data(4);

when others => null;

end case;

end if;

end process;

scl <= '1' when scl_ena = '0' else clk_for_scl;

Tx_UART_Tx: tx_uart generic map (Rapid => 460_800,

Fd => 100,

n_bytes => all_read_regs)

port map

(

clock => clock,

rst => not rx,

data_tx => data_tx,

tx => tx

);

end Behavior;

ПРИЛОЖЕНИЕ 2

Параметрический делитель частоты с асинхронным сбросом

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_arith.all;

use IEEE.std_logic_unsigned.all;

entity divider is

generic (N : natural);

port

(

clk : in std_logic;

reset: in std_logic;

--rx: in std_logic;

clk_out: out std_LOGIC;

clk_scl: out std_LOGIC

);

end divider;

architecture behavior of divider is

begin

process (clk, reset)

variable cnt: natural := 0;

begin

if (reset = '0') then

cnt := 0; clk_out <= '0'; clk_scl <= '0';

elsif (clk'event and clk = '1') then

case cnt is

when 0 => clk_out <= '0'; clk_scl <= '1';

when N/2 => clk_out <= '1'; clk_scl <= '0';

when others => null;

end case;

if cnt = N -1 then cnt := 0;

else cnt := cnt + 1;

end if;

end if;

end process;

end behavior;

ПРИЛОЖЕНИЕ 3

Передатчик UART

package UART_settings is

Constant Freq: natural := 24_000_000;

end package;

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_arith.all;

use IEEE.std_logic_unsigned.all;

use work.UART_settings.all;

entity tx_uart is

generic

(

Rapid: natural := 115_200;

Fd: natural := 100;

n_bytes: natural := 6

--parity: parity_bit := no

);

port

(

clock : in std_logic;

data_tx: in std_logic_vector(8*n_bytes - 1 downto 0);

tx: out std_LOGIC

);

end tx_uart;

architecture Behavior of tx_uart is

component divider is

generic (N : natural);

port

(

clk : in std_logic;

reset: in std_logic;

clk_out: out std_LOGIC

);

end component;

Constant Discr: natural := Rapid/Fd;

type UART_states is (sleep, start, dtx, stop);

signal state, next_state: UART_states := sleep;

signal clk: std_logic;

signal counter: natural range 0 to 15;

signal cnt: std_logic;

signal period: std_logic;

signal sent: std_logic;

signal num: natural range 0 to n_bytes;

begin

div: divider generic map (N => Freq/Rapid) port map (clock, '1', clk);

process(clock, state, num)

variable data: std_logic_vector(8*n_bytes - 1 downto 0);

begin

if (clock'event and clock = '1') then

case (state) is

when(sleep) => tx <= '1';

cnt <= '0';

sent <= '0';

when start => tx <= '0';

sent <= '0';

cnt <= '0';

if (num = 0)

then data := data_tx;

end if;

when stop => tx <= '1';

cnt <= '0';

sent <= '1';

when dtx => cnt <= '1';

sent <= '0';

if counter /=8 then

tx <= data(8*(n_bytes - num) - 8 + counter);

else tx <= data(8*(n_bytes - num) - 1) xor data(8*(n_bytes - num) - 2) xor

data(8*(n_bytes - num) - 3) xor data(8*(n_bytes - num) - 4) xor

data(8*(n_bytes - num) - 5) xor data(8*(n_bytes - num) - 6) xor

data(8*(n_bytes - num) - 7) xor data(8*(n_bytes - num) - 8) xor '1';

end if;

when others => null;

end case;

end if;

end process;

process(state, num, counter, period)

begin

case (state) is

when(sleep) => if period = '1' then next_state <= start;

else next_state <= sleep;

end if;

when start => next_state <= dtx;

when stop => if (num = n_bytes) then

next_state <= sleep;

else

next_state <= start;

end if;

when dtx =>if (counter) = 7 then --no

--if (counter) = 8 then -- even or odd

next_state <= stop;

else next_state <= dtx;

end if;

when others => null;

end case;

end process;

process (clk, cnt)

begin

if (cnt = '0') then counter <= 0;

elsif (clk'event and clk = '0') then

counter <= counter + 1;

end if;

end process;

process (sent, period)

begin

if (period = '1') then num <= 0;

elsif (sent'event and sent = '1') then

if num = n_bytes then

num <= 0;

else

num <= num + 1;

end if;

end if;

end process;

process (clk)

variable cycle: natural range 0 to Discr;

begin

if (clk'event and clk = '0') then

state <= next_state;

if cycle = 0

then period <= '1';

else period <= '0';

end if;

if cycle = Discr - 1

then cycle := 0;

else cycle := cycle + 1;

end if;

end if;

end process;

end Behavior;

Размещено на Allbest.ru


Подобные документы

  • Программы, необходимые для правильной работы устройства калибровки цифрового акселерометра и реализующие обмен данными по протоколу SPI между акселерометром и ПЛИС, а также RS-232 для передачи данных с макета на ПЭВМ. Инициализация MEMS-акселерометра.

    реферат [9,5 K], добавлен 13.11.2016

  • Важные отличительные особенности FLOW-3D. Мультиблочные сетки для эффективности и скорости. Спектры промышленных приложений: авиакосмос, литье, покрытие, потребительские товары, струйне принтеры, судостроение, MEMS, гидротехника и окружающая среда.

    реферат [2,3 M], добавлен 14.11.2008

  • Создание программ, позволяющих создавать базы данных. Создание таблицы базы данных. Создание схемы данных. Создание форм, отчетов, запросов. Увеличение объема и структурной сложности хранимых данных. Характеристика системы управления базой данных Access.

    курсовая работа [2,1 M], добавлен 17.06.2013

  • Суть MIDI-технологии и типы музыкальных программ. Основные возможности программ: редакторов цифрового аудио, секвенсоров (программ для написания музыки), анализаторов и реставраторов аудио, трекеров. Копирование и сжатие цифрового звука с компакт-дисков.

    реферат [21,1 K], добавлен 27.02.2009

  • Решение задачи средствами прикладных программ. Разработка алгоритмов и структур данных. Реализация задачи определения статистических данных по успеваемости на факультете на языке программирования C#. Программа перевода чисел в различные системы счисления.

    курсовая работа [519,9 K], добавлен 03.01.2015

  • Аналіз областей застосування та технічних рішень до побудови систем керування маніпуляторами. Виведення рівнянь, які описують маніпулятор як виконавчий об’єкт керування. Зв’язок значень кутів акселерометра з формуванням сигналів управління маніпулятором.

    дипломная работа [2,3 M], добавлен 26.07.2013

  • Основная цель этого блока, ввод данных для работы программы. Дополнительная цель, вывод информации. Два условия проверки вводимых данных. Первое условие проверки на количество точек. Второе, на правильность ввода координат точек. Созданные подпрограммы.

    лабораторная работа [154,3 K], добавлен 13.02.2009

  • Разработка алгоритма, который может выполнить расчет определения координат точек кинематической схемы и выполнить анимацию (визуальное отображение перемещений объектов) кинематической схемы с использованием пакета MathCad. Расчет кинематической схемы.

    курсовая работа [1,1 M], добавлен 10.07.2012

  • Алгоритмизация и программирование управления моментом старта и вектором скорости ракеты; перехват спутника, летящего по круговой орбите. Вычисление команды на перемещение объекта Raketa и координат объекта Sputnik; реализация контакта между объектами.

    курсовая работа [17,2 K], добавлен 14.02.2014

  • Дослідження вбудованого акселерометра, розробка алгоритму автоматичного підрахунку фізичнх вправ і його практична реалізація у вигляді програмного продукту для смартфонів iPhone. Налаштування сервера. Поширення програмного продукту, його тестування.

    дипломная работа [2,6 M], добавлен 14.12.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.