Das Ziel war die Entwicklung eines einfachen Drehzahlmessers
für
die Luftschraube von Modellflugzeugen. Die Messung selbst erfolgt
optisch,
die Anzeige erledigt ein 3-stelliges LED-Display.
|
Bei einer Drehzahl von 2000 rpm misst man an der Zweiblattluftschraube eine Frequenz von 66.66 Hz. Der Zählfrequenzmesser würde eine Zählzeit von 1 Sekunde benötigen, um diese Frequenz auf 1 Hz genau zu bestimmen. Zählt man die Luftschraubenimpulse nur über 0,1 Sekunde, so ist das Ergebnis 6 oder 7. Bei einer Messauflösung von 10 Hz (1 / 0,1Sekunde = 10 Hz) Misst man also 60 Hz oder 70 Hz , Zwischenwerte sind nicht möglich. 60 Hz entspräche1800 rpm, 70 Hz entspräche aber schon 2100 rpm. Der Grundmessfehler beträgt also schon 300 rpm. bzw. 15%. Die Anzeige eines Zählfrequenz-Drehzahlmessers mit 0,1s Zählzeit würde also zwischen diesen beiden Werten schwanken.
Bei der hier eingesetzten Periodenmessung, messe ich die
Dauer
von 2 aufeinanderfolgenden Schraubendrehungen mit einer Auflösung
von 2,66 µs. (Die Dauer einer Drehung wird also mit einer
Genauigkeit
von 1,33 µs bestimmt.) Bei einer Drehzahl von 2000 rpm dauern 2
Propellerdrehungen
60 ms. Die Periodendauermessung wird 22500 x 2,66µs = 60 ms
messen.
Weicht der Messwert um 1 Takt ( also um 2,66µs) ab, dann
beträgt
der daraus entstehende Messfehler 2000rpm / 22500 = 0,08 rpm
=0,004%.
Dieser Messfehler ist vernachlässigbar. Die
Messgenauigkeit
wird also nicht durch das Messverfahren, sondern duch den
Taktgenerator
des PIC bestimmt. Der hier eingesetzte Keramikresonator hat einen
Frequenzfehler von maximal 0,5%, wodurch der Gesamtmessfehler
unter
0,6% bleibt.
Mit steigender Drehzahl wird die Periodenmessung
ungenauer und die Frequenzmessung
genauer.
Aber auch bei 88000 rpm beträgt der prinzipielle
Messfehler
der Periodenmessung nur 0,2% und der der Frequenzmessung noch 0,34%.
Folglich
ist die Periodenmessung im gesamten Messbereich des
Drehzahlmessers
das überlegene Verfahren, der Gesamtmessfehler
(einschließlich
der Ungenauigkeit des Keramikresonators) liegt im gesamten
Messbereich
bei 0,5%..0,7%. In nebenstehender Grafik ist der vom Keramikresonator verursachte Fehler schon berücksichtigt. ohne Messbereichsumschaltung |
mit Messbereichsumschaltung Das sieht ganz anders aus, wenn man bei niedrigen Drehzahlen auf eine Anzeige mit 10-Hz-Auflösung umschaltet. Im nebenstehenden Beispiel schaltet der Drehzahlmesser bei Drehzahlen unter 5500 rpm von der Anzeige ' 5.5' auf '5.48' um. Damit ist die Anzeigegenauigkeit bei niedrigen Drehzahlen 10-fach genauer und der Gesamtfehler des Drehzahlmessers (Periodenmessfehler + Anzeigefehler + Keramikresonatorfehler) liegt immer unter 2%. Erkannt wird dieser Mode am leuchtenden Dezimalpunkt hinter der ersten Anzeigestelle. Der Dezimalpunkt hinter der 2. Stelle zeigt weiterhin mit seinem Flackern an, dass das Gerät misst. |
Zur Messung der Periodendauer verwende ich das Capture-Modul. Es besteht im Wesentlichen aus dem Timer1, der mit 375 kHz getaktet wird. Dieser Takt wird aus dem 12-MHz-PIC-Takt gewonnen, indem er erst durch 4 (Zyklustakt) und dann durch 8 (Vorteiler des Timer1) geteilt wird. Beim Eintreffen eines Pulses von der Luftschraube wird der Timer1 per Software auf 0 gesetzt. Dann zählt er mit 375 kHz. Alle 2,66 Mikrosekunden erhöht sich der Wert des Timers um 1.
Um ein stabiles Messergebnis zu erhalten, wird nicht der Abstand zweier benachbarter Luftschrauben-Impulse gemessen, sondern die Gesamtdauer von 4 Perioden. Das erreicht man durch die Verwendung des 4:1-Vorteilers des Capture-Einganges. Nach 4 Eingangsimpulsen wird der Timer1 (via Capture Modul) ausgelesen. Das erfolgt also nach 2 Schraubenumdrehungen (Zweiblattluftschraube).
Um aus diesem Messwert die Drehzahl in UPM (Umdrehungen pro Minute) zu berechnen, muss der Reziprokwert des Zählergebnisses berechnet werden, und dieser Wert mit 45000000 multipliziert werden (1 Minute / 2,66 µs * 2 = 45000000). Da aber eine Anzeige in 100-UPM-Schritten geplant ist, wird der Reziprokwert nur mit 450000 multipliziert.
Drehzahl = 450000 / Messwert
Eigentlich ist es also völlig ausreichend, den Wert 450000 durch den Messwert zu dividieren. Dass kann durch wiederholte Subtraktion des Messwertes von 450000 erfolgen, bis 0 erreicht wird. Dafür benötigt man nur eine 24-Bit-Subtraktion. (Dieses Verfahren funktioniert zwar, ist aber leider recht langsam. Für unsere Zwecke mag es genügen.)
Beispiel:
Die Drehzahl sei 30000 rpm. Der Pulsabstand beträgt bei einer
Zweiblattluftschraube folglich 1 / (2 x 30000) Minute = 1 ms.
Vier
Pulse benötigen folglich 4 ms.
Das Capture-Modul zählt mit seinem 2,66 µs-Takt in diesen
4 ms bis zum Wert 1500. (4000µs / 2,66µs = 1500)
Wird 450000 durch 1500 dividiert, erhält man 300. Dieser Wert
wird angezeigt (Anzeige: '30.0'), er entspricht der Drehzahl in 100
UPM.
Die niedrigste messbare Drehzahl ist 686 rpm. Bei kleineren
Drehzahlen
läuft der 16-bittige Timer1 während der Messsung über.
Die
dreistellige Anzeige begrenzt die darstellbare Drehzahl nach oben auf
99900
rpm. Da im Modellbau in der Regel nur Drehzahlen von 2000 rpm bis zu
40000
rpm interessant sind, verzichte ich auf Maßnahmen zur
Messbereichserweiterung.
Die maximale Drehzahl schränke ich (aus Gründen der
Bequemlichkeit)
auf 87890 rpm ein.
Drehzahl: | 600 rpm | 686 rpm | 700 rpm | 1 000 rpm | 3 000 rpm | 10 000 rpm | 30 000 rpm | 60 000 rpm | 87 890 rpm | 100 000 rpm |
Messzeit: | 200 ms | 174,76 ms | 171,43 ms | 120 ms | 40 ms | 12 ms | 4 ms | 2 ms | 1,365 ms | 1,2 ms |
Messwert: | (9464) | 65 535 | 64 286 | 45 000 | 15 000 | 4 500 | 1 500 | 750 | 512 | 450 |
Anzeige: | -- | 00.6 0.69 |
00.7 0.70 |
01.0 1.00 |
03.0 3.00 |
10.0 | 30.0 | 60.0 | 87.9 | --.- |
Die Anzeige erfolgt multiplex mit 4 Takten (3 Anzeigetakte und 1
Rechentakt).
Jeder Takt ist ca. 2,72 ms lang, um eine flimmerfreie Anzeige zu
gewärleisten
(91 Hz). Das Umschalten von Takt zu Takt wird mit einem Timer
realisiert.
Dazu wird der Timer0 mit dem PIC-Zyklustakt (12MHz / 4 = 3MHz)
über
den internen 32:1 Vorteiler gespeist. Immer nach 256 x 32 Zyklen (2,72
ms) läuft der Timer0 über, und setzt das T0IF-Flag. Das wird
vom Hauptprogramm durch Polling erkannt, und zur nächsten
Anzeige-Stelle
weitergeschaltet.
Nach 3 Anzeigetakten (für die drei Stellen) wird in einem 4. Takt
die Drehzahl neu berechnet, falls inzwischen ein neuer Messwert
eingetroffen
ist.
Nach dem Einschalten bleibt das Display zunächst dunkel, es wird nur der hinterste Dezimalpunkt eingeschaltet (sozusagen als Lebenszeichen). Nach dem Eintreffen der ersten Impulse vom Sensor schaltet die Anzeige zur normalen Betriebsart um, und der hinterste Dezimalpunkt verlischt.
Hinter der tausender-rpm-Stelle (also der mittleren LED-Stelle) wird
der Dezimalpunkt eingeschaltet, wenn Messwerte vom Sensor
eintreffen.
Dieser Dezimalpunkt flackert also normalerweise. Bei sehr hohen
Drehzahlen
(>40000 rpm) leuchtet der Punkt dauerhaft. Falls keine Messung
erfolgt,
oder die Eingangsfrequenz zu niedrig ist, bleibt der Punkt dunkel.
Überschreitet die gemessene Drehzahl das obere Limit von 87890
rpm, dann zeigt das Display '--.-' an.
Unterhalb von 700 rpm zeigt das Display ' --' an, Der
Dezimalpunkt
ist dann also aus.
Eine Null an der Zehntausender-Stelle wird nicht angezeigt. Bei einer Drehzahl von 6000 rpm wird also anstelle von '06.0' lediglich ' 6.0' angezeigt.
Wem 100 UPM zu ungenau ist, der kann eine zusätzlich 10er-Stelle anschließen, deren Anode mit RA5 angesteuert wird. Dann wird nicht 450000 durch den Zählwert dividiert, sondern 4500000, um ein 4-stelliges BCD-Ergebnis zu bekommen. Auf eine Messbereichsumschaltung kann dann verzichtet werden.
Drehzahlen unterhalb von 700 rpm führen zu einem Überlaufen des Timer1 während des Capturens. Wer niedrigere Drehzahlen (bis 350 rpm) messen will, kann mit einem langsameren PIC-Takt von nur 4 MHz arbeiten, und in der Drehzahlberechnung nicht 450000 sondern 150000 durch den Messwert dividieren. Bei hohen Drehzahlen (>60 000 rpm) fängt dann die Anzeige aber zu flackern an, da die Rechenzeit zur Drehzahlberechnung stark zunimmt. Eine schnellere Divisionsroutine kann hier Abhilfe schaffen.
Wer einen Drehzahlmesser für langsamere Drehzahlen
(also
nicht für Propeller) sucht, kann den PIC-Takt auf 1 MHz
verringern,
und den Vorteiler des Capture-Modules auf 1:1 einstellen. Dann sind
Messzeiten
bis zu 2 Sekunden realisierbar. Wenn der Drehzahlsensor nur 1 Impuls
pro
Drehung abgibt, können Drehzahlen bis hinab zu 30 rpm gemessen
werden.
Dafür sind natürlich einige Softwareanpassungen nötig.
Als Eingangsschaltung könnte auch ein Transimpedanzverstärker
verwendet werden.