Oktober 2014: Ein kleiner Blick auf eine neue Entwicklung.
2011-12-06:
automatischer Abgleich mit 1 pps GPS-Signal bei ATmega168/328 und zusätzliche
ser. Befehle
Die ursprüngliche Version des reziproken Frequenzzählers aus dem Jahre 1999 mit dem AT90S2313 und dem jüngeren Controller ATtiny2313 mag für viele Anwendungen noch ausreichen. Neuere Controller bieten heute mehr internen Speicher und laufen mit 20 MHz doppelt so schnell wie der damalige ..S2313. Grund genug, Schaltung und Programme an heutige Möglichkeiten anzupassen.
Dabei sind zwei Versionen entstanden:
Die 1. Version ist kompatibel zum Programm mit dem ATtiny2313 und kann auch
mit einem ATtiny4313 bestückt werden. Diese Version ist sehr schnell und
verarbeitet selbst ohne Vorteiler Eingangssignale bis zu 1 MHz. Die serielle
Schnittstelle gibt den aktuellen Meßwerte parallel zur Anzeige aus. Ein
Demoprogramm findet sich hier.
Die 2. Version verwendet typisch einen ATmega88, der mehr Speicherplatz und ein paar zusätzliche IO-Leitungen bietet. Alternativ können auch der ATmega48 als kleinere Ausführung oder auch die ATmega168/328 verwendet werden, welche noch größere Programme aufnehmen können. Beide Versionen haben viele Gemeinsamkeiten.
Wem das reziproke Meßverfahren noch nicht vertraut ist, findet hier eine nähere Beschreibung.
nach obenZur Beschreibung der Gemeinsamkeiten dient das Schaltbild mit ATtiny4313:
Wird der Vorteiler nicht benötigt und bleibt unbestückt, kann auch
C9 entfallen, womit der Eingang AIN0 bis zur max. Eingangsfrequenz genutzt werden
kann.
Gleichzeitig kann auch die Beschaltung von AIN0 und AIN1 umgestaltet werden.
Mit R5 und R7 kann eine andere Schaltschwelle als Vcc/2 gewählt werden.
Ersetzt man C9 und R4 jeweils durch Widerstände 2M2 und D1 durch einen
Kondensator z. B. 100nF, kann man AC-Signale mit hoher Empfindlichkeit und hohem
Eingangswiderstand auswerten. Auf den Leiterplatten sind diese Bauteile in den
Abmessungen 0805 ausgeführt und lassen sich nach Bedarf anpassen.
Bei Frequenzmessungen wird an PB0/AIN0 auf die fallende Flanke des Eingangssignals getriggert, da diese steiler ausfällt als die steigende Flanke, insbesondere bei Sensoren mit OC-Ausgang. Bei der Ereignismessung kann zwischen fallender und steigender Flanke gewählt werden.
Um den Komparator zu nutzen müssen er selbst sowie R-HYS-X (10k), R-HYS-Y
(100Ohm) und R-IN (10k) bestückt werden. BR2 schaltet den Ausgang an Stelle
von BR1 auf Vorteiler und D1.
R-HYS-X und R-HYS-Y sorgen für eine Hysterese des Komparators von ca. 40mV.
An R-IN entsteht ein kleiner DC-Offset von 20-30mV. Das sind gute Werte um ein
AC-Signal kapazitiv mit ca. 10µF || 1nF einzukoppeln; es ergibt sich eine
Eingangsemfindlichkeit von etwa 20mVeff. Für ein zu GND symmetrisches DC-Eingangssignal,
sollte R-OFF (33k) bestückt werden, um eine symm. Schaltschwelle zu GND
zu erhalten.
Der Komparator arbeitet von DC bis ca. 100MHz hat aber eine Einschränkung beim Signalpegel. Lt. Datenblatt darf ein Eingang nur bis -0,1V bezüglich GND betrieben werden, so daß das Eingangssignal ggf. abgeschwächt werden muß. In der Praxis empfiehlt sich ein Schutzwiderstand von 1k || 100pF in Reihe zum Eingang; eine Begrenzung des Signals erfolgt erst ab ca. -0,5V.
Für einfache Anwendungen reicht die Bestückung mit einem 20MHz Quarz und den Kondensatoren C10 und C11. Zum 'Ziehen' der Frequenz könnte C11 als Trimmer ausgeführt werden. Dies ist normalerweise nicht notwendig, da ein Abgleich der Taktfrequenz auch per ser. Schnittstelle passieren kann; der Korrekturwert wird eingestellt und im internen EEPROM abgelegt.
Ein TCXO ist heutzutage ein kostengünstiger und genauer Taktgeber. Für
wenige Euro werden 0,5ppm über den gesamten Temperaturbereich geboten.
Für viele Anwendungen kann ein Abgleich entfallen. Der TCXO wird statt
des Quarzes bestückt, und sein Signal gelangt über C12 an X1 der Prozessors.
Der geringe Pegel von typ. 0,8Vss ist ausreichend. Im Grunde würde eine
LED in Reihe zu Vcc des TCXOs reichen, um ihm eine hinreichend stabile 3,3V
Versorgung zu liefern; hier wird ein LDO-Regler verwendet, der entsprechend
mit Abblockkondensatoren zu bestücken ist.
Eine spezielle Ausführung eines TCXO ist ein VCXO, an dessen Steuereingang
(Pin 1) die Frequenz leicht nachgetrimmt werden kann. Teilweise kann der Eingang
offen bleiben, hier wird er mit R9 und R11 auf 3V3/2 eingestellt, um die Mitte
des Abgleichbereiches einzustellen. Ein TCXO verwendet Pin 1 normalerweise als
/Freigabeeingang, weshalb dann R11 mit 0 Ohm zu bestücken ist und R9 ganz
entfällt.
Die Anzeige wird wie gezeigt angeschlossen. An D2 fällt eine typ. Vorspannung von 0,6V für die Kontrasteinstellung ab, was für Raumtemperatur sinnvoller Wert ist. Andernfalls kann die Kontrastspannung auch per Trimmpoti eingestellt werden; in der vorliegenden Schaltung ist dies nicht vorgesehen.
Ein MAX232 (o.ä.) in typischer Beschaltung invertiert die RX/TX-Signale des Prozessors und paßt die Pegel an. C5-C8 können bei entsprechenden Typen auch kleiner ausfallen; falls erforderlich können Treiber mit ESD-geschützten Eingängen eingesetzt werden.
Die minimale Messzeit wird ext. per Schalter auf 5ms (200 Mess./s), 50ms (20
Mess./s) oder 500ms (2 Mess./s) wie im Schaltbild gezeigt eingestellt. Einzusätzlicher
Schalter (über eine Doppeldiode entkoppelt) sorgt für eine 'Halt'-Funktion.
Bei stabilen Signalen würde sich der Anzeigewert nur selten ändern.
Daher blinkt die LED nach jeder Messung auf und zeigt an, daß ein Eingangssignal
vorliegt. Da die LED nachgetriggert wird, geht ihr Blinken bei höheren
Meßraten in Dauerleuchten über.
Diese liegen parallel zu den Datenleitungen des LCD und werden in den Ausgabepausen ausgewertet. Typischerweise wird hier ein Drehschalter zur Einstellung der Funktionen Frequenz-Periode-Drehzahl-Ereignis angeschlossen und ein Drucktaster zum Rücksetzen des Ereignisszählers. Die Tabelle zeigt die Funktion.
Funktionanwahl mit Drehschalter 2 x 6 oder 1 x 6 + Diodenmatrix; ZF4 z.Zt.
nur Reset der Ereignisse
gleiche Beschaltung für ATtiny 4313 und ATmega88
'0' = gegen GND geschaltet, '-' = offen
Anzeigefunktion |
ZF1
|
ZF2
|
ZF3
|
ZF4
|
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
|
Die nachfolgenden Bilder geben einen Eindruck vom Schaltungsaufbau und den unterschiedlichen Funktionen.
Bilder vom Testaufbau mit 4313 bei 0,5sek. Meßzeit:
Bei der Schaltung für den ATmega88/168/328 sind weitere Ein-/Ausgänge an PortC nach außen geführt, womit auch ADC + und TWI Funktionen nutzbar sind.
Ergänzend zur Schaltung mit dem ATtiny4313, findet man auf dem Schaltbild
die zusätzlichen Stecker ST4 und ST5. Über ST4 können ADC-Funktionen
und IIC-Bus Anschluß implementiert werden. ST5 liefert ein 1kHz Referenzssignal,
das aus dem Prozessortakt abgeleitet ist.
Ferner gibt es einen Widerstand R10 (10k), der bestückt werden muß,
wenn ein ..4040 Vorteiler verwendet wird und der Vorteiler anstatt Fin/256 nun
Fin/1024 liefert. Dies muß bei der Berechnung der Eingangsfrequenz berücksichtigt
werden.
Der gravierende Vorteil der Schaltung mit ATmega.. ist die Programmierbarkeit diverser Parameter per RS232. Die bisher implementierten Funktionen lassen sich nach Bedarf erweitern.
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-88 V1.0' |
<ESC> * | Ausgabe des Zeichens '*' als Echo zur Synchronisierung (Zeitmarke) |
<ESC> nnn U | benutzerdefinierte Meßzeit, nnn Bereich 0 – 65535 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 – 65535 in 1 ms Schritten |
<ESC> nnn T | Timeout für fehlendes Eingangssignal, Bereich 1 – 65535 in ms |
<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,1 Hz (0,05 ppm) der Taktfrequenz; bei
20 MHz ergibt sich ein Einstellbereich von +/- 160 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. |
<ESC> <CTRL-S> | Diese Sequenz schreibt den eingestellten Offset dauerhaft ins interne EEPROM, sodaß er beim nächsten Einschalten automatisch verwendet wird. |
<ESC>nS | min. Anzahl der Stellen auf 'n' setzen; Bereich von n: 5 - 9; typ. 5; nur bei ATmega168/328 |
<ESC>nnnA | automatischen Abgleich starten; nnn Bereich: 5 - 100 in Sekunden; nur bei ATmega168/328 |
Ein Beispiel für die Abfrage eines eingestellten Wertes (Meßzeit 35 ms): | |
<ESC> U | Antwort: U35 <CR><LF> |
Der Abgleich der Taktfrequenz (Xtal/TCXO) kann ab ATmega168 automatisch erfolgen. Dazu ist ein hinreichend genaues Referenzsignal mit 1 Hz erforderlich. Diverse GPS-Module liefern dieses Signal, welches mit '1 pps' bezeichnet wird. Beispielsweise: EM406-A
Zum Abgleich muß das 1 Hz-Referenzsignal anliegen und der Schalter 'Halt' geschlossen sein. Über die ser. Schnittstelle wird der Abgleich z.B. mit dem Befehl <ESC>10A gestartet. Dieser gibt ein Intervall von (hier) 10 Sekunden vor, indem die interne Taktfrequenz ermittelt wird. Während des Abgleichs werden die restlichen Sekunden angezeigt. Am Ende des Abgleichs wird die interne Taktfrequenz auf 9 Stellen angezeigt/ausgegeben und der interne Korrekturwert errechnet. Dieser wird für folgende Messungen verwendet und kann mit <ESC>O abgefragt werden. Damit er dauerhaft gespeichert wird, muß der Befehl <ESC>CTRL-S folgen. Anderfalls geht er beim Ausschalten verloren.
Interne Taktfrequenz und Referenzfrequenz müssen plausibel sein und auf ca. 100 ppm übereinstimmen. Damit werden auch Taktfrequenzen von Quarzen korrigiert, deren Lastkapazität nicht sonderlich genau angepaßt ist. Ein Abweichen der Frequenzen bricht den Abgleich ab. Auch ein Öffnen des Schalters 'Halt' stoppt den Abgleich.
Die oben beschriebenen Programme stelle ich kostenlos in Einzelstückzahlen
zur Verfügung, indem angelieferte µCs im DIL-Gehäuse programmiert
werden. Zumeist habe ich Prozessoren und teilweise auch spezielle Bauteile (74VHC4040)
auf Lager und kann diese zu Eigenkosten mit zur Verfügung stellen.
Leiterplatten für Musteraufbauten sind nicht mehr regulär verfügbar,
aber ab einer Mindestmenge von 10 dm² (vier Stück) beschaffbar. Bei
aktuellem Bedarf wird auf die Nachfolgeversion
mit STM32F407 verwiesen.
Die µC STM32F4xx bieten mit 168 MHz eine sehr hohe Rechenleistung. Zudem sind einige der internen Timer in der Lage mit dieser hohen Frequenz ohne einschränkende Vorteiler umzugehen. Gegenüber einem 20 MHz AVR läßt sich eine um grob Faktor 10 höhere Auflösung der Messung erreichen – bei gleicher Messzeit von 2 Mess./s. Genau genommen müßte man die max. Meßrate auf 1,68 Mess./s einstellen, was man nachträglich auch noch machen könnte. Ein 'runder' Faktor 10 im Vergleich zum AVR ist allerdings werbewirksamer :-)
Das STM32F4-Discovery-Board bietet in Verbindung mit einem IAR Kickstart-Embedded-Workbench eine kostengünstige Möglichkeit, Schaltung und Programm zu erproben. Für die Messwertausgabe wird hier ein 4,3" TFT-Display verwendet, was auch noch Platz für die Anzeige der internen Zählerstände bietet. Für eigene Versuche muß die Ausgabe auf die vorhandene Anzeige angepaßt werden. Oder man übergibt die Werte per RS232/USB an einen Rechner, um sie dort anzuzeigen. Das angehängte Programm 'f_mess.c' wertet die Frequenz an PE5 aus, wobei die Eingangsimpulse per Interrupt gezählt und die exakten Zeitpunkte über das Capture-Register1 vom Timer9 erfasst werden. Timer9 läuft dazu mit den maximalen 168MHz. Ein Demoprogramm zur Ansteuerung der TFT-Anzeige findet sich hier.
Ohne weiteren Vorteiler lassen sich direkt an PE5 Frequenzen von 0,05 Hz – 2,5 MHz messen. Verwendet man den internen Vorteiler /8 der Capture-Einheit, verschiebt sich der Meßbereich auf 0,4 Hz – 20 MHz. Da durch den Vorteiler mindestens 8 Eingangsimpulse für einen Capture-Impuls eintreffen müssen, eignet sich der Vorteiler erst ab >= 20 Hz Eingangsfrequenz. Für ein 8-stelliges Ergebnis ist eine hinreichend konstante HSE-Frequenz notwendig. Die Testschaltung verwendet einen 20 MHz TCXO, eine konstantere Taktquelle wäre besser. Für erste Versuche reicht aber auch der vorhandene 8 MHz Quarz, wobei allerdings R68 (auf der Platinenunterseite) entfernt werden sollte.
Timer9 hat eine 2. Capture-Einheit, die mit PE6 getriggert werden kann. Hier könnte man ein externes, hochgenaues GPS-Signal auswerten und einen Korrekturwert zum TCXO ermitteln, wie dies auch hier (reziproker Frequenzzähler, GPS-stabilisiert) gemacht wird.
Das angehängte Foto der TFT-Anzeige zeigt neben Frequenz und Periodendauer auch die Zählerstände Nin und Nref bei der Taktfrequenz von 168 MHz, sowie die Dauer der Messung.