Перейти к содержанию
    

Здравствуйте, с гироскопами сталкиваюсь впервые. Вообщем задача пока просто измерять углы по 2 осям. Гироскоп подлючен по I2C к ARM. Интерфейс работает нормально (регистр WHO_AM_I считывется правильно), а когда пытаюсь считывать углы получаю ерунду: устройво лежит в покое, при этом показания например по оси x меняютя ( принимают значения 30000, 60000, 771, 64000...). Из настроек по умолчанию в CTRL_REG1 изменил power_down на normal_mode и DATA_RATE поставил 200Гц, в CTRL_REG4 BDU поставил в 1. С настройками по умолчанию считываю первый раз значение и больше оно не меняется при вращении устройства. Вообщем как заставить это работать и измеряется абсолютный угол или изменение угла?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, с гироскопами сталкиваюсь впервые. Вообщем задача пока просто измерять углы по 2 осям. Гироскоп подлючен по I2C к ARM. Интерфейс работает нормально (регистр WHO_AM_I считывется правильно), а когда пытаюсь считывать углы получаю ерунду: устройво лежит в покое, при этом показания например по оси x меняютя ( принимают значения 30000, 60000, 771, 64000...). Из настроек по умолчанию в CTRL_REG1 изменил power_down на normal_mode и DATA_RATE поставил 200Гц, в CTRL_REG4 BDU поставил в 1. С настройками по умолчанию считываю первый раз значение и больше оно не меняется при вращении устройства. Вообщем как заставить это работать и измеряется абсолютный угол или изменение угла?

 

Здравствуйте! Сначала у меня была точно такая же история. Потом почти все получилось.

 

1. В соответствии с даташитом CD00265057 данные угловой скорости по осям представлены как числа в дополнительном коде.

После соответствующих преобразований получаются удобочитаемые значения в диапазоне приблизительно от 0 до +/-5000.

 

2. Если Вас отвлекают шумы (около +/-50), то для начала полученные 2-байтовые значения можно загрубить. Я сдвигал их вправо на 8 бит!

Получается очень наглядно.

 

Сейчас работаю над системой прерываний. В скупо написанном даташите встречаются ошибки.

CD00265057.pdf

Изменено пользователем Данилыч

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, с гироскопами сталкиваюсь впервые. Вообщем задача пока просто измерять углы по 2 осям. Гироскоп подлючен по I2C к ARM. Интерфейс работает нормально (регистр WHO_AM_I считывется правильно), а когда пытаюсь считывать углы получаю ерунду: устройво лежит в покое, при этом показания например по оси x меняютя ( принимают значения 30000, 60000, 771, 64000...). Из настроек по умолчанию в CTRL_REG1 изменил power_down на normal_mode и DATA_RATE поставил 200Гц, в CTRL_REG4 BDU поставил в 1. С настройками по умолчанию считываю первый раз значение и больше оно не меняется при вращении устройства. Вообщем как заставить это работать и измеряется абсолютный угол или изменение угла?

скорее всего ошибка в чтении по I2C, получал такие данные, когда пытался прочитать серией все 6 регистров, стандартной подпрограммой, изменил протокол чтения, согласно даташита, и все стало читаться нормально

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

шумы убираю упрощенным алгоритмом Калмана

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте! Проблема с гироскопом следующая. В управляющие регистры внесены те же изменения, что и у Alexander_84. Обмен данными - по I2C, чтение и запись поочередно для каждого регистра, не серией. При неподвижном гироскопе старший байт угловой скорости по ВСЕМ осям 11111110 = FE h (младшие байты разные). Такое характерно для ВСЕХ 4-х приобретенных гироскопов из одной партии. Если перевести из доп. кода и умножить на 0,00875 (цена младшего разряда при Wmax = 250 град/с), по модулю выходит больше 1 град/с. Это нормально, что "ноль" смещен на такую величину, притом одинаково по всем трем осям?

 

Пробовали режим SELF TEST, при переводе из доп. кода выдает значение 146 град/с (если цену младшего разряда брать из datasheet с сайта производителя 0,00875 град/с) или 126,7 град/с (если цена младшего разряда 250/32768 град/с), что заявленным 130 град/с никак не соответствует.

 

Вопросы: 1) если кто с подобным встречался, подскажите, пожалуйста, чем такой эффект может быть вызван?

2) почему регистр STATUS_REG имеет значение 11111111 (происходит перезапись данных угловой скорости), даже если в старший бит CTRL_REG4 поставить "1", т.е. запретить перезапись содержимого выходных регистров до завершения чтения из них данных?

Изменено пользователем rzn62

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопросы: 1) если кто с подобным встречался, подскажите, пожалуйста, чем такой эффект может быть вызван?

Допустимое смещение нуля по ДШ +/- 10 гр/сек, при диапазоне +/- 250

2) почему регистр STATUS_REG имеет значение 11111111 (происходит перезапись данных угловой скорости), даже если в старший бит CTRL_REG4 поставить "1", т.е. запретить перезапись содержимого выходных регистров до завершения чтения из них данных?

Подразумевается, что произошла утеря данных вследствие несвоевременного прочтения.

Изменено пользователем MrAlex

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

таже беда, моя тема ниже чуток но никио не ответил.

а) я взял кусок кода "ихний" - тоесть ST-мовский пример который к этому датчику идет с доками, внем нада только spi прикрутиить, spi работает отлично - читает id и можно запичсать число в регистр а потом его считать. - значит не в spi дело

2) с дуру был впаян неправильный кондер в филтр фапч. но температуру то он должен же был мериить.

 

тоже не дает измерений - значения как вкопаные не меняются

 

к уого какую температуру показывает и как это значение в градусы перевести?

 

если не слтожно у кого заработало дайте кусок кода с инициализвцией и чтением. какой интерфейс - i2c или spi неважно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

к уого какую температуру показывает и как это значение в градусы перевести?

При комнатной температуре показывает 23 - 25 непосредственно в градусах(8 бит в дополнительном коде), но масштаб отрицательный при нагреве показания уменьшается.

Изменено пользователем MrAlex

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если не слтожно у кого заработало дайте кусок кода с инициализвцией и чтением. какой интерфейс - i2c или spi неважно

 

Присоединяюсь. :-)

 

тоже не дает измерений - значения как вкопаные не меняются

 

Если совсем не меняются, возможно, гироскоп после подачи питания "самостоятельно" уходит в режим power down (нужно прописать единичку в бит PD CTRL_REG1) либо, если старший бит CTRL_REG4 BDU = "1", не считываются все 6 байт угловых скоростей и гироскоп не обновляет выходные регистры. Предположение, конечно. Есть приложение к ДШ - AN3393 Application note; в нем некоторые вопросы, в частности, алгоритм инициализации (Startup sequence), рассмотрены чуточку подробнее. Может кому пригодится.

 

На сегодняшний день гироскоп вроде задышал - в режиме покоя пошли близкие к нулю данные (в пределах +/- 0,6..0,8 град/с), но периодически (в среднем на каждый 50-й отсчет) выскакивает такой косяк, как повторное чтение предыдушего байта: например, значение младшего байта по одной оси повторно считывается как старший байт скорости по другой оси. В результате - дикие выбросы, вплоть до Wmax. Ошибка в протоколе I2C?

 

AN3393_Application_note.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяюсь. :-)

Неспортивно.

Законченные библиотеки можно поискать в проектах под Ардуины.

 

Если совсем не меняются, возможно, гироскоп после подачи питания "самостоятельно" уходит в режим power down (нужно прописать единичку в бит PD CTRL_REG1) ...

После пода питания гироскоп всегда находится в powerdown mode, кроме PD надо выставить Zen,Yen,Xen.

 

старший бит CTRL_REG4 BDU = "1"

блокирует результат одной оси пока не будут прочитаны оба регистра ( H - L ), результаты двух других осей могут быть обновлены.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неспортивно.

 

Знаете, MrAlex, когда у Вас гироскоп уже работает, можно рассуждать и о спортивной этике, и показать мне желтую карточку за неспортивное поведение на форуме. А когда с Вас требуют результат, от которого зависит работа Ваших коллег, в бестолковку невольно начинают лезть мысли типа "вороне как-то бог послал кусочек сыра". Мой коллега со светлой (не в смысле цвета волос) головой прочитал с гироскопа адекватные данные. Как тут уже писали выше, стандартный протокол чтения нужно изменить в соответствии с ДШ.

 

После пода питания гироскоп всегда находится в powerdown mode, кроме PD надо выставить Zen,Yen,Xen.

Не шибко силен в англицком, но фраза "After power supply is applied, the L3G4200D performs a 10 ms boot procedure to load the trimming parameter. After the boot is completed, the device is automatically configured in power-down mode" заканчивается словами "...после завершения процедуры загрузки устройство автоматически переходит в режим Power Down". Это и подразумевал, когда написал "самостоятельно". Биты Zen,Yen,Xen, судя по ДШ, по умолчанию уже выставлены в "1".

 

блокирует результат одной оси пока не будут прочитаны оба регистра ( H - L ), результаты двух других осей могут быть обновлены.

Да, признаю, сегодня убедился.

 

По поводу измеряемой температуры: при +30 в помещении выдает 11111001, что при переводе из доп. кода дает -7. Нагревать/охлаждать гироскоп пока не пробовали. Фраза "The L3G4200D is provided with an internal temperature sensor that is suitable for delta temperature measurement." вроде как не обещает возможности измерения абсолютных значений температуры.

Изменено пользователем rzn62

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мой коллега со светлой (не в смысле цвета волос) головой прочитал с гироскопа адекватные данные.

Значит вопросы сняты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит вопросы сняты.

код в студию

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделитесь кодом, пожалуйста!!!!

Кодом чего с вами поделится?

 

TWI_Init();

           Hardware_TWI_Enable();
           if(!L3G4200D_Init((unsigned short*)&SensorsRawData[0u]))    
               G_SENSOR_MODE |= SENSOR_L3G4200D;

Вот и весь код, остальное - это библиотеки собранные в проект.

 

Инициализируется следующим образом:

Write CTRL_REG1 (20h) = BW1 | BW0 | PD | Zen | Yen | Xen

Write CTRL_REG2 (21h) = 0x00, // High Pass Filter not used

Write CTRL_REG3 (22h) = I2_DRDY

Write CTRL_REG4 (23h) = BDU

Write CTRL_REG5 (24h) = Out_Sel0

Данные считываются одним блоком начиная со статуса. FIFO не используется.

 

Разные варианты настроек расписаны в appnote:

http://www.st.com/internet/com/TECHNICAL_R.../DM00026768.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...