IMU BMI160
Dec. 31st, 2021 07:44 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Таки пришлось самому читать даташит на BMI160. Под катом выдержки, а здесь демка для ардуино для I2C подключения по умолчанию - https://disk.yandex.ru/d/YU4DAsyehBzGow
ЗЫ. Еще какие-то пидорасы сделали pdf защищенным от копирования, но для читалки Evince это пофиг.
Итаг, настройка BMI160 (адрес 0x69) производится
а) Записью байта в командный регистр 0x7E (стр 83)
Это не конфигурацыонный регистр, это запись команды на исполнение.
Соответственно надо протормозить ~100 мс на исполнение команды.
Для нас важны -
1) 0xB6 - перезагрузка и восстановление по умолчанию
2) команды для работы с PMU (Power Manage Unit) для гиры и акселя -
acc_set_pmu_mode: 0b000100nn
Sets the PMU mode for the accelerometer. The encoding for ‘nn’ is identical to
acc_pmu_status in Register (0x03) PMU_STATUS.
gyr_set_pmu_mode: 0b000101nn
Sets the PMU mode for the gyroscope. The encoding for ‘nn’ is identical to
gyr_pmu_status in Register (0x03) PMU_STATUS
nn таковы -
00 suspended; 01 norm; 10 low power; 11 fast start (only gyro).
Соответственно -
0b00010001 = 0x11 //норм для акселя
0b00010101 = 0x15 //норм для гиры
б) И настройки BW,ODR и RANGE для оных -
1) для BW,ODR акселя - регистр 0x40

Для Normal Mode* us=0; bwp=010.
ODR в герцах - 100/(2^(8-odr))
т.е. если odr = 0b0101 = 0d5; то
ODR=100/(2^(8-5))=100/(2^3)=100/8=12.5 герц
и так до 0b1100 = 0d12, или 1600 герц.

COF - 3dB Cutoff frequency [Hz]
RMS - RMS [mg] для +-8 g.
* для оси z.
2) для RANGE акселя регистр 0x41
0b00000011 +- 2g
0b00000101 +- 4g
0b00001000 +- 8g
3) ODR, BW для гиры - регистр 0x42

ODR то же, что и для акселя, только начинается с 25 и кончается на 3200 гц.

bwp для Normal Mode* равен 010.
4) для RANGE гиры регистр 0x43
0b00000000 +- 2000 gr/s
0b00000001 +- 1000 gr/s
0b00000010 +- 500 gr/s
0b00000011 +- 250 gr/s
0b00000100 +- 100 gr/s
__________
* помимо Normal mode существуют режимы дополнительной фильтрации -
Когда режим фильтра установлен в OSR2 (acc_bwp=0b001 и acc_us=0b0 для акселя или gyr_bwp=0b001 для гиры), используются обе ступени (стадии, каскада) цифрового фильтра, и данные передискретизируются с частотой передискретизации 2.
Это означает, что для определенной конфигурации фильтра, ODR должно быть в 2 раза выше, чем в режиме обычного фильтра.
И наоборот, для определенной конфигурации фильтра полоса пропускания фильтра будет вдвое меньше, чем полоса пропускания, достигаемая при той же ODR в обычном режиме.
Например, для ODR=50 Гц мы будем иметь частоту среза 3 дБ, равную 10,12 Гц.
Когда режим фильтра установлен на OSR4 (acc_bwp=0b000 и acc_us=0b0 или gyr_bwp=0b000), используются обе ступени цифрового фильтра, и данные передискретизируются с частотой передискретизации 4.
Это означает, что для определенной конфигурации фильтра, ODR должно быть в 4 раза выше, чем в режиме обычного фильтра.
И наоборот, для определенной конфигурации фильтра полоса пропускания фильтра будет в 4 раза меньше, чем полоса пропускания, достигаемая при том же ODR.
Например, для ODR=50 Гц мы будем иметь частоту среза 3 дБ, равную 5,06 Гц.
ЗЫ. Еще какие-то пидорасы сделали pdf защищенным от копирования, но для читалки Evince это пофиг.
Итаг, настройка BMI160 (адрес 0x69) производится
а) Записью байта в командный регистр 0x7E (стр 83)
Это не конфигурацыонный регистр, это запись команды на исполнение.
Соответственно надо протормозить ~100 мс на исполнение команды.
Для нас важны -
1) 0xB6 - перезагрузка и восстановление по умолчанию
2) команды для работы с PMU (Power Manage Unit) для гиры и акселя -
acc_set_pmu_mode: 0b000100nn
Sets the PMU mode for the accelerometer. The encoding for ‘nn’ is identical to
acc_pmu_status in Register (0x03) PMU_STATUS.
gyr_set_pmu_mode: 0b000101nn
Sets the PMU mode for the gyroscope. The encoding for ‘nn’ is identical to
gyr_pmu_status in Register (0x03) PMU_STATUS
nn таковы -
00 suspended; 01 norm; 10 low power; 11 fast start (only gyro).
Соответственно -
0b00010001 = 0x11 //норм для акселя
0b00010101 = 0x15 //норм для гиры
б) И настройки BW,ODR и RANGE для оных -
1) для BW,ODR акселя - регистр 0x40

Для Normal Mode* us=0; bwp=010.
ODR в герцах - 100/(2^(8-odr))
т.е. если odr = 0b0101 = 0d5; то
ODR=100/(2^(8-5))=100/(2^3)=100/8=12.5 герц
и так до 0b1100 = 0d12, или 1600 герц.

COF - 3dB Cutoff frequency [Hz]
RMS - RMS [mg] для +-8 g.
* для оси z.
2) для RANGE акселя регистр 0x41
0b00000011 +- 2g
0b00000101 +- 4g
0b00001000 +- 8g
3) ODR, BW для гиры - регистр 0x42

ODR то же, что и для акселя, только начинается с 25 и кончается на 3200 гц.

bwp для Normal Mode* равен 010.
4) для RANGE гиры регистр 0x43
0b00000000 +- 2000 gr/s
0b00000001 +- 1000 gr/s
0b00000010 +- 500 gr/s
0b00000011 +- 250 gr/s
0b00000100 +- 100 gr/s
__________
* помимо Normal mode существуют режимы дополнительной фильтрации -
Когда режим фильтра установлен в OSR2 (acc_bwp=0b001 и acc_us=0b0 для акселя или gyr_bwp=0b001 для гиры), используются обе ступени (стадии, каскада) цифрового фильтра, и данные передискретизируются с частотой передискретизации 2.
Это означает, что для определенной конфигурации фильтра, ODR должно быть в 2 раза выше, чем в режиме обычного фильтра.
И наоборот, для определенной конфигурации фильтра полоса пропускания фильтра будет вдвое меньше, чем полоса пропускания, достигаемая при той же ODR в обычном режиме.
Например, для ODR=50 Гц мы будем иметь частоту среза 3 дБ, равную 10,12 Гц.
Когда режим фильтра установлен на OSR4 (acc_bwp=0b000 и acc_us=0b0 или gyr_bwp=0b000), используются обе ступени цифрового фильтра, и данные передискретизируются с частотой передискретизации 4.
Это означает, что для определенной конфигурации фильтра, ODR должно быть в 4 раза выше, чем в режиме обычного фильтра.
И наоборот, для определенной конфигурации фильтра полоса пропускания фильтра будет в 4 раза меньше, чем полоса пропускания, достигаемая при том же ODR.
Например, для ODR=50 Гц мы будем иметь частоту среза 3 дБ, равную 5,06 Гц.