Как откалибровать термометр MPU 6050?

Я использую MPU 6050, на борту есть термометр. Однако я просмотрел листы данных чипсета, но не смог найти инструкция по измерению температуры.

Не могли бы вы сказать мне, как откалибровать строку данных из двух адресов, начинающихся с 0x41?

, 👍1


1 ответ


Лучший ответ:

2

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

Технические характеристики датчика температуры приведены в разделе 6.3 на странице 14 спецификация, косвенно указанная в вопросе.

TEMPERATURE SENSOR 
Range -40 to +85°C
Sensitivity Untrimmed 340 LSB/ºC
Temperature Offset 35ºC -521 LSB
Linearity Best fit straight line (-40°C to +85°C) ±1°C

Итак, когда температура чипа составляет 35°C, регистр температуры чипа должен показывать около -521. Чтобы преобразовать это в C, вам нужно сделать расчет:

chip_temperature = ((value_read + 521) + (35 * 340)) / 340

Упрощенный:

chip_temperature = (value_read + 12421) / 340

,

Это похоже на правильное преобразование выше, 35C, но я вижу некоторую странность ниже, оно становится 229. Также интересно отметить, что в хорошо известной библиотеке i2cdevlib есть код для MPU6050, и существует пример кода для чтения температуры с использованием mpu.readTemperature() ; однако такого метода в библиотеке, по-видимому, не существует (уже?). Есть что-то под названием getTemperature(); но это выдает сырые данные, а не преобразованные. Как очень странно., @Charlie

Я бы проверил математику, а также обратил внимание, выполняет ли код целочисленную арифметику и вызывает ошибки округления. В этом случае добавьте десятичные точки к вашим числам, чтобы заставить математику с плавающей запятой. Я не знаком с i2cdevlib, так как использовал драйверы OEM. Но если здесь никто не ответит на ваш вопрос, я опубликую вопрос (задам свой вопрос) на [веб-страницах i2cdevlib github](https://github.com/jrowberg/i2cdevlib)., @st2000

Да, я подозревал, что что-то в этом роде. Вновь вдохновившись, я еще раз попытался привести все переменные и заставил его вести себя более или менее так, как должен. Похоже, это было из-за того, что я не приводил возвращаемый uint16 (то, что было бы value_read выше) до числа с плавающей запятой перед сложением и делением. Кстати, я использую Longan nano, а не Arduino. Встроенная экранная библиотека для отображения текста не любит поплавки, поэтому я старался их избегать. Похоже, я слишком старался. В любом случае, математика, которую вы предоставляете, хороша. +1, @Charlie