Как изменить выходную скорость передачи данных (I2C) ADXL355 с Ardunio MKR - PullRequest
0 голосов
/ 12 июня 2019

Я использую от 1 до 4 трехосных акселерометров ADXL355 (https://www.analog.com/media/en/technical-documentation/data-sheets/adxl354_355.pdf) в сочетании с Arduino MKR WIFI1010 в тестовой установке. В идеале я хотел бы сэмплировать частоту около 500 Гц с каждым, независимо от того, тестирование с 1 датчиком или с 4 с использованием мультиплексора TCA9548A I2C. В настоящее время я собираю около 200 Гц с 1 датчиком или 50 Гц со всеми 4 датчиками (для этой настройки используется другой код). По умолчанию для ADXL355 используется значение 500 Гц, которое делает это еще более странным, я не могу пробовать с такой скоростью.

Я пытался увеличить скорость передачи данных с 9600 до 128000. Я пытался использовать Wire.setClock (), чтобы максимизировать скорость I2C до максимума 3,4 МГц, на котором могут работать датчики и Arduino. Я пытался сохранить на микро SD с помощью экрана в одной точке, хотя большая часть моего тестирования была с Serial Monitor. Я изменил Wire.write (), который должен быть тем, что контролирует выходную скорость, однако даже когда я установил его на настройку 4 кГц (Wire.write (0x00)), я все еще выполняю выборку на частоте ~ 200 Гц.

#include <Wire.h>
#define ADXL 0x1D                                       //Datasheet pages 4 and 7 have info that will be necessary for future development. 

void setup() {
  Wire.begin();                                         // initiate the accelerometer   
  Wire.setClock(3400000L);
  Serial.begin(128000);                                   // initiate the serial monitor  
  delay(100);   
  Wire.beginTransmission(ADXL);                         //set STBY bit 0 to low / turn on MEASURE mode 
  Wire.write(0x2D);   
  Wire.write(0x00);   
  Wire.endTransmission();  
  delay(100); 
  Wire.beginTransmission(ADXL);                         //set RANGE to +/- 2g  pg. 37 of data sheet
  Wire.write(0x2C);   
  Wire.write(0x01);   
  Wire.endTransmission(); 
  delay(100);
  Wire.beginTransmission(ADXL);                         //set data rate to 4000HZ page 37 
  Wire.write(0x28);
  Wire.write(0x00);
  Wire.endTransmission();
  delay(100);
}

Я ожидаю получить 500 Гц (или 4000 Гц, как мой код сейчас), но я получаю 200 Гц, и изменение установленной скорости передачи данных, похоже, не влияет на результаты. Любая помощь в увеличении моей скорости выборки будет принята! Спасибо!

...