3+1 Kanal reziproker Zähler mit STM32F407, 8stellig

8-stell. reziproker Frequenzzähler mit STM32F407
gleichzeitige Messung von max. 4 Kanälen mit je 2 Messungen/s

 

Programm für STM32F429-DISCO mit TFT, Frequenz und Periode
 
Entwurf: FMeter-TFT-407-TDC, 10 + 8 stellige Messungen/s
 

Übersicht

Als Ergänzung zu den bisher gezeigten reziproken Frequenzzählern mit ATtiny2313/4313 und ATmega88/328 befindet sich ein Frequenzzähler in Entwicklung, der die bisher erzielte Auflösung um den Faktor 10 erhöht und durch permanenten Abgleich anhand eines GPS-1pps-Signals hohe Messgenauigkeit bietet. Dabei werden bis zu vier Eingangskanäle gleichzeitig erfaßt und bei einer Messrate von 2 Messungen/s 8-stellig aufgelöst angezeigt.
Anmerkung:
wenn nur ein Kanal benötigt wird, bietet Kanal 3 mit seinem 200 MHz Vorteiler die beste Leistung.

nach oben

Eckdaten:

nach oben

Schaltbild mit voller Bestückung:

Das Schaltbild zeigt die Grundschaltung der STM32F407 mit SWD-Anschluß, Boot-Option und USB-Verbindung. Der Prozessortakt kann per Quarz, TCXO oder ersatzweise mit ext. Referenzsignal (typ. 10 MHz) erzeugt werden. Die ser. Schnittstelle wird über USART3 betrieben. Vorteiler und LC-Anzeige werden mit +5V versorgt, womit die höchsten Taktraten erreicht werden bzw. die Schaltung ohne negative Spannung fürs LCD auskommt. Ein low-drop Regler stellt die 3,3 V für den STM32F407 zur Verfügung.
Das EEPROM 24C08 speichert neben einigen Konstanten auch die Abgleichwerte für die verwendete Referenzfrequenz.

Automatischer Abgleich per 1pps-Signal:
Ein an Fin4 angelegtes 1 Hz-Signal kann zum permanenten Abgleich des Referenztaktes verwendet werden. Sofern der Referenztakt um weniger als 97 ppm vom Sollwert abweicht - ein halbwegs richtig beschalteter Quarz liefert dies, ein TCXO mit typ. <5 ppm auf jeden Fall -, wird nach 60 s der gemittelte Wert an Fin4 als Frequenznormal für 1 Hz zur Verrechnung der Eingangsfrequenzen verwendet. Der jede Sekunde neu errechnete Korrkturwert wird anschließend alle 10 Minuten ins EEPROM geschrieben und steht nach dem Einschalten sofort zur Verfügung. Bei reduzierten Anforderungen ist das 1 pps-Signal somit nicht andauernd erforderlich.
Sofern das Signal an Fin4 auch nur einmal vom +/-97 ppm Raster abweicht, beginnt die Einschwingphase erneut. Das bedeutet, daß Fin4 auch als normaler Eingang verwendet werden kann, sofern nicht gerade ein stabiles 1 Hz Signal permanent anliegt.
Aktuell liefert PD0 des µC ein Ausgangssignal für eine LED. Während der Einschwingphase blinkt diese im Tastverhältnis zur fortgeschrittenen Zeit und bleibt nach 60 s dauernd eingeschaltet.

Anmerkung zum Quarztakt:
Bei Verwendung eines Quarzes, können bestenfalls 7-stellige Ergebnisse erreicht werden. Die Drift durch Temperaturänderung kann zu schnell sein, als daß sie ausgeregelt werden könnte. Die Langzeitstabilität bleibt aber erhalten.

nach oben

Bestückung:

Die Leiterplatte hat die Abmessungen ca. 71 x 31 mm² und kann huckepack rückwärtig auf das LCD-Modul montiert werden. J1 bietet Steckbrücken für einstellbare Optionen. Der Vorteiler 74HC393 befindet sich auf der Platinenunterseite. Q1 oder TCXO werden alternativ bestückt.
Unbestückte Leiterplatten FR4, 2-seitig, dk, Bestückungsdruck wie abgebildet sind auf Anfrage verfügbar.

Musteraufbau mit rückwärtiger Montage auf einer LC-Anzeige 2 x 16; voll bestückt mit TCXO.

nach oben

Foto Display 4 x 20:

Hier ein Foto eines LCD-Moduls mit 4 x 20. F1 zeigt das 1 kHz Abgleichsignal eines Oszilloskopes und F2 zeigt 'timeout', da kein Signal anliegt; F3 zeigt ein höherfrequentes Signal und F4 ein 1pps-Signal bei völlig unabgeglichenem Quarztakt. Der Kontrast der Anzeige wird per DAC vom µC erzeugt und kann per RS232 angepaßt werden.
Bei Verwendung einer 16-stell. Anzeige wird die Ausgabe ohne "__" Ränder ausgegeben; bei einer 2-zeiligen Anzeige werden nur F1+F2 angezeigt. Optionen dazu befinden sich in Arbeit.

nach oben

 

einkanaliger Zähler für Frequenz, Periode, Drehzahl und Ereignis, autom. Abgleich mit GPS

Als Ersatz für den Frequenzzähler mit ATmega88/328 dient die oben gezeigte Schaltung, wobei nur ein Kanal nebst Vorteiler verwendet wird. Die Bestückung des 74HC393 (IC6) kann entfallen. Folgende Eigenschaften werden erreicht:

nach oben

manuelle Bedienung

Für die Bedienung der Funktionen werden ein 2-pol. Drehschalter mit 6 Schalterstellungen, ein Taster für das Rücksetzen bei Ereigniszählung und zwei LEDs. Die beiden LEDs werden an J1 angeschlossen: Fertig-LED an PD4 und GPS-LED an PD3. Der Rücksetz-Taster (Schliesser) kommt an FIN und der Drehschalter an J1, wobei die µC-Pins im aktiven Zustand gegen GND geschaltet werden:

Anzeigefunktion
PD0
PD1
PD2
FIN
Frequenz+Periode; ser. Ausgabe der Frequenz
-
-
-
ohne Funktion
nur Frequenz: Anzeige + ser. Ausgabe
0
-
-
ohne Funktion
nur Periode: Anzeige + ser. Ausgabe
-
0
-
ohne Funktion
nur Drehzahl: Anzeige + ser. Ausgabe
0
0
-
ohne Funktion
Ereignisse pos. Flanken: Anzeige + ser. Ausgabe
-
-
0
0 = Reset
Ereignisse neg. Flanken: Anzeige + ser. Ausgabe
0
-
0
0 = Reset

Der Drehschalter kann entfallen, wobei dann Frequenz+Periode gleichzeitig angezeigt werden; falls nicht alle Einstellungen benötigt werden, kann die gewünschte Funktion auch mit einfachen Schaltern oder Steckbrücken eingestellt werden.

nach oben

Parameter per RS232

Über die serielle Schnittstelle werden nicht nur Meßwerte ausgegeben, sondern auch Parameter für die Messung eingegeben und dauerhaft im EEPROM gespeichert. Das Datenformat ist 8N1 bei einer Baudrate von 38,3 kBd. Jede Befehlssequenz wird mit dem Steuerzeichen <ESC> (dez. 27) eingeleitet; anschließend folgt optinal eine Dezimalzahl (nnn) im Bereich 0 – 65535 (bzw. –32000 bis 32000). Die Befehlssequenz wird mit dem eigentlichen Befehl (Großbuchstabe oder Zeichen) abgeschlossen.
Die eingestellten Werte lassen sich abfragen, indem nur das ESC-Zeichen und der Befehl gesendet werden. Als Antwort werden der Befehl und der eingestellte Zahlenwert ausgegeben.
Anstatt des <ESC> Zeichens kann auch ein '.' verwendet werden; der Vorteil liegt darin, daß keine 'unsichtbaren' Steuerzeichen übertragen werden müssen (Ausnahme: Korrekturwert zur Oszillatorfrequenz).

Befehle (Leerzeichen und '' dienen nur der Lesbarkeit und werden nicht gesendet):

<ESC> V Anfrage der Version, Ausgabe 'FMETER-407 V1.0'
<ESC> * Ausgabe des Zeichens '*' als Echo zur Synchronisierung (Zeitmarke)
<ESC> nnn U benutzerdefinierte Meßzeit, nnn Bereich 0 – 30000 in 1 ms Schritten
  Beispiel '<ESC>4000U' stellt die Meßzeit auf 4000 ms (4s).
  Der Wert '0' stellt die schnellste Meßzeit ein, bei der eine neue Messung ausgewertet wird, sobald die vorherige angezeigt/ausgegeben wurde.
<ESC> nnn L Leuchtdauer der LED 'RUN', Bereich 1 – 30000 in 1 ms Schritten, nachtriggerbar
<ESC> nnn T Timeout für fehlendes Eingangssignal, Bereich 1 – 30000 in ms
Bei fehlendem Eingangssignal wird nach Ablauf von 'timeout' ein blinkender Cursor unten rechts auf dem LCD angezeigt, der darauf hinweist, daß das angezeigte Ergebnis nicht aktuell ist.
Liegt die Eingangsfrequenz < 0,03 Hz, erscheint auf dem LCD der Hinweis 'Signal?'.
<ESC> nnn I Drehzahlkorrektur: Impulse/Umdrehung, Bereich 1 - 65535 Voreinstellung = 1 Impuls/Umdrehung
<ESC> nnn O Offset zur internen Referenzfrequenz, Bereich –32000 bis 32000 in Schritten von 0,5 Hz (0,003 ppm) der Taktfrequenz; bei intern 168 MHz ergibt sich ein Einstellbereich von +/- 97 ppm. Dieser Wert wird zunächst nur temporär im RAM gespeichert. Kontrollabfrage mit: <ESC>O
"nnn" ist ein relativer Wert, der zum vorhandenen Offset addiert wird.
Mit <ESC> 0O wird der eingestellte Werte absolut auf 0 gesetzt.
Sofern ein ext. GPS-Signal zum Abgleich verwendet wird, bleibt der manuelle Offset wirkungslos und wird vom autom. Abgleich überschrieben.
<ESC> <CTRL-S> Diese Sequenz schreibt den eingestellten Offset dauerhaft ins interne EEPROM, sodaß er beim nächsten Einschalten automatisch verwendet wird.
Der autom. Abgleich per GPS hat höhere Priorität und überschreibt die manuelle Einstellung!
<ESC>nS feste Anzahl der Stellen auf 'n' setzen; Bereich von n: 5 - 9
<ESC>n,mS angezeigte Stellen auf den Bereich 'n,m' setzen; abhängig von der Meßdauer wird die höchstmögliche Stellenanzahl angezeigt
<ESC>nK Kontrastspannung für das LCD im Bereich 0 - 250 einstellen
   
  Ein Beispiel für die Abfrage eines eingestellten Wertes (Meßzeit 35 ms):
<ESC> U Antwort: U35 <CR><LF>

Musterplatine/-programm

Unbestückte Leiterplatten FR4, 2-seitig, dk, Bestückungsdruck wie oben abgebildet sind verfügbar. Die passende Datei 'lcd_fmeter_407.hex' gibt es mit dazu.

nach oben

 

Messung von Frequenz und Pulsweite mit abgemagerter Schaltung

Ein kleines Beispiel zeigt, wie gut sich die vielseitigen und schnellen Timer des STM32F407 für hochaufgelöste Zeitmessungen eignen.

Das gezeigte Programm 'f_mess.c' mißt mit Timer8 Frequenzen an Port PC.6 im Bereich von 0,05 Hz – 500 kHz.
Das reziproke Meßverfahren erlaubt bei 168 MHz Referenzfrequenz eigentlich 8-stellige Ergebnisse bei einer Meßrate von 1,7 Messungen/s. Hier werden bei ca. 3 Messungen/s 'nur' 6-stellige Frequenzwerte angezeigt, um keinen hochstabilen Quarzoszillator verwenden zu müssen. Dennoch sollte die Referenzfrequenz abgeglichen werden. (im Programm F_CLOCK entsprechend ändern). Die feine Auflösung des Timer8 von ca. 5,95 ns wird aber genutzt, um die genauen Zeiten für die gesamte Periodendauer und den positiven Anteil des Eingangssignals zu messen. Dies wird durch jeweils eigene capture-Register des Timers per Hardware ermöglicht. Kennt man die Periodendauer und den positiven Anteil, lassen sich daraus +Pulsweite, -Pulsweite und das Tastverhältnis errechnen: wie bei der Frequenzmessung mit 6-stelliger Auflösung.

Das 1. Bild zeigt die Messergebnisse eines 1pps-GPS-Signals.
Fin = 1,00000 Hz stimmt nicht ganz. Die 7. Stelle ist eine '1' und die Periodendauer somit 999,999 ms. Daher ergibt sich ein Tastverhältnis von 0,00011% (1/999999) und für die +Pulsweite 1,095 µs und die –Pulsweite 999,998 ms. Die +Pulsweite entspricht 184 Impulsen des Timers.

Bild 2 zeigt ein Signal mit 5,5 kHz und einem Tastverhältnis von 53,6462 %, wie es ein 74HC14 Schmitttrigger mit RC-Beschaltung erzeugt; hier auf einer Anzeige 2 x 16.

OhneBild: ein 1 kHz PWM-Signal - erzeugt mit einem ATmega88 - liefert ein Tastverhältnis von 50,0003 %, was zum einen die hohe Auflösung widerspiegelt aber auch zeigt, wie die Flankensteilheit des Signals direkt ins Messergebnis einwirkt.

Das letzte Bild zeigt die Basisbeschaltung des µC mit Anschluß der LC-Anzeige. Die Portbelegung ist so gewählt, daß das Programm direkt auf einem STM32F407-Discovery-Board laufen kann. Zur Programmentwicklung wurde Em::Blocks V2.20 verwendet. Das Programm 'STM32F4_lcd.c' zeigt die Ansteuerung der Anzeige und kann auch für andere Anwendungen nützlich sein. Je nach verwendeter Anzeige, kann/muß die Kontrastspannung angepasst werden.

nach oben

 

Programm für STM32F429-DISCO mit TFT, Frequenz und Periode

Von ST, dem Hersteller der hier verwendeten STM32F4xx Controller, gibt es ein kostengünstiges Entwicklungsboard STM32F429-Discovery, welches neben diversen Bausteinen auch ein kleines TFT-Display und einen USB-Programmieradapter bietet. Es dient dazu, die µC-Familie kennenzulernen, hat aber wegen der speziellen IC und des TFTs kaum noch freie Anschlußmöglichkeiten an den Steckverbindern. Glücklicherweise sind aber ein paar Pins von Zählern frei, sodaß sich ohne viel Lötarbeit ein reziproker Frequenzzähler mit TFT-Anzeige aufbauen läßt.

Die Daten:

Programm installieren:

Zur Inbetriebnahme wird ein PC nebst USB-Kabel und das Programm ST-LINK benötigt, was sich bei ST kostenlos herunterladen läßt. Nach der Installation müssen folgende Schritte bei ST-LINK ausgeführt werden:

  1. mit 'File Open' das Programm 'fmeter_429.srec' anwählen
  2. unter 'Target' die Option 'Connect' ausführen; unter 'Device Information' werden Details zum µC angezeigt
  3. unter 'Target' die Option 'Programm & Verify' anwählen und starten
  4. nach wenigen Sekunden ist der Controller programmiert
  5. unter 'Target' die Option 'Disconnect' anwählen
  6. den 'Reset'-Taster drücken und auf dem TFT erscheint die Anzeige vom 'mino FMETER-429'

Verdrahtung:

Zunächst reicht es, ein Meßsignal <= 300 kHz an GND und an PE5 vom µC anzuschließen (Kabel orange). Die Frequenz sollte sofort angezeigt werden.
Das Eingangssignal muß ferner noch an PB4 (kurzes Kabel orange) gelegt werden: das ist der Eingang vom Vorteiler. Der Ausgang des Vorteilers PC8 wird abschließend an PE6 angeschlossen: graues Kabel auf dem Foto. Die Verdrahtung für die Frequenzmessung ist damit erledigt

Abgleich:

Da der auf dem Board bestückte 8 MHz Quarz eine recht ungenaue Frequenz erzeugt, muß anhand einer Referenzfrequenz ein Abgleich vorgenommen werden. Für diesen Abgleich wird ein Trimmpoti (10-Gang, typ. 100 kOhm) benötigt, das an den Endanschlüssen auf +3V (rotes Kabel oben) und GND (schwarzes Kabel) gelegt wird; der Schleifer kommt an PA5 (gelbes Kabel).
Zunächst wird am Trimmpoti gedreht, bis die Referenzfrequenz auf 6 Stellen genau eingestellt ist. Der Einstellbereich beträgt +/- 100 ppm und wird auf dem TFT ganz unten angezeigt. Mit guten Trimmpotis ohne mechanisches Spiel kann man auch auf 7 Sellen genau abgleichen. Besser ist es jedoch, den grob eingestellten Wert des Trimmpotis durch Festwiderstände nachzubilden, wobei die Gesamtimpedanz der Festwiderstände nur 5 - 10% des Potiwertes betragen sollte (5 - 10 kOhm). Der Einstellbereich des Potis wird dadurch auf 5 - 10 ppm reduziert, was einen feineren, langzeitstabilen Abgleich ermöglicht.

Verbesserung der Genauigkeit:

Bedenkt man, daß der auf dem Board vorhandene Quarz nicht sonderlich temperaturstabil ist und sich seine Frequenz zudem noch durch die Eigenerwärmung des Board im Betrieb deutlich ändert, empfiehlt es sich, an Stelle des Quarzes einen temperaturstabilen Oszillator (TCXO) einzubauen. Bei guten Ausführungen ist die Drift unter +/- 0,5 ppm im Bereich -20° - 70° C. Alternativ nimmt man einen VCTCXO, bei dem man die Ausgangsfrequenz direkt mit einer ext. Spannung (VC: voltage controlled) auf Sollwert ziehen kann. Falls man ein hochgenaues ext. Referenzsignal (10 MHz) zur Verfügung hat, braucht man gar keinen Abgleich mehr.
Beim VCTCXO und ext. Referenztakt ist eine Frequenzkorrektur nicht mehr erforderlich, und das ursprüngliche Trimmpoti für den Abgleich kann entfallen: durch Anlegen von +3 V am Eingang PA5 (10 kOhm pullup-Widerstand) kann man die Frequenzkorrektur abschalten. In der Anzeige erscheint der Wert '0.00 ppm'.

Programm:

Hier kann die aktuelle Version 'FMETER-429.srec' geladen werden.

nach oben

in Entwicklung: FMeter-TFT-407-TDC, 10 + 8 stellige Messungen/s

2017-03-26:
In Entwicklung befindet sich ein 2-kanaliger Frequenzzähler mit 10- bzw. 8-stelliger Anzeige bei einer Messung pro Sekunde. Ein µC STM32F407 zählt mit seinen internen Zählern Ereignisse und Referenzimpulse, wertet die Messungen aus und stellt sie auf einer 4,3" TFT-Anzeige dar. Die Bedienung erfolgt über den berührempfindlichen Bildschirm (touch).

Während für die Messung des 2. Kanals mit 8-stelligem Ergebnis die internen Zähler vollständig ausreichen, wird das 10-stellige Ergebnis von Kanal 1 mit Hilfe digitaler Zeitinterpolation erzielt. Ein TDC7200 (Time-to-Digital Converter) verbessert die Zeitauflösung von 100 ns (10 MHz Referenzsignal) auf unter 0,1 ns. Bei einer Sekunde Meßzeit ergibt das eine Auflösung von 1E-10.

Das Schaltbild zeigt die Beschaltung und Signalverarbeitung der Eingangskanäle und die Ansteuerung des TFT nebst touch-Folie. Die Einspeisung der externen 10 MHz-Referenzfrequenz wird noch angepaßt. Nicht gezeigt sind die Spannungsregler für Betriebsspannungen und LED-Hintergrundbeleuchtung, sowie die serielle Schnittsteller (RS232).

erreicht werden sollen folgende Eckdaten:

Ein paar Bilder zur Übersicht

1. Hauptanzeige mit 10-stell. Ergebnissen/s Kanal 1

2. Eingabe der Parameter zu Kanal 1, Skalierung noch nicht enthalten

3. Eingabe der Parameter zu Kanal 2, Skalierung noch nicht enthalten;
die int. Referenzfrequenz ist durch Kanal 1 fest vorgegeben

4. Auswahl der Ergebnisse für 1. Zeile, 2. Zeile und RS232-Ausgabe

nach oben

zurück zur Übersicht