Об акселерометре замолвите слово

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Алексей132, 12 июн 2020.

  1. Коллеги, подключил акселерометр LIS3DSH от STM и получаю данные с него по i2c.
    Вообще я думал, что акселерометр измеряет ускорение и если не трогать его то я должен получать 0 со всех осей. Но по факту я получаю постоянно какие значения которые меняются от угла расположения платы с акселерометром

    например плата лежит горизонтально, получаю следующие данные с нее:
    X308
    Y209
    Z61333
    X295
    Y296
    Z61140
    X475
    Y228

    а вот теперь плата стоит вертикально:
    X4150
    Y214
    Z391
    X4310
    Y86
    Z427
    X4309
    Y117
    Z422

    Может я в теории что то не понимаю, но углы же мерит гироскоп.
     
  2. akl

    akl Гуру

    как и завещал эйнштейн, акселерометр не может отличить гравитацию от ускоренного движения
     
  3. akl

    akl Гуру

    но все равно цифры какие-то странные. по идее горизонтально на оси Z должно быть примерно столько же сколько вертикально на X и оно должно быть примерно равно 1g (в каких-то единицах в которых у этого датчика вывод)
     
  4. Un_ka

    Un_ka Гик

    Выход обычно в сыром значении АЦП.
     
  5. parovoZZ

    parovoZZ Гуру

    Акселерометры строятся по МЭМС технологии. Почитай что это и поймёшь, почему акселерометр выдаёт такие цифры.
     
  6. Что то не помогает, 16 битовый датчик, то есть максимум - 65536‬,а я в покое получаю:
    Z 64622
    X 24
    Y 1038
    а у меня и так по оси Z максимальное ускорение, я понимаю что может быть - 1g но не максимум же ускорения. Да и мануал у stm так себе. А по МЭМС технологии - "На сегодняшний день наиболее популярны датчики движения, основанные на конденсаторном принципе. Подвижная часть системы – классический грузик на подвесах. При наличии ускорения грузик смещается относительно неподвижной части акселерометра. Обкладка конденсатора, прикрепленная к грузику, смещается относительно обкладки на неподвижной части. Емкость меняется, при неизменном заряде меняется напряжение – это изменение можно измерить и рассчитать смещение грузика. Откуда, зная его массу и параметры подвеса, легко найти и искомое ускорение." Но в манауле не слова о том как работать с данными
     
  7. parovoZZ

    parovoZZ Гуру

    Если акселерометр на 1.5G, то он и будет в покое показывать практически максимум. На любое покоящееся на Земле тело воздействует сила 1G, это из школьного курса физики.
     
  8. Un_ka

    Un_ka Гик

    Может первый бит за +- отвечает?
     
  9. b707

    b707 Гуру

    с какой стати "максимум 65536" ? - ускорение может быть и положительным и отрицательным. поэтому эти величины знаковые от -32767 до +32767
    Таким образом полученные данные надо читать так:
    Z -913
    X 24
    Y 1038
    - что вполне соответвует датащиту
     
  10. parovoZZ

    parovoZZ Гуру

    Для знаковых величин в типе переменной не должна стоять буква “u”.
     
  11. akl

    akl Гуру

    все равно цифры странноватые. на одной из осей должно быть 1g (или -1g), на других ноль. а тут как-то непонятно.
    желательно конечно посмотреть код как там ТС получает эти цифры конкретно
     
  12. parovoZZ

    parovoZZ Гуру

    это ж микросхемы для смартфонов, а не для самолётов. Отсюда и цифры соответствующие.
     
  13. b707

    b707 Гуру

    посмотрите в даташите - насколько я понял, по оси х и у нуль шкалы - 0 g, а по Z - 1g
    На самом деле проверить проще простого - пусть ТС положит чип на бок
     
  14. akl

    akl Гуру

    я видел в ютубе видео про этот гироскоп, там у чувака всё четко получалось и сразу в g
     
  15. b707

    b707 Гуру

    ну так чувак-то наверно умный :)

    а если серьезно - не вижу. в чем проблема интерпретировать эти данные? - из них просто аппаратно вычитается 1g по Z-оси, никакких других особенностей нет
     
  16. parovoZZ

    parovoZZ Гуру

    на ютубе всегда всё четко. Смысл выкладывать, если у тебя не всё четко?
     
  17. с
    в смысле с какой стати? что получил то и передаю, эти данные без обработки

    HAL_I2C_Mem_Read(&hi2c3, adress_read, OUT_X1, 1, (uint8_t*)&OUT_X1_data, 1, 1000); // Читаю первый байт оси - Х, адрес регистра 0x28;
    HAL_I2C_Mem_Read(&hi2c3, adress_read, OUT_X2, 1, (uint8_t*)&OUT_X2_data, 1, 1000); // Читаю второй байт оси - Х, адрес регистра 0x29;
    OUT_X_result=OUT_X2_data; // перевожу первый байт в 2-х байтовый формат
    OUT_X_result=(OUT_X_result<<8)|OUT_X1_data; // соединяю 2 байта вместе и отправляю по uart
     
  18. Как я понял этот регистр - CTRL_REG5 (24h) изменяют шкалу, я поставил ±16, и все равно когда он лежит на боку по одной их осей получаю 64622
    CTRL_REG5 (24h)
    Full-scale selection. Default value: 00 (000: ±2 g; 001: ±4 g; 010: ±6 g; 011: ±8 g; 100: ±16 g)
     
  19. parovoZZ

    parovoZZ Гуру

    OUT_X_result - какой тип переменной?
     
  20. uint8_t X1_data - первый байт
    uint8_t X2_data - второй байт
    uint16_t OUT_X_result