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:
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
- Überlegen Sie sich eine Möglichkeit, den Motortreiber möglichst schnell mit dem Testboard verbinden zu können.
- Setzen Sie das Gesamtsystem objektorientiert um.
- 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).