LEGO 9 Volt Motoren steuern mit Mikrocontrollern |
![]() |
![]() |
Letztmalig dran rumgefummelt: 05.11.10 06:54:13 |
![]() |
In diesem Kapitel geht es um
das Steuern und Regeln von Elektrokleinmotoren. Wir wollen betrachten, wie
der Mikrocontroller beispielsweise Drehzahlen messen und konstant halten
kann, und welche Möglichkeiten das Verfahren der Pulsbreitenmodulation
öffnet. Einige Daten des Motors nach Messungen von Philippe Hurbain (www.philohome.com): maximale Drehzahl 360 U/min, Leerlaufstrom 3,5 mA, Blockierstrom 360 mA, Blockierdrehmoment 6 Ncm. |
||||||
![]() |
1. Treiberstufen |
||||||
![]() |
|
||||||
![]() |
1. Treiberstufen |
![]() |
Technische "Lasten"mit Stromverbrauch größer 20 mA pro Pin zu steuern, ist mit Mikrocontrollern nicht direkt möglich. Sie gehen dann zwar nicht unbedingt kaputt (das verhindert die Schutzelektronik), regeln aber selbständig den maximalen Dauerstrom in einen zulässigen Bereich herunter. Ein Motor läuft dann beispielsweise nicht an!!! | |||||||||
![]() |
|
|||||||||
![]() |
Im Buch wird das MOSFET-Treiber-IC TC4427A eingesetzt, das ebenso wie der
P1C16F877 von Microchip stammt. Das Datenblatt" nennt folgende
Eigenschaften: Betriebsspannung 4,5...18 V Spitzenstrom 1,5 A Verzögerung 30 ns, Rückwärtsstrom > 500 mA Alle Eigenschaften des Lego-Motors 71427 liegen in den zulässigen Bereichen des Treiberbausteins. Der Widerstand bezogen auf den Rückwärtsstrom bedeutet, dass zum Motor keine Diode parallel geschaltet werden muss. Die Anschlüsse des TC4427A sind wie folgt belegt: Der TC4427A enthält zwei
identische Treiber, sie sind mit A und B bezeichnet. Eingang IN A (Pin2)
steuert Ausgang OUT A (Pin 7). An den Eingang wird das vom Mikrocontroller
kommende 5-V-Signal gelegt. Welche Spannung am Ausgang erscheint, hängt von
der Betriebsspannung des TC4427A ab (VDD, Pin 6). Die Betriebsspannung darf
maximal 18 V betragen. Wenn an IN A (Pin 2) die Eingangsspannung 5 V liegt
und die Betriebsspannung des 4427A 18 V beträgt, erreicht die
Ausgangsspannung an OUT A (Pin 7) ungefähr 18 V. Für Treiber B mit Eingang
IN B und Ausgang OUT B gilt natürlich das Gleiche. Anschluss 3 (GND) wird
ebenso wie der Mikrocontroller mit 0 V der Stromversorgung verbunden. Die
Anschlüsse 1 und 8 des TC4427A haben keine Funktion (NC = Not Connected). Im
Gegensatz müssen die Anschlüsse GND und VDD immer beschaltet
sein: |
|||||||||
![]() |
|
2. Motorprojekte mit Charakter zum Abwandeln |
![]() |
Dieses Projekt hat zum Ziel,
einen kleinen 9-V-Motor so mit dem Mikrocontroller zu koppeln, dass der
Motorlauf und die Drehrichtung über den Mikrocontroller von Hand gesteuert
werden können. Technischer Hintergrund Wir haben für das Projekt den Elektromotor Typ 71427 69 von Lego gewählt, doch im Prinzip ist jeder andere kleine Elektromotor gleichermaßen brauchbar. Der Lego-Motor 71427 arbeitet an der hohen Betriebsspannung 9 V, und die Stromaufnahme übersteigt den Strom, den ein Mikrocontroller-Ausgang liefern könnte, um ein Vielfaches. Deshalb muss zwischen den Mikrocontroller und den Motor ein so genannter Treiberbaustein geschaltet werden - siehe hierzu Punkt eins. |
||||||
![]() |
|
||||||
![]() |
|
||||||
![]() |
|
||||||
![]() |
|
3. Einfache Motorsteuerung |
![]() |
Wir haben nun hier schon das Problem, mit verschiedenen Spannungen arbeiten zu wollen oder zu müssen. Mit geeigneter Zusatzelektronik ist das aber auch für Mikrocontroller kein wirkliches Problem - also: "... let's go!". Diese einfache Motorsteuerung hat nur die drei Funktionen Stopp, Vorwärts und Rückwärts Wir wollen jedoch nicht drei mechanische Schalter montieren, die Motorfunktionen soll er mit einem Potentiometer nach folgender Tabelle gesteuert werden: | ||||||||||||||||||||
![]() |
|
||||||||||||||||||||
![]() |
|
4. Rückkopplungs-Steuerungen |
![]() |
In diesem Projekt realisieren wir eine Drehzahlsteuerung, mit der die Drehzahl des an 9 V betriebenen Elektromotors praktisch stufenlos vom Stillstand bis zur maximalen Drehzahl eingestellt werden kann. Der Mikrocontroller P1C16F877 ist für diesen Zweck besonders geeignet, da er bereits bestimmte, hierzu benötigte Komponenten an Bord hat. Auch diesmal passt der MOSFET-Motortreiber TC4427A (... wir verwenden allerdings in altbewährter Weise den ULN2803) den Mikrocontroller an die Spannung und den Strom des Motors an. | ||||||||||||||||||||||||||||||||
![]() |
|
||||||||||||||||||||||||||||||||
![]() |
Der Mikrocontroller PICI6F877 hat bereits zwei Rechtecksignal-Module an
Bord, die Perioden und Impulsbreiten der erzeugten Rechtecksignale lassen
sich über das Programm steuern. Die Ausgänge dieser PWM-Module sind die
Mikrocontroller-Anschlüsse cl und c2. Achtung: Zu PWM-Modul 1 gehört Ausgang
c2, zu PWM-Modul 2 gehört Ausgang c1! Das Programm muss zuerst ein PWM-Modul
initialisieren und anschließend bestimmte Parameter in das zugehörige
Register schreiben. Die genannte Aufgabe kann für Standardwerte die Bibliothek „16f877 bert " übernehmen, sie schließt nämlich die Bibliothek„ pwm hardware.jal " ein. Da die dort festgelegten Standardeinstellungen nicht immer passend sind, wollen wir kurz betrachten, wie die PWM-Module individuell konfiguriert werden können. Die von uns verwendeten Variablen haben ausschließlich die Länge 8 Bit, sie können folglich 255 Werte annehmen. Deshalb wollen wir die Parameter des PWM-Signals ebenfalls mit 8 Bit einstellen. Weil der Motorstillstand auch als Geschwindigkeit gilt, lässt sich die Motordrehzahl in 256 Abstufungen steuern. Diese Stufenanzahl ist mehr als ausreichend. Der Duty-cycle des vom PWM-Modul erzeugten Signals kann mit bis zu zehn Bit gesteuert werden. Die beiden niederwertigen Bits stehen in einem Register mit dem Namen CCP1CON. Auch wenn wir den Duty-cycle mit nur acht Bit steuern wollen, müssen wir die acht Bit aufteilen. Die beiden unteren Bits stehen in CCP1CON, die übrigen sechs Bit in einem anderen Register, das CCPRIL heißt. Das ist etwas umständlich, und hier auch nicht unbedingt sinnvoll. Wenn wir die beiden niederwertigen Bits nicht verwenden und auf 0 setzen, können die Drehzahlstufen 1, 2 und 3 nicht eingestellt werden. Die Stufe 3 ist gleichbedeutend mit dem Duty-cycle 1,2 %, die Stufe 4 entspricht 1,6 %. Der Sprung von 0 % (Motorstatand) nach 1,6 % ist so gering, dass er bei der Drehzahleinstellung in Kauf genommen werden kann. Wenn wir die beiden in CCP1CON stehenden niederwertigen Bits auf Null setzen und zur Drehzahlsteuerung nicht verwenden, können wir die Motordrehzahl nur mit den acht Bits in CCPR1L steuern. Werfen wir einen Blick auf das Datenblatt des PIC16F877. Aus der unten stehenden Tabelle geht hervor, dass die höchste Frequenz des vom Mikrocontroller erzeugten PWM-Signals 19,53 kHz beträgt, wenn der Duty-cycle mit der Auflösung 10 Bit gesteuert wird. |
||||||||||||||||||||||||||||||||
![]() |
Frequenzen des PWM-Signals. |
||||||||||||||||||||||||||||||||
![]() |
Die in der Tabelle stehenden Werte können natürlich auch rechnerisch
ermittelt werden. Im Datenblatt ist angegeben, dass sich die Periode des
PWM-Signals aus folgender Beziehung ergibt: (PR2 + 1 ) 4 • TOSC • TMR2prescaler Hier sind:
|
||||||||||||||||||||||||||||||||
![]() |
Diese PWM-Frequenz liegt für Anwendungen wie die Drehzahlsteuerung genügend
hoch. Mit ihr arbeitet die Steuerung perfekt, der Motor 71427 von Lego
läuft erstaunlich ruhig und gleichmäßig. Falls ein anderer Motortyp weniger
gleichmäßig läuft oder ungewöhnliche Geräusche verursacht, schafft
möglicherweise eine niedrigere PWM-Frequenz Abhilfe. Bei der Auflösung 10
Bit (einschließlich der beiden von uns nicht verwendeten Bits) stehen auch
die PWM-Frequenzen 4,88 kHz und 1,22 kHz zur Verfügung. Für die Frequenz 19,531 kHz muss der Timer-Prescaler auf 1 stehen, und PR2 muss den Wert OxFFh erhalten. Der zweite Wert lässt sich unkompliziert einstellen, denn PR2 ist das Periodenregister von Timer 2. Dieser Timer zählt immer bis zu dem in PR2 stehenden Wert und beginnt anschließend wieder mit Null. Das Kommando lautet:
|
||||||||||||||||||||||||||||||||
![]() |
Das Taktsignal muss vom Prescaler (= Vorteiler) herabgeteilt werden, wenn
PWM-Signale mit sehr langen Perioden erzeugt werden sollen. In diesem Fall verlängert sich die Zeit bis zum Erreichen eines bestimmten Zählerstands um den eingestellten Faktor. Die Konfigurationsbits des Prescaler gehören dem Register T2CON an: T2CON: TIMER2 CONTROL REGISTER (ADDRESS 12h)
Register T2CON im PIC16F877A |
||||||||||||||||||||||||||||||||
![]() |
Um den Prescaler auf den Faktor 1 einzustellen, müssen die Bits 0 und 1 des
Registers T2CON f 0 gesetzt werden. Außerdem muss der Timer eingeschaltet
werden, indem Bit 2 dieses gisters auf 1 gesetzt wird. Der Postscaler (=
Nachteiler) wird nicht benötigt, deshalb iben seine Bits auf 0. Das Ergebnis
der vorstehenden Überlegungen ist, dass in T2CON das lgende binäre Wort
geschrieben werden muss: T2CON = 0b0000100 Was nun noch fehlt, ist die Ausgabe des PWM-Signals über Mikrocontroller-Anschluss c2 identisch mit CCP1). Aus der Beschreibung im Datenbuch (siehe nächstes Bild) geht hervor, s dieser Pin unterschiedliche Funktionen übernehmen kann. Damit c2 für den |
5. Interrupt-Steuerungen |
![]() |
|
![]() |
|
6. PWM - selbst gemacht ;-) |
![]() |
Mit Sicherheit ist der PIC16F877 für die weitaus meisten Projekte völlig überdimensioniert und somit zu teuer und zu aufwendig (alte deutsche Rechtschreibung!). Für die Mehrzahl der kleinen "Elektronik-Anwendungen" und Aufgabenstellungen ist |
![]() |
|
7. Verwandte Themen |
![]() |
![]() |
![]() |
|
Was ist alles mit dem Betriebssystem eines Microcomputers verwandt? Antwort: faktisch der gesamte Bereich der Digitalelektronik und sowieso die gesamte Technik der Software-Technologie der Vergangenheit, Gegenwart sowie zumindest der nächsten Zukunft. | ||||||||||||||||||
![]() |
|
||||||||||||||||||
![]() |
|
![]() zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Rost am 29. Oktober 2010 um 18.18 Uhr |
... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-) „Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“ Diddi Hallervorden, dt. Komiker und Kabarettist |
Diese Seite wurde ohne Zusatz irgendwelcher Konversationsstoffe erstellt ;-) |