Как откалибровать термометр MPU 6050?
Я использую MPU 6050, на борту есть термометр. Однако я просмотрел листы данных чипсета, но не смог найти инструкция по измерению температуры.
Не могли бы вы сказать мне, как откалибровать строку данных из двух адресов, начинающихся с 0x41?
1 ответ
Лучший ответ:
Датчик температуры, вероятно, включен для лучшей калибровки гироскопа и акселерометра в указанном диапазоне температур. Температура может не совпадать с температурой окружающей среды, если микросхема нагревается.
Технические характеристики датчика температуры приведены в разделе 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
- Как часто требуется калибровка гироскопа mpu6050 sonsor?
- Как подключить вывод INT MPU 6050?
- Как очистить буфер FIFO на MPU6050?
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?
- MPU6050 не работает
- Понимание того, почему следует избегать «String» и альтернативных решений
- Объяснение кода MPU6050
- Как подключить MPU9250 к NodeMCU с помощью SPI или I2C Slave?
Это похоже на правильное преобразование выше, 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