Diverse Fragen zur Motorenansteuerung

Liebe Calliope-Community,

auch ich habe mit den Tücken des Motorenblocks zu kämpfen. Wie viele von euch versuche ich, den 9V-Motor des LEGO Technic Sets 42065 (Raupenfahrzeug) mit unterschiedlichen Geschwindigkeiten anzusteuern. Dazu ist das Batterypack an VM und GND angeschlossen und der Motor an Motor A und GND. Die Ansteuerung erfolgt über den Programmierblock zum Motor A.
Der Motor dreht bei mir immer ungefähr gleich schnell - unabhängig von der Prozentangabe beim Programmierblock. Um der Sache auf den Grund zu gehen, habe ich mir das PWM-Signal vom Prozessor (gelb) und die Spannung über dem Motor (blau) mit einem Signalanalyzer angesehen. Dabei sind einige Fragen aufgetaucht, die ihr mir hoffentlich beantworten könnt:

  • Warum hat bei 100% das PWM-Signal nur ein Tastverhältnis von 1:2 (siehe Bilder 100%)? Die Spannung müsste doch andauernd anliegen?
  • Wieso bekomme ich bei 0% mit dem PXT Editor einen anderen Signalverlauf als mit dem OpenRobertaLab?
  • Wieso dreht der Motor, obwohl die Geschwindigkeit 0% beträgt?

Bereits im Voraus besten Dank für eure Antworten und Tipps!
Gruss
Niklas

(PS: Die Bilder muss ich leider als einzelne Posts einfügen. Als Neumitglied ist der Upload auf ein Bild beschränkt.)

Hallo Niklas,

wenn Du schon einen Signalanalyzer hast, gehen Deine Elektrotechnik-Kenntnisse über meine weit hinaus. Also lies meine Antwort mit der gebotenen Skepsis :-).

Dummerweise darf ich hier nicht mehr als zwei URLs posten, daher habe ich die Links kreativ formatiert. [.] ist einfach nur ein “.” :face_with_symbols_over_mouth:

Ich hatte zunächst auch Probleme mit der Ansteuerung von zwei Lego-Motoren über den NEPO-Editor/OpenRoberta Lab. Was das Problem für mich allerdings gelöst hat war der Einbau von einer Diode (konkret 1N4001) pro Motor wie in calliopeminigsho.wordpress[.]com/technik/dualmotorbug/ beschrieben.

Wenn ich das richtig verstanden habe, ist auf dem Calliope eine einzige H-Brücke verbaut.

Diese H-Brücke (de.wikipedia[.]org/wiki/Vierquadrantensteller) würde man normalerweise nutzen, um einen einzigen Motor in zwei Drehrichtungen anzusteuern. Der Motor wird dann zwischen die Motor-Pins A und B geschaltet. Der entsprechende
Chip (www.ti[.]com/lit/ds/symlink/drv8837.pdf) kann daher auch in Abhängigkeit von den zwei Eingängen IN1 und IN2 entweder A mit der Motor-Spannung +Vm und B mit GND verbinden, oder (für die andere Laufrichtung) B mit +Vm und A mit GND. Außerdem gibt es den Freilauf und ein “bremsen”, in dem A und B auf GND gehen und den Motor (als Generator) kurzschließen.

Wenn du nun zwei Motoren gleichzeitig betreiben möchtest, kann der Calliope (in der Firmware? In einer Bibliothek? Ich weiß es ehrlich gesagt gar nicht…) bei diesem Treiber-Chip gar nicht anders, als immer nur abwechselnd die beiden Motor-Pins auf +Vm zu setzen. Der Treiber-Chip hat keine Kombination von Inputs, die gleichzeitig beide Motoren auf +Vm ermöglichen würde.

Die erwähnte Diode ist zusätzlich notwendig, weil der Antrieb eines Motors den anderen bei dieser Betriebsweise über GND bremsen würde. Das wird durch die Diode (wie ich es verstanden habe) überbrückt.

Was mir tatsächlich sehr geholfen hätte, wäre ein entsprechender Eintrag in der Calliope FAQ. Vielleicht verbunden mit einer Art Unbedenklichkeitserklärung für diese Art der Beschaltung :wink:

Wenn das Ergebnis dann noch zwischen OpenRoberta Lab und PXT unterschiedlich ist, könnte eine Erklärung dafür sein, dass beide Editoren hinter den Kulissen anderen Code generieren/kompilieren und dabei die Unterschiede entstehen? Für OpenRoberta habe ich auch eine Issue bei GitHub github[.]com/OpenRoberta/robertalab/issues/558 gefunden, die eventuell hilfreich für Dich ist?

Weiterhin viel Spaß mit dem Calliope!
-mp.

PS. Sorry wegen der Links. Ein Beispiel, dass gut gemeint nicht gleich gut gemacht ist :frowning:

Hallo mpdude,

danke für deine ausführliche Antwort mit den möglichen Erklärungsansätzen für die beobachteten Phänomene rund um die Motorenansteuerung. So vertieft sind meine Elektronikkenntnisse nicht. Ich habe eine Erstausbildung als Elektroniker. Der Abschluss liegt aber schon 10 Jahre zurück…:grinning:
Es ist also tatsächlich so, dass der Treiber-Chip nur alternierend angesteuert werden kann?! Ich habe gehofft, dass beide Eingänge unabhängig betrieben werden können. Vielleicht gibt’s da einmal noch ein Firmwareupdate. Der Chip selber sollte unabhängig angesteuerte Eingänge zulassen.
Dass die beiden Compiler den Motorenblock unterschiedlich übersetzen, habe ich auch vermutet. Aus meiner Sicht übersetzt das OpenRoberta Lab den Code aber völlig falsch. Bei 10% Leistung ist IN1 zu 90% high und nur 10% low (siehe Bild). Eigentlich müsste es doch anders herum sein?
Ich experimentiere auf jeden Fall mit dem Raupenfahrzeug weiter und melde mich, wenn es neue Erkenntnisse gibt. Für das Dioden-Y-Kabel sind die Bauteile auf dem Weg.
Gruss
Niklas

Hallo!
Konntest du einen Unterschied zwischen den beiden Modi (vor und nach Einsatz der Dioden) feststellen? Ich habe das keinen Unterschied gemerkt – hatte aber auch nicht die Probleme aus dem Link feststellen können…

Hallo Joern,

bislang habe ich nur einen Motor zwischen “Motor A” und GND angeschlossen. Die Dioden-Variante probiere ich in den nächsten Tagen aus. Ich gehe aber nicht davon aus, dass sich in punkto PWM etwas ändern wird. Das blaue IN1 Signal wird ja vom Prozessor und damit von der compilierten Software generiert. Ich vermute, dass das OpenRobertaLab die Prozentangabe genau invertiert interpretiert. 100% entspricht einem kurzzeitigen Puls und 10% einem langen.
Ich melde mich wieder, wenn ich etwas Neues feststelle.

Gruss
Niklas

Hallo miteinander,

mittlerweile ist mein Raupenfahrzeug-Projekt wieder eine Stufe weiter gediehen. Ich habe die beiden LEGO Motoren über das Dioden-Kabel angeschlossen. Sie lassen sich unabhängig voneinander ansteuern und das Raupenfahrzeug bewegt sich mehr oder weniger auf dem angegeben Kurs.
Einige Unschönheiten, die auch schon von anderen in diesem Forum beobachtet wurden, stelle ich auch fest:

  • Die Geschwindigkeit lässt sich nur bedingt regeln. Zwischen 50% und 100% kann man einen leichten Unterschied erkennen. Langsam fahren lassen kann man die Motoren nicht.
  • Bei mehreren nacheinander geschalteten Rampenbeschleunigungen (von Null auf Hundert) kann es vorkommen, dass die Motoren nicht anlaufen. Ich nehme an, dass die Ursache eine Restspannung ist, die noch anliegt.
    Einen Unterschied zwischen den beiden Editoren bez. der Motorenansteuerung kann ich nicht mehr beobachten. Beide setzen die Prozentangabe gleich um. Zumindest optisch lässt sich kein Unterschied beim Tempo erkennen. Dabei ist das PWM-Signal vom Prozessor nach wie vor unterschiedlich :face_with_monocle: ?

Ich forsche weiter und melde mich, wenn es etwas Neues gibt.
Gruss
Niklas