Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Как считать данные с гироскопа MPU-6050?

Непрочитано 17.06.2016, 18:30  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: Как считать данные с гироскопа MPU-6050?

Сообщение от Kopranych Посмотреть сообщение
Да а как их привести к явным значениям? Видел примеры вывода значений, у многих показаны еще с минусом значения как это преобразовать?
Минус означает, что ускорение направлено в обратную сторону относительно оси датчика.
Например, ось Z смотрит вниз (от "крышки" к дорожкам), тогда, перевернув датчик, Вы получите ОТРИЦАТЕЛЬНОЕ значение.
Так же и по другим осям.

› Да а как их привести к явным значениям?
Перемножить на значение шкалы в текущем режиме. Вроди бы, я ясно ответил на этот вопрос ДО того, как он был задан.
Нет?
›› В инструкции описано, что данные - это сырые значения и они зависят от "множителя" (или чувствительности) - это 250/500/1000/2000 градусов в секунду для гироскопа и 2/4/8/16g для акселерометра.
Реклама:
-Alan- вне форума  
Непрочитано 18.06.2016, 18:19  
Kopranych
Частый гость
 
Регистрация: 16.05.2016
Адрес: Москва
Сообщений: 35
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
Kopranych на пути к лучшему
По умолчанию Re: Как считать данные с гироскопа MPU-6050?

Сообщение от -Alan- Посмотреть сообщение
Минус означает, что ускорение направлено в обратную сторону относительно оси датчика.
Например, ось Z смотрит вниз (от "крышки" к дорожкам), тогда, перевернув датчик, Вы получите ОТРИЦАТЕЛЬНОЕ значение.
Так же и по другим осям.

› Да а как их привести к явным значениям?
Перемножить на значение шкалы в текущем режиме. Вроди бы, я ясно ответил на этот вопрос ДО того, как он был задан.
Нет?
›› В инструкции описано, что данные - это сырые значения и они зависят от "множителя" (или чувствительности) - это 250/500/1000/2000 градусов в секунду для гироскопа и 2/4/8/16g для акселерометра.
Почему же все-таки данные пляшут сами по себе, или это так и должно быть?
Kopranych вне форума  
Непрочитано 18.06.2016, 19:25  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: Как считать данные с гироскопа MPU-6050?

Сообщение от Kopranych Посмотреть сообщение
Почему же все-таки данные пляшут сами по себе, или это так и должно быть?
Что подразумевается под "пляшут"?
То что можно переключить предел измерений? Я прав?
Если так, то приведу простой пример:
У Вас есть вольметр на 1000 Вольт. Нужно изменить (точно) напряжение на пальчиковой батарейке.
А теперь есть прибор, в котором измерительный прибор - стрелочная головка. И ещё есть ручка выбора предела измерений... Дальше, надеюсь, поняли?

Вот Вам стрелка, которая может отклоняться на (в данном случае, +32767/-32768 делений), а цена деления зависит от положения "ручки" (в контексте MPU-6050 - значений регистров).
-Alan- вне форума  
Непрочитано 18.06.2016, 19:25  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Как считать данные с гироскопа MPU-6050?

Сообщение от Kopranych Посмотреть сообщение
Да а как их привести к явным значениям?
Так же, как и тугрики АЦП. Определяется вес тугрика и умножается на измеренное количество.
Фильтров - вагон и маленькая тележка, на любой вкус. Гоголь в помощь.
Сообщение от Kopranych Посмотреть сообщение
данные пляшут сами по себе
А на сколько пляшут? А в процентах от шкалы?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 18.06.2016, 21:23  
Kopranych
Частый гость
 
Регистрация: 16.05.2016
Адрес: Москва
Сообщений: 35
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
Kopranych на пути к лучшему
По умолчанию Re: Как считать данные с гироскопа MPU-6050?

Сообщение от -Alan- Посмотреть сообщение
Что подразумевается под "пляшут"?
То что можно переключить предел измерений? Я прав?
Если так, то приведу простой пример:
У Вас есть вольметр на 1000 Вольт. Нужно изменить (точно) напряжение на пальчиковой батарейке.
А теперь есть прибор, в котором измерительный прибор - стрелочная головка. И ещё есть ручка выбора предела измерений... Дальше, надеюсь, поняли?

Вот Вам стрелка, которая может отклоняться на (в данном случае, +32767/-32768 делений), а цена деления зависит от положения "ручки" (в контексте MPU-6050 - значений регистров).
Да я понял вас на счет пределов измерений, а под словом пляшут я имею ввиду что модуль у меня лежит на столе в полном покое, а данные приходят по UART каждую итерацию разные т.е. как я себе представляю что если модуль в покое то и данные должны приходить одинаковые или я что то неправильно представляю
Kopranych вне форума  
Непрочитано 18.06.2016, 21:29  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Как считать данные с гироскопа MPU-6050?

Сообщение от Kopranych Посмотреть сообщение
или я что то неправильно представляю
Напомню
Сообщение от akegor Посмотреть сообщение
А на сколько пляшут? А в процентах от шкалы?
А потом вопросы.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 18.06.2016, 21:48  
Kopranych
Частый гость
 
Регистрация: 16.05.2016
Адрес: Москва
Сообщений: 35
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
Kopranych на пути к лучшему
По умолчанию Re: Как считать данные с гироскопа MPU-6050?

Сообщение от akegor Посмотреть сообщение
Напомню

А потом вопросы.
Вот такие данные у меня идут, причем температуру раньше адекватно выводил где то 26 и реагировал на тепло и холод, а теперь просто 39...
И сами данные акселерометра и гироскопа непонятные
Миниатюры:
Нажмите на изображение для увеличения
Название: Сырые данные.png
Просмотров: 0
Размер:	38.0 Кб
ID:	94889  

Последний раз редактировалось Kopranych; 18.06.2016 в 21:51.
Kopranych вне форума  
Непрочитано 19.06.2016, 07:22  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: Как считать данные с гироскопа MPU-6050?

Сообщение от Kopranych Посмотреть сообщение
Да я понял вас на счет пределов измерений, а под словом пляшут я имею ввиду что модуль у меня лежит на столе в полном покое, а данные приходят по UART каждую итерацию разные т.е. как я себе представляю что если модуль в покое то и данные должны приходить одинаковые или я что то неправильно представляю
У меня тоже данные немного гуляют, это нормально.
Выше я уже говорил про фильтры, ибо у меня точно так же, поток данных достаточно хорошо прыгает.
Кстати, почему у Вас значения регистров только по одному байту? Они же 16-ти битные. И да, знаковые.
Посмотрите ещё раз мой пример - там я читаю 2 байта из регистров акселеромеитра и гироскопа, преобразовываю их в число и вывожу в консоль. У Вас почему-то только один байт и тот беззнаковый.

Плюс, я бы всё же добавил хотя бы фильтр со скользящим окном, чтобы получить тупейшее среднее значение.
Код:
int16_t avg_accel[16][3], avg_gyro[16][3]; // Объявляем 2-мерные массивы
int32_t avg_accel_summ[3], avg_gyro_summ[3];
‹...›
// После чтения данных из гироскопа и акселерометра:
avg_accel[i][0] = accel_raw_x;
avg_accel[i][1] = accel_raw_y;
avg_accel[i][2] = accel_raw_z;
avg_gyro[i][0] = gyro_raw_x;
avg_gyro[i][1] = gyro_raw_y;
avg_gyro[i][2] = gyro_raw_z;
i++;
if (i›15) i=0;
avg_accel_summ[0] = 0;
avg_accel_summ[1] = 0;
avg_accel_summ[2] = 0;
avg_gyro_summ[0] = 0;
avg_gyro_summ[1] = 0;
avg_gyro_summ[2] = 0;
for (j=0;j‹15;j++) {
avg_accel_summ[0] += avg_accel[j][0];
avg_accel_summ[1] += avg_accel[j][1];
avg_accel_summ[2] += avg_accel[j][2];
avg_gyro_summ[0] += avg_gyro[i][0];
avg_gyro_summ[1] += avg_gyro[i][1];
avg_gyro_summ[2] += avg_gyro[i][2];
};
avg_accel_summ[0] = avg_accel_summ[0] ›› 4;
avg_accel_summ[1] = avg_accel_summ[1] ›› 4;
avg_accel_summ[2] = avg_accel_summ[2] ›› 4;
avg_gyro_summ[0] = avg_gyro_summ[0] ›› 4;
avg_gyro_summ[1] = avg_gyro_summ[1] ›› 4;
avg_gyro_summ[2] = avg_gyro_summ[2] ›› 4;
// Получены средние значения за 16 выборок.
Как пример. ОЧЕНЬ грубый псевдокод, но уровень шума будет ослаблен. Немного.


Хотите получать более стабильные данные - можете округлить несколько младших битов. Собственно, в выборке 24-битного АЦП приходится делать именно так, иначе последний байт можно даже не выводить на экран - он по большей части меняется. А после усреднения и удаления шумов - вполне можно.
-Alan- вне форума  
Непрочитано 19.06.2016, 11:32  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Как считать данные с гироскопа MPU-6050?

Применяйте фильтр Калмана. Могу подкинуть, если сами не нагуглите.
Easyrider83 вне форума  
Непрочитано 19.06.2016, 22:01  
Kopranych
Частый гость
 
Регистрация: 16.05.2016
Адрес: Москва
Сообщений: 35
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
Kopranych на пути к лучшему
По умолчанию Re: Как считать данные с гироскопа MPU-6050?

Сообщение от -Alan- Посмотреть сообщение
У меня тоже данные немного гуляют, это нормально.
Выше я уже говорил про фильтры, ибо у меня точно так же, поток данных достаточно хорошо прыгает.
Кстати, почему у Вас значения регистров только по одному байту? Они же 16-ти битные. И да, знаковые.
Посмотрите ещё раз мой пример - там я читаю 2 байта из регистров акселеромеитра и гироскопа, преобразовываю их в число и вывожу в консоль. У Вас почему-то только один байт и тот беззнаковый.
В консоль я уже вывожу как раз таки число преобразованное из двух байт младшего и старшего. А почему он идет без знака для меня тоже вопрос. КАК знак вывести?
Вот мой код с поправкой на обрезание двух младших битов да уже не так скачут показания
Код:
/////////////////////читаем показания акселерометра X,Y,Z и передаем их по UART///////
		UART_write("ACCEL_X,Y,Z:");
		int ACCEL_XH = MPU_I2C_R(MPU_6050_ADDRESS_W,ACCEL_XOUT_H, MPU_6050_ADDRESS_R);
		int ACCEL_XL = (MPU_I2C_R(MPU_6050_ADDRESS_W,ACCEL_XOUT_L, MPU_6050_ADDRESS_R))&0xFC;
		int ACCEL_X = ACCEL_XH‹‹8|ACCEL_XL;
		UART_transiever_itoa(ACCEL_X);
		
		UART_write(" ");
		int ACCEL_YH = MPU_I2C_R(MPU_6050_ADDRESS_W,ACCEL_YOUT_H, MPU_6050_ADDRESS_R);
		int ACCEL_YL = (MPU_I2C_R(MPU_6050_ADDRESS_W,ACCEL_YOUT_L, MPU_6050_ADDRESS_R))&0xFC;
		int ACCEL_Y = ACCEL_YH‹‹8|ACCEL_YL;
		UART_transiever_itoa(ACCEL_Y);
		
		UART_write(" ");
		int ACCEL_ZH = MPU_I2C_R(MPU_6050_ADDRESS_W,ACCEL_ZOUT_H, MPU_6050_ADDRESS_R);
		int ACCEL_ZL = (MPU_I2C_R(MPU_6050_ADDRESS_W,ACCEL_ZOUT_L, MPU_6050_ADDRESS_R))&0xFC;
		int ACCEL_Z = ACCEL_ZH‹‹8|ACCEL_ZL;
		UART_transiever_itoa(ACCEL_Z);
		
/////////////////////////////////////////////////////////////////////////////////////////////		

////////////////////////////читаем показания гироскропа X,Y,Z и передаем их по UART//////////
		UART_write(" GYRO_X,Y,Z:");		
		int GYRO_XH = MPU_I2C_R(MPU_6050_ADDRESS_W,GYRO_XOUT_H, MPU_6050_ADDRESS_R);
		int GYRO_XL = (MPU_I2C_R(MPU_6050_ADDRESS_W,GYRO_XOUT_L, MPU_6050_ADDRESS_R))&0xFC;
		int GYRO_X = GYRO_XH‹‹8|GYRO_XL;
		UART_transiever_itoa(GYRO_X);
		

		UART_write(" ");
		int GYRO_YH = MPU_I2C_R(MPU_6050_ADDRESS_W,GYRO_YOUT_H, MPU_6050_ADDRESS_R);
		int GYRO_YL = (MPU_I2C_R(MPU_6050_ADDRESS_W,GYRO_YOUT_L, MPU_6050_ADDRESS_R))&0xFC;
		int GYRO_Y = GYRO_YH‹‹8|GYRO_YL;
		UART_transiever_itoa(GYRO_Y);
		

		UART_write(" ");
		int GYRO_ZH = MPU_I2C_R(MPU_6050_ADDRESS_W,GYRO_ZOUT_H, MPU_6050_ADDRESS_R);
		int GYRO_ZL = (MPU_I2C_R(MPU_6050_ADDRESS_W,GYRO_ZOUT_L, MPU_6050_ADDRESS_R))&0xFC;
		int GYRO_Z = GYRO_ZH‹‹8|GYRO_ZL;
		UART_transiever_itoa(GYRO_Z);
		
/////////////////////////////////////////////////////////////////////////////////////////////	
		

////////////////////////////читаем показания термометра и передаем их по UART////////////////
		UART_write(" TEMPERATUR:");
		int TEMP_H = MPU_I2C_R(MPU_6050_ADDRESS_W,TEMP_OUT_H, MPU_6050_ADDRESS_R);
		int TEMP_L = MPU_I2C_R(MPU_6050_ADDRESS_W,TEMP_OUT_L, MPU_6050_ADDRESS_R);
		int TEMPERATUR = TEMP_H‹‹8|TEMP_L;
		TEMPERATUR = TEMPERATUR/340+36;
		UART_transiever_itoa(TEMPERATUR);
Kopranych вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Помогите считать данные с датчика (PIC контроллер) Vyazikov Микроконтроллеры, АЦП, память и т.д 22 08.03.2012 00:37
ST10F269 Считать данные Zahar175 Микроконтроллеры, АЦП, память и т.д 2 25.12.2011 12:45
как в PIC 18F452 считать из такойто ячейки ОЗУ данные? DAS_WEYDER Микроконтроллеры, АЦП, память и т.д 5 22.08.2007 11:09


Часовой пояс GMT +4, время: 23:50.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.