Elektronikprojekte
Frequenzzähler / DDS Signalgenerator
- Frequenzzähler 0,25Hz bis ca. 80MHz
- optional bis 1GHz (bei HF-gerechtem Aufbau)
- DDS-Signalgenerator 0,1Hz bis maximal 12,5MHz mit AD9833
- Signalformen Sinus, Dreieck, Rechteck und TTL-Ausgang
- VCO-/Wobbel/Burst Funktion
- Materialkosten ca. 82 EUR
Einführung/Voraussetzungen
Das hier beschriebene Gerät beinhaltet die Funktion eines Frequenzzählers mit einem Messbereich von 0,25Hz bis ca.
80MHz (optional bei HF-gerechtem Aufbau bis 1GHz) und eines DDS-Signalgenerators (Sinus, Dreieck, Rechteck) von
ca. 0,1Hz bis maximal 12,5MHz.
Für den Frequenzzähler bzw. die Steuerung des DDS-Signalgenerators wird ein Mikrocontroller PIC16F876A verwendet,
der mit der weiter unten aufgeführten HEX-Datei programmiert werden muss.
Ist kein geeignetes Programmiergerät vorhanden, kann ein einfaches Gerät (JDM-Programmer) selbst gebaut werden.
Voraussetzung hierfür ist ein PC mit "echter" 9-poliger RS232 Schnittstelle (USB auf RS232 Adapter funktionieren in der
Regel nicht).
Für den DDS-Signalgenerator wird der Chip AD9833 verwendet, der leider nur als SMD Version im MSOP10 Gehäuse mit
einem Pin Abstand von nur 0,5mm verfügbar ist. Ich habe den Chip auf eine Adapterplatine gelötet um auf das 2,54mm
Raster der von mir verwendeten Streifenrasterplatinen zu kommen. Für das Löten des Chips sind eine ruhige Hand, gute
Augen (ggf. eine gute Lupe mit 3-5 facher Vergrößerung), viel Licht und ein Lötkolben mit feiner Spitze erforderlich.
Wer das Löten des Chips vermeiden möchte, kann sich ggf. eine Generatorplatine über Ebay aus China bestellen, auf der
neben dem AD9833 auch der benötigte 25MHz Oszillator sitzt. Ob die Platinen was taugen kann ich nicht beurteilen.
Beschreibung der Schaltung
Die Elektronik besteht im Wesentlichen aus dem Frequenzzähler mit 4-Kanal Eingangswahl (TTL, Analog, DDS und
Vorteiler), Eingangssignalkonditionierung, Eingabetaster und Display, dem Stromversorgungsteil und dem DDS
Signalgenerator.
Frequenzzähler
Für den Frequenzzähler und die Steuerung des DDS Signalgenerators wird ein Mikrocontroller PIC16F876A (IC2) mit
16MHz Quarzoszillator (Q1,C11,C12) verwendet. Das Programm wird mittels der Datei “ FZ_DDS_P16F876A_V3.hex“ in
den Mikrocontroller geladen. Die Datei befindet sich in dem Download Ordner am Ende der Seite.
Wer noch Änderungen am Programm vornehmen möchte, findet in dem Ordner auch die Assembler-Datei “
FZ_DDS_P16F876A_V3.asm“.
Über die 5-polige Stiftleiste SV2 kann der PIC im eingebauten Zustand in der Schaltung programmiert werden (ICSP = In
Circuit Serial Programming), ich empfehle jedoch die Programmierung im Programmiergerät ( z.B. JDM Programmer ).
Für ICSP muss die Schaltung mit Spannung versorgt sein. Wenn auf die ICSP Option verzichtet wird, kann SV2 entfallen.
Das zu messende Eingangssignal liegt an den Pins 6 (RA4) und 13 (RC2) des Mikrocontrollers. Für die Frequenz- und
Periodenmessung wird die Frequenz im ersten Schritt grob über 2msek an Pin RA4 gemessen. Intern kann der PIC nur
Frequenzen bis ca. 2,4MHz zählen, die Frequenz an RA4 kann jedoch vor dem eigentlichen Zählvorgang intern vorgeteilt
werden, sodass wesentlich höhere Frequenzen gemessen werden können. Die Grobmessung erfolgt mit einem
Vorteilerfaktor von 32. Nach Auswertung der Grobmessung erfolgt die eigentliche Frequenzmessung über 1sek mit
folgenden Vorteilerfaktoren:
Grobmessung:
>64MHz 32-64MHz 16-32MHz 8-16MHz 4-8MHz 2-4MHz <2MHz
Vorteilerfaktor:
64 32
16
8
4
2
1
Die Frequenzmessung hat eine Genauigkeit von ca. 2ppm für Frequenzen >1MHz, bei 100kHz beträgt die Genauigkeit ca.
20 ppm.
Ergibt die Grobmessung eine Frequenz kleiner ca.100-120kHz wird eine kombinierte Frequenz-/Periodenmessung
durchgeführt. Hierfür wird der interne Timer1 mit der positiven Flanke des Eingangssignals an Pin RC2 synchronisiert und
über ca. 1s die positiven Flanken gezählt. Nach Ablauf der Sekunde wird bei der nächsten positiven Flanke an Pin RC2
der Timer1 ausgelesen.
Somit erhält man für eine genaue Anzahl n positiver Flanken die Zeit t mit einer Genauigkeit von ca. 2ppm und damit auch
die Frequenz (f=n/t) bzw. die Periode (p=t/n) nach der Division mit einer Genauigkeit von ca.2ppm.
Wird nach ca. 4,2 Sekunden (entspricht 0,24Hz) keine positive Flanke detektiert, wird die Messung abgebrochen.
Je nach gewähltem Messmodus wird die Frequenz in Periode (p=1/f) bzw. Periode in Frequenz (f=1/p) umgerechnet.
Die Anzeige auf dem Display erfolgt jeweils mit 7 Stellen, das ist etwas mehr als die Grundgenauigkeit der Messung. Der
interne Vorteilerfaktor sowie der gewählte Messeingang werden in der unteren linken Ecke des Displays angezeigt, bei
Wahl des DDS Eingangs zusätzlich die Signalform und der Signalpegel.
In der Betriebsart “Zähler“ werden die positiven Flanken an RC2 aufsummiert, wenn Pin25 (RB4) Low ist. Geht RB4 auf
High, wird die Zählung gestoppt. Beim nächsten Low von RB4 wird der Zähler auf 0 gesetzt und die Zählung gestartet.
RB4 wird normalerweise durch einen internen Pull-up Widerstand auf High gehalten und kann durch einen Schließer
Kontakt oder einen npn Transistor auf Low gezogen werden. Die maximale Zählfrequenz an RC2 beträgt ca. 70kHz.
Über den 8-Kanal Datenmultiplexer 74HC151 (IC8) kann einer von 4 vorgesehenen Messeingängen zum PIC
durchgeschaltet werden. Die Adressierung erfolgt über ein 3-Bit Wort an den Pins 11 bis 9. Für die 4 Eingänge werden nur
die Bits 0 und 1 (Pins 11+10) benötigt, daher ist Bit 2 fest als 0 verdrahtet, d.h. Pin 9 liegt auf Masse.
Für analoge und TTL Eingangssignale sind Eingangsstufen mit dem 2-fach High Speed Komparator TLV3502 vorgesehen.
Analoge Eingangssignale gelangen über Buchse SV6, C17, R16,R17 und R18, bzw. bei Frequenzen >ca. 160kHz über
C18/R17/R18 an den invertierenden Eingang (Pin2) von IC5A. Die Widerstände R16/R17/R18 dienen dabei in Verbindung
mit D3/D4 dem Schutz des Eingangs vor Überspannungen. Bei Eingangssignalen bis +/-2,5V beträgt der
Eingangswiderstand ca. 1MΩ (R19). Bei größeren Eingangssignalen werden diese durch die Dioden D3/D4 begrenzt und
der Strom gegen Masse bzw. die positive Versorgungsspannung abgeleitet.
Über R20 wird der Arbeitspunkt von V+/2 = 2,5V an Pin 2 eingestellt (V+ = positive Versorgungsspannung, V+ = 5V).
Der nichtinvertierende Eingang (Pin1) wird ebenfalls auf V+/2 über den Spannungsteiler R23/R24 eingestellt. Der
TLV3502 hat eine interne Hysterese von 6mV. Das ist in der Regel zu wenig, da schon geringes Rauschen des
Eingangssignals die Messung verfälschen würde. Deshalb wird die Hysterese durch den Rückkoppelwiderstand R25 auf
ca. 48mV erhöht. Die Hysterese berechnet sich zu:
H = To - Tu + 0,006V
Mit:
H = Hysterese, To = obere Triggerspannung, Tu = untere Triggerspannung
To = V+ / ( 1 + 1 / ( Ru/Rr + Ru/Ro ))
Tu = V+ / ( 1 + Ro/Rr + Ro/Ru )
Mit:
Ro = oberer Widerstand des Spannungsteilers
Ru = unterer Widerstand des Spannungsteilers
Rr = Rückkoppelwiderstand
Der 10pf Kondensator C19 ist optional und reduziert die Schwingneigung bei offenem Messeingang und geringer
Hysterese. Ich benötige ihn nicht.
Das TTL Signal gelangt über Buchse SV7, R28 und R29 an den invertierenden Eingang (Pin4) von IC5B . R28 und R29 in
Verbindung mit D5/D6 schützen IC5B vor Überspannungen.
Auch hier liegt der nichtinvertierende Eingang (Pin3) an einem Spannungsteiler (R30/R31) mit Rückkoppelwiderstand
(R32). Die obere Triggerschwelle beträgt 1,91V, die untere Triggerschwelle 1,73V, sodass auch noch Signalpegel von ca.
3,3V gemessen werden können.
Für Eingangssignale >ca. 30MHz ist ein Vorteilereingang 64:1 mit dem IC U813BS (IC4) vorgesehen. Das
Eingangssignal gelangt über Buchse SV5,C13, R14 und C14 an den Eingang (Pin6) von IC4. R14 in Verbindung mit
D1/D2 dient dem Schutz des Eingangs vor Überspannungen. Das
Ausgangssignal mit 1/64stel der Eingangsfrequenz liegt an Pin 3
und wird über L1 an die Basis von T4 geführt und auf TTL Pegel
verstärkt. Bei Eingangssignalen < ca. 20MHz schwingt der
Ausgang undefiniert. Erst bei Frequenzen oberhalb von ca.
20MHz ist eine Messung möglich, wobei sich die
Eingangsempfindlichkeit mit steigender Frequenz verbessert. Für
die Messung wird RB0 (IC2) auf Low gelegt. Wenn der Vorteiler
Eingang nicht verwendet wird, geht RB0 (IC2) auf High, dadurch
wird das Signal weitestgehend abgeschaltet.
Die nebenstehende Grafik zeigt die Eingangsempfindlichkeit der
Eingänge in Abhängigkeit von der Frequenz.
Die Bedienung des Frequenzzählers und DDS Signalgenerators erfolgt über die Bedientaster Ta1-Ta6. Die Taster liegen
an den Pins 22 (RB1) bis 27 (RB6). RB1-RB6 sind als Eingänge geschaltet und werden durch interne Pull-Up
Widerstände auf High gehalten. Wird ein Taster gedrückt, wird der entsprechende Eingang auf Masse gezogen.
Für den VCO Betrieb des DDS Generators (VCO = Voltage Controlled Oscillator ) wird an Pin2 (RA0) des PIC die
Spannung am Schleifer des Potentiometers P1 mit 10 Bit Auflösung gemessen und gemäß Menüeinstellungen als
Frequenz am DDS Generator ausgegeben. Zur Glättung wird der Mittelwert aus 16 Einzelmessungen gebildet, bevor die
Messung intern weiterverarbeitet wird.
Über die Steckverbindung SV1 wird die DDS Signalgeneratorplatine angeschlossen. Neben der +/-5V
Versorgungsspannung beinhaltet die Verbindung die Chip Select Signale des DDS Chips (IC7), des DAC (Digital Analog
Converter, IC10) und des Schieberegisters (IC12), sowie deren serielle Ansteuerung (CLK/DAT). Zusätzlich werden für
IC13 (TTL Ausgang) eigene Versorgungsspannungen, ein Ein/Aus Signal und das DDS Signal mit TTL Pegel zur
Frequenzmessung übertragen (siehe auch Abschnitt "DDS Signalgenerator").
Als Display können in der Regel die meisten LCD Displays mit 2x16 Zeichen und 8 Bit Ansteuerung verwendet werden,
ggf. muss das Platinenlayout angepasst werden. In dem ausgeführten Gerät wurde das LCD Displays LCD 162C LED von
Reichelt verwendet.
Die LCD Displays benötigen eine Spannung Vo zur Kontrasteinstellung von ca. 0,3 Volt, die über R11 eingestellt wird (für
die Inbetriebnahme auf 0,0 Volt einstellen und dann verändern bis der Kontrast optimal ist). Für die LED Beleuchtung wird
ein Vorwiderstand R12 benötigt, der je nach LCD Typ und gewünschter Helligkeit zwischen ca. 33 Ohm und 1 kOhm
betragen kann.
Die an das Display zu sendenden 8 Bit Daten werden seriell vom PIC über Pin 17 und 18 (17 = clock, 18 = data) an das
Schieberegister 74HC164 (IC3) übertragen und dort parallel ausgegeben. Mit der negativen Flanke an Pin 15 des PIC
(Display: Pin Enable) werden die parallelen Daten DB0-DB7 in das Display geladen. Über Pin 16 des PIC (Display: Pin
RS) wird festgelegt ob die Daten einer Adresse oder einem Zeichen entsprechen.
Stromversorgung
Die Schaltung benötigt eine symmetrische Versorgungsspannung von +/-5V. In der gezeigten Schaltung wird aus der
Eingangsspannung von 12-18V eine Spannung von 10V erzeugt und diese dann in 2x5V aufgeteilt, wobei die
Mittenspannung auf Masse gelegt wird.
IC1B arbeitet in Verbindung mit T1 als Spannungsregler mit ZD2 als Referenzspannungsquelle. Die benötigten 10V
werden mittels R3 eingestellt. ZD1 begrenzt die maximale Ausgangsspannung auf ca.11,3V und dient als "Notbremse" für
den Fall einer zu hohen Eingangsspannung. Wer mit höheren Eingangsspannungen als 18V arbeiten möchte sollte R1
vergrößern.
IC1A regelt in Verbindung mit T2 und T3 die gesplitteten 10V, sodass bezogen auf Masse die benötigten +/-5V entstehen.
T1-T3 sollten isoliert auf einem kleinen Kühlblech montiert werden.
Der Stromverbrauch der Schaltung liegt bei ca. 140 mA (ohne Last).
Natürlich können auch andere Methoden zur Stromversorgung verwendet werden, soweit diese eine stabile +/-5V
Versorgung mit geringer Restwelligkeit sicherstellen.
Frequenzzähler / DDS Signalgenerator