|
|
  |
Кто работал с L3G4200D? |
|
|
|
Apr 4 2011, 08:07
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 14-09-08
Пользователь №: 40 181

|
Здравствуйте, с гироскопами сталкиваюсь впервые. Вообщем задача пока просто измерять углы по 2 осям. Гироскоп подлючен по I2C к ARM. Интерфейс работает нормально (регистр WHO_AM_I считывется правильно), а когда пытаюсь считывать углы получаю ерунду: устройво лежит в покое, при этом показания например по оси x меняютя ( принимают значения 30000, 60000, 771, 64000...). Из настроек по умолчанию в CTRL_REG1 изменил power_down на normal_mode и DATA_RATE поставил 200Гц, в CTRL_REG4 BDU поставил в 1. С настройками по умолчанию считываю первый раз значение и больше оно не меняется при вращении устройства. Вообщем как заставить это работать и измеряется абсолютный угол или изменение угла?
|
|
|
|
|
Apr 28 2011, 18:51
|
Группа: Новичок
Сообщений: 1
Регистрация: 5-04-10
Пользователь №: 56 424

|
Цитата(Alexander_84 @ Apr 4 2011, 12:07)  Здравствуйте, с гироскопами сталкиваюсь впервые. Вообщем задача пока просто измерять углы по 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 бит! Получается очень наглядно. Сейчас работаю над системой прерываний. В скупо написанном даташите встречаются ошибки.
Сообщение отредактировал Данилыч - Apr 28 2011, 18:55
|
|
|
|
|
May 9 2011, 22:03
|

Частый гость
 
Группа: Свой
Сообщений: 137
Регистрация: 17-11-08
Из: Ростов
Пользователь №: 41 700

|
Цитата(Alexander_84 @ Apr 4 2011, 12:07)  Здравствуйте, с гироскопами сталкиваюсь впервые. Вообщем задача пока просто измерять углы по 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 регистров, стандартной подпрограммой, изменил протокол чтения, согласно даташита, и все стало читаться нормально можно ничего не менять, попробуй считывать отдельно из каждого регистра, а не серией шумы убираю упрощенным алгоритмом Калмана
--------------------
|
|
|
|
|
Jul 22 2011, 10:07
|
Группа: Новичок
Сообщений: 3
Регистрация: 22-07-11
Пользователь №: 66 358

|
Здравствуйте! Проблема с гироскопом следующая. В управляющие регистры внесены те же изменения, что и у 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 - Jul 22 2011, 10:08
|
|
|
|
|
Jul 25 2011, 12:14
|
Частый гость
 
Группа: Свой
Сообщений: 197
Регистрация: 15-10-10
Из: г. Москва
Пользователь №: 60 179

|
Цитата(rzn62 @ Jul 22 2011, 14:07)  Вопросы: 1) если кто с подобным встречался, подскажите, пожалуйста, чем такой эффект может быть вызван? Допустимое смещение нуля по ДШ +/- 10 гр/сек, при диапазоне +/- 250 Цитата 2) почему регистр STATUS_REG имеет значение 11111111 (происходит перезапись данных угловой скорости), даже если в старший бит CTRL_REG4 поставить "1", т.е. запретить перезапись содержимого выходных регистров до завершения чтения из них данных? Подразумевается, что произошла утеря данных вследствие несвоевременного прочтения.
Сообщение отредактировал MrAlex - Jul 25 2011, 12:16
|
|
|
|
|
Jul 25 2011, 13:30
|
Частый гость
 
Группа: Свой
Сообщений: 197
Регистрация: 15-10-10
Из: г. Москва
Пользователь №: 60 179

|
Цитата(klen @ Jul 25 2011, 16:48)  к уого какую температуру показывает и как это значение в градусы перевести? При комнатной температуре показывает 23 - 25 непосредственно в градусах(8 бит в дополнительном коде), но масштаб отрицательный при нагреве показания уменьшается.
Сообщение отредактировал MrAlex - Jul 25 2011, 16:08
|
|
|
|
|
Jul 27 2011, 17:35
|
Группа: Новичок
Сообщений: 3
Регистрация: 22-07-11
Пользователь №: 66 358

|
Цитата(klen @ Jul 25 2011, 16:48)  если не слтожно у кого заработало дайте кусок кода с инициализвцией и чтением. какой интерфейс - i2c или spi неважно Присоединяюсь. :-) Цитата(klen @ Jul 25 2011, 16:48)  тоже не дает измерений - значения как вкопаные не меняются Если совсем не меняются, возможно, гироскоп после подачи питания "самостоятельно" уходит в режим 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 ( 1 мегабайт )
Кол-во скачиваний: 611
|
|
|
|
|
Jul 28 2011, 05:37
|
Частый гость
 
Группа: Свой
Сообщений: 197
Регистрация: 15-10-10
Из: г. Москва
Пользователь №: 60 179

|
Цитата(rzn62 @ Jul 27 2011, 21:35)  Присоединяюсь. :-) Неспортивно. Законченные библиотеки можно поискать в проектах под Ардуины. Цитата(rzn62 @ Jul 27 2011, 21:35)  Если совсем не меняются, возможно, гироскоп после подачи питания "самостоятельно" уходит в режим power down (нужно прописать единичку в бит PD CTRL_REG1) ... После пода питания гироскоп всегда находится в powerdown mode, кроме PD надо выставить Zen,Yen,Xen. Цитата(rzn62 @ Jul 27 2011, 21:35)  старший бит CTRL_REG4 BDU = "1" блокирует результат одной оси пока не будут прочитаны оба регистра ( H - L ), результаты двух других осей могут быть обновлены.
|
|
|
|
|
Jul 28 2011, 18:15
|
Группа: Новичок
Сообщений: 3
Регистрация: 22-07-11
Пользователь №: 66 358

|
Цитата(MrAlex @ Jul 28 2011, 09:37)  Неспортивно. Знаете, MrAlex, когда у Вас гироскоп уже работает, можно рассуждать и о спортивной этике, и показать мне желтую карточку за неспортивное поведение на форуме. А когда с Вас требуют результат, от которого зависит работа Ваших коллег, в бестолковку невольно начинают лезть мысли типа "вороне как-то бог послал кусочек сыра". Мой коллега со светлой (не в смысле цвета волос) головой прочитал с гироскопа адекватные данные. Как тут уже писали выше, стандартный протокол чтения нужно изменить в соответствии с ДШ. Цитата(MrAlex @ Jul 28 2011, 09:37)  После пода питания гироскоп всегда находится в 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". Цитата(MrAlex @ Jul 28 2011, 09:37)  блокирует результат одной оси пока не будут прочитаны оба регистра ( H - L ), результаты двух других осей могут быть обновлены. Да, признаю, сегодня убедился. По поводу измеряемой температуры: при +30 в помещении выдает 11111001, что при переводе из доп. кода дает -7. Нагревать/охлаждать гироскоп пока не пробовали. Фраза "The L3G4200D is provided with an internal temperature sensor that is suitable for delta temperature measurement." вроде как не обещает возможности измерения абсолютных значений температуры.
Сообщение отредактировал rzn62 - Jul 28 2011, 18:18
|
|
|
|
|
Jul 29 2011, 07:09
|
Частый гость
 
Группа: Свой
Сообщений: 197
Регистрация: 15-10-10
Из: г. Москва
Пользователь №: 60 179

|
Цитата(rzn62 @ Jul 28 2011, 22:15)  Мой коллега со светлой (не в смысле цвета волос) головой прочитал с гироскопа адекватные данные. Значит вопросы сняты.
|
|
|
|
|
Aug 25 2011, 17:58
|

Частый гость
 
Группа: Участник
Сообщений: 178
Регистрация: 31-10-06
Из: Яблунець
Пользователь №: 21 821

|
Цитата(klen @ Aug 3 2011, 17:02)  код в студию Поделитесь кодом, пожалуйста!!!!
|
|
|
|
|
Aug 26 2011, 06:23
|
Частый гость
 
Группа: Свой
Сообщений: 197
Регистрация: 15-10-10
Из: г. Москва
Пользователь №: 60 179

|
Цитата(Alex_1811 @ Aug 25 2011, 21:58)  Поделитесь кодом, пожалуйста!!!! Кодом чего с вами поделится? CODE 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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|