Frequenz - Periode - Drehzahl -Ereignis

Neue Versionen für ATtiny4313 und ATmega88++ mit TCXO 0,5ppm
- schnell und genau -

 

Gemeinsame Eckdaten der Schaltungen mit ATtiny2313/4313 und ATmega88/168/328
Erweiterungen der Schaltung mit ATmega88++
Gemeinsamkeiten der Schaltungen
 
1. Signaleingang
2. Komparator MAX961
3. Prozessortakt Quarz - TCXO
4. Display 2 x 16
5. RS232 Datenausgang
6. Funktionseingänge min. Messzeit
7. Eingänge für Zusatzfunktionen
8. typischer Aufbau (Bilder) ATtiny4313
9. Schaltung für ATmega88/168/328
10. Befehle über ser. Schnittstelle (ATmega88)
10a. automatischer Abgleich bei ATmega168/328
11. Variationen Schaltung und Programme mit ATmega88
12. Bauteile zum Nachbau und ein Querverweis auf eine LED-Ausführung
 
13. Demoprogramm für STM32F4 und WQVGA-TFT
14. Nachfolgeversion mit STM32F407/429
zurück zur Übersicht

 

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

Stand: 2011-09-22

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 oben

Gemeinsame Eckdaten beider Schaltungen mit ATtiny2313/4313 und ATmega88/168/328:

Erweiterungen der Schaltung mit ATmega88++:

nach oben

Gemeinsamkeiten der Schaltungen:

Zur Beschreibung der Gemeinsamkeiten dient das Schaltbild mit ATtiny4313:

nach oben

1. Signaleingang:

Ohne Beschaltung mit MAX961 gelangt das Eingangssignal über BR1 und D1 an PB0/AIN0 des Controllers. Dieser Eingang erhält mit R4 einen Pullup-Widerstand. PB0/AIN0 ist ein Eingang des interenen Komparators, der andere Eingang ist PB1/AIN1, der mit R5 und R7 auf Vcc/2 eingestellt wird. Der Komparator hat einen Offset von typ. <10mV, einen geringen Leckstrom und schaltet bei Signalen im zig-mV Bereich (Datenblatt). Bei dieser Schaltung werden TTL/HCMOS-Eingangssignale erwartet und die Empfindlichkeit des Komparators nicht genutzt.
C9 in Verbindung mit D1 sorgt dafür, das die steigende Flanke des Eingangssignals abgeflacht wird und ein 50:50 Rechtecksignal bis ca. 500kHz vom Komparator erkannt wird. In Verbindung mit einem Vorteiler-IC wird damit verhindert, daß zu Frequenzen den Controller per Interrupt blockieren können. Sofern ein Vorteiler bestückt ist, wird das frequenzgeteilte Signal an ICP/PD6 und T0/PD4 ab einer Frequenz im 100kHz-Bereich ausgewertet und der Komparator abgeschaltet. Je nach Bedarf kann ein 74HC393 (100MHz) oder 74VHC4040 (>200MHz) als Vorteiler bestückt werden.

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.

nach oben

2. Komparator MAX961:

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.

nach oben

3. Prozessortakt:

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.

nach oben

4. Display 2 x 16:

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.

nach oben

5. RS232-Datenausgang (V.24):

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.

nach oben

6. Funktionseingänge für die min. Messzeit; LED

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.

nach oben

7. Eingänge für Zusatzfunktionen ZF1 - ZF4:

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

nach oben

8. Typischer Aufbau mit ATtiny4313:

Die nachfolgenden Bilder geben einen Eindruck vom Schaltungsaufbau und den unterschiedlichen Funktionen.

Bilder vom Testaufbau mit 4313 bei 0,5sek. Meßzeit:

nach oben

 

9. Schaltung für ATmega88/168/328

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.

nach oben

10. Befehle über die ser. Schnittstelle (nur bei ATmega88/168/328):

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>

nach oben

10a. automatischer Abgleich mit 1pps GPS-Signal (nur bei ATmega168/328):

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.

nach oben

11. Variationen Schaltung und Programme mit ATmega88:

 

nach oben

12. Musterplatinen und Bauteile zum Nachbau

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.

nach oben

13. Demoprogramm für STM32F4 + WQVGA-TFT

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.

nach oben

zurück zur Übersicht