Last Updated on 31. Mai 2019 by sfambach
Ziel ist es mit dem Raspberry PI 3 unter Zuhilfenahme einer Motorbrücke, 2 Gleichstrommotoren zu betreiben.
Dies soll später genutzt werden um einen zweirädrigen Roboter anzutreiben.
Hardware
PI3 (oder älter bitte auf die richtigen Pins achten)
Motorbrücke L9110s
2x DC Motor
Diverse Kabel ( Vorgefertigte Pin-Header Kabel)
Testaufbau
GPIOs am Raspberry
- Motor1 Richtung GPIO 26
- Motor1 Geschwindigkeit GPIO 1
- Motor2 Richtung GPIO 24
- Motor3 Geschwindigkeit GPIO 23
(Die GPIOs gelten nur in Verbindung mit pi4j und wirePi)
Plan

Software
Entwicklungsumgebung
Als Entwicklungsumgebung verwende ich BlueJ auf dem PI selbst. Hiermit habe ich vier Klassen erstellt. Diese werden im folgenden Abschnitt kurz erklärt.

Code
Da ich anfänglich ein paar Probleme hatte und die Motorbrücke nicht wie erwartet reagierte, habe ich mich langsam an das Thema herangetastet.
Digitale Ansteuerung
Zuerst habe ich eine kleine Testklasse geschrieben, welche die Motoren digital ansteuert. Hiermit konnte ich die richtige Verkabelung sicherstellen. Mit diesem Test ist noch keine Geschwindigkeitsregulierung möglich.
PWM Ansteuerung
Als nächstes habe ich eine Testklasse erstellt, die den Hardware PWM benutzt und ebenfalls die Richtungen wechselt.
Funktionalität in Klasse gepackt
Als letzten Schritt habe ich eine Klasse Drive zur Steuerung beider Motoren und die dazu gehörende Testklasse erstellt.
Drive Klasse
Klasse zur Steuerung der zwei Motoren.
Test-Drive Klasse
Klasse zum Testen der Motoren. Diese testet, wie auch im vorhergehenden Beispiel, unterschiedliche Geschwindigkeiten und Richtungen.
Tips
Es geht nix
Es gibt verschienden Shell Implemenierungen mit deren Hilfe ihr die IOs einfach mal schalten könnt.
Stellt den direction Port jeweils auf Low und den Speed port auf high dann sollte sich was tun.
Hilfe zur Shell-Bedienung findet ihr hier:
https://www.elektronik-kompendium.de/sites/raspberry-pi/2006041.htm
Für Motor 1 sähe das in sysfs in etwa so aus
Ausgaberichtung setzen
echo out > /sys/class/gpio/gpio26/direction
echo out > /sys/class/gpio/gpio1/direction
Motoren schalten
echo 0 > /sys/class/gpio/gpio26/value
echo 1 > /sys/class/gpio/gpio1/value
Achtung: Bitte überprüfen ob das mit den Gpio Ports so stimmt evtl. könnten die Zahlen abweichen.
Motoren drehen nicht in die richtige Richtung
Sollten die Motoren nicht in die richtige Richtung drehen, einfach die polarität am Anschluss an der Motorbücke vertauchen bis es passt. Sollte das nicht möglich sein, die Methoden forwardLeft/Right() und backwardLeft/Right() entsprechend anpassen.
Raspberry rebooted bei Aktivierung/Betrieb der Motoren
Sollte beim Einschalten/Betrieb der Motoren der Raspberry neu booten, kann dies am hohen Stromverbrauch der Motoren liegen. Dann sollte man überlegen die Motoren entweder über eine zusätzliche Spannungsquelle zu versorgen oder zumindest die Motoren mit einer Spule zu entstören. Condensatoren können zusätzlich Spannungspitzen abfangen.
Mehr zur Entstörung:
http://www.bnhof.de/~ho1645/entstoer.htm
https://www.mikrocontroller.net/articles/Motoransteuerung_mit_PWM
Schaltung mit zusätzlicher Spannungsquelle:
Hier wird der L9110 mit einem LiPo versorgt, wichtig ist es die Masse des Lipo mit der des Raspberries zu verbinden, sonst funktioniert es nicht. Der Lipo sollte im Bereich 3.7v und < 12V liegen (Beschränkung des L9910).

Quellen
Beispiel auf GitHub
PI4j Webseite
PWM + Motoren allgemein beim RoboterNetz
Einige andere Webseiten waren auch noch nützlich, einfach mal Google bemühen.
Verwandte Beiträge
Anhang
Pin-Belegung
