MPU 6050 SD写入频率Arduino不是恒定的,如何有一个恒定的写入频率?

时间:2017-02-20 18:35:38

标签: arduino-uno file-writing sample-rate time-frequency mpu6050

我是菜鸟,我来自土木工程师,我提前道歉。

我有一个连接到我的Arduino Uno的MPU6050,我在SD上写入数据。 我可以以20毫升的采样率写。

为什么我有此默认频率?

这是代码的一部分

// Main:
  void loop()
  {
    // Body of main/loop
    // Check status:
    Time0 = millis();
    Read_Write();
   // LED off and continue:
      digitalWrite(LEDpin, LOW);

       }

  void Read_Write()
  // function that reads the MPU and writes the data to the SD.
  {
   // Local variables:
    int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ; // Variables read from MPU6050

    // Read data:
    Wire.beginTransmission(MPU);
    Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
    Wire.endTransmission(false);
    Wire.requestFrom(MPU,14,true);  // request a total of 14 registers
    AcX = Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)     
    AcY = Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
    AcZ = Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)

    GyX = Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
    GyY = Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
    GyZ = Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

    Serial.print(AcX);
    Serial.print(',');
    Serial.print(AcY);
    Serial.print(',');
    Serial.print(AcZ);
    Serial.print(',');
    Serial.print(GyX);
    Serial.print(',');
    Serial.print(GyY);
    Serial.print(',');
    Serial.print(GyZ);
    Serial.print(',');

    Serial.println();


    // Data preparation for file saving:
    String dataString = ""; // string for assembling the data to log:

    // Add time tag:
    dataString += String(Time0); dataString += ",";

    // Append the MPU6050 data to the string:
    dataString += String(AcX); dataString += ",";
    dataString += String(AcY); dataString += ",";
    dataString += String(AcZ); dataString += ",";
    dataString += String(GyX); dataString += ",";
    dataString += String(GyY); dataString += ",";
    dataString += String(GyZ);

    // Open the file in append mode:
    File dataFile = SD.open("datalog.txt", FILE_WRITE);

    // If the file is available, write to it:
    if (dataFile) 
    {
    dataFile.println(dataString);
    dataFile.close();
    if (Serial_plus_SD)
      Serial.println(dataString);
    }
    // if the file does not open, pop up an error:
    else 
    errorFW();

    return;
  }

为什么记录时间不恒定,但有时为40毫秒(见图)? enter image description here

对我来说很重要,因为我的目标是使用常数频率来应用FFT来研究噪声并确定最佳低通滤波器。

如何修改频率? 我想在我的代码上添加延迟()

 void loop()
      {
        // Body of main/loop
        // Check status:
        Time0 = millis();
        Read_Write();
       // LED off and continue:
          digitalWrite(LEDpin, LOW);
          delay(80)
           }

0 个答案:

没有答案