Kleines Nachschlagewerk Informatik
Der Motorcontroller L293
Worum geht es?
Motoren brauchen relativ viel Strom. Möchte man nun einen kleinen Roboter, der von einem Mikrocontroller gesteuert wird, bauen, so darf man die Motoren nie direkt anschließen. Sie würden den Mikrocontroller überlasten. Zur Lösung des Problems gibt es Motorcontroller.
Was macht der L293?
Der L293 steuert zwei Motoren. Diese werden direkt angeschlossen. Ebenso hat der L293 vier Steuerleitungen, für jeden Motor zwei. Damit sind die Signale vorwärts, rückwärts, stoppen und ausrollen möglich.

Weiterhin braucht der Motorcontroller zwei Spannungen: die Steuerspannung von 5V kommt meist vom Mikrocontrollerboard, z.B. vom Arduino. Die Motorspannung kommt meist direkt vom Batterieblock.
Beschaltung




Hier sieht man eine Beispielschaltung. Zwei Spannungen (für die Motoren und für die Steuerung) werden zugeführt. Die Steuerspannung wird auch an die Pins zum Freischalten der Motoren gelegt. Damit reagieren sie immer auf die Steuersignale.

ACHTUNG: Die Motorspannung muss, damit der L293 funktioniert, über der Steuerspannung liegen. Möchte man mit 5V Steuerspannung 3V-Motoren direkt schalten, funktioniert der L293 leider nicht. Somit braucht jeder(!) Motor einen eigenen Vorwiderstand.
Steuerung
Die Steuersignale sind einfach zu verstehen.

Eingang1Eingang2Aktion
00Ausrollen
10Vorwärts
01Rückwärts
11sofort Stoppen


Vorwärts und Rückwärts sind - je nach Beschaltung und Einbau der Motoren - natürlich relativ.
Programmierung
Die Programmierung ist - wenn man die Geschwindigkeit nicht ändern möchte - einfach. Man muss lediglich vier Pins (zwei für jeden Motor) auf Ausgabe schalten und - je nach Fahrwunsch - auf diesen Pins 1 oder 0 ausgeben.

Initialisierung Arduino: Bits A0 bis A3

      pinMode(0, OUTPUT);
      pinMode(1, OUTPUT);
      pinMode(2, OUTPUT);
      pinMode(3, OUTPUT);
            


Atmel in C: PB0 bis PB3

      DDRB = 0x0F; // Die vier niederwertigsten Bits auf Ausgabe
      PORTB=0;     // Erstmal alles auf 0
            


Vorwärts fahren beim Arduino (Belegung 1010)

      digitalWrite(0, HIGH);
      digitalWrite(1, LOW);
      digitalWrite(2, HIGH);
      digitalWrite(3, LOW);
            


Vorwärts fahren in C für Atmel (Pinbelegung 1010)

      PORTB |=  (1<<PB0);
      PORTB &= ~(1<<PB1);
      PORTB |=  (1<<PB2);
      PORTB &= ~(1<<PB3);
            
Geschwindigkeiten einstellen
Der Motorcontroller hat keine Möglichkeit, Geschwindigkeiten einzustellen. Es gibt aber einen Trick über sogenannte gepulste Signale.

Motoren sind träge. Schaltet man kurz nacheinander den Motor an und aus, so wird weniger Leistung übertragen. Der Motor kommt aber nicht zur Ruhe. Das Resultat ist, dass sich der Motor langsamer dreht. Je nachdem, wie man das Verhältnis zwischen Fahren und Rollen wählt, ergibt sich eine andere Geschwindigkeit.