Код акселерометра ADXL355
Я делаю проект, который отслеживает вибрации с помощью датчика ADXL355 и Arduino. Я уже использовал датчик MPU-9250 раньше.
Я не могу найти библиотеку или учебные пособия для калибровки, фильтрации и считывания точных данных с датчика. Может ли мне помочь кто-нибудь, кто ранее работал с датчиком? Я инженер-механик, новичок в области электроники.
Если файлы библиотеки недоступны, как я могу использовать таблицу данных для самостоятельного написания всего кода? Есть ли какой-нибудь учебник для этого?
Извините, если сообщение кажется вам сбивающим с толку..
@Arduiproj, 👍2
Обсуждение1 ответ
У меня был такой же путь обучения, как у вас, и я также пытался использовать ADXL345 и ADXL355. Последнее было проблемой из-за проблем, описанных во многих подобных сообщениях.
Я не смог найти ни одного хорошего учебника по этой теме, и мне пришлось учиться всему самому.
Я также использую другой подход, потому что я программирую устройства ESP32-wrover с помощью MicroPython. Тем не менее, логика одинакова для перевода таблиц данных -> код.
Вы должны решить, какой последовательный интерфейс использовать
- I2C, если вы ограничены ограниченным количеством проводов
- SPI для высокочастотных измерений
в обоих случаях вы записываете / считываете данные в / из регистров устройства, которые идентифицируются по адресу, указанному в таблице данных (посмотрите раздел карты регистров). В каждом адресе вы считываете / записываете байт, то есть 8 бит (0 или 1), которые упакованы в шестнадцатеричный формат (например, вы можете установить режим питания на "измерение", записывая 0x01 в регистр с адресом 0x2d)
с обоими у вас обычно есть библиотека, которая реализует 3 основных метода:
- init() для инициализации интерфейса с параметрами, которые вы найдете в таблице данных:
- SPI: полярность, фаза, max_clock_frequency, первый бит MSB или LSB
- I2C: максимальная частота блокировки
- чтение(register_address, nbytes) -> bytearray
- запись(register_address, bytearray)
- init() для инициализации интерфейса с параметрами, которые вы найдете в таблице данных:
перед считыванием ускорений необходимо установить диапазон (например, ± 2g), выходную скорость передачи данных (например, 1000 Гц), режим питания (например, режим измерения).
затем вы считываете данные ускорения из соответствующих регистров. Учтите, что вы можете считывать несколько регистров в одной транзакции, считывая несколько байтов, начиная с адреса (например, вы можете считывать измерения x, y, z в одной транзакции, начиная с первого байта данных x, а затем считывая 9 байтов = 3 оси * 3 байта)
Затем вам нужно преобразовать байты в g единиц измерения: в этом акселерометре значение одной оси состоит из 20 бит, которые разделяются на 3 байта. Вы должны объединить 3 байта, убрать конечные 4 бита, затем применить компоненты two (то есть для разрешения отрицательных чисел, посмотрите это руководство), затем умножить на масштабный коэффициент, указанный в таблице данных.
- Можно ли измерить скорость акселерометром? Насколько точно?
- В чем разница между акселерометром, гироскопом и датчиком магнитометра?
- OVF в последовательном мониторе вместо данных
- Как связаться с датчиком через порты RX/TX Arduino?
- Линейное ускорение от MPU 6050
- Как правильно определить крен, тангаж, перемещение?
- Правильный способ получить значения крена, тангажа и перемещения
- Снять гравитацию с акселерометра MPU-6050
Быстрый поиск в Google дал мне [эту библиотеку] (https://github.com/sparkfun/SparkFun_ADXL345_Arduino_Library ) от Adafruit. В нем также есть пример калибровки. Применение фильтров не имеет ничего общего с датчиком, а только с уже собранными данными. Если вы загуглите что-то вроде "библиотека фильтров Калмана arduino github", вы также получите результаты для уже существующих библиотек, которые реализуют фильтр Калмана (часто используется с акселерометрами / гироскопами)., @chrisl
Вышеупомянутая библиотека использует Adxl 345., @Arduiproj