Im zweiten Teil der Tutorial Reihe über Raspberry Pi Roboter geht es um den Antrieb für den Roboter.
Antrieb
Der einfachste Antrieb für einen Roboter ist der differentielle Antrieb. Dafür werden 2 unabhängig voneinander angetriebene Räder benötigt. Die Vorteile dieser Antriebsart sind:
- Kleiner Wendekreis. Drehen auf der Stelle möglich
- Einfache Steuerung. Wie bei einem Panzer sind rechter und linker Antrieb getrennt voneinander ansteuerbar
Gleichstrommotor
Der einfachste Radantrieb ist ein Gleichstrommotor. Ein Gleichstrommotor lässt sich einfach durch Anlegen einer Gleichspannung zum Drehen überreden. Polt man die Spannung um, läuft der Motor in die andere Richtung. Je höher die Spannung, desto schneller läuft der Motor.
[pe2-image src=“http://lh3.googleusercontent.com/-ywKcKaebc9E/VLG5riYMDyI/AAAAAAAANlw/MYBL3wy8kHc/s144-c-o/IMG_4672.JPG“ href=“https://picasaweb.google.com/100614490999857774768/RoboterStarterKitV2#6102863127677505314″ caption=“stronger 130 size motor Pololu #1117 800mA stall“ type=“image“ alt=“IMG_4672.JPG“ ]
Gleichstromgetriebemotor
Allerdings hat ein Gleichstrommotor zu wenig Drehmoment. Deshalb ist noch ein Getriebe notwendig, um ein größeres Drehmoment zu erhalten. Sonst wird sich der Roboter nicht von der Stelle bewegen. Bei einem Gleichstrom-Getriebemotor sind Motor und Getriebe in einem Gehäuse integriert.
Räder und Motoren
Wichtig bei der Auswahl der Motoren ist, dass man auch die passenden Räder findet, die an der Motorachse befestigt werden können. Des weiteren müssen die Motoren auch irgendwie mit dem Chassis verbunden werden. Wer hier nicht lange herumprobieren möchte, ist mit einem fertigen Chassis sicher besser bedient.
Als geeignete Getriebe-Motoren kommen z.B. die Solarbotics GM3/GM9 Motoren infrage. Dazu gibt es mit den GMPW-Wheels die passenden Räder.
Die GM3 Motoren haben ein Getriebe-Untersetzung von 224:1. Die GM9 Motoren haben dagegen eine kleinere Untersetzung von 143:1. Sie laufen damit annähernd doppelt so schnell als die GM3 Motoren, bei etwa dem halben Drehmoment.
[pe2-image src=“http://lh3.googleusercontent.com/-sN5FOd5SVTQ/VYbYmcaV3OI/AAAAAAAANs8/Uki39ork57g/s144-c-o/IMG_4894.JPG“ href=“https://picasaweb.google.com/100614490999857774768/MURCSPi#6162851295076408546″ caption=““ type=“image“ alt=“IMG_4894.JPG“ ]
Eine alternative Getriebe-Motor/Rad Kombination wären die Dagu DG01D Getriebemotoren mit den passenden 65mm Rädern an. Allerdings kauft man die besser zusammen mit einem passenden Chassis anstatt einzeln, wie z.B. das Dagu Magician Chassis. Die Dagu Motoren ähneln stark den Solarbotics Motoren, haben aber unterschiedliche Abmessungen und sind nicht zueinander kompatibel. Auch sind die Dagu Räder sind nicht kompatibel zu den Solarbotics Rädern.
[pe2-image src=“http://lh3.googleusercontent.com/-ANqLKW9r6lM/VYxyzO5ldSI/AAAAAAAANuI/5AAmwjnTQjg/s144-c-o/IMG_5531.JPG“ href=“https://picasaweb.google.com/100614490999857774768/MURCSPi#6164428214461887778″ caption=““ type=“image“ alt=“IMG_5531.JPG“ ]
Die Eckdaten der hier vorgestellten Getriebemotoren:
[table id=5 /]
Motor-Treiber
Die Motoren können natürlich nicht direkt an einen Raspberry Pi Ausgang gehängt werden. Dazu ist ein Motor Treiber notwendig, der den geforderten Motor-Strom liefern kann. Da die Motoren sowohl vorwärts als auch rückwärts laufen sollen, kommt als Motor-Treiber nur eine H-Brücke, auch Vierquadrantensteller genannt, in Frage. H-Brücken gibt es als fertige ICs inklusive einer vereinfachten Steuer Logik, so dass pro Motor nur 2 Prozessor Pins benötigt werden.
Der DRV8835 ist ein 2-fach Motor-Treiber in einem SMD Gehäuse. Da SMD Bauteile schwer zu verlöten sind, gibt es fertige Module im Bastler freundlichen DIL-Format. Das DRV8835 Modul von Pololu hat ein DIL-14 Format und reicht aus, um zwei Getriebemotoren mit je 1.5 A Spitzenstrom bzw. 1.2 A Dauerstrom zu versorgen.
[pe2-image src=“http://lh3.googleusercontent.com/-AnxtGvFm5LE/VYXYpJaEbcI/AAAAAAAANgw/ebqFczMST6A/s144-c-o/IMG_5516.JPG“ href=“https://picasaweb.google.com/100614490999857774768/MURCSPi#6162569866537889218″ caption=““ type=“image“ alt=“IMG_5516.JPG“ ]
De Eckdaten des DRV8835 Moduls:
[table id=4 /]
Motor-Ansteuerung
Das DRV8835 Motor-Treiber-Modul kann Motoren in zwei Betriebsarten steuern. Über den Mode Pin kann zwischen Phase/Enable Mode (Mode Pin HIGH) und In/In Mode (Mode Pin offen) umgeschaltet werden. Für unseren Fall ist der Phase/Enable Mode die richtige Wahl. Dazu wird je Motor ein Enable Pin für die Geschwindigkeitsregelung und ein Phase Pin für die Drehrichtung benötigt.
Wie regelt man die Geschwindigkeit des Motors? Wie oben bereits beschrieben durch die Höhe der anliegenden Spannung. Da ein Prozessor wie der Raspberry Pi nur digitale Ein-und Ausgänge besitzt, ist hier ein besonderer Trick notwendig. PWM, Pulsweitenmodulation heißt das Zauberwort. Hierbei wird ein Ausgang des Prozessors schnell ein und ausgeschaltet. Da der Motor recht träge reagiert, verhält sich dieser geschaltete Ausgang wie eine regelbare Ausgangsspannung. Die Regelung wird durch das Verhältnis von HIGH zu LOW bestimmt. Dieser Wert nennt man Pulsweite und wird in Prozent angegeben. Eine Pulsweite von 50 % entspricht dabei der halben Ausgangsspannung. Wollte man diese Pulsweiten durch Ein-und Ausschalten des Pins per Software steuern, wäre der Prozessor ganz schön beschäftigt. Dafür gibt es extra PWM-fähige Ausgänge, die die Pulsweiten per Hardware erzeugen. Davon stehen beim Raspberry Pi ab Version B+ 3 Stück auf der Pfostenleiste zur Verfügung (Pin #12, #13 und #18).
Für die beiden Motoren werden insgesamt 4 Pins benötigt. Um kompatibel zum Motor-Treiber Kit für Raspberry Pi und der Pololu Treiber Bibliotheken zu bleiben, werden die PWM Pins #12 und #13 und die GPIO #5 und #6 für die Richtungsumschaltung verwendet.
[pe2-image src=“http://lh3.googleusercontent.com/-iME844YB2Fc/VYat8yDMk9I/AAAAAAAANsk/snXdNVSAVrw/s144-c-o/DRV8835-RasPi_Steckplatine.jpg“ href=“https://picasaweb.google.com/100614490999857774768/MURCSPi#6162804399842038738″ caption=““ type=“image“ alt=“DRV8835-RasPi_Steckplatine.jpg“ ]
Was die Bezeichnung der Raspberry Pi Pins betrifft; mit der Pin Nummer #12 ist nicht der Pin 12 des Steckverbinders gemeint, sondern der GPIO 12. Zur besseren Übersicht folgt hier die Belegung der 40-poligen Stiftleiste mit den GPIO Bezeichnungen:
Pin 1 der Stiftleiste ist links unten, wenn der Raspbery Pi so vor einem liegt, dass der Steckverbinder oben ist. Pin 40 ist dann der Pin rechts oben. Die Zählweise ist also alternierend unten, oben.
Software Motor-Test
Die Software basiert auf der DRV8835 Pi Library von Pololu. Das Testprogramm beschleunigt die Motoren und lässt sie abwechselnd vorwärts/rückwärts laufen.
from __future__ import print_function import time from pololu_drv8835_rpi import motors, MAX_SPEED # Set up sequences of motor speeds. test_forward_speeds = list(range(0, MAX_SPEED, 1)) + \ [MAX_SPEED] * 200 + list(range(MAX_SPEED, 0, -1)) + [0] test_reverse_speeds = list(range(0, -MAX_SPEED, -1)) + \ [-MAX_SPEED] * 200 + list(range(-MAX_SPEED, 0, 1)) + [0] try: motors.setSpeeds(0, 0) print("Motor 1 forward") for s in test_forward_speeds: motors.motor1.setSpeed(s) time.sleep(0.005) print("Motor 1 reverse") for s in test_reverse_speeds: motors.motor1.setSpeed(s) time.sleep(0.005) print("Motor 2 forward") for s in test_forward_speeds: motors.motor2.setSpeed(s) time.sleep(0.005) print("Motor 2 reverse") for s in test_reverse_speeds: motors.motor2.setSpeed(s) time.sleep(0.005) finally: # Stop the motors, even if there is an exception # or the user presses Ctrl+C to kill the process. motors.setSpeeds(0, 0)
Weblinks
- Pololu DRV8835 Treiber Modul
- Pololu Getriebemotor Übersicht
- Solarbotics Getriebe-Motor Übersicht/li>
Bezugsquellen für das DRV8835 Motor Treiber Modul und die Solarbotics Getriebmotoren und Räder sind Watterott und EXP-Tech.
Wie geht es weiter
Im dritten Teil geht es weiter mit dem Chassis für den Roboter.
Links
Die weiteren Teile der Serie:
Vielen Dank für die Anleitung. Du bist nicht zufällig im Roboternetz-Forum oder?
Hallo Michi,
doch, im RN Forum bin ich auch, als User M.a.r.v.i.n. Wenn auch nicht sehr aktiv.