kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




LV #9, 05.06.2024 Grundlagen der Mikrocontrollertechnik im Sommersemester 2024

(EN google-translate)

(PL google-translate)

Thema: Miniprojekt Motortreibertester

Motivation
  • Der Markt wird überflutet von sehr preiswerten Breakout-Boards zur Verwendung im Zusammenhang mit Mikrocontroller-Boards, wie denen der Arduino-Reihe.
  • Beispielsweise sind verschiedene Ausführungen eines Motortreiber-Boards erhältlich, Typ "L9110S Motortreibermodul H-Brücke Dual DC Motor".
  • Manche Ausführungen scheinen fehlerhaft zu sein, werden insbesondere auch ohne größere Last schnell heiß und brennen durch.
  • Ziel der heutigen Übung ist es, Hardware und Software für einen Tester für diesen Motortreiber selber auf Basis eines Steckboards mit Arduino Micro zu entwickeln.

Ein Datenblatt des Moduls findet sich beispielsweise hier:

https://www.roboter-bausatz.de/media/pdf/8b/81/46/L9110_Datasheet59880680d9819.pdf

Das von Ihnen noch zu verfeinernde und dann umzusetzende Grobkonzept sieht aus, wie folgt:

Die Schaltung soll nach folgendem Stromlaufplan umgesetzt werden:

Stromlaufplan zum Motortreiber-Tester.

Bild 0-1: Stromlaufplan zum Motortreiber-Tester.

  • TEST 1: LEDs zeigen die aktuelle Stromrichtung an den Leistungsausgängen an.
  • Hierzu sollen nacheinander folgende Signale auf die Eingänge des Motortreibers gegeben werden:
Signal Nr. Motor A Input A Motor A Input B Motor B Input A Motor B Input B
0 0 Volt 0 Volt 0 Volt 0 Volt
1 5 Volt 0 Volt 0 Volt 0 Volt
2 0 Volt 5 Volt 0 Volt 0 Volt
3 0 Volt 0 Volt 5 Volt 0 Volt
4 0 Volt 0 Volt 0 Volt 5 Volt

Tabelle 0-1: Signale auf die Eingänge des Motortreibers.

  • Um die verschiedenen Signalkombinationen auszulösen, soll die serielle Schnittstelle zum PC ausgenutzt werden.
  • Werden im Serial-Monitor die Ziffern 0,1,2,3,4 an den Arduino gesendet, soll die korrespondierende Signalkombination ausgelöst werden.
  • Siehe hierzu auch folgendes Beispiel:
https://www.arduino.cc/reference/en/language/functions/communication/serial/read/
  • TEST 2: Zwei Elektromotoren mit geringer Leistung werden an die Leistungsausgänge des Motortreibers angeschlossen.
  • An Digital Pin 9 soll ein PWM-Signal für den Motor A generiert werden.
  • An Digital Pin 10 soll ein PWM-Signal für den Motor B generiert werden.
  • Die PWM Signale sollen langsam von der minimalen bis zur maximalen Breite hochfahren, einmal mit dem korrespondierenden Eingang A auf GND und einmal auf +5Volt, um beide Drehrichtungen zu testen.

Zur Generierung von PWM-Signalen und der prinzipiellen Leistungselektronik H-Brücke, siehe auch:

40_Mikrocontroller/04_PWM/02_Nutzen

Die ganze Abfolge von TEST 2 soll vom Benutzer durch Senden der Ziffer 5 automatisch erfolgen.

Um die PWM-Signale zu erzeugen, sollen die Register-Konfigurationen wie hier beschrieben verwendet werden:

03_SoSe2024/06_Mik_02_05_2024 -- siehe Code 0-2.

ACHTUNG: Anders als beim Servo, steht beim Motor die ganze mögliche PWM-Breite 0 bis 12499 zur Verfüung.


  • Verfeinern Sie das so weit beschriebene Projekt und entwickeln insbesondere eine passende Software.
  • Führen Sie Tests mit verschiedenen Ausführungen des Motortreibers durch und markieren Sie die getesteten Module auf der Unterseite mit OK, bzw. DEFEKT mit einem Edding.

Zusatzaufgaben

  1. Überlegen Sie sich eine Möglichkeit, den Motortreiber möglichst schnell mit dem Testboard verbinden zu können.
  2. Setzen Sie das Gesamtsystem objektorientiert um.
  3. Der Mikrocontroller soll den Motortreiber automatisch selber prüfen und mit einer roten und grünen LED das Ergebnis anzeigen.
void setup() 
{
  // Start the serial communication
  Serial.begin(9600);
  while (!Serial) 
  {
    ; // Wait for the serial port to connect. Needed for native USB port only
  }
  DDRB |= 0xF0; // Define PB5 to PB7 as output
  PORTB = 0x00; // Set everything to LOW
}

char incomingChar = '0';

void loop() 
{
  // Check if data is available to read
  if (Serial.available() > 0) 
    incomingChar = Serial.read();

  if(incomingChar == '0') 
    PORTB = 0x00; //All LOW
  else if(incomingChar == '1') 
    PORTB = 0x80; //PB7 HIGH
  else if(incomingChar == '2') 
    PORTB = 0x40; //PB6 HIGH
  else if(incomingChar == '3') 
    PORTB = 0x20; //PB5 HIGH
  else if(incomingChar == '4') 
    PORTB = 0x10; //PB4 HIGH

}

Code 0-1: Studentische Lösung für den ersten Teil der Übung (ohne PWM).