M5Unit-IMU 0.0.2 git rev:e5b00aa
Loading...
Searching...
No Matches
unit_sh200q_data.hpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
3 *
4 * SPDX-License-Identifier: MIT
5 */
10#ifndef M5_UNIT_IMU_UNIT_UNIT_SH200Q_DATA_HPP
11#define M5_UNIT_IMU_UNIT_UNIT_SH200Q_DATA_HPP
12
13#include <array>
14#include <cstdint>
15
16namespace m5 {
17namespace unit {
18namespace sh200q {
19
25enum class AccelRange : uint8_t {
26 G4,
27 G8,
28 G16,
29};
30
37enum class GyroRange : uint8_t {
38 DPS2000,
39 DPS1000,
40 DPS500,
41 DPS250,
42 DPS125,
43};
44
49enum class AccelOdr : uint8_t {
50 HZ1024,
51 HZ512,
52 HZ256,
53 HZ128,
54};
55
62enum class GyroOdr : uint8_t {
63 HZ1000,
64 HZ500,
65 HZ250,
66};
67
73enum class GyroDlpf : uint8_t {
74 BW250,
75 BW200,
76 BW100,
77 BW50,
78 BW25,
79};
80
82constexpr float accel_res(const AccelRange r)
83{
84 return (4.0f * (1 << static_cast<uint8_t>(r))) / 32768;
85}
87constexpr float gyro_res(const GyroRange r)
88{
89 return (2000.0f / (1 << static_cast<uint8_t>(r))) / 32768;
90}
92constexpr uint32_t gyro_odr_hz(const GyroOdr r)
93{
94 return 1000U >> static_cast<uint8_t>(r);
95}
96
101struct Data {
102 std::array<uint8_t, 14> raw{};
103
107 inline int16_t accel_x() const
108 {
109 return static_cast<int16_t>((raw[1] << 8) | raw[0]);
110 }
112 inline int16_t accel_y() const
113 {
114 return static_cast<int16_t>((raw[3] << 8) | raw[2]);
115 }
117 inline int16_t accel_z() const
118 {
119 return static_cast<int16_t>((raw[5] << 8) | raw[4]);
120 }
122 inline int16_t gyro_x() const
123 {
124 return static_cast<int16_t>((raw[7] << 8) | raw[6]);
125 }
127 inline int16_t gyro_y() const
128 {
129 return static_cast<int16_t>((raw[9] << 8) | raw[8]);
130 }
132 inline int16_t gyro_z() const
133 {
134 return static_cast<int16_t>((raw[11] << 8) | raw[10]);
135 }
137 inline int16_t temp_adc() const
138 {
139 return static_cast<int16_t>((raw[13] << 8) | raw[12]);
140 }
142
147 inline float temperature() const
148 {
149 return temp_adc() / 333.87f + 21.0f;
150 }
151};
152
153} // namespace sh200q
154} // namespace unit
155} // namespace m5
156#endif
Top level namespace of M5Stack.
Definition ahrs_controller.cpp:26
Unit-related namespace.
One measurement (14 bytes burst from REG_OUTPUT, little-endian – NOT the MPU byte order)
Definition unit_sh200q_data.hpp:101
int16_t gyro_y() const
Raw gyroscope Y.
Definition unit_sh200q_data.hpp:127
float temperature() const
Temperature in degC (T = adc/333.87 + 21.0)
Definition unit_sh200q_data.hpp:147
int16_t accel_x() const
Raw accelerometer X.
Definition unit_sh200q_data.hpp:107
int16_t gyro_x() const
Raw gyroscope X.
Definition unit_sh200q_data.hpp:122
int16_t accel_y() const
Raw accelerometer Y.
Definition unit_sh200q_data.hpp:112
std::array< uint8_t, 14 > raw
[0..5] accel, [6..11] gyro, [12..13] temp
Definition unit_sh200q_data.hpp:102
int16_t gyro_z() const
Raw gyroscope Z.
Definition unit_sh200q_data.hpp:132
int16_t temp_adc() const
Raw temperature ADC.
Definition unit_sh200q_data.hpp:137
int16_t accel_z() const
Raw accelerometer Z.
Definition unit_sh200q_data.hpp:117
AccelOdr
Accelerometer output data rate (REG_ACC_CONFIG bits[4:3], normal mode)
Definition unit_sh200q_data.hpp:49
AccelRange
Accelerometer full scale range (REG_ACC_RANGE bits[1:0], register value = enum)
Definition unit_sh200q_data.hpp:25
GyroRange
Gyroscope full scale range (REG_GYRO_RANGE bits[2:0], register value = enum)
Definition unit_sh200q_data.hpp:37
GyroDlpf
Gyro digital low pass filter (REG_GYRO_DLPF). Bandwidths quoted at the default 500 Hz ODR; they scale...
Definition unit_sh200q_data.hpp:73
constexpr uint32_t gyro_odr_hz(const GyroOdr r)
Gyroscope ODR in Hz (used to derive the periodic measurement interval)
Definition unit_sh200q_data.hpp:92
GyroOdr
Gyroscope output data rate (REG_GYRO_CONFIG bits[3:1])
Definition unit_sh200q_data.hpp:62