我在测试中使用了1-4 ADXL355三轴加速度计(https://www.analog.com/media/en/technical-documentation/data-sheets/adxl354_355.pdf)和Arduino MKR WIFI1010。理想情况下,我希望采样频率接近500 Hz,无论是使用1个传感器还是使用TCA9548A I2C多路复用器测试4个传感器。目前,我正在收集大约200赫兹与1个传感器或50赫兹与所有4个传感器(不同的代码用于此设置)。ADXL355的默认频率是500 Hz,这使得我无法以该速率采样更奇怪。
我试着把我的波特率从9600提高到128000。我尝试使用Wire.setClock()来最大化I2C速度,使传感器和Arduino可以在3.4 the的最大频率下工作。虽然我的大部分测试都是在串行监视器上进行的,但我也曾一度尝试过使用屏蔽将其保存到micro SD。我更改了控制输出速率的Wire.write(),但是即使我将其设置为4 4kHz设置(Wire.write(0x00)),我仍然以~200 am进行采样。
#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 am (或4000 am,就像我现在的代码),但我得到了200 am,并且改变设置的数据速率似乎不会影响结果。任何帮助提高我的样本数据率的人都将不胜感激!谢谢!
发布于 2020-11-13 16:07:29
关于I2C波特率,您使用的是数据表中允许的最大值,但您必须将寄存器0x2c的第8位设置为1。

关于odr,您使用的寄存器和值是正确的,并且在我的设置(esp32-wrover + micropython)中可以正常工作。如果我是你,我会尝试将odr设置为可能的最低值(3.906 Hz),看看它是否工作,例如读取fifo中的所有值,然后检查它重新填充的速度,然后随着频率的增长而增长。
考虑到在我的经验中,我不能使用I2C超过2 4kHz (我只在波特率最大值较低的ADXL345上尝试):为了达到4 4kHz,我会使用SPI,即使这样,代码也必须非常优化。
https://stackoverflow.com/questions/56552717
复制相似问题