LEGO 9 Volt Motoren steuern mit Mikrocontrollern history menue 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
2. Motorprojekte mit Charakter zum Abwandeln
3. Einfache Motorsteuerung
4.Rückkopplungs-Steuerungen
5. Interrupt-Steuerungen
6. PWM - selbst gemacht ;-)
7. Verwandte Themen

PIC-Schaltungen

9 Volt - LEGO-Motoren

inhaltlich auf korrektem Stand - evtl. partiell unvollständig ;-)

Informatik-Profi-Wissen

  Quellen:

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!!!
Beschaltung des ULN2803 Datenblatt des ULN2803

Prinzipschaltung für den ULN2803

... bei Einsatz des ULN2803 bitte beachten, dass die Eingänge negiert reagieren!!!

Datasheet 8 Bit Schrittmotorentreiber ULN2803

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:

Dual MOFET-Treiber TC4427A

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:
Eine Ausgangsleitung des P1C16F877 ist bis maximal 25 mA belastbar, der gesamte Strom eines Port darf 200 mA nicht übersteigen.
Das gemeinsame Datenblatt der Typen TC4426A, TC4427A und TC4428A kann von der Website des Herstellers Microchip heruntergeladen werden.

Pin Bezeichnung Beschreibung
3 GND Verbindung mit 0 V der Stromversorgung. Mit diesem Anschluss müssen sowohl die MikrocontrollerStromversorgung (0 V) als auch die Motor Stromversorgung (0 V) verbunden sein, falls nicht beide identisch sind.
6 VDD Betriebsspannung des TC4427A, sie darf im Bereich 4,5...18 V liegen.


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.

Basis-Steuerungen

Projekt Beschreibung

... einfache Motorsteuerung mit verschiedenen Spannungen

Ein an 9 V betriebener Kleinmotor wird an den Mikrocontroller gekoppelt und über den Mikrocontroller gesteuert.

PWM-Steuerungen

Projekt Beschreibung
Pulsbreitenmodulation Die Motordrehzahl lässt sich durch Pulsbreitenmodulation der Betriebsspannung im Bereich 0...100 % einstellen.

Rückkopplungs-Steuerungen

Projekt Beschreibung
Konstanthalten der Motordrehzahl durch ein rückgekoppeltes System Die Motordrehzahl soll unabhängig von der an der Motorachse angreifenden mechanischen Last konstant gehalten werden.

Interrupt-Steuerungen

Projekt Beschreibung
Drehzahlmesser Die Motordrehzahl wird vom Mikrocontroller mit Hilfe eines Timer-Interrupts gemessen.


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:
Widerstand LED1 LED2 Motor
< 50 Ω 0 0 Stopp
50 ... 100 Ω 1 0 Vorwärts
150 ... 200 Ω 0 1 Rückwärts
> 200 Ω 1 1 Stopp
Wenn beide Motoranschlüsse auf gleichem Potential liegen, stoppt der Motor. Er ist dann gebremst und setzt einer Drehung von Hand mechanischen Widerstand entgegen. Natürlich könnte der Motor auch im Freilauf zum Stillstand kommen, wir haben jedoch die erste Variante gewählt.
Nachdem die Pins und die Variablen definiert sind, folgt im Programm das Messen des Potentiometer-Widerstands'':

-- take a sample of pin a0 (analog 0)
resist = ADC_read_low res(0)

Anschließend wird mit einfachen lf-then-else-Kommandos geprüft, welche Aktion ausgeführt werden muss - in der Spalte nebenan das gesamte Programm.

Da die beiden LEDs parallel zu den Motortreiber-Eingängen angeschlossen sind, werden auch die LEDs gesteuert.
nicht notwendig, aber sicher anschaulich ist das Sichtbarmachen der Aktionen über die 232-Verbindung" des Programmers zum PC auf dem Bildschirm:

-- and send to PC serial_sw write (resist) serial_sw write(LEDO) serial-sw write(LED1)

Debugger aus Kapitel 6 kann dazu dienen, die übertragenen Daten auf den Bildschirm zu n. Dazu müssen nur noch die zutreffenden Pin-Nummern eingefügt werden.
Die RS232-Verbindung mit dem Computer wird ausführlich in Kapitel 6 behandelt.

Schalplan zur Motrdrehrichtungsumkehr - die Kondensatoren sind Richtwerte - ihr Einsatz jedoch von funktionaler bedeutung

Die Betriebsspannungsleitungen haben wir fest an die Stromversorgung gelötet. Dadurch haben wir der Gefahr vorgebeugt, die Betriebsspannung versehentlich mit falscher Polarität anzuschließen.
Bei genauem Hinsehen werden Sie auf der Steckplatte eine Diode in der Masseleitung zwischen dem 5-V-Teil und dem 9-V-Teil der Schaltung entdecken. Diese Diode ist eigentlich entbehrlich, deshalb haben wir sie im Schaltbild weggelassen.
Das Bild unten zeigt, wie die auf der Steckplatte aufgebaute Schaltung aussieht. An der oberen Schiene liegen 9 V, an der unteren Schiene 5 V. Rechts ist der Schalter für die Drehrichtung zu erkennen, seitlich neben ihm hat der Spannungsregler 7805 seinen Platz. Die langen Leitungen links im Bild führen zum Programmer, über sie werden die Daten zum PC übertragen.
Auch bei niedrigster Drehzahleinstellung (Duty-cycle = 1,6 %) dreht der Motor gleichmäßig und ruckfrei. Bei dieser Einstellung dauert eine volle Umdrehung der äußeren Motorachse etwa 14 Sekunden. Im Motor, Typ 71427 von Lego, ist ein Getriebe eingebaut, es untersetzt die tatsächliche Motordrehzahl ungefähr im Verhältnis 1:14. Folglich treibt die Motorachse das interne Getriebe bei niedrigster Drehzahleinstellung mit etwa einer Umdrehung in der Sekunde an.
Während der Programmierung des Mikrocontrollers darf der Motor angeschlossen bleiben. Dabei gibt er manchmal leise Geräusche von sich, und seine Achse ruckt kurzzeitig in beide Richtungen. Beide Erscheinungen sind völlig unbedenklich.

Motor-Richtungs-Umkehrsteuerung


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.
Duty-Cycle-Steuerung  

Puls-Width Modulation zur Ansteuerung von Elektromotoren

Der Tastgrad (auch Aussteuergrad, engl: duty factor) gibt für eine periodische Folge von Impulsen gemäß DIN IEC 60469-1 das Verhältnis der Impulsdauer zur Impulsperiodendauer an. Der Tastgrad wird als dimensionslose Verhältniszahl mit einem Wert von 0 … 1 oder 0 … 100 % angegeben. Dieses wird nachfolgend an idealen Impulsen erläutert, die eine Rechteckschwingung bilden.


PWM-Steuerungen werden hier erklärt

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.
PWM Frequency 1.22 kHz 4.88 kHz 19.53 kHz 78.12kHz 156.3 kHz  208.3 kHz
Timer Prescaler (1, 4. 16) 16 4 1 1 1 1
PR2 Value 0xFFh 0xFFh 0xFFh 0x3Fh 0x1Fh  0x17
Maximum Resolution (bits) 10 10 10 8 7 5,5

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:

  • PR2 = FF = 256
  • TOSC = 1 / 20 MHz = 50 ns
  • TMR2prescaler = 1
  • eine Periode ist 0,0000512 s lang, folglich beträgt die Frequenz 19,531 kHz.
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:
 

pr2 = OxFF

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)
 
U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
- TOUTPS3  TOUTPS2 TOUTPS1 TOUTPSO TMR20N T2CKPS1 T2CKPS0
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

 

bit 7 Unimplemented: Read as'0'
bit 6-3 TOUTPS3:TOUTPSO: Timer2 Output Postscale Select bits
  • 0000 = 1:1 Postscale
  • 0001 = 1:2 Postscale
  • 0010 = 1:3 Postscale
  • ...
  • 1111 = 1:16 Postscale
bit 2 TMR20N: Timer2 On bit
  • 1 = Timer2 is on
  • 0 = Timer2 is off
bit 1-0 T2CKPS1:T2CKPSO: Timer2 Clock Prescale Select bits 0
  • 00 = Prescaler is 1
  • 01 = Prescaler is 4
  • 1x = Prescaler is 16

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 history menue scroll up

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.

Der LC-80 Simulator

POLYCOMPUTER

Z80-CPU

Mnemonic-Code-Notation

höhere Programmierwerkzeuge

... und so funktioniert ein Computer

 

die beliebte alphabetisch sortierte Schnell-Liste

die beliebte numerisch sortierte Schnell-Liste

Allgemeine FLAG-Wirkung

FLAG-Wirkung auf OP-Code-Gruppen

Alphabetisch sortierte Dokumentation

FLAG Teile I

FLAG Teile 2

Allgemeine Funktionssymbolik

Aktuelles sowie weiterentwickeltes Betriebssystem

Blockschaltbild eines Einchiprechners

   

Projekt Assemblerprogrammierung

   


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 ;-)