|
Digitale Drehzahlmessung Mit Gabellichtschranke und der CCU des Philips LPC931 Inhalt 1. Hardware/Schnittstellenanpassung 2. Ermittlung der Periodendauer
1. Hardware/Schnittstellenanpassung
Die Drehzahl wird mit einer Lochscheibe und einer Gabellichtschranke erfasst. Die Lochscheibe hat 4 Löcher, d.h. Sie liefert 4 Impulse pro Umdrehung.
Mit folgender Schaltung wird die Gabellichtschranke an den Controller angeschlossen:
Ist die Lichtschranke unterbrochen haben wir am Controller ca. 4,9V. Ist die Lichtschranke nicht unterbrochen haben wir am Controller ca. 0,2V.
2. Ermittlung der Periodendauer Um die Drehzahl zu ermitteln, messen wir die Periodendauer des Signals der Gabellichtschranke . Damit wir später den Controller richtig parametrieren können, müssen wir die Periodendauer erst mit dem Oszilloskop ermitteln.
Aus den Messungen der Periodendauer bei verschiedenen Spannungen ergeben sich folgende Drehzahlen:
Aus dieser Tabelle ergibt sich diese Drehzahlkennlinie:
3. Die Capture Compare Unit (CCU)
Die Messung erfolgt mit Hilfe der Capture-Compare-Unit (CCU) des Philips LPC 932. Die CCU ist ein eigenständiges Modul des Controllers, dass unabhängig von den Zyklen des Prozessors arbeitet. Sie dient zur Erfassung = capture ( engl. einfangen) und Vergleichen = compare (eng. vergleichen) von zeitabhängigen Vorgängen an den Pins des LPC. Aufgebaut ist die CCU auf einen 16-bit-Timer. Zur Messung der Periodendauer betreiben wir die CCU in der Betriebsart CAPTURE! Den Timer bereiben wir in der Basis-Betriebsart, da der Timer nur hochzählen soll und wenn er "übergelaufen" ist, soll er von neuem beginnen. Ein externes Signal an einem der beiden Capture-Eingänge ICA (P2.7) bzw. ICB (P2.0) steuert die Übernahme des aktuellen Wertes des CCU-Timers in die beiden Capture-Register (ICRxL und ICRxH). Da dieser 16bit-Wert in 2 Registern steht, die nur nacheinander ausgelesen werden können, muss zuerst das SFR ICRxL ausgelesen werden. Dabei wird ICRxH automatisch in ein Schattenregister kopiert, so wird sichergestellt das die Inhalte der beiden Register zum selben Capture-Event gehören. Da die Capture-Events asynchron zum laufenden Programm auftreten erfolgt die Messung mittels eines Interrupts. Da sich bei der CCU mehrere Interruptquellen einen Interruptvektor (Einsprunngadresse) teilen, muss am Anfang der Interupt Service Routine (ISR) eine Fallunterscheidung getätigt werden. Dies geschieht in diesem Beispiel mit einem Switch-Case-Konstrukt.
4. Einstellen des CCU-Timers
Zum einstellen der Betriebsart des CCU-Timers dienen die beiden Timer-Modus-Flags TMOD20 und TMOD 21. Die nötigen Einstellungen sind aus folgender Tabelle ersichtlich:
Über die SFRs TPCR2L und TPCR2H wird ein 10bit-Vorteiler eingestellt. Dies ist nötig, da der CCU-Timer sonst bei jedem Systemtakt (PCLK) um 1 inkrementiert würde. D.h. der Zähler würde bei PCLK = 3,6864 MHz (271,2 ns) schon nach 17,73ms überlaufen. Da wir aber Periodendauern von bis zu T=70 ms messen, müssen wir das Taktsignal durch den Faktor 4 teilen. Dadurch können wir Drehzahlen ab n = 214 1/min messen. Dazu müssen TPCR2L und TPCR2H wie folgt eingestellt werden:
TPCR2H = 0x00 TPCR2L = 0x04
Über das Flag TDIR2 kann man die Zählrichtung einstellen. Ist das Bit "0" zählt der CCU-Timer vorwärts, ist das ´Bit "1" zählt der CCU-Timer rückwärts. Da das bit den Anfangswert 0 hat müssen wir hier nichts ändern.
5. Programmablaufpläne 5.1 PAP-main
5.2 PAP-ISR
6. Quellcode 6.1 Hauptprogramm
6.2 Interrupt
7. Downloads
pdf-Version diseses Dokumentes
|
||||||||||||||||||||||||||||||||||||||||
|
erstellt von: Ch. Willems
letzte Änderung 27.01.2006 © AT04
|
||||||||||||||||||||||||||||||||||||||||