Motordrehrichtung verkehrt (Mini 3)?

Ich habe positive Geschwindigkeit in Microblocks eingestellt und beide H-Brücken zeigen mir am Oszilloskop negative Spannungswerte zwischen M0+ zu M0- bzw. M1+ zu M1-.
Wechsle ich auf negative Geschwindigkeit (zB -70%) dann sind es positive Spannungswerte.
Also genau verkehrt. - Mache ich etwas grob falsch, noch habe ich keine Motoren dran.

makecode.calliope.cc Version: [6.0.28]
Microsoft MakeCode Version: [9.0.15]
Laufzeitumgebung codal-microbit-v2 Version: [v0.2.63-calliope-rc1]

… son nochmal verifiziert:
Geschwindigkeit auf +70% (Anzeige 7 im Bild) und negative Spannung (-3.08V) am Multimeter
beide Motoren drehen rückwärts.

Wer kümmert sich um eine Korrektur?
Wie läuft der Prozess ab (Github als Fehlermelde- und Korrektursystem)?


Code: MotorTest

Mich würde ein Bild der PWM Signale vom Oszilloskop interessieren, weil ich so ein Gerät nicht habe.

Ja, da scheint sich ein Fehler eingeschlichen zu haben.
Wir aktualisieren ihn im kommenden Update!

1 „Gefällt mir“

Die Bilder von den Motor- und Servosignalen mache ich gerne. Aber dann schon mit der korrigierten SW.

Hier die versprochenen Bilder zu den Motorsignalen (Habe die Polarität vertauscht, damit die Bilder richtig erscheinen):
M0 +20% Geschwindigkeit:

M0 +60% Geschwindigkeit:

M0 +100% Geschwindigkeit:

M0 -80% Geschwindigkeit:

Calliope mini 3 am UCB-C port.
M1 verhält sich identisch und völlig unabhängig von Einstellungen für M0.
(Ich kann nur nicht beide Signale M0 und M1 gleichzeitig ins Bild bekommen, da sie bei unterschiedlichen Drehrichtungen keine gemeinsamen GND haben - das setzt das Oszi aber voraus)

Das ist interessant. Ich versuche Pulsweitenmodulation zu verstehen.

Wo hast du die 2 Drähte vom Oszi angeschlossen? An M+ und M- oder auch an GND? Oder alle drei?

Es ist schwer vorstellbar, was am Motor ankommt, wenn es kein Bezugs-GND gibt.

Und bei 0% müssten die beiden Impulse gleich groß sein und trotzdem der volle Strom fließen?

Wie ist eigentlich der Stromverbrauch bei den verschiedenen Prozenten? Als Gleichstrom kann man das ja nicht messen. Praktische Bedeutung hat, wie schnell die Batterie leer wird wenn er steht oder langsam dreht.

Ich lasse einen Encoder Motor einmal in der Minute eine Umdrehung machen. Wieviel Strom fließt, wenn er steht (und an Calliope V3 angeschlossen ist mit 0%)? Der große Akku ist nach 2 Tagen leer.

Ich kann PWM erklären würde das aber lieber am Beispiel der Steuerung eines (Modellbau-) Servos machen. Diese Motorensteuerung ist kein PWM im üblichen Sinn.

Die 2 Drähte des Oszi hängen:

  1. Kanal A an M0+
  2. GND an M0-

Bei 0% Geschwindigkeit liegt 0V am Motor an, keine Impulse (folglich kein Stromverbrauch). Bei positiver Geschwindigkeit (zB +70%) sind es Pulse positiver Spannung, bei negativer Geschwindigkeit (zB: -30%) Pulse negativer Spannung.
Calliope sendet ein 50Hz Signal aus, das hat ein 20ms Periodendauder.
Die Geschwindigkeitsprozentzahl 20% entspricht der Pulslänge 4ms VM durchgeschaltet, 16ms 0V - siehe erstes Oszibild

Stromverbrauch hängt stark von der Leistung des Motors ab. Im Stillstand fliesst aber kein Strom bei einem üblichen DC Motor. Ich kenne den Encoder Motor nicht, aber hat der eine Drehwinkelerfassung? Das würde den Stromverbrauch bei Stillstand erklären.

Vielen Dank für die Erklärung. So kann ich die Oszi Bilder verstehen.

Es ist dieser Encodermotor:
Encodermotor, rot (fischertechnik.de)
Dort ist auch ein Datenblatt.

Der Encoder und der Motor sind zwei getrennte „Devices“. Der Motor wird vom Encoder nicht beeinflusst.

Ich dachte, auch von den alten MakeCode Motor Blöcken, PWM würde den Motor bremsen oder „auslaufen lassen“. Haben die Blöcke „auslaufen“, „Pause“ und „schlafen“ überhaupt einen Sinn? Eine Wirkung habe ich nicht bemerkt.
Und das von mir verwendete externe Modul motor | Calliope i2c Erweiterung für ‘Qwiic Motor Driver’ kennt solche Funktionen im Datenblatt auch nicht.

Oder muss das Bremsverhalten in der Software programmiert werden indem die Pulse in mehreren Schritten herunter geregelt werden?

Hallo asp.net,
zu deiner Frage, ob die Befehle auslaufen, pause, schlafen einen Effekt haben: Mich hatte das Thema auch mal interessiert und ich habe folgendes herausgefunden. Die Antworten findet man im Datenblatt des DRV8837, Tabelle 7-1 und in den Quellen für die Motor-Befehle.

Wenn man zwei Motoren anschließt, also „dual motor mode“, haben die Befehle keine Wirkung. In diesem Fall bremst man, indem man den PWM-Dutycycle auf 0% einstellt, d.h. die Motor-Pins liegen auf GND-Potential.

Wenn man einen Motor zwischen Pin M0 und M1 verwendet, ergeben sich die unterschiedlichen Brems-Modi eines Brushed DC Motors.

Hier ein Auszug aus dem Datenblatt.

Auslaufen, Funktion CalliopeSoundMotor::motorCoast(), Bezeichnung in Datenblatt: Coast

Die Motor-Pins sind beide hochohmig, d.h. die durch die Drehung erzeugte Spannung führt nicht zu einem signifikanten Stromfluss. Die Bremswirkung ist weitgehend mechanisch (Reibung). Daher „auslaufen“.

Pause, Funktion CalliopeSoundMotor::motorBreak(), Bezeichnung in Datenblatt: Brake

Die Motor-Pins werden beide mit GND verbunden, d.h. es entsteht ein Kurzschluss zwischen den Motor-Anschlüssen. Die durch die Restdrehung induzierte Spannung führt sofort zum Stromfluss, der der Ursache entgegenwirkt und in Wärme umgewandelt wird. Die Bremswirkung wird sozusagen elektrisch unterstützt.

Das Wort „Pause“ ist m.E. ein Übersetzungsfehler. Im Quellcode steht nämlich „break“, sollte vermutlich „brake“ heißen. Und break wurde dann in Pause übersetzt. Besser wäre „aktives Bremsen“ oder ähnlich.

Schlafen, Funktion CalliopeSoundMotor::motorSleep(), Bezeichnung in Datenblatt: Coast

Bezüglich des Bremsverhaltens identisch zu Coast.
Zusätzlich geht der DRV8837 ein seinen Low-Power Mode mit max. 120 nA Stromverbrauch.

1 „Gefällt mir“

Der Mini V3, um den es hier in diesem Beitrag geht, hat aber nicht den DRV8837 (einfache H-Brücke) sondern DRV8835 (zweifache H-Brücke).
Daher haben die unterschiedlichen Brems-Modi auch für den Betrieb von zwei Motoren Bedeutung.

1 „Gefällt mir“

Wenn ich das richtig verstehe, unterstützt der DRV8837 diese Brems-Modi.

Mit dem Datenblatt des DRV8835 habe ich mich beschäftigt, weil der auch auf dem von mir benutzten Modul drauf ist Calliope i2c Erweiterung für ‘Qwiic Motor Driver’.

Dort steht nichts von auslaufen oder aktiv Bremsen drin. Ich vermute, dass es diese Modi bei dem Chip nicht gibt. Folgerichtig gibt es das in den Blöcken vom Calliope v3 auch nicht.

Es gibt zwar immer noch den Prozessor, der diesen Chip steuert. Das Qwiic Modul hat aber so viele Funktionen über I²C programmierbar gemacht, dass man auf das Bremsen bestimmt nicht verzichtet hätte, wenn das möglich wäre.

https://learn.sparkfun.com/tutorials/hookup-guide-for-the-qwiic-motor-driver

Mein Modell ‚CaR 4‘ bremst so gut, dass es auf Klassenzimmer-Fußboden ein Stück rutscht.

Bei dem Qwiic Modul gibt es aber eine Funktion Motor Power ON und OFF. Wenn der Motor steht und ich schalte Motor Power OFF, wird wesentlich weniger Strom verbraucht. Ich muss noch erforschen, wo die Energie hin geht, wenn der Motor sich nicht dreht…

Lutz