Frequenzzähler mit automatischer GPS-Kalibrierung
über

Erschwinglichen Frequenzzählern mangelt es oft an Präzision und Stabilität. Hier wird ein Frequenzzähler mit einer garantierten achtstelligen Genauigkeit zu akzeptablen Kosten vorgestellt. Ein OLED-Display sorgt für hervorragende Ablesbarkeit. Die Kalibrierung erfolgt automatisch mit Hilfe des GPS-Signals. Ein eingebauter Akku macht das Gerät portabel.
Prinzipielle Arbeitsweise
Der Frequenzzähler verwendet die sogenannte reziproke Zählermethode. Dabei wird eine Anzahl von vollständigen Zyklen des Eingangssignals gezählt. Während dieses Zeitraums werden die Zyklen eines Referenzsignals mit einer genau bekannten Referenzfrequenz (fref), gezählt. Mit der Formel

wird die Frequenz des Eingangssignals (fin) berechnet. Für die Erfassung der Anzahl der Eingangszyklen (nin) und der Anzahl der Zyklen des Referenzfrequenzsignals werden nref Zählungen benötigt. Wenn ein Ergebnis mit einer Genauigkeit von acht Stellen gewünscht wird, sollte nref größer als 108 sein.
Der Wert der Referenzfrequenz bestimmt also die Dauer der Periode, in der die Zyklen des Eingangssignals gezählt werden. Diese Zeit ist die Mindestzeit, um die Frequenz des Eingangssignals mit 8-stelliger Genauigkeit zu messen. Je höher also die Referenzfrequenz ist, desto schneller erhalten man ein Ergebnis. Für die Berechnungen ist ein moderner Mikrocontroller erforderlich, der mit hohen Frequenzen arbeiten kann und verschiedene Zähler auf dem Chip besitzt.

Gestaltungsaspekte
Der Mikrocontroller PIC18F26Q83 von Microchip verfügt über alle für diese Anwendung erforderlichen Funktionen. Er arbeitet mit einer maximalen Frequenz von 64 MHz. Controller, die mit einer noch höheren Frequenz arbeiten, sind zu einem unverhältnismäßig höheren Preis erhältlich und für die hier beschriebene Anwendung zu kompliziert.

Da der interne Oszillator des Controllers nicht stabil genug ist, liefert ein temperaturkompensierter Quarzoszillator (TCXO) den 64-MHz-Takt. Mit dieser Frequenz lässt sich ein Zähler mit achtstelliger Genauigkeit bei einer Aktualisierungszeit von weniger als 1,6 s realisieren. Die Timer des Controllers können jedoch nur Signale mit einer maximalen Frequenz von 20 MHz verarbeiten.
Glücklicherweise befinden sich acht konfigurierbare Logikzellen (CLC) auf dem Chip, die schnell genug für Signale mit einer Frequenz von 64 MHz sind. Dies ist dann die maximale Frequenz, die man mit diesem Controller messen kann. Zwei CLCs bilden einen 2-Bit-Vorteiler mit Gate (Bild 1), dessen Ausgang dann eine Frequenz von maximal 16 MHz aufweist, was für alle Zähler im Mikrocontroller akzeptabel ist.

Wie bereits erwähnt, muss mindestens 1,6 s lang gezählt werden. Die Zählung von 64-MHz-Zyklen über einen solchen Zeitraum erfordert einen Zähler mit mindestens 27 Bits. Zwei Bits werden durch den Vorteiler bereitgestellt, so dass ein interner Zähler mindestens 25 Bits breit sein sollte. Da die Zähler alle 8 Bit oder ein Vielfaches davon breit sind, bietet sich der 32-Bit-Zähler an. Der Controller verfügt über sechs 16-Bit-Timer (TMR0, TMR1, TMR3, TMR5, UTMRA und UTMRB), die verkettet zu 32-Bit-Zähler verkettet werden können. Hier sind die Timer TMR1 und TMR3 sowie die Timer UTMRA und UTMRB verbunden. CLC5 und CLC6 sind Vorteiler für den 32-Bit-UTMR-Zähler und CLC7 und CLC8 für die Kombination TMR1/TMR3. Mit dem PWM1-Modul wird ein 1,6-s-Impuls erzeugt. Sobald ein Zyklus des Eingangssignals ankommt, wird das Flip-Flop von CLC4 gesetzt (Bild 2).

Dieses Flipflop liefert das Gate-Signal für die erste Stufe des Vorteilers. Es wird mit dem ersten Zyklus des Eingangssignals zurückgesetzt, nachdem der PWM1-Ausgang auf Low gegangen ist. Wenn der Ausgang von CLC4 auf Low geht, wird ein Interrupt ausgelöst. In der Interrupt-Service-Routine werden die Zähler gelesen, die Berechnungen durchgeführt und die Ergebnisse angezeigt. Danach werden die Zähler zurückgesetzt und der beschriebene Vorgang beginnt von vorne.
Die Präzision des Geräts wird durch einen sehr stabilen 64-MHz-TCXO erreicht, dessen Frequenz durch das GPS-Signal sehr genau gemessen wird. Am Ausgang des verwendeten GPS-Empfängermoduls liegt ein Signal mit einer extrem stabilen 1-Hz-Frequenz (besser als 10-15). Mit dem 8-Bit-Zähler TMR2 wird einen 10-s-Impuls erzeugt. Während dieser Zeitspanne zählt der von CLC1 und CLC2 gebildete Vorteiler die TCXO-Ausgangsimpulse. Das Ausgangssignal dieses Vorteilers dient als Taktsignal für den 32-Bit-Zähler, der aus den verknüpften Zählern TMR0 und TMR5 besteht.
Das Ausgangssignal von TMR2 löst einen Interrupt aus, sobald es auf High geht. Die Interrupt-Service-Routine liest den Wert des TMR0/TMR5-Zählers, der genau das Zehnfache der Frequenz des TCXO darstellt. Dieser Wert wird bei den Berechnungen während der Frequenzmessungen verwendet. Die mögliche Abweichung von ±1 Zählung hat keinen Einfluss auf die 8-stellige Genauigkeit des Zählers, da die Messperiode 10 s beträgt. Nachdem die TCXO-Frequenz einige Male gemessen wurde, wird das Ergebnis im EEPROM des Controllers gespeichert. Damit steht dieser Wert schon beim Einschalten des Frequenzzählers zur Verfügung. Die Praxis zeigt, dass nur die Alterung des Oszillators die Frequenz des TCXO verändert.
Die Schaltung
Wie in Bild 3 dargestellt, übernimmt der Mikrocontroller alle logischen Funktionen und Berechnungen. Aber ein Frequenzzähler braucht mehr: Die Signale - deren Frequenz gemessen werden muss - sind nicht unbedingt digital. Das Signal muss unter Umständen von einem Vorverstärker verstärkt oder abgeschwächt werden. Ein Display am Mikrocontroller zeigt die Messergebnisse an. Zur Peripherie des Controllers gehören auch der schon erwähnte TCXO und der GPS-Empfänger, um die Referenzfrequenz bereitzustellen.

Der vollständige Schaltplan ist in Bild 4 dargestellt. Der Controller U2 bildet zusammen mit dem TCXO, dem GPS-Empfänger U4 und dem Display U3 den digitalen Teil des Zählers.
Der Vorverstärker hat eine Eingangsimpedanz von 1 MΩ (R1). Der Sperrschicht-FET Q1 bietet eine sehr hohe Eingangsimpedanz und eine gewisse Verstärkung (D1 klemmt die Wechselspannung auf ein für das empfindliche Gate sicheres Maß). Der Emitterfolger Q2 ist mit dem Ausgangsverstärkertransistor Q3 gleichstromgekoppelt. U1 ist ein Hochgeschwindigkeits-Komparator, der aus dem Eingangssignal ein schön geformtes Rechtecksignal am Abtasteingang des Mikrocontrollers erzeugt.
Diese Schaltung hat eine ausreichende Bandbreite für den Zähler, was durch eine SPICE-Simulation bestätigt wurde. Die Spitze-Spitze-Spannung des Eingangssignals muss für gutes Ausgangssignal nur 50 mV betragen, mit dem der Hochgeschwindigkeits-Komparator gefüttert wird. Der Rückkopplungswiderstand R13 sorgt für eine gewisse Hysterese.
Selbst wenn die Eingangsspannung an Pin 1 des Komparators seine Versorgungsspannung übersteigt, wird das IC nicht beschädigt, da der Eingangsstrom nicht höher als zulässig ist. Das Ausgangssignal des Komparators wird zur Verarbeitung an den Mikrocontroller weitergeleitet. Wegen seines empfindlichen Eingangs ist der eingangsseitige Teil des Vorverstärkers abgeschirmt.
Stromversorgung
Ein Lithium-Ionen-Akku des Typs 18650 (BT1) versorgt die Schaltung mit Energie. Die Batteriespannung beträgt nominell 3,7 V. Der GPS-Empfänger benötigt aber 3,3 V, und da dieser direkt mit dem Controller verbunden ist, betreiben wir diesen und den TCXO praktischerweise ebenfalls mit 3,3 V. Ein einfacher Spannungsregler (U5) übernimmt diese Aufgabe. Der Eingangsverstärker benötigt für den ordnungsgemäßen Betrieb allerdings eine Versorgungsspannung von 5 V, für die der Aufwärtsregler U6 sorgt.
Es sind sogar etwas mehr als 5 V, aber die Induktivität L2, die mit C13 die Restwelligkeit am Ausgang des Wandlers beseitigen muss, verursacht einen kleinen Spannungsabfall, so dass die Versorgungsspannung des Vorverstärkers genau 5 V beträgt. Da das Display über einen eigenen Regler verfügt, wird es direkt von der Batterie versorgt. Durch Betätigung des Tasters SW1 wird der MOSFET Q6 eingeschaltet und damit auch der MOSFET Q5, der die Stromversorgung einschaltet. Der Controller beginnt zu arbeiten und schaltet dann den MOSFET Q4 ein, so dass die Batterie nach dem Loslassen des Drucktasters angeschlossen bleibt.
Mit einer voll aufgeladenen Batterie kann der Zähler bis zu 20 Stunden ununterbrochen arbeiten. Zum Aufladen wird eine USB-Stromquelle verwendet. Der Lade-IC U7 übernimmt diese Aufgabe. Pin 3 und Pin 4 des USB-Steckers benötigen jeweils einen Widerstand gegen Masse, ohne die so genannte Schnellladegeräte keinen Strom liefern würden. Die rote LED leuchtet während des Ladens, die blaue, wenn der Akku vollständig geladen ist. Der Controller wird über den Anschluss J2 programmiert, während man mit Jumper J4 den Akku dauerhaft anschließt, was beim Debuggen und Programmieren nützlich ist.
Die Umgebungsbedingungen für einen guten GPS-Signalempfang können zuweilen unzureichend sein. Für solche Fälle ist der optionaler Anschluss J3 für eine externe Antenne vorgesehen.
Die Firmware
Die Firmware ist in Assembler ohne Verwendung von Bibliotheken geschrieben und kann unter heruntergeladen werden . Die Programmierung in Assembler führt zu einer Firmware, die die Speicherressourcen effizienter nutzt und schneller ist als eine in einer höheren Sprache erstellte. Daher benötigt sie nur etwa 5 % des Programmspeichers des Controllers.
Nach der obligatorischen Konfiguration von IOs, CLCs, Zählern und anderen internen Modulen wird das Hauptprogramm aufgerufen. Dieser Teil kümmert sich nur um die Anzeige des Wellen-Icons während der Zeit, in der der GPS-Empfänger einen Impuls ausgibt, und um das Löschen des Aktualisierungs-Icons (zu diesen Symbolen später mehr). Alle anderen Funktionen werden von fünf Interrupt-Service-Routinen übernommen.

Die Flussdiagramme dieser Routinen sind in Bild 5 dargestellt. Sie sind selbsterklärend. Interrupt-Routinen in älteren Mikrocontrollern beginnen damit, herauszufinden, welche Peripherie einen Interrupt verursacht hat. Nachdem die Ursache gefunden wurde, wird ein Sprung zur entsprechenden Serviceroutine durchgeführt. Der Mikrocontroller verwendet sogenannte vektorielle Interrupts, was bedeutet, dass jedes Peripheriegerät seinen eigenen eindeutigen Vektor hat, der auf seine Interrupt-Service-Routine verweist. So ist es innerhalb der Interrupt-Routine nicht erforderlich, herauszufinden, welches Peripheriegerät den Interrupt ausgelöst hat. Die Verarbeitung von Interrupts erfolgt auf diese Weise sehr schnell.
Aufbau
Die gesamte Schaltung ist auf einer einzigen Platine mit den Abmessungen 100 × 70 mm2 untergebracht (Bild 6). Es wurde darauf geachtet, dass der Eingangsverstärker, der Prozessor, der GPS-Empfänger und die Stromversorgung räumlich voneinander getrennt sind.
Bis auf die Steckverbinder, das Display und den TCXO ist alles in SMD-Technik ausgeführt. Das spart Platz, erleichtert das Layout und führt zu einer kompakten Schaltung mit geringen Abmessungen. Die Widerstände des Eingangsverstärkers sind von der Bauform 1206, die eine geringere parasitäre Kapazität als Bauteile der Größe 0805 aufweisen, die für den Rest der Schaltung verwendet werden.

und die Rückseite der Platine, montiert im oberen Teil des Gehäuses (rechts).
Indem ein bestimmter Bereich auf der Platine kupferfrei gelassen wurde, konnte die Eingangskapazität des Verstärkers bei etwa 15 pF gehalten werden. Die Platine wurde in einer Datec-Mobil-Box S von OKW untergebracht. Wegen seiner Höhe wurde das Display zunächst mit 5 mm Abstandshaltern montiert und dann erst die Stiftleiste von der Rückseite der Platine eingeschoben.
Um einen optimalen Kontakt herzustellen, wurden die Pins der Stiftleiste dann einzeln so weit wie möglich eingeschoben. Die maximale Höhe der kompletten Platine erreichte so nur 19 mm, was gut in die verfügbaren 22 mm des OKW-Gehäuses passte. Da nur wenige Verbindungen zum Displaymodul benötigt wurden, wurden nicht nur diese Stiftleisten, sondern auch einige zusätzliche zur Fixierung des Moduls montiert.

der 0-Ω-Widerstände zur Auswahl des I2C-Busses zeigt.
Das OLED-Display von Waveshare ist standardmäßig für einen SPI-Bus konfiguriert. Da der Frequenzzähler den I2C-Bus verwendet, mussten sechs 0-Ω-Widerstände auf dem Modul verschoben werden. Bild 7 zeigt, wie es nach dieser Änderung aussieht. Es ist Vorsicht geboten, da diese Teile recht klein sind.
Gebrauch des Zählers
Durch Drücken der Taste SW1 wird das Gerät eingeschaltet. Wird die Taste während der Frequenzmessung gedrückt, wird der angezeigte Wert gehalten und die Meldung hold angezeigt. Durch erneutes Drücken wird die Anzeige wieder freigegeben. Der Frequenzzähler schaltet sich automatisch aus, wenn mehr als 60 s lang kein Eingangssignal anliegt.

GPS-Ausgangsimpuls (Mitte) und zehn aufeinanderfolgende erfolgreiche GPS-Impulse (rechts).
Alternativ kann der Zähler auch ausgeschaltet werden, indem die Taste länger als 2 s gedrückt wird, was durch das Erlöschen der Anzeige quittiert wird. Bild 8 zeigt alles, was in der Ecke des Displays angezeigt werden kann. Jedes Mal, wenn die Anzeige aktualisiert wird, leuchtet oben links ein kleiner Punkt auf (Bild 8, links). Während der Zeit, in der der GPS-Empfänger einen Impuls ausgibt, wird das Wellensymbol (Bild 8, Mitte) angezeigt.

(von oben): der reguläre Messwert, der Status low battery, der Status
frequency hold und der Status no input (gestrichelte Anzeige).
Wenn der Controller eine Serie von zehn aufeinanderfolgenden Impulsen vom GPS-Empfänger erfolgreich empfangen hat, wird das Häkchen in Bild 8 (rechts) für eine Sekunde auf dem Display angezeigt. Bild 9 zeigt alle möglichen Ansichten der Hauptanzeige, mit (von oben nach unten) der regulären Anzeige, der Anzeige des low battery Status, dem Einfrieren der Frequenzanzeige hold und dem Status no input (gestrichelte Anzeige). Die Überprüfung der Batteriespannung erfolgt etwa alle 30 s; liegt sie unter 3,2 V, erscheint die Meldung low battery, was bedeutet, dass die Batterie geladen werden muss.
Sie haben Fragen oder Kommentare?
Haben Sie technische Fragen oder Anmerkungen zu diesem Projekt? Bitte kontaktieren Sie den Autor unter wdenhollander@solnet.ch oder die Elektor-Redaktion unter redaktion@elektor.de.
Diskussion (0 Kommentare)