Kompasssensor stört 2-Motoren-Steuerung (NEPO)


#1

Die 2-Motoren-Steuerung funktioniert super solange der Kompasssensor nicht abgefragt wird (NEPO).
Bei einem Programm mit Kompasssensor-Abfrage läuft der Motor am Port B viel zu langsam.
Dabei ist es unerheblich ob die Kompasssensor-Abfrage vor oder nach dem Motorstart stattfindet.

Hier laufen beide Motoren gleich schnell:

Simple

#define _GNU_SOURCE

#include "MicroBit.h" 
#include <array>
#include <stdlib.h>
MicroBit uBit;


int initTime = uBit.systemTime(); 

int main() 
{
    uBit.init();
    
    uBit.soundmotor.motorAOn(80);
    uBit.soundmotor.motorBOn(80);
    uBit.sleep(5000);
    uBit.soundmotor.motorAOff();
    uBit.soundmotor.motorBOff();
    release_fiber();
}

Und nach Initialisierung des accelerometer läuft
der Motor an Port A schneller als an Port B:

Kompass

#define _GNU_SOURCE

#include "MicroBit.h" 
#include <array>
#include <stdlib.h>
MicroBit uBit;


int initTime = uBit.systemTime(); 

int main() 
{
    uBit.init();
    
    uBit.accelerometer.updateSample();
    uBit.soundmotor.motorAOn(80);
    uBit.soundmotor.motorBOn(80);
    uBit.sleep(5000);
    uBit.soundmotor.motorAOff();
    uBit.soundmotor.motorBOff();
    uBit.display.scroll(ManagedString(uBit.compass.heading()));
    release_fiber();
}

Allerdings nach Entfernen der 5-Sekunden-Warteschleife laufen die Motoren auch gleich schnell. Beeinflussen sich da irgendwelche interne Timer?

#define _GNU_SOURCE

#include "MicroBit.h" 
#include <array>
#include <stdlib.h>
MicroBit uBit;


int initTime = uBit.systemTime(); 

int main() 
{
    uBit.init();
    
    uBit.accelerometer.updateSample();
    uBit.soundmotor.motorAOn(80);
    uBit.soundmotor.motorBOn(80);
    uBit.display.scroll(ManagedString(uBit.compass.heading()));
    release_fiber();
}

#2

Guten Abend,
Also ich hatte vor längerer Zeit mal ein PXT-Prog geschrieben, dass den Kompass abfragt während der mini-Bot eine Linie verfolgt.
Das hat sehr gut geklappt, aber leider finde ich das Programm jetzt nicht wieder.
Vielleicht kann ich helfen, wenn ich Dein Programm sehe…

Weja


#3

War das ein mini-Bot mit einem oder zwei Motoren?


#4

Tatsächlich ist mir das auch aufgefallen, als ich versucht habe, mit dem Kompass “geradeaus” zu fahren. Das Fahrzeug zog immer nach rechts (= Motor B).

Ich bin davon ausgegangen, dass die Motoren einfach ein bisschen ungenau gefertigt sind, aber das hier scheint mir eine viel bessere Erklärung zu sein.

Es funktionierte problemlos, wenn ich ein Stück fahre, anhalte, den Kompass abfrage, die Richtung korrigiere und dann weiterfahre.

Außerdem schien es mir so, als würde der Kompass immer nur eine nördliche Richtung messen, solange die beiden Motoren laufen. Aber das kann natürlich auch ein Problem durch schlechte magnetische Abschirmung gewesen sein, oder der Sensor misst nicht zuverlässig, wenn er beschleunigt wird?


#5

Hm, kann gut sein dass das Magnetfeld der Motoren Größer ist als die Auswirkungen des Erdmagnetfeldes. Schirme mal die Motoren mit einem Eisenblech ab und messe dann!!


#6

Nochmal getestet und ja, wenn ich den Kompass im Programm Abfrage, zieht das Fahrzeug zur Seite des Motor B.

Habe auch einfach mal die Motoren eingeschaltet, Fahrzeug dabei angehoben und den Messwert des Kompass angezeigt. Alles kein Problem, keine Beeinflussung durch ein evtl. Magnetfeld.

Warum ich keine sinnvollen Messwerte bekomme, wenn es tatsächlich fährt, kann ich nicht sagen, aber das war auch nicht das Thema des Threads :slight_smile: