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

Тип:
Добавлен:

СОДЕРЖАНИЕ

Введение

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

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

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

.1 MEMS акселерометры

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

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

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

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

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

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

.2.1 Протокол передачи данных RS-232

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

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

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

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

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

Заключение

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

Приложение

ВВЕДЕНИЕ

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

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

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

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

Сфера применения MEMS акселерометров связана с устройствами, которые в процессе своей работы анализируют приложенное ускорение. В бесплатформенных инерционных навигационных системах (БИНС) трехосные MEMS акселерометры применяются для определения положения объекта в пространстве. Для беспилотных летательных аппаратов и иных мобильных объектов такие устройства являются наиболее востребованными и привлекательными. MEMS акселерометры также находят место в медицине и спорте: в хирургии в качестве вспомогательного средства навигации при совмещении искусственных суставов колена или бедра, с учетом индивидуальных особенностей пациента, в защитных каппах с целью выявления травм и сотрясений головного мозга, датчиках двигательной активности, стрельбе из лука и лыжных видах спорта .

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

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

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

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

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

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

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

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

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

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

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

.1 MEMS акселерометры

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

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

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

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

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

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

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

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

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

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

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

.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)

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

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

Ошибки показаний трёхосного акселерометра (ТОА) возникают из-за трех факторов [, , ]:

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

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

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

Из этого следует, что математическая модель сигнала трёхосного MEMS акселерометра будет выглядеть следующим образом [, ]:

,(3.6)

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

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

(3.7)

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

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

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

В [] показано, что для уменьшения погрешности оценивания следует выполнять усреднение калибровочных коэффициентов, найденных по числу сочетаний . Однако, с целью уменьшения времени калибровки можно использовать только шесть [] так называемых ортогональных положений: 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. РАЗРАБОТКА СТРУКТУРНОЙ СХЕМЫ УСТРОЙСТВА

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

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

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

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

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

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

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

Д - декодер;

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

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

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

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

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

.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 []).

Асинхронная передача данных с установленной скоростью осуществляется при синхронизации уровнем сигнала стартового импульса. Устройства, реализующие обмен по такому протоколу, принято обозначать аббревиатурой 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

.2.2 Протокол передачи данных 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 заключается в побитном вводе и выводе данных по фронтам сигнала синхронизации []. Установка данных при передаче и их чтение при приеме выполняются по противоположным фронтам. Эти варианты получили название режимов SPI и описываются двумя параметрами[]:- исходный уровень сигнала синхронизации (если CPOL=0, то линия синхронизации до начала цикла передачи и после его окончания имеет низкий уровень (т.е. первый фронт нарастающий, а последний - падающий), иначе, если CPOL=1, - высокий (т.е. первый фронт падающий, а последний - нарастающий)); - фаза синхронизации; от этого параметра зависит, в какой последовательности выполняется установка и чтение данных (если CPHA=0, то по переднему фронту в цикле синхронизации будет выполняться чтение данных, а затем, по заднему фронту, - установка данных; если же CPHA=1, то установка данных будет выполняться по переднему фронту в цикле синхронизации, а чтение - по заднему). Информация по режимам SPI обобщена в таблице 4.1.

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

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

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

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

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

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

- количество считываемых или передаваемых байт (multiple - 1/ single - 0);-AD0 - адрес регистра (в протоколе SPI количество регистров равно 64) устройства, в которое будет производиться запись;-DI0 - байт данных, записываемый в регистр с адресом AD5-AD0.

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

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

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

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

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

.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.ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ

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

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

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

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

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

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

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

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

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

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

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

Истинные положения (крен/тангаж), °/°Ошибка (крен/тангаж), °/°0/00,17/0,220/300,22/0,370/450,81/0,820/-300,24/0,60/-450,54/0,7830/00,37/0,4245/00,71/0,95-30/00,54/0,36-45/00,92/0,89

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

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

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

ЗАКЛЮЧЕНИЕ

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

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

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

ПРИЛОЖЕНИЕ 1

SPI-Master

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

package spi_pack isspi_states is (sleep, init, rw, iready, status); --iwait --ЦКА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;

-готовность передачи Status_REG: byte := 48;

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

Constant DATA_X0: byte := 50;

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

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

Constant POWER_CTRL_WORD: byte := 8;

--прерывание разрешено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;gyro_regs is array (0 to all_init_regs-1) of byte;init_addreses: gyro_regs := (BW_RATE, POWER_CTRL, INT_ENABLE,DATA_FORMAT);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 -- 2500spi_pack;

-объявление библиотекieee;ieee.std_logic_1164.all;ieee.std_logic_arith.all;ieee.std_logic_unsigned.all;work.spi_pack.all;spi_core is

(

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

cs: out std_logic;

-тактовый сигнал: 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: out std_logic;

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

);

end spi_core;Behavior of spi_core is

--делитель

Component divider is

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

generic (N : natural := 8);

(

-тактовый сигнал: in std_logic;

-сигнал сброса: in std_logic;

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

clk_out: out std_LOGIC;_scl: out std_LOGIC

);Component;

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

(

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

Rapid: natural := 115_200;

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

Fd: natural := 100;

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

n_bytes: natural := 6

);

port

(

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

clock : in std_logic;

-сигнал сброса : in std_logic;

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

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

-выход UART: out std_LOGIC

);Component;gyro_reads is array (0 to all_read_regs-1) of std_logic_vector(7 downto 0);new_data, new_data_temp, init_ready, rst: std_logic;clk, clk_for_scl, scl_ena: std_logic;wd: std_logic;n_bit: natural range 0 to 8*(all_read_regs + 1) -1;num_init: natural range 0 to all_init_regs;num_read: natural range 0 to all_read_regs;D_out: gyro_reads;ready: std_logic;data_tx: std_logic_vector(8*all_read_regs - 1 downto 0);cnt: std_logic;state, next_state: spi_states;_freq: divider generic map (N => 24) port map (clock, '1', clk, clk_for_scl);

(state, wd, init_ready, n_bit, new_data, num_read)(state) issleep => if (init_ready = '0') then next_state <= init;(wd = '1') then next_state <= status;(new_data = '1') then next_state <= rw;next_state <= sleep;if;init => if (n_bit = 15)next_state <= sleep;next_state <= init;if;status => if (n_bit = 15)next_state <= sleep;next_state <= status;if;rw => if (n_bit = (8*(all_read_regs + 1) -1))next_state <= iready;next_state <= rw;if;iready => next_state <= sleep;others => null;case;process;(clk, cnt)(cnt = '0') then n_bit <= 0;(clk'event and clk = '0') then_bit <= n_bit + 1;if;process;(clk)cycle: natural range 0 to Discrete;(clk'event and clk = '0') then<= next_state;cycle = 0wd <= '1';wd <= '0';if;cycle = Discrete - 1cycle := 0; cycle := cycle + 1;if;if;process; (clock, state, n_bit, num_init, num_read)cycle: natural range 0 to Discrete;data: std_logic_vector(15 downto 0); (clock'event and clock = '1') then(state) issleep => sdi <= '0';<= '1';_ena <= '0';<= '0'; init => cs <= '0';_ena <= '1'; := "00" & conv_std_logic_vector(init_addreses(num_init), 6) & conv_std_logic_vector(ctrl_data(num_init), 8);<= data(15 - n_bit);<= '1';status => cs <= '0';_ena <= '1';:= "10" & conv_std_logic_vector(Status_REG, 6) & "11111111";<= data(15 - n_bit);<= '1';rw => cs <= '0';_ena <= '1';:= "11" & conv_std_logic_vector(DATA_X0, 6) & "11111111";(n_bit < 16) then<= data(15 - n_bit);<= '1';if;<= '1';iready => cs <= '1';_ena <= '0';<= '0';<= '0';others => null;case;if;process; (clk, state, n_bit, new_data)data: gyro_reads;(clk'event and clk = '0') then(state) issleep => num_read <= 0;init => if (n_bit = 15) then(num_init = all_init_regs - 1)init_ready <= '1';init_ready <= '0';_init <= num_init + 1;if;if;status => if (n_bit = 8)new_data <= sdo;if;rw => if (n_bit > 7)data(num_read)(7 - (n_bit rem 8)) := sdo;(n_bit rem 8 = 7)num_read <= num_read + 1;if;if;iready => data_out <= data(1) & data(0);_data <= '0';_tx <= data(1) & data(0) & data(3) & data(2) & data(5) & data(4);others => null;case;if; process;<= '1' when scl_ena = '0' else clk_for_scl;_UART_Tx: tx_uart generic map (Rapid => 460_800,=> 100,_bytes => all_read_regs)map

(=> clock,=> not rx,_tx => data_tx,=> tx

);

end Behavior;

ПРИЛОЖЕНИЕ 2

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

library IEEE;IEEE.std_logic_1164.all;IEEE.std_logic_arith.all;IEEE.std_logic_unsigned.all;divider is(N : natural);

( : in std_logic;: in std_logic;

-rx: in std_logic;_out: out std_LOGIC;_scl: out std_LOGIC

);divider;behavior of divider is(clk, reset)cnt: natural := 0; (reset = '0') then:= 0; clk_out <= '0'; clk_scl <= '0'; (clk'event and clk = '1') thencnt is0 => clk_out <= '0'; clk_scl <= '1';N/2 => clk_out <= '1'; clk_scl <= '0';others => null;case;cnt = N -1 then cnt := 0;cnt := cnt + 1;if;if; process;behavior;

ПРИЛОЖЕНИЕ 3

Передатчик UARTUART_settings isFreq: natural := 24_000_000;package;IEEE;IEEE.std_logic_1164.all;IEEE.std_logic_arith.all;IEEE.std_logic_unsigned.all;work.UART_settings.all;tx_uart is

(: natural := 115_200;: natural := 100;_bytes: natural := 6

);

(: in std_logic;_tx: in std_logic_vector(8*n_bytes - 1 downto 0);: out std_LOGIC

);tx_uart;Behavior of tx_uart isdivider is(N : natural);

( : in std_logic;: in std_logic;_out: out std_LOGIC

);component;Discr: natural := Rapid/Fd;UART_states is (sleep, start, dtx, stop);state, next_state: UART_states := sleep;clk: std_logic;counter: natural range 0 to 15;cnt: std_logic;period: std_logic;sent: std_logic;num: natural range 0 to n_bytes;: divider generic map (N => Freq/Rapid) port map (clock, '1', clk);(clock, state, num)data: std_logic_vector(8*n_bytes - 1 downto 0);(clock'event and clock = '1') then(state) is(sleep) => tx <= '1';<= '0';<= '0';start => tx <= '0';<= '0';<= '0';(num = 0)data := data_tx;if;stop => tx <= '1';<= '0';<= '1';dtx => cnt <= '1';<= '0';counter /=8 then <= data(8*(n_bytes - num) - 8 + counter);tx <= data(8*(n_bytes - num) - 1) xor data(8*(n_bytes - num) - 2) xor(8*(n_bytes - num) - 3) xor data(8*(n_bytes - num) - 4) xor(8*(n_bytes - num) - 5) xor data(8*(n_bytes - num) - 6) xor(8*(n_bytes - num) - 7) xor data(8*(n_bytes - num) - 8) xor '1';if;others => null;case;if;process;(state, num, counter, period)(state) is(sleep) => if period = '1' then next_state <= start;next_state <= sleep;if;start => next_state <= dtx;stop => if (num = n_bytes) then_state <= sleep;_state <= start;if;dtx =>if (counter) = 7 then --no

-if (counter) = 8 then -- even or odd_state <= stop;next_state <= dtx; if;others => null;case;process;(clk, cnt)(cnt = '0') then counter <= 0;(clk'event and clk = '0') then<= counter + 1;if;process;(sent, period) (period = '1') then num <= 0;(sent'event and sent = '1') thennum = n_bytes then<= 0;<= num + 1;if;if;process; (clk)cycle: natural range 0 to Discr;(clk'event and clk = '0') then<= next_state;cycle = 0period <= '1';period <= '0';if;cycle = Discr - 1cycle := 0; cycle := cycle + 1;if;if;process; Behavior;

Copyright © 2018 WorldReferat.ru All rights reserved.