Es gibt je nach Bedarf mehrere Möglichkeiten, einen Gleichstrommotor zum Drehen zu bringen. In der folgenden Schaltung testen wir den Motortreiber
L9110H. Das Ziel ist es, so die Drehrichtung als auch die Drehzahl eines Gleichstrommotors zu beeinflussen. Zu den Komponenten der Schaltung gehören neben der
integrierten Schaltung L9110H, ein Gleichstrommotor, der für den Betrieb nicht mehr als 800 mA Strom benötigt, und ein Mikrocontroller, der in der Lage ist,
PWM-Signale zu generieren. Ein Potentiometer, mit dem die Geschwindigkeit eingestellt werden kann und ein Schalter für die Drehrichtungsumschaltung ergänzen
die Liste der Schaltungsteilnehmer. Einige Verbindungsbrücken und ein Spannungsregler zur Erzeugung der Steuerspannung spielen hier eine
nebensächliche Rolle.
Bei der integrierten Schaltung L9110H handelt es sich um einen zweikanaligen Gegentaktverstärker, der u.a. für Ansteuerung von Gleichstrommotoren
oder Schrittmotoren geeignet ist. Er zeichnet sich durch einen niedrigen Ruhestrom und großen Versorgungsspannungsbereich aus. Der Ausgang ist für induktive
Lasten bereits mit Freilaufdioden ausgestattet. Der Baustein kann mit 3,3V- und 5V- Mikrocontrollern direkt angesteuert werden. Die Geschwindigkeit eines
Motors kann mit PWM-Signalen beeinflusst werden.
Technische Daten:
Versorgungsspannung: 2,5V -12V
Ausgangsstrom (Dauerbelastung): 800 mA
Ausgangsstrom (Spitzenwerte): 1,5 – 2,0 A
Betriebstemperatur: 0 ℃ - 80 ℃
Anschluss-Beispiel
Gleichstrommotor
Bei dem Versuchsmotor handelt es sich um einen 12V-Gleichstrommotor. Der Motor ist mit einem Getriebe 1-24 ausgestattet. Bei voller Versorgungsspannung
von 12V kommt die Welle auf eine Drehzahl von 200 U/min.
Die Aufgabe der Umrechnung des mit dem Potentiometer eingestellten analogen Wertes sowie Umschaltung auf die mit dem Schalter eingestellte
Drehrichtung übernimmt der Mikrocontroller ESP32. Das Entwicklungsboard ESP32 arbeitet mit 3,3V und wird mithilfe der PWM-Signale die zwei Eingänge des
Motortreibers L9110H steuern.
Die Hauptversorgungsspannung der Testschaltung stammt von einem externen Netzteil und beträgt 9 VDC. Da der ESP32 mit 3,3 V arbeitet, wird ein
Spannungsregler benötigt, um die notwendigen 3,3 V zu generieren. Mir der Spannung wird der Mikrocontroller versorgt. Der hier eingesetzte Spannungsregler-Modul,
das auf dem Regler LM2596 basiert, kann 3 A liefern und ist für die Schaltung stark überdimensioniert. Der Stromverbrauch, abgesehen von dem Motor, liegt hier
deutlich unter 100 mA.
Die einzige Schwierigkeit, die das Programm meistern muss, besteht darin, den Wert des Potentiometers, der am analogen Eingang eingelesen wird,
in PWM-Vorgabe umzurechnen. Der eingelesene Wert liegt im Bereich 0-4096 (12 Bit). Der Motor beginnt bei ca. 4,5 V zu drehen. So gilt es den eingelesenen Wert
zu halbieren und auf den vollen Einstellbereich des Potentiometers zu skalieren. Hierzu teilen wir den eingelesenen Wert durch 2. Als Ergebnis erhalten wir
jetzt Werte von 0 bis 2048. Das ist der Bereich, in dem der Motor praktisch nicht mehr dreht. Durch Addition von 2048 erhalten wir als Ergebnis Werte von
2048 bis 4096. Mit diesen Werten kann der Motor via PWM von null bis maximale Drehzahl geregelt werden.
// *************************************************************************************
// Motorsteuerung mit L9110H
// Eine Schaltung mit IC L9110H, ESP32 und Gleichstrommotor
// ESP32-Dev-KitC V4
// Arduino IDE 2.0.4
// *************************************************************************************
int Poti_Eingang = 15; // GPIO 15, analoger Eingang
int Schalter_Eingang = 21; // GPIO 21, digitaler Eingang
int L9110H_IB = 25; // GPIO 25, digitaler Ausgang (PWM)
int L9110H_IA = 26; // GPIO 26, digitaler Ausgang (PWM)
// ***********************************************************************************
void setup() {
ledcSetup (0, 5000, 12); // Kanal 0, Frequenz 5kHz, Auflösung 12 Bit
ledcSetup (1, 5000, 12); // Kanal 0, Frequenz 5kHz, Auflösung 12 Bit
ledcAttachPin (25, 0); // GPIO 25
ledcAttachPin (26, 1); // GPIO 26
pinMode (Schalter_Eingang, INPUT_PULLUP); // GPIO 15
}
// ***********************************************************************************
void loop() {
int Poti_Messung = analogRead (Poti_Eingang); // Eingang Potentiometer abfragen
int Geschwindigkeit = Poti_Messung / 2; // Wert für die Ausgabe umrechnen
Geschwindigkeit = Geschwindigkeit + 2048; // Ausgabewert
if (digitalRead (Schalter_Eingang) == LOW) { // Rechtsdrehung
ledcWrite (0, Geschwindigkeit); // Kanal 0
ledcWrite (1, 0); // kanal 1
}
if (digitalRead (Schalter_Eingang) == HIGH) { // Linksdrehung
ledcWrite (0, 0); // Kanal 0
ledcWrite (1, Geschwindigkeit); // kanal 1
}
delay (10);
}
// *************************************************************************************