Günstigere Möglichkeit, Hoverboard-Motoren zu steuern

Habe ein günstigeres Board mit einer Nennleistung von 350 W bei 6–60 V gefunden. Das bedeutet, dass es den Hoverboard-Motor mit einer 36-V-Batterie antreiben kann. In diesem Artikel erfahren Sie, wie Sie mit diesem Board zwei Hoverboard-Motoren mit Arduino Nano antreiben können. Wenn Sie jedoch erst einmal die Grundeinstellungen kennen, können Sie praktisch jeden Mikrocontroller wie Raspberry Pi Pico, ESP32, Teensy oder RPi4 verwenden, um Geschwindigkeit und Richtung zu steuern.

Für das Projekt benötigte Komponenten
  1. Hoverboard und ggf. Aufbau des Roboterrahmens auf dem Hoverboard.
  2. Arduino Nano
  3. Treiber-Motor-Steuerplatine
  4. Stiftleisten, Drähte, ein Jumper und zusätzliche JST-Stiftleisten, die im nächsten Abschnitt erwähnt werden
Treiberplatine für den Einsatz vorbereiten

Obwohl die Treiberplatine wirklich hochwertig ist, hat der Hersteller ihre Verwendung nicht besonders benutzerfreundlich gestaltet. Um die Platine richtig verwenden zu können, musste ich zwei Änderungen daran vornehmen, bevor ich sie verwenden konnte.

  1. Löten Sie den 2-poligen Header, um den Jumper zu installieren und die PWM-Steuerung zu aktivieren. Vom Hersteller nicht bestückt.
  2. Installieren Sie einen JST-Stecker für den PWM-Steuerungs-Header, der vom Hersteller nicht bestückt ist

Sie müssen einen 2-poligen Stecker an der unten gezeigten Stelle installieren. Normalerweise können Sie einfach einen Satz Stecker bei Amazon oder anderswo kaufen und mit einem Universalmesser zwei Stifte herausschneiden. Dies ist ein Standardstecker mit 2,54 mm Abstand und diese sind überall erhältlich.

Ich habe versucht, die beiden Löcher direkt mit Lötzinn zu füllen, aber ich bin nicht sehr gut im Löten, also habe ich die Platine beschädigt. Die endgültige Lösung bestand also darin, einen 2-poligen Stecker auf der Rückseite der Platine anzulöten und dann den Standard-Jumper zu installieren, um die Pins kurzzuschließen. Dies ist eine viel elegantere Lösung, da Sie den Kunststoff-Jumper jederzeit entfernen können, um die Platine mit dem Potentiometer auf der Platine zu testen.

Der knifflige Teil dabei war, dass ich den großen Aluminium-Kühlkörper auf der Rückseite der Platine abschrauben musste und erst dann an die Stelle kam, an der ich den 2-poligen Header anlöten konnte.

Der zweite Schritt besteht darin, den PWM-Steuerungsheader neben dem Encoder-Header zu installieren [oben im schwarzen Rechteck markiert]. Der Hersteller liefert den Encoder-Header als JST-Stecker auf der Platine vorinstalliert. Der PWM-Steuerungsheader wurde jedoch nicht vorinstalliert und Sie können sehen, dass diese 5 Pins neben dem Encoder-Header nur leere Löcher sind, die nicht mit Header-Pins besetzt sind. Ich glaube, der Abstand dieser speziellen Löcher beträgt 1 mm oder 1,5 mm [nicht standardmäßig 2,54 mm]. Dies ist ein Kit, das mit vorgecrimpten Drähten geliefert wird, sodass Sie Ihre eigenen Anschlüsse bauen können. Ich habe versucht, Standard-Stecker zu installieren, aber diese waren nicht lang genug, um mit den DuPont-Drähten richtig Halt zu haben und diese lösten sich während des Tests ständig, sodass die Installation eines richtigen JST-Headers, der die Drähte einrastet, eine bessere Lösung wäre.

Wir werden nur die P- und S-Pins des PWM-Steuerheaders verwenden. Wenn Sie also der Meinung sind, dass die Installation eines JST-Headers übertrieben ist und Sie das Kabel einfach direkt an die P- und S-Pins löten können, können Sie das tun. Beachten Sie jedoch, dass dies keine sehr robuste Lösung ist und Sie möglicherweise die Platine beschädigen.

Verdrahtung & Programmierung

Ich habe die detaillierten Anweisungen aus MAD-EEs Blogartikel befolgt, um zunächst einen einzelnen Motor von einem Arduino Nano aus zu steuern, und dann den Code so geändert, dass er zwei Motoren steuert. Alle seine Codebeispiele funktionierten beim ersten Versuch problemlos. Sie können den Code einfach aus seinem letzten Codeabschnitt kopieren und einfügen und sicherstellen, dass Ihre Pin-Nummern mit denen im Code übereinstimmen, bevor Sie den Code auf Arduino Nano hochladen.

Hier ist der Schaltplan, den ich am Ende für Arduino Nano zur Steuerung beider Motorsteuerungen erstellt habe.

Es war schwierig, die drei Phasenkabel [Ma, Mb, Mc] vom Motor zur oberen linken Schraubklemme darzustellen, die durch eine dicke rote Linie markiert ist. Achten Sie daher darauf, die entsprechenden Phasenkabel vom Nabenmotor an die richtigen Pins am ZS-X11H anzuschließen.

Dasselbe gilt für die Encoderkabel vom Motor zum Encoder JST-Stecker, der auf dem Planke im Schaltplan durch dicke violette Linie markiert. Es gibt 5 Drähte für den Hall-Encoder für den Nabenmotor – Gnd, Hc, Hb, Ha, 5 V.

Außerdem sind die Verbindungen vom Arduino Nano zu beiden Platinen im Diagramm mit unterschiedlichen Farben und Textbeschriftungen gekennzeichnet. Außerdem habe ich zwei Pin-Mapping-Tabellen für die linken und rechten Motorsteuerungen zu den Arduino-Pins bereitgestellt.

Während dieses Tests wird Arduino Nano über das USB-Kabel vom Laptop mit Strom versorgt und wir verwenden dasselbe Kabel zum Einschalten und Hochladen des Arduino-Codes.

Testen

Grundlegender Test zum Betrieb von Motoren ohne PWM-Steuerung

Nachdem Sie die Vorbereitung der Platine abgeschlossen und alles verdrahtet haben, können wir den Betrieb der Motoren testen, ohne tatsächlich über Arduino zu programmieren. Stellen Sie dazu zunächst sicher, dass alle Platinen stromlos sind.

  1. Entfernen Sie den Jumper, der die PWM-Enable-Pins kurzschließt [2-poliger Header, den Sie während der Vorbereitung eingelötet haben].
  2. Stellen Sie sicher, dass das blaue Potentiometer auf der Platine bis zum Anschlag gegen den Uhrzeigersinn gedreht ist. [Im Uhrzeigersinn erhöht die Geschwindigkeit, gegen den Uhrzeigersinn verringert sie, wir sollten also bei Null beginnen].
  3. Stellen Sie sicher, dass Sie das Hoverboard auf einem Ständer oder einer stabilen Kiste abgestellt haben, damit es nicht vom Tisch rollt und etwas beschädigt, wenn sich die Räder drehen

An diesem Punkt können Sie die Batterie einschalten und langsam das blaue Potentiometer auf Links drehen. Motorsteuergerätplatine im Uhrzeigersinn. Der linke Motor sollte langsam anfangen, sich zu drehen, und Sie können die Geschwindigkeit langsam erhöhen und verringern. Dieser Test kann für jeden Motor einzeln durchgeführt werden. Nachdem Sie den Test des linken Motors abgeschlossen haben, reduzieren Sie die Geschwindigkeit auf Null und führen Sie denselben Test mit dem rechten Motorregler durch, indem Sie dessen Potentiometer drehen.

Nachdem der Test abgeschlossen ist, drehen Sie das blaue Potentiometer auf beiden Platinen auf Null. An diesem Punkt wissen wir, dass alle Strom- und Encoderverbindungen korrekt sind und die Motoren ordnungsgemäß gesteuert werden können.

Bedenken Sie, dass bei dieser Platine auch die Encoderkabel eingesteckt sein müssen, da sich die Motoren sonst nicht drehen.

Sie können den PWM-Steuerungs-Jumper auch erneut installieren, bevor wir PWM-Steuerungstests durchführen können.

PWM-Steuerungstest

Stellen Sie vor dem Ausführen dieses Tests Folgendes sicher:

  1. Das blaue Potentiometer auf beiden Karten ist vollständig gegen den Uhrzeigersinn gedreht, was der Nullposition entspricht.
  2. Der Jumper zur Aktivierung der PWM-Steuerung ist auf dem 2-poligen Header installiert
  3. Encoderkabel sind für jede Karte mit dem richtigen Motor verbunden

An diesem Punkt können Sie das USB-Kabel vom Laptop an Arduino anschließen und den Code von hochladen Letzter Codeabschnitt des MAD-EE-Blogartikels.

Achten Sie im Code auf diese Zeilen oben. Diese Pinnummern entsprechen unserem rechten Hubmotor. Wenn Sie den Test ausführen, wird also nur der rechte Motor bewegt. Sie können die Pinnummern hier in die Pinnummern des linken Motors aus den Tabellen ändern und den linken Motor auf die gleiche Weise testen. Dieser Beispielcode betreibt jedoch immer nur einen Motor gleichzeitig.

// RECHTER MOTOR
const int PIN_DIR = 2; // Motorrichtungssignal
const int PIN_BRAKE = 3; // Motorbremssignal (aktiv niedrig)
const int PIN_PWM = 9; // PWM-Motordrehzahlregelung
const int PIN_SPEED = 12; // SC-Geschwindigkeitsimpulsausgabe von der RioRand-Karte
// LINKER MOTOR
const int PIN_DIR = 4; // Motorrichtungssignal
const int PIN_BRAKE = 5; // Motorbremssignal (aktiv niedrig)
const int PIN_PWM = 10; // PWM-Motordrehzahlregelung
const int PIN_SPEED = 11; // SC-Geschwindigkeitsimpulsausgabe von der RioRand-Karte

Nachdem Sie den Code auf Arduino hochgeladen haben, starten Sie das serielle Monitorfenster und achten Sie darauf, die Baudrate wie im Code erwartet auf 115200 einzustellen, da Ihnen sonst unbrauchbare Zeichen angezeigt werden.

An diesem Punkt können Sie die folgenden Befehle im seriellen Monitor ausführen [stellen Sie sicher, dass das Zeilenumbruchzeichen auf Wagenrücklauf eingestellt ist, bevor Sie Befehle im seriellen Monitor eingeben].

Zum Starten des Motors bei niedriger Drehzahl geben Sie Folgendes ein:

PWM, 10

Dadurch wird der Motor, den Sie mit den Pinnummern im Code testen, mit einem Arbeitszyklus von 10 betrieben. Sie können die Geschwindigkeit erhöhen oder verringern, indem Sie einen anderen Arbeitszyklus eingeben, oder den Motor stoppen, indem Sie einen Arbeitszyklus von 0 eingeben.

Sie können den Motor auch durch Eingabe des Bremsbefehls stoppen:

BREMSE, 1

Der Break-Befehl mit 1 aktiviert die Bremse, d. h. der Motor stoppt, und der Break-Befehl mit 0 deaktiviert die Bremse, d. h. die Bremse ist ausgeschaltet und der Motor kann sich bewegen. Wenn Sie jedoch zuvor den Break-Befehl mit 1 gesendet haben und dann einen PWM-Befehl mit einem Arbeitszyklus ungleich Null senden, wird sich der Motor nicht bewegen, bis Sie einen weiteren Break-Befehl mit 0 ausführen.

Der letzte Befehl ist DIR oder Richtungsbefehl. Sie können die Drehrichtung des Motors ändern, indem Sie Folgendes ausführen:

DIR, 1

Dadurch wird der Motor vorwärts bewegt. Wenn Sie die Richtung durch Senden von 0 ändern, wird er rückwärts bewegt.

Seien Sie vorsichtig, wenn Sie die Richtung des Motors ändern, während er mit hoher Geschwindigkeit in eine Richtung läuft. Stoppen oder bremsen Sie den Motor immer, bevor Sie die Richtung ändern, um Schäden an Ihrem Aufbau zu vermeiden.

Wenn Sie beide Motoren gleichzeitig steuern möchten, können Sie den Code in dieses Repository Damit können Sie PWM-Befehle gleichzeitig an beide Motoren senden. Dies erfordert jedoch einige zusätzliche Codeänderungen und daran wird derzeit gearbeitet. Ich werde die Details mitteilen, wenn ich den Code erfolgreich getestet habe.

Es war eine mühevolle Reise mit vielen Zwischenstopps, bis ich einen Motorcontroller gefunden habe, mit dem man Hoverboard-Motoren steuern kann, der nicht die Welt kostet und mit dem man ein Hoverboard in einen ROS2-gesteuerten Roboter umwandeln kann. Dies ist ein weiterer kleiner Schritt auf diesem Weg.

Vielen Dank an MAD-EE für die Bereitstellung von YouTube-Videos und Code im öffentlichen Bereich. Das war eine große Hilfe. Außerdem danke ich den Leuten in der Robotik-/ROS-Community für die Ideen, die sie zur Fortsetzung dieses Projekts beigetragen haben.

Hoffe, das war hilfreich. Viel Spaß beim Bauen!!