реклама на сайте
подробности

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Кто работал с L3G4200D?
Alexander_84
сообщение Apr 4 2011, 08:07
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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. С настройками по умолчанию считываю первый раз значение и больше оно не меняется при вращении устройства. Вообщем как заставить это работать и измеряется абсолютный угол или изменение угла?
Go to the top of the page
 
+Quote Post
-=TRO=-
сообщение Apr 22 2011, 16:12
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 24-10-07
Из: zp.ua
Пользователь №: 31 690



С этим чипом ещё не работал, только жду заказа, но возможно по аналогии с компасами, при чтении из первого регистра(данных по осям) остальные блокируются до того момента пока вы не прочитаете последовательно их все.
Go to the top of the page
 
+Quote Post
Данилыч
сообщение Apr 28 2011, 18:51
Сообщение #3





Группа: Новичок
Сообщений: 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
Прикрепленные файлы
Прикрепленный файл  CD00265057.pdf ( 1.25 мегабайт ) Кол-во скачиваний: 92
 
Go to the top of the page
 
+Quote Post
ren5
сообщение May 9 2011, 22:03
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 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 регистров, стандартной подпрограммой, изменил протокол чтения, согласно даташита, и все стало читаться нормально
можно ничего не менять, попробуй считывать отдельно из каждого регистра, а не серией
шумы убираю упрощенным алгоритмом Калмана


--------------------
Go to the top of the page
 
+Quote Post
rzn62
сообщение Jul 22 2011, 10:07
Сообщение #5





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
MrAlex
сообщение Jul 25 2011, 12:14
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
klen
сообщение Jul 25 2011, 12:48
Сообщение #7


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



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

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

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

если не слтожно у кого заработало дайте кусок кода с инициализвцией и чтением. какой интерфейс - i2c или spi неважно
Go to the top of the page
 
+Quote Post
MrAlex
сообщение Jul 25 2011, 13:30
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 15-10-10
Из: г. Москва
Пользователь №: 60 179



Цитата(klen @ Jul 25 2011, 16:48) *
к уого какую температуру показывает и как это значение в градусы перевести?

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

Сообщение отредактировал MrAlex - Jul 25 2011, 16:08
Go to the top of the page
 
+Quote Post
rzn62
сообщение Jul 27 2011, 17:35
Сообщение #9





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
MrAlex
сообщение Jul 28 2011, 05:37
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 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 ), результаты двух других осей могут быть обновлены.
Go to the top of the page
 
+Quote Post
rzn62
сообщение Jul 28 2011, 18:15
Сообщение #11





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
MrAlex
сообщение Jul 29 2011, 07:09
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 15-10-10
Из: г. Москва
Пользователь №: 60 179



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

Значит вопросы сняты.
Go to the top of the page
 
+Quote Post
klen
сообщение Aug 3 2011, 14:02
Сообщение #13


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(MrAlex @ Jul 29 2011, 11:09) *
Значит вопросы сняты.

код в студию
Go to the top of the page
 
+Quote Post
Alex_1811
сообщение Aug 25 2011, 17:58
Сообщение #14


Частый гость
**

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



Цитата(klen @ Aug 3 2011, 17:02) *
код в студию

Поделитесь кодом, пожалуйста!!!!
Go to the top of the page
 
+Quote Post
MrAlex
сообщение Aug 26 2011, 06:23
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 20:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01489 секунд с 7
ELECTRONIX ©2004-2016