MPU6050 Sleep Mode und nrf51822 - Interrupt funktioniert manchmal nicht.

OP #7086136
Lesenswert?
• ▲
▼
Hallo in die Runde,

ich suche seit geraumer Zeit nach einem sehr sporadischen Problem mit 
dem MPU6050 (auf GY87 Breakout) und einem Nordic nrf51822 BLE Modul auf 
einem Waveshare BLE400 Core Board.

Ich nutze die I2CDevlib.

Das ganze wird von einer CR2032-Knopfzelle gespeist.
Der nrf51822 geht nach 10 Sekunden in den Sleep-Mode, der MPU6050 ebenso 
und wird über den Motion-Interrupt wieder geweckt. Das klappt auch fast 
immer total problemlos. Aber in sehr wenigen Fällen (1%?) leider nicht. 
Dann bleibt der nrf51822 im Sleep-Mode (POWER_MODE_OFF).
Wake-Up über "Falling", der Interrupt-Ausgang ist entweder Open-Drain 
(mit internem 13k Pull-Up im nrf51) oder Push-Pull ohne internen 
Pull-Up.

Die Knopfzelle hat >3V und war teilweise ganz frisch. Auch wenn ich an 
die untere Grenze der zulässigen Versorgungsspannung gehe, kann ich das 
Problem nicht nachstellen.
Die Spannung bricht ein wenig ein während der 10 Sekunden und erholt 
sich im Sleep wieder, aber alles im Rahmen der zulässigen Grenzen.

Wenn ich den Interrupt-Pin messen will und mit dem Oszi dran gehe, wecke 
ich den nrf51822 auf - daraus schliesse ich bisher, dass der Interrupt 
vom MPU6050 nicht kommt.

Ich bin nun etwas ratlos - der Fehler ist schwer zu reproduzieren und 
mir gehen die Ideen aus. Hat jemand noch Tipps?

Ich baue mir gerade einen Testaufbau mit Servo, der das Ding im 20 
Sekunden-Takt bewegt und hänge mal das Oszi fest an den Interrupt-Pin, 
vielleicht bringt das weitere Erkenntnisse oder lässt den Fehler 
schneller auftauchen.

Hier das Code-Snippet, das den MPU6050 in Sleep versetzt.
1
void mpu6050LowPower(u_int16_t motionThreshold, uint8_t motionDuration) {
2
  mpu.setDMPEnabled(false);
3
  mpu.resetFIFO();
4
  mpu.setIntDMPEnabled(false);
5
  mpu.setInterruptMode(1);
6
  mpu.setInterruptDrive(0); //Push-Pull
7
  mpu.setWakeFrequency(1);
8
  mpu.setClockSource(MPU6050_CLOCK_INTERNAL);
9
  mpu.setStandbyYGyroEnabled(true);
10
  mpu.setStandbyXGyroEnabled(true);
11
  mpu.setStandbyZGyroEnabled(true);
12
  mpu.setStandbyZAccelEnabled(true);
13
  mpu.setStandbyXAccelEnabled(true);
14
  mpu.setStandbyZAccelEnabled(true);
15
  mpu.setIntMotionEnabled(true);
16
  mpu.setMotionDetectionThreshold(motionThreshold);
17
  mpu.setMotionDetectionDuration(motionDuration);
18
  mpu.setWakeCycleEnabled(true);
19
}
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.