It is currently Thu Dec 13, 2018 1:55 am

НИЛ АСЭМ Научно - исследовательская лаборатория автоматизированных систем экологического мониторинга

L3G4200D: трехосевой цифровой гироскоп

by Admin » Sun Apr 01, 2018 2:35 pm

L3G4200D: трехосевой цифровой гироскоп для точного позиционирования приборного столика.

Image Image Image

Микросхема L3G4200D компании STMicroelectronics (ST) представляет собой миниатюрный сверхстабильный датчик перемещений в 3D пространстве, изготовленный по MEMS технологии. Он может работать как гироскоп в авионике, автомобильной промышленности и других приложениях, которые требуют определения положения объекта в пространстве.


Основные особенности сенсора L3G4200D

• Три выбираемые полные шкалы (250/500/2000 dps).
• Цифровые выходные интерфейсы I2C и SPI.
• 16-битные выходные данные.
• Встроенный сенсор температуры, с которого можно считать 8-битные данные.
• Два дополнительных выходных сигнала (прерывание и готовность данных).
• Встроенные фильтры ФНЧ и ФВЧ, полосу пропускания которых можно выбрать.
• Чрезвычайно высокая стабильность показаний по температуре и времени.
• Широкий диапазон питающих напряжений 2.4V .. 3.6V.
• Входы и выходы (IO), совместимые с низковольтной логикой (1.8V).
• Встроенные режимы отключения (power-down) и сна (sleep).
• Встроенный FIFO.
• Высокая устойчивость к ударам и вибрациям.
• Расширенный рабочий температурный диапазон (-40°C .. +85°C).
• Миниатюрный пластмассовый корпус LGA-16 (4x4x1.1 mm).
• Упаковка совместима со стандартами ECOPACK® RoHS и "Green".

Области применения L3G4200D:

• Игры и устройства ввода для систем виртуальной реальности.
• Управление движением, интерфейсы MMI.
• Системы навигации GPS.
• Приборы и робототехника.

Общее описание L3G4200D

L3G4200D является трехосевым датчиком угловых перемещений с низким энергопотреблением, обладающим также чрезвычайной стабильностью нулевого уровня и высокой точностью показаний, которая сохраняется при изменениях температуры и длительной работе датчика. В микросхему, кроме чувствительного элемента, встроен интерфейс I2C/SPI, через который можно передать во внешний мир скорость изменения угла по трем осям (этот интерфейс используется для подключения к внешнему микроконтроллеру). Чувствительный элемент датчика изготовлен с использованием специальной микромеханической обработки, разработанной STMicroelectronics, чтобы выполнить инерционные сенсоры и актуаторы на кремниевых пластинах. Внешний цифровой интерфейс реализован по CMOS-технологии, позволяющей создать высокоинтегрированный дизайн, наилучшим образом подстроенный под характеристики чувствительного элемента датчика. L3G4200D имеет полные шкалы ±250/±500/±2000 dps, и может измерять скорость изменения угла в выбранной пользователем полосе частот. L3G4200D выпускается в пластмассовом корпусе land grid array (LGA) и может работать в диапазоне температур -40°C .. +85°C.


1. Блок-схема и описание выводов L3G4200D:
Image
Рис.1. Блок-схема L3G4200D


Пояснения к блок-схеме:
MUX мультиплексор сигналов.
CHARGE AMP усилитель заряда.
MIXER смеситель.
LOW-PASS FILTER фильтр низкой частоты, ФНЧ.
ADC1 аналого-цифровой преобразователь (АЦП) для сигналов с датчиков углового ускорения.
DIGITAL FILTERING блок цифровой фильтрации.
I2C, SPI блок внешних интерфейсов.
CS, SCL/SPC, SDA/SDO/SDI, SDO внешние сигнальные линии цифровых интерфейсов.
DRIVING MASS чувствительная к ускорениям масса.
Feedback loop петля обратной связи.
TEMPERATURE SENSOR термодатчик.
ADC2 аналого-цифровой преобразователь (АЦП) для сигнала с термодатчика.
REFERENCE источник опорного сигнала.
TRIMMING CIRCUITS узлы подстройки.
FIFO буфер выходных данных с датчика угловых ускорений.
CLOCK & PHASE GENERATOR генератор тактов и фаз.
CONTROL LOGIC & INTERRUPT GEN управляющая логика и генерация прерываний.
INT1, DRDY/INT2 внешние выходные сигналы, которые могут быть заведены на хост (управляющий микроконтроллер) для выдачи аппаратных прерываний или пробуждения.

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

Описание выводов
Image
Рис. 2. Подключение в внешним выводам корпуса.


Чувствительность

Гироскоп по скорости изменения угла является устройством, которое положительные выходные значения для поворота против часовой стрелки вокруг измеряемых осей. Чувствительность описывает усиление сенсора и может быть определена заданием ускорения изменения на определенный угол. Микросхема спроектирована так, что измеряемые значения изменяются очень незначительно с течением времени и под воздействием изменений температуры.


Нулевой уровень (Zero-rate level)

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


Стабильность по времени и температуре

Благодаря уникальной технологии и оптимизированному дизайну гироскопы компании ST могут гарантировать превосходные значения для механической массы MEMS и качество интерфейса ASIC, что распространяется на беспрецедентный уровень стабильности в работе по температуре и времени.


Управляющий код для микроконтроллера (на Proton BASIC Compiler):
Code: Select all
Symbol SDA=PORTA.5 'SDA PIN 0 ' P0 transceives to/from SDA
Symbol SCL=PORTB.0 'SCL PIN 1 ' P1 sends clock pulses
'----[Registers]--------------------------------------------------------------

WRITE_Data CON $D2 'Used to perform a Write operation
READ_Data CON $D3 'Used to perform a Read operation

CTRL_REG1 CON $20 'SUB $A0
CTRL_REG3 CON $22
CTRL_REG4 CON $23
CTRL_REG5 CON $24
STATUS_REG CON $27
OUT_X_INC CON $A8

Dim I2C_DATA As Byte 'I2C_DATA VAR Byte
Dim I2C_LSB As Bit 'I2C_LSB VAR Bit
Dim I2C_REG As Byte 'I2C_REG VAR Byte
Dim I2C_VAL As Byte 'I2C_VAL VAR Byte
Dim X As Word 'X VAR Word
Dim Y As Word 'Y VAR Word
Dim Z As Word 'Z VAR Word
Dim rawl As Word 'rawl VAR Word
Dim rawh As Word 'rawh VAR Word

' -----[ Main Routine ]-------------------------------------------------------
PAUSE 100

' Set up data ready signal
I2C_REG = CTRL_REG3
I2C_VAL = $08
GoSub I2C_Write_Reg

' Set up "block data update" mode
I2C_REG = CTRL_REG4
I2C_VAL = $80
GoSub I2C_Write_Reg

' Send the get continuous output command
I2C_REG = CTRL_REG1
I2C_VAL = $1F
GoSub I2C_Write_Reg

DO
GoSub Gyro_Get_Raw ' Get X,Y,Z data

' divide X, Y, Z, by 114, handle negatives since BS2 divide can't do negatives
If (X.BIT15) Then
X = (Abs X) / 114
X = -X
Else
X = X / 114
EndIf
If (Y.BIT15) Then
Y = (Abs Y) / 114
Y = -Y
Else
Y = Y / 114
EndIf
If (Z.BIT15) Then
Z = (Abs Z) / 114
Z = -Z
Else
Z = Z / 114
EndIf

Print At 1,1,"RAW X = ",11, SDec X, CR 'Debug HOME, "RAW X = ",11, SDec X, CR ' Display data
Print At 2,1,"RAW Y = ",11, SDec Y, CR 'Debug "RAW Y = ",11, SDec Y, CR
Print At 3,1"RAW Z = ",11, SDec Z, CR 'Debug "RAW Z = ",11, SDec Z, CR
LOOP
' -----[ Subroutines ]--------------------------------------------------------
Gyro_Get_Raw: ' Gyro module subroutine
GoSub Wait_For_Data_Ready

GoSub I2C_Start

I2C_DATA = WRITE_DATA
GoSub I2C_Write ' Read the data starting at pointer register
I2C_DATA = OUT_X_INC
GoSub I2C_Write

GoSub I2C_Stop

GoSub I2C_Start
I2C_DATA = READ_DATA
GoSub I2C_Write

GoSub I2C_Read
rawl = I2C_DATA ' Read in the high byte
GoSub I2C_ACK

GoSub I2C_Read
rawh = I2C_DATA ' Read in the low byte
GoSub I2C_ACK
X = (rawh << 8) | rawl ' OR high and low into X
' Do the same for Y and Z:
GoSub I2C_Read
rawl = I2C_DATA
GoSub I2C_ACK

GoSub I2C_Read
rawh = I2C_DATA
GoSub I2C_ACK

Y = (rawh << 8) | rawl

GoSub I2C_Read
rawl = I2C_DATA
GoSub I2C_ACK

GoSub I2C_Read
rawh = I2C_DATA
GoSub I2C_NACK

Z = (rawh << 8) | rawl

GoSub I2C_Stop
Return

' Read the status register until the ZYXDA bit is high
Wait_For_Data_Ready:
DO
I2C_REG = STATUS_REG
GoSub I2C_Read_Reg
LOOP Until ((I2C_DATA & $08) <> 0)
Return

' Set I2C_REG & I2C_VAL before calling this
I2C_Write_Reg:
GoSub I2C_Start
I2C_DATA = WRITE_DATA
GoSub I2C_Write
I2C_DATA = I2C_REG
GoSub I2C_Write
I2C_DATA = I2C_VAL
GoSub I2C_Write
GoSub I2C_Stop
Return

' Set I2C_REG before calling this, I2C_DATA will have result
I2C_Read_Reg:
GoSub I2C_Start
I2C_DATA = WRITE_DATA
GoSub I2C_Write
I2C_DATA = I2C_REG
GoSub I2C_Write
GoSub I2C_Stop
GoSub I2C_Start
I2C_DATA = READ_DATA
GoSub I2C_Write
GoSub I2C_Read
GoSub I2C_NACK
GoSub I2C_Stop
Return

I2C_Start:
Low SDA ' Pull SDA low
Low SCL ' Pull SCL low
Return

I2C_Stop:
Low SDA ' Pull SDA low
Input SCL ' Let SCL float high
Input SDA ' Let SDA float high
Return

I2C_ACK:
Low SDA ' Pull SDA low
Input SCL ' Let SCL float high
Low SCL ' Pull SCL low
Input SDA ' Let SDA float high
Return

I2C_NACK:
Input SDA ' Let SDA float high
Input SCL ' Let SCL float high
Low SCL ' Pull SCL low
Return

I2C_Read:
SHIFTIN SDA, SCL, MsbPre, [I2C_DATA] ' Read in 8 bits, MSB first
Return

I2C_Write:
I2C_LSB = I2C_DATA.BIT0 ' Store the status of the LSB
I2C_DATA = I2C_DATA / 2
SHIFTOUT SDA, SCL, MsbFirst, [I2C_DATA\7] ' Write out the first 7 bits, MSB first
If I2C_LSB Then Input SDA Else Low SDA ' Write the 8th bit
Input SCL ' Using an open collector output
Low SCL
Input SDA ' Leave SDA as an input
Input SCL ' Ignore the ACK bit
Low SCL
Return



Литература:
1. Фирменная документация.




На главную
Admin
Site Admin
 
Posts: 209
Joined: Wed Sep 20, 2017 9:55 am

Return to Промежуточные исследования и разработки

cron

User Menu

Login