Vor knapp einem Jahr gab es die erste Schaltung eines reziproken Frequenzzählers mit dem RP2040 Pico-Board: Beitrag "Pico Frequenzzähler mit RP2040" Die Nachfrage nach höherer Auflösung hat zu einer neuen Schaltung geführt, bei der die Messung der Zeit ganz von einem TDC Baustein AS6501 übernommen wird. Ausgehend von einer lokalen oder externen 10 MHz Referenzfrequenz liefert der TDC Auflösungen im 10 ps Bereich und ist nicht mehr von dem lokalen 12 MHz des Pico-Boards abhängig. Um diese hohe Auflösung nutzen zu können, ist ein sorgfältiger Aufbau mit separaten Versorgungsspannungen und 4-lagigen Layout notwendig. Das Pico-Board ist weiterhin zu kleinem Preis erhältlich, wobei der AS6501 ein "Kostentreiber" ist. Wenn man es braucht, ist er trotzdem eine gute Wahl. Die Schaltung von links nach rechts: oben links die Spanungsversorgung der Eingangsstufen und des TDC mit einem Linearregler. Darunter der lokale TCXO, der bei Anliegen einer externen Referenzfrequenz zur Vermeidung von Interferenzen abgeschaltet wird. Ein Multiplexer 74AUP1G97 schaltet das Referenzsignal um. Das Eingangssignal (links unten) wird mit einem ungepufferten CMOS-Inverter vorverstärkt und anschließend per 74AUP1G14 in ein steilflankiges Rechtecksignal geformt. Ein weiterer 74AUP1G97 Multiplexer reicht das Signal entweder 1:1 oder per 4:1 Teiler (74AUP2G80) an den RP2040 weiter. Das DFF 74AUP1G74 synchronisiert die Zeitmessung des AS6501 mit dem Eingangssignal. Der RP2040 zählt die ext. Impulse, fordert einen neuen Zeitstempel mit der Leitung "INT-REQ" an und liest die Daten vom TDC ein. Bleiben noch das LCD-Modul, der RS232-Treiber, ein EEPROM und die Anschlüsse für manuelle Bedienung, wie es schon bei der ursprünglichen Schaltung ausgeführt war. Ein Bild der Leiterplatte zeigt die Oberseite. Die Platine kann huckepack auf's LCD gesteckt/gelötet werden oder separat mit den Befestigungslaschen montiert werden. Optinal sind auf der linken Seite Lötfahnen für vertikale oder horizontale Bestückung von SMA-Steckverbindern vorgesehen. Die Software ist noch im V0.1-Zustand soll aber kompatibel zu der vom Pico-Fmeter2a werden, wobei der 2. Kanal entfällt. Hohe Genauigkeit kann nur mit einer hochstabilen ext. Fref erreicht werden. Die beiden ersten Timelab-Kurven zeigen das Rauschen des Zählers, wenn 10 MHz Fref auch an Fin gelegt werden: einmal als absolute Frequenzdifferenzen und einmal die Allan deviation dazu. Die 3. Kurve zeigt die Phasenabhängigkeit zwischen Fin und Fref. An beiden Eingängen liegen OCXO-Signale mit einer Frequenzabweichung von knapp 0,22 Hz. Bei 10 ms Messzeit stört die Drift der OCXOs nicht aber man sieht alle ca. 4,5 s die Messwerte bei wiederholender Phasendiffernz zwischen 0 - 360 °. Ideal wäre eine gerade Linie. Vor Ostern werden die Eier bemahlt und gezeigt aber der Inhalt noch nicht ausgepackt ;-)
Daumen hoch, genau darauf habe ich gewartet. Werde ich mir sehr gerne nachbauen. Weiter so. Markus
Hallo Michael, schön das du immer noch Zähler zum Nachbauen veröffentlichst. Was mir an deiner ADEV Kurve etwas merkwürdig vorkommt sind die "Schwingungen", die sich erst nach 100s heraus mitteln. Meine Versuche mit dem AS6501 hatten das nicht. Wie sind deine Messzeiten ?. Sind die 1s gemittelt oder single shot ?. Probiere mal für Spass die 1,8V nach dem 10 Ohm Widerstand noch zusätzlich mit 100nf und 10nf (induktionsarm) zu blocken, das hat bei mir etwas gebracht.
@Markus Danke für die Blumen ;-) @Hans-Georg Danke auch Dir für Deinen Hinweis, gewisse Fehler nicht immer zu wiederholen. Da es mir zunächst um die reine Funktion geht, habe ich wie gewöhnlich alles freifliegend verkabelt. So war der eine OCXO mit ca. 0,2 Hz Frequenzabweichung noch aktiv (siehe Kurve mit 10 ms Intervall) und konnte in das Fref-Signal einstreuen. Daß das Ergebnis noch verbesserungsfähig war, hatte ich schon an anderer Stelle gesehen zunächst aber ignoriert. Aktuell habe ich eine Vergleichskurve aufgezeichnet und testweise die Abtastrate von 50 auf 100 kS/s erhöht. Da sieht man, daß sich eine deutliche Verbesserung ergeben hat. Auch beim Kurzzeitvergleich der Frequenzdifferenzen sieht man die Abweichungen im ca. 5 s Abstand sehr gut. Die Messungen laufen kontinuierlich - jede Periode des Signals wird erfasst. So muß das sein! Die von Dir vorgeschlagenen Kondensatoren werde ich abschließend auch noch ergänzen. Anstelle der 10 Ohm Widerstände hatte ich schon 47 µH Drosseln verwendet, um überlagerte Störungen der Versorgungsspannung besser abzublocken. Bei 133 MHz braucht der RP2040 für das Auslesen des AS6501 und der Verrechnung der Zeitstempel etwa 10 µs. Damit noch Luft für das restliche Programm bleibt, habe ich die Abtastrate auf 50 kS/s eingestellt. Für die 100 kS/s Kurve habe ich die Taktfrequenz des µC einfach verdoppelt. Auch diese Abtastrate kann man noch verdoppeln, wenn man allein für die Zeitstempelerfassung den 2. Kern verwendet. Das halte ich als Option offen. Soweit.
Es ist jetzt eine erste Programmversion verfügbar: http://mino-elektronik.de/progs/Pico-FM-AS6501/Pico-FM-AS65.zip Sie wurde mit der IAR IDE EWARM 9.2 unter WIN10 auf Laufwerk C: erstellt. Eine gesonderte Beschreibung gibt es derzeit noch nicht. Da die Basis dieser Version das Programm vom 'Pico-Fmeter2a' ist, ist es ratsam sich dessen Beschreibung http://mino-elektronik.de/download/Pico-FMeter-RP2040-DT.pdf und Funktionsweise http://mino-elektronik.de/download/Arbeitsweise_Pico_Fmeter2.pdf anzusehen. Die wesentlichen Änderungen sind der fehlende 2. Eingangskanal und damit auch ein Abgleich per 1pps-Signal. Dafür ist die Auflösung der Messungen deutlich erhöht und beim Offset-Abgleich die Auflösung auf 1x10^-12 angepaßt. Die Fotos zeigen den Musteraufbau, bei dem IC1 noch wegen eines Layout-Fehlers über Kopf und verdreht eingelötet werden mußte. Die neue Schaltung ist noch nicht in ein neues Layout umgesetzt, da sich kurzfristig noch Änderungen ergeben könnten. GPIO18 wird derzeit für die Laufzeitmessung der Regressionsberechnung verwendet und das 10 MHz Referenzsignal an GPIO22 könnte genutzt werden, um eine abgemagerte Programmversion ohne AS6501 zu verwenden. Die Referenzfrequenz wäre dann unabhängig von den lokalen 12 MHz des Pico-Boards. Begrenzt durch den AS6501 liegt die untere Eingangsfrequenz bei ca. 0,6 Hz. Ohne den 4:1 Vorteiler 74AUP2G80 liegt die maximale Eingangsfrequenz bei etwas über 40 MHz. Wem das reicht, kann den 2G80 und den zugehörigen Multiplexer 1G97 weglassen und die automatische Umschaltung im Programm sperren. Mit dem lokalen Vorteiler können bis zu 160 MHz gemessen werden - mit zusätzlichem ext. Vorteiler auch mehr. Diese Werte beziehen sich auf 133 MHz Taktfrequenz des RP2040, die mit einem ext. Widerstand verdoppelt werden können (siehe Beschreibung). Bei Bedarf kann man aber die Taktfrequenz (DEF_SYSCLOCK) schon vor Compilierung problemlos auf 300 MHz erhöhen. Bei den Einstellungen für PLL-SYS, VREG und QSPI-Wartezeiten ist das im Programm schon berücksichtigt.
Hallo! Der Aufbau und das layout ist nach den Fotos für mich wirklich wunderschön! Hast Du das mit der Hand und Lupe selbst bestückt? Deine Arbeit ist (für mich) professionell!
Danke! Es ist allerdings nicht mein erstes Layout und die Eier hat meine Frau gefärbt ;-) Die obige Messung mit 10 ms Intervall und 0,2 Hz Frequenzdifferenz habe ich mit geschirmten Signalleitungen wiederholt (Bild 1). Bild 2 zeigt die vergrößerten ersten 18 s der Kurve. Man sieht, daß die sinusförmige Fdiff entfällt und der "Phaseneffekt" bei 0° und 180° Phasenverschiebung wieder deutlich sichtbar wird. Es scheint eine Eigenart des AS6501 zu sein, den ich schon bei anderen Schaltungen mit STM32H7xx beobachtet hatte (Bild 3). Da hatte ich kein Gegenmittel gefunden. Im 3. Bild ist zusätzlich eine Kurve vorhanden, die mit STM32H730 + TDC7200 aufgenommen wurde. Beim TDC7200 gibt es die Störungen bei 0°, 360°, ... Grob gesehen ist der AS6501 dem TDC7200 etwa Faktor 5 "überlegen". Aus diesem Grund wollte ich trotz deutlich günstigeren Preises diese Schaltung nicht mehr mit einem TDC7200 aufbauen. Wenn die obigen Platinenfotos nun aufgeräumt aussehen, liegt das auch daran, daß ich nach den Erfahrungen mit anderen Synchronstufen die Schaltung auf ein Minumum reduzieren konnte. Gleiches trifft auch auf die Software zu. Da hatte ich bei Optimierungsversuchen beispielsweise einen neuen Zeitstempel angefordert, sobald der vorherige ausgelesen wurde. Die SPI-Übertragung konnte daher im Hintergrund ablaufen. Zeitgewinn ca. 1,5 µs / Zeitstempel. Gut gedacht, aber die Ergebnisse bekamen dadurch einen kleinen Offet von 2 x 10^-12. Das wollen wir ja nicht. Auch eine alternative Berchnung mit 128 Bit Integer-Werten brachte keine Verbesserung außer einer kleineren Ausführungszeit. Beim H7xx hatte die 128 Bit Berechnung eine deutliche Verbesserung ergeben, da die dortige Double-Berechnung einen Offset erzeugte. Vermutlich wird bei der Dfloat-Hardware anders gerechnet als mit den Software-Routinen. Ich vermute eine unterschiedliche Rundung. Und so ist auch hier das entscheidend, was man nicht sieht ;-) Es steht noch aus, den 2. Kern für die Regressionsberechnung anzuwerfen. Offen bleibt aber, ob durch die Verdoppelung der Abtastrate auch tatsächlich eine Verbesserung der Ergebnisse resultiert. Die derzeitige Software-Version ist daher zunächst eine "runde Sache".
Nach ein paar kleinen Änderungen habe ich die Platinendaten soweit fertig. Hier sind aktueller Schaltplan, Bestückungsplan, Bestückungsliste und Gerber-Dateien für die Platinenfertigung zu finden: http://mino-elektronik.de/download/pico-fmeter-AS65-2-BOARD.zip Von dieser Version hatte ich noch keine Boards bestellt.
Hans-Georg L. schrieb: > zusätzlich mit 100nf und 10nf (induktionsarm) zu blocken, das hat bei > mir etwas gebracht. Das habe ich nun auch noch gemacht. 100 nF hatte ich ja schon und habe jetzt noch 1 nF ergänzt. Es scheint sich eine kleine Verbesserung ergeben zu haben. Diverse Versuche mit hoher Taktrate des µC oder Regressionsrate haben keine Verbesserung der Auflösung gebracht. Das Rauschen auf der Platine oder im AS6501 läßt sich nicht wegrechnen. Die Regressionsberechnung im Hintergrund auf dem 2. Kern auszuführen war sehr ernüchternd. Das habe ich schnell wieder gelassen. Hast Du Vergleichswerte mit dem AS6501 oder bringen Dir "drei Hüte" eine deutliche Verbesserung?
Mi N. schrieb: > Nach ein paar kleinen Änderungen habe ich die Platinendaten soweit > fertig. > Hier sind aktueller Schaltplan, Bestückungsplan, Bestückungsliste und > Gerber-Dateien für die Platinenfertigung zu finden: > http://mino-elektronik.de/download/pico-fmeter-AS65-2-BOARD.zip > > Von dieser Version hatte ich noch keine Boards bestellt. Wollte mit den Gerberdaten Platinen bestellen. Von IC14 fehlen im Gerberviewer aber links die kompletten Pads. Hast du das mal verifiziert? Gruß Markus
Markus B. schrieb: > Von IC14 fehlen im Gerberviewer aber links die kompletten Pads. > Hast du das mal verifiziert? Die sind ganz bewußt weggelassen worden. An Pin 1 - 12 liegen die LVDS-Signale zur Datenausgabe und 4 x NC. Bei meinem ersten, 2-lagigen Aufbau mit anderem µC hätte ich nur mit einigen Vias diese 'Pads' umgehen können, was für einen induktionsarmen Aufbau nicht geschickt gewesen wäre. Bei 4-lagiger Leiterplatte hat sich die Situation entspannt. Da ich diese LVDS-Signale wohl nie brauchen werde, habe ich die Anschlüsse nicht mehr ergänzt und das Bauteil in dieser Minimalversion "AS6501-MIN" genannt. Ergänzend zu der zuerst gezeigten Schaltung ist R7 eingefügt worden und dient mit seinen 10 Ohm wie auch bei R26/R27 eher als Platzhalter für eine 47 µH Drossel. Zweck ist die bessere Filterung/Entkoppelung der Versorgungsspannungen. Eine Gegenprobe mit 10 Ohm habe ich nicht gemacht. Kleiner Tipp für JLCPCB-Besteller: auf der Startseite unten das Angebot 4-8 Lagen zu $2 anklicken. Klickt man sich oben 4-lagig an ist der Grundpreis $7 ;-) Von meiner oben gezeigten Leiterplatte, mit der auch alle Versuche durchgeführt wurden, habe ich noch zwei Stück. Wer mag kann sie von mir für 3 Euro zzgl. Briefversand bekommen. Um Fummeleien zu ersparen, würde ich IC1 schon auflöten.
Das ist mal eine nachvollziehbare Erklärung. Hätte mich auch gewundert warum der Rest sonst i. O. aussah. Danke.
Michael, I would love to get my hands one of your boards to test this version. Are you using Paypal? If so I can send you the money that way. Otherwise you need to send me your IBAN. Many thanks, Paul ------------------------------------------ For the others reading this, I have built two versions of Michael's counter and have designed a simple GPSDO-based external clock that gives me great results with the Fmeter-G431. Have a look here for my Blog: https://www.paulvdiyblogs.net/
Hi Paul, I read your very intereting blog times ago. Like to build it too. Do you share your pcb files? Regards Markus
Markus B. schrieb: > Hi Paul, > I read your very intereting blog times ago. Paul kümmert sich auch sehr intensiv darum, Problemen auf den Grund zu gehen. Dort finden sich auch Hinweise, wie man meine Projekte unter der IAR Demo-IDE EWARM V9.30 so verwenden kann, daß auch die .uf2-Datei richtig erzeugt wird. Selber verwende ich noch V9.20 und möchte derzeit nicht zwei Version parallel verändern.
Hallo Markus, Yes, eventually I will publish them on my Github when I have the time to put all the information together. The Gerbers are no secret and I can share them if needed although a few of them need some corrections or explanations. During this project, I designed several boards so which one(s) would you like? I only used one or two of the five I ordered, so I'm willing to share. MfG, Paul
Es gibt nun die Programmversion V1.1. Das Signal 'Fin' wurde an GPIO21 gelegt, um auch den Eingang PWM2B nutzen zu können. PWM_CH2_CTR wird jetzt als Ereigniszähler verwendet und mit PIO0_SM0 eine Capture-Funktion umgesetzt. Da der Ereigniszähler hinreichend schnell ausgelesen wird, reicht der 16 Bit breite Zähler aus. Zusätzlich ist die Option vorgesehen, mit "CORE1_AKTIV" die Erfassung und Vorverarbeitung für die Regressionsberechnung auf dem 2. Kern laufen zu lassen. Mit eingeschalteter höherer Priorität für DMA-Zugriffe auf die Busse sehen die Ergebnisse jetzt ähnlich gut aus wie zuvor. Für Vergleichsmessungen läßt sich die Regressionsberechnung am Ende eines Messintervalls nun auch abschalten, indem nur die Gesamtereignisse und Gesamtzeit für die Berechnung verwendet werden (Variable: F1_reg_modus). Die Berechnung entfällt auch bei niedrigen Frequenzen, wenn im Messintervall nur ein einzelner Eingangsimpuls erkannt wird. Dazu gibt es auch eine Adev-Kurve mit geradem Verlauf, wie es zu erwarten ist.
Die Änderungen zur neuen Programmversion V1.2 zusammengefasst: Die Auswertung der lin. Regression ist abschaltbar, sodaß die Frequenz allein aus Startzeitpunkt und Endzeitpunkt des TDC berechnet wird. Die zugehörige Variable 'F1_reg_modus' kann manuell oder per seriellem Befehl auf '0' oder '1' gesetzt werden. Der ser. Befehl sieht so aus: .1Z zum Einschalten und .0Z zum Abschalten der Berechnung. Die Adev-Kurve ohne Regressionsberechnung wurde ja schon gezeigt. Zunächst wurden alle Berechnungen mit 'double'-Werten durchgeführt, was bei längeren Messzeiten > 3 s die Ergebnisse nicht mehr verbessern konnte. Als neue Compiler-Option gibt es nun ein #define INT128, wodurch die Erfassung und Vorverarbeitung der Zeitstempel auf das letzte Bit genau erledigt werden. Erst für die abschließende Auswertung werden 'double' verwendet. Als Abtastrate für die Zeitstempel sind maximal 50 kHz vorgesehen, was bei 133 MHz Taktfrequenz den Controller zu 50% auslastet. Aktiviert man den 2. Prozessorkern können die Zeitstempel ohne Einschränkung durch das restliche Programm erfaßt werden. Bei 133 MHz sind es rund 100 kHz Abtastrate. Um den 2. Kern zu verwenden muß im Quellcode #define CORE1_AKTIV eingefügt werden. Verdoppelt man den Prozessortakt (3k3 Widerstand zwischen GPIO1 und GPIO2) auf 266 MHz erreicht man rund 200 kHz Abtastrate. Den Vergleich zwischen diesen beiden Betriebsarten zeigt die Kurve. Scheinbar bringt die höhere Abtastrate nicht den erhofften Erfolg. Dies als Erfahrungswert.
:
Bearbeitet durch User
Da ich die Platinen nun mittlerweile passiv bestückt auf dem Tisch liegen habe, und ich gerade am Bestellen der aktiven Teile bin, ist eine neue Frage aufgetaucht. Beim 10Mhz VCXO wird der V-Anschluß nicht aktiv, zumindest nicht dynamisch bedient. Spricht dann etwas gegen einen günstigeren TCXO? Wenn ich das richtig sehe wird der bei Betrieb mit ext. 10Mhz sogar gar nicht gebraucht.
Markus B. schrieb: > Beim 10Mhz VCXO wird der V-Anschluß nicht aktiv, > zumindest nicht dynamisch bedient. Spricht dann etwas gegen einen > günstigeren TCXO? Normalerweise verwende ich diesen TCXO: https://www.lcsc.com/product-detail/Temperature-Compensated-Crystal-Oscillators-TCXOs_KDS-Daishinku-1XTV10000MDA_C253701.html und denke, daß er schon günstig ist. In Planung bei mir ist noch eine Programmversion, die auch ohne den AS6501 auskommt und auf dem selben Board läuft. Bei Bedarf kann man sich dann den Luxus des TDCs dazukaufen. Ohne TDC könnte man das Trimmpoti auch mit VC verbinden, um auch ohne EEPROM auf möglichst genaue 10 MHz abzugleichen. Aber mache es so, wie Du es für richtig hälst. Weder die Schaltung noch das Programm sind in Stein gemeißelt.
Hat sich jemand Platinen bei JLCPCB fertigen lassen und noch 1-2 Stück abzugeben? Ich hätte einen Interessenten dafür, der dann nicht separat bestellen müßte.
Hallo Markus, vielen Dank für Dein Angebot. Es hat sich in der Zwischenzeit schon eine andere Lösung ergeben. Sollte ich eine erneute Anfrage erhalten, werde ich mich bei Dir melden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.