enricojoerns.de

I2C-DC-Motoransteuerung

16.07.2013

Besonders für Anwendungen in der mobilen Robotik braucht man sie sehr häufig, eine vernünftige Motoransteuerung für die Antriebsräder oder -ketten. Aber auch in anderen Anwendungen geht es immer wieder darum, Motoren oder andere Lasten zu schalten.

Das hier vorgestellte Modul ist für die bidirektionale Ansteuerung zweier mittelstarker DC-Getriebemotoren üerb den I2C-Bus konzipiert.

Es basiert auf dem H-Brücken IC L6203, der einen etwas hochwertigeren Vertreter seiner Art darstellt (Vgl. z.B. L298) und der neben einer höheren Leistung auch noch über eine Reihe von Zusatz- und Schutzfunktionen verfügt. Die I2C-Kommunikation übernimmt ein ATTiny26 Mikrocontroller.

Hardware

Auf der Modulplatine befinden sich zwei L6203 Motortreiber ICs samt benötigter Minimalbeschaltung, sowie der ATTiny26. Die unkonventionelle 5polige Version des Programmieradapters wird aus Platzgründen verwendet. Außer Abblockkondensatoren verfügt der Controller über keine weitere externe Beschaltung.

Schaltplan

Board-Layout beidseitig, gedruckt Jeweils 3 Ausgänge des ATTiny sind mit den 3 Steueringängen des L6203 verbunden. Über die Eingänge IN1 und IN2 wird die Polarität des Motortreiberausgangs bestimmt, der ENABLE-Eingang aktiviert und deaktiviert den Treiber. Die Schaltung habe ich sowohl für Lochrasterplatine als auch für ein/zweiseitig gedruckte SMD-Platinen gelayoutet.

Software

Die Software für den ATTiny26 ist in C für den avr-gcc-Compiler geschrieben.

Die Software setzt die an das Modul gesendeten I2C-Steuerwerte in Ansteuerungswerte für den Motorcontroller um. Die Drehrichtung der Motoren wird über die Pegel an den mit IN1 und IN2 verbundenen Controllerpins bestimmt. Zur Einstellung der Drehgeschwindigkeit generiert die Software ein PWM-Signal auf dem mit der jeweiligen ENABLE-Steuerleitung des Treibers verbundenen Pins.

Die I2C-Routinen nutzen die controllereigene USI-Schnittstelle, zur Ansteuerung des Moduls müssen jeweils drei Datenbytes gesendet werden. Das erst von ihnen bestimmt die Drehrichtungen der beiden Motoren, das zweite und dritte die Geschwin- digkeit jeweils eines Motors mit einer 8-Bit-Aulösung. Die Ausgabe des PWM-Signals erfolgt interruptgesteuert mit Hilfe eines Timers.

i2c_start (MODULE I2C ADDRESS MOTOR | I2C WRITE ) ;
i2c_write ( direction byte ) ;
i2c_write ( speed A ) ;
i2c_write ( speed B ) ;
i2c stop () ;

Pseudocode Modulansteuerung