MPU6050 low pass filter

Ich möchte den Tiefpassfilter im MPU6050 aktivieren. Da im MPU6050_light dafür keine Funktion existiert nutze ich folgende Befehle:

Wire.beginTransmission(0x68);
Wire.write(0x1A);
Wire.write(0x06); 
Wire.endTransmission(true);

Leider scheint der Filter nicht aktiviert zu werden.

Da es ein Read/Write Register ist. Hast du das Register schon mal nach dem Schreiben der Bits ausgelesen ob die Bits gesetzt sind?

Auf diese Art und Weise setzt Du die Bits 3-5 (Ext-Sync-Set) aber auch auf Null.
Du musst das Register erst lesen und anschließend die Bits 0 bis 2 löschen, sowie mit 0x06 „odern“.

Ob das jetzt so ganz korrekt ist weiß ich nicht… ich schreibe aus dem Gedächtnis. Das ist nicht mehr das Beste. Aber so in der Art…

wire.requestFrom(0x1A,1);
myReg = Wire.Read();
myReg = (myReg & 0b11111000) | 0x06;

Dann wieder schreiben…..

Super! Danke das ist die Lösung. Low Pass Filter funktioniert - bzw. sehe jetzt dass er nicht die Lösung für mein Problem ist und ich auf einen Magnetometer umsteigen muss

Ich habe mir den Quellcode des MPU6050_light libraries angeschaut und muss mich korrigieren. Es wird explizit 0 in das Config Register geschrieben. Somit muss man die alten Werte nicht lesen und modifizieren aber auch jede Modifikation am Config Register nach "Begin" ausführen. Daran lag mein Fehler.

byte MPU6050::begin(int gyro_config_num, int acc_config_num){
  // changed calling register sequence [https://github.com/rfetick/MPU6050_light/issues/1] -> thanks to augustosc
  byte status = writeData(MPU6050_PWR_MGMT_1_REGISTER, 0x01); // check only the first connection with status
  writeData(MPU6050_SMPLRT_DIV_REGISTER, 0x00);
  writeData(MPU6050_CONFIG_REGISTER, 0x00);
  setGyroConfig(gyro_config_num);
  setAccConfig(acc_config_num);
  
  this->update();
  angleX = this->getAccAngleX();
  angleY = this->getAccAngleY();
  preInterval = millis(); // may cause lack of angular accuracy if begin() is much before the first update()
  return status;
}

Jetzt (und nachdem ich den Gyro weit vom Motor entfernt habe) sieht es schon viel besser aus

Das mag sein. Trotzdem ist es keine gute Idee, wenn man nur bestimmte Bits in einem Register setzen will, das gesamte Register zu überschreiben. Der Zustand des Registers könnte sich im Laufe der Anwendung ja noch ändern.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.