Код акселерометра ADXL355

Я делаю проект, который отслеживает вибрации с помощью датчика ADXL355 и Arduino. Я уже использовал датчик MPU-9250 раньше.

Я не могу найти библиотеку или учебные пособия для калибровки, фильтрации и считывания точных данных с датчика. Может ли мне помочь кто-нибудь, кто ранее работал с датчиком? Я инженер-механик, новичок в области электроники.

Если файлы библиотеки недоступны, как я могу использовать таблицу данных для самостоятельного написания всего кода? Есть ли какой-нибудь учебник для этого?

Извините, если сообщение кажется вам сбивающим с толку..

, 👍2

Обсуждение

Быстрый поиск в Google дал мне [эту библиотеку] (https://github.com/sparkfun/SparkFun_ADXL345_Arduino_Library ) от Adafruit. В нем также есть пример калибровки. Применение фильтров не имеет ничего общего с датчиком, а только с уже собранными данными. Если вы загуглите что-то вроде "библиотека фильтров Калмана arduino github", вы также получите результаты для уже существующих библиотек, которые реализуют фильтр Калмана (часто используется с акселерометрами / гироскопами)., @chrisl

Вышеупомянутая библиотека использует Adxl 345., @Arduiproj


1 ответ


2

У меня был такой же путь обучения, как у вас, и я также пытался использовать ADXL345 и ADXL355. Последнее было проблемой из-за проблем, описанных во многих подобных сообщениях.

Я не смог найти ни одного хорошего учебника по этой теме, и мне пришлось учиться всему самому.

Я также использую другой подход, потому что я программирую устройства ESP32-wrover с помощью MicroPython. Тем не менее, логика одинакова для перевода таблиц данных -> код.

  1. Вы должны решить, какой последовательный интерфейс использовать

    • I2C, если вы ограничены ограниченным количеством проводов
    • SPI для высокочастотных измерений
  2. в обоих случаях вы записываете / считываете данные в / из регистров устройства, которые идентифицируются по адресу, указанному в таблице данных (посмотрите раздел карты регистров). В каждом адресе вы считываете / записываете байт, то есть 8 бит (0 или 1), которые упакованы в шестнадцатеричный формат (например, вы можете установить режим питания на "измерение", записывая 0x01 в регистр с адресом 0x2d)

  3. с обоими у вас обычно есть библиотека, которая реализует 3 основных метода:

    1. init() для инициализации интерфейса с параметрами, которые вы найдете в таблице данных:
      • SPI: полярность, фаза, max_clock_frequency, первый бит MSB или LSB
      • I2C: максимальная частота блокировки
    2. чтение(register_address, nbytes) -> bytearray
    3. запись(register_address, bytearray)
  4. перед считыванием ускорений необходимо установить диапазон (например, ± 2g), выходную скорость передачи данных (например, 1000 Гц), режим питания (например, режим измерения).

  5. затем вы считываете данные ускорения из соответствующих регистров. Учтите, что вы можете считывать несколько регистров в одной транзакции, считывая несколько байтов, начиная с адреса (например, вы можете считывать измерения x, y, z в одной транзакции, начиная с первого байта данных x, а затем считывая 9 байтов = 3 оси * 3 байта)

  6. Затем вам нужно преобразовать байты в g единиц измерения: в этом акселерометре значение одной оси состоит из 20 бит, которые разделяются на 3 байта. Вы должны объединить 3 байта, убрать конечные 4 бита, затем применить компоненты two (то есть для разрешения отрицательных чисел, посмотрите это руководство), затем умножить на масштабный коэффициент, указанный в таблице данных.

,