Forum: Mikrocontroller und Digitale Elektronik si5351 AN619


von Rudi D. (rulixa)


Lesenswert?

App note Punkt3: fvco = fxtal *( a+b/c)

Habe nirgendwo gefunden, ob b/c ein echter Bruch sein muss.
D.h. b/c muss <1 sein

Kann jemand helfen?

von Robert M. (r0bm)


Lesenswert?

Rudi D. schrieb:
> D.h. b/c muss <1 sein

Ja, da b<=(c-1).

_"The fractional ratio a + (b/c) has a valid range of 15 + 0/1,048,575 
and 90"_

von Rudi D. (rulixa)


Lesenswert?

Robert M. schrieb:

> Ja, da b<=(c-1).
>
> _"The fractional ratio a + (b/c) has a valid range of 15 + 0/1,048,575
> and 90"_

Diese Einschränkung ist aber in den Formeln für P1 und P2 nicht 
erkennbar, b/c könnte auch >1 sein.
Allerdings weiss ich ja nicht wie die Pll's im si5351 konstruiert sind.

Will gerne einen Wobbler bauen für AM- und FM-ZF. Bei AM kein Problem, 
da b =0 sein kann und der Wobbelhub, 100 Steps,  mit a alleine 
realisiert werden kann. Die Genauigkeit der Wobbelincrements wird dann 
<1 Step sein, was ausreicht. Einen Wobbler mit AD9850 habe ich ja schon 
realisiert, d.h. die SW in Assembler, siehe
https://www.radiomuseum.org/forum/gemeinschaftsprojekt_dds_heimsenderlein.html

Bei FM-ZF 10,7 MHz wird es schwierig da, bei fvco =850 MHz,  a von 77 
bis 81 geht. Wenn man  a auf 77 lässt geht b/c von 0,625 bis 4,3397. 
Könnte aber von SW-Seite gelöst werden, wenn b/c <1 sein muss.

Anderseits: der rel. Hub ist ja nur 4,6% für 500 kHz Hub. Bei fvco = 235 
Mhz
ginge sich b/c <1 aus, min. fvco ist aber 375 MHz, also außerhalb 
Datenblatt.

Also lösen kann ich es z.B. mit einem Mix aus beiden Absätzen oberhalb.
Ein Diskussionspartner wäre angenehm.
Zuerst war ich ja abgeschreckt von den mehr als 160 Parametern des 
si5351, aber einige kleine Inputs von rfzero, Hans Summers und 
Cesarsound sind ausgezeichnet. Wobbeln mit klassischem c ist viel zu 
langsam, egal ob mega328 oder BluePill, also versuche ich die 
Programmierung auf Registerniveau, was, so hoffe ich, schneller sein 
wird. >10 Hz Wobbelspeed wäre schon schön.

von W.S. (Gast)


Lesenswert?

Rudi D. schrieb:
> Will gerne einen Wobbler bauen für AM- und FM-ZF.

Dann nimm lieber einen DDS-IC. So ein PLL-System wie der SI5351 braucht 
zum einen immer eine Zeit zum Einschwingen während ein DDS quasi sofort 
auf der gewünschten Frequenz ist. Zum anderen ist das jeweilige 
Ausrechnen der diversen Einstellregister bei einem PLL-System 
umständlicher. Das will man nicht pro Wobbeldurchlauf einige hundertmal 
tun müssen. Obendrein ist so ein PLL-IC wie der SI5351 ein Taktgenerator 
und liefert erstmal nur ein Rechteck. Ein DDS hingegen kann einen (mehr 
oder weniger) guten Sinus liefern.

Also überdenke nochmal dein Konzept.

W.S.

von Dennis E. (Gast)


Lesenswert?

Dann zeig mal eine bezahlbare DDS Lösung bis in den GHz Bereich.

von Robert M. (r0bm)


Lesenswert?

Rudi D. schrieb:
> Diese Einschränkung ist aber in den Formeln für P1 und P2 nicht
> erkennbar, b/c könnte auch >1 sein.

Nein, b/c<1. P1,P2,P3 enthalten die kodierte Darstellung (18 bzw. 20 Bit 
breite Register) von a, b und c. D.h. du musst ertsmal a,b,c bestimmen 
und dann nochmal, laut Formeln in der App-Note, die kodierte Darstellung 
davon berechnen um die jeweiligen Register damit zu füllen.

Rudi D. schrieb:
> Will gerne einen Wobbler bauen für AM- und FM-ZF. Bei AM kein Problem,
> da b =0 sein kann und der Wobbelhub, 100 Steps,  mit a alleine
> realisiert werden kann.

Wenn du den OMD (Output Multisynth Divider) fest auf einen möglichst 
geraden, ganzzahligen Teilerfaktor von z.B. 70 legst und nur die PLL 
bzw. den FMD (Frequency Multisynth Divider) im Factional-Modus 
betreibst, lässt sich am Ausgang von etwa 8,6...12,8MHz wobbeln, mit 
einer Schrittweite < 1Hz (für Fref = 10...40MHz).
Mit einem 13MHz Tiefpass am Ausgang bekommst du dann bei Bedarf auch ein 
schönes, sinusförmige Ausgangssignal.

Wenn das Ausgangssignal besonders sauber bezüglich Nebenwellen sein 
soll, dann müsste man auch z.B. auf den Boundary Spurs der PLL achten 
und die Teilerfaktoren im FMD und OMD anpassen.


Rudi D. schrieb:
> Bei FM-ZF 10,7 MHz wird es schwierig da, bei fvco =850 MHz,  a von 77
> bis 81 geht. Wenn man  a auf 77 lässt geht b/c von 0,625 bis 4,3397.

a=77 und b/c=4,3397 geht nicht. Was möglich wäre ist aber a=81 und 
b/c=0,3397.

Rudi D. schrieb:
> Wobbeln mit klassischem c ist viel zu
> langsam, egal ob mega328 oder BluePill, also versuche ich die
> Programmierung auf Registerniveau, was, so hoffe ich, schneller sein
> wird.

Was hat die Programmiersprache mit Wobbeln zu tun? Dauert die Berechnung 
von a,b,c zu lange? Die Register des Chips müssen über I2C mit zu 
berechnenden Werten befüllt werden. Es ist aber nicht notwendig für jede 
neue Frequenz alle Register des Si5351 neu zu schreiben.

von Rudi D. (rulixa)


Lesenswert?

Robert M. schrieb:
> Rudi D. schrieb:

> Was hat die Programmiersprache mit Wobbeln zu tun? Dauert die Berechnung
> von a,b,c zu lange?

Das ist ja der Grund warum ich mir das antue auf Registerniveau zu 
arbeiten um nur die unbedingt nötigen Register zu ändern, um die 
Wobbelgeschwindigkeit zu beschleunigen. Eine neue Frequenz mit 
si5351.set_freq(xxx)  einzustellen braucht 4,4 ms -nur kleiner 
Unterschied mega328 oder BluePill- was bei 100 Wobbelschritten für einen 
Durchlauf eben 440 ms dauert, was IMHO unbrauchbar ist.

> Die Register des Chips müssen über I2C mit zu
> berechnenden Werten befüllt werden. Es ist aber nicht notwendig für jede
> neue Frequenz alle Register des Si5351 neu zu schreiben.
Das habe ich vor und will je Wobbelstep möglichst nur wenige Register 
neu einstellen. Danke für den interessanten Vorschlag. Das werde ich 
gerne mit einplanen.

Mit dem im Link beschriebenen DDS mit AD9850 kommt man auf minimal 14ms 
bei 256 Wobbelschritten je Durchlauf. In Assembler natürlich.
Mein Interesse ist es zu testen, wie weit man mit dem si5351 kommen 
kann, wenn man alles zur Beschleunigung ausreizt. Mir ist schon klar, 
dass der si5351 nicht für diese Anwendung entwickelt wurde.

Nochmal herzlichen Dank für den Input.

von Rudi D. (rulixa)


Lesenswert?

W.S. schrieb:
> Rudi D. schrieb:
>> Will gerne einen Wobbler bauen für AM- und FM-ZF.
>
> Dann nimm lieber einen DDS-IC. So ein PLL-System wie der SI5351 braucht
> zum einen immer eine Zeit zum Einschwingen während ein DDS quasi sofort
> auf der gewünschten Frequenz ist. Zum anderen ist das jeweilige
> Ausrechnen der diversen Einstellregister bei einem PLL-System
> umständlicher. Das will man nicht pro Wobbeldurchlauf einige hundertmal
> tun müssen. Obendrein ist so ein PLL-IC wie der SI5351 ein Taktgenerator
> und liefert erstmal nur ein Rechteck. Ein DDS hingegen kann einen (mehr
> oder weniger) guten Sinus liefern.
>
> Also überdenke nochmal dein Konzept.
>
> W.S.
Das DDS Konzept ist im Link beschrieben und es gab einen Bausatz.
Danke für den Hinweis.

von Rudi D. (rulixa)


Angehängte Dateien:

Lesenswert?

Anbei dzt. Zustand:
Grünes Gehäuse Mit Atmel mega328 und Speicherung der letzten Einstellung
Loser Aufbau mit Bluepill noch ohne ext. NVRAM
Beide Modelle zu langsam im Wobbelbetrieb.

von hf werker (Gast)


Lesenswert?

Rudi D. schrieb:
> Beide Modelle zu langsam im Wobbelbetrieb.

Prinzipiell hat der SI5351 erst mal einen Flaschenhals da er
mit I2C betrieben wird und man dort (nach Datenblatt) nur mit
400 KHz arbeiten kann. Aber auch wenn es 1MHz sein könnten
bleibt das ein Flaschenhals gegenüber einem SPI das man mit
mindestens der zehnfachen Geschwindigkeit betreiben könnte.

Ein ATMega328 wird für die ganzen Berechnungen tatsächlich
etwas zu langsam sein um "schnell" wobbeln zu können, ein
STM32 (Bluepill) würde da schon deutlich Vorteile bringen,
aber der Flaschenhals der Datenübertragung bleibt. Sollte
die Rechengeschwindigkeit eines BluePills nicht ausreichen
würde ein STM32F407 sicherlich einen Gewinn in der Rechen-
geschwindigkeit von etwa 3 bis 4 bringen. Sollten in deiner
Berechnung der Registerwerte noch Floating-Point-Operationen
vorkommen dann wäre das eine zusätzliche Bremse für optimale
Geschwindigeit. In meiner Implementierung der SI5351-
Ansteuerung kommt das Wort double oder float jedenfalls nicht
vor.

Die "letzte" Optimierungstufe wäre die Vorausberechnung einer
Sweep-Tabelle mit Registerinhalten, die muss nur einmal vor
Einstellen des Sweeps aufgebaut und berechnet werden sodass
keine zusätzliche Rechenzeit während des aktiven Sweeps ge-
braucht wird. Das wird für einen 328 oder Bluepill evtl.
den Speicher sprengen.

So gesehen wäre für deinen Zweck eine Lösung mit einem DDS
der Sorte AD9850 (o.ä) die bessere, solange die Ausgangs-
frequenz ausreicht. SPI ist hier sicher schneller als I2C.

von W.S. (Gast)


Lesenswert?

hf werker schrieb:
> Sollte
> die Rechengeschwindigkeit eines BluePills nicht ausreichen
> würde ein STM32F407 sicherlich einen Gewinn in der Rechen-
> geschwindigkeit von etwa 3 bis 4 bringen.

Bleib mal auf dem Teppich. Bei meinem Wobbler (der vom Funkamateur) 
steckt ein AD9951 und ein PIC16 drin. Der Flaschenhals ist hier die 
serielle Strippe, die die Verbindung zwischen Wobbler und PC macht. Da 
ist es nötig, sich Gedanken zum Übertragen der Ergebnisse zum PC zu 
machen. Dennoch reicht die Geschwindigkeit insgesamt, um so etwa 3..5 
komplette Durchläufe pro Sekunde zu machen - je nach Fenstergröße des 
Programms auf dem PC. Ich hatte deshalb für feinere Untersuchungen an 
Quarzen da noch einen einstellbar gebremsten Betriebsmodus (sozusagen 
Slow Motion) eingebaut, weil Meßobjekte von hoher Güte eben auch eine 
längere Einschwingzeit benötigen. Allerdings ist der PIC in Assembler 
programmiert. Um bei sowas einen PIC16 oder einen ATmega zu überfordern, 
muß man sich schon ziemlich dämlich anstellen.

W.S.

von hf werker (Gast)


Lesenswert?

W.S. schrieb:
> Bleib mal auf dem Teppich.

Ich sehe keinen Grund oder Anzeichen warum ich weg vom
Teppich sein sollte. Für solche dummen Sprüche solltest
du belegen was du behauptest.

von W.S. (Gast)


Lesenswert?

hf werker schrieb:
> Ich sehe keinen Grund oder Anzeichen warum ich weg vom
> Teppich sein sollte.

Wer da meint, daß ein Cortex M3 für einen Wobbler nicht ausreichen 
könnte, ist bereits weg vom Teppich - oder er hackt auf einem falschen 
Konzept herum, was letztlich auch nur ein Zeichen für das 
Weiterverfolgen eines suboptimalen Konzepts ist. Der seit Jahren 
funktionierende Gegenbeweis steht auf meinem Basteltisch und wobbelt. 
Und das mit nur einem kleinen PIC16 drin. Und eben dies hat man auch auf 
den Basteltischen recht vieler anderer Leute.

Was ich zu dem Ansinnen sage, einen PLL-Taktgenerator für einen Wobbler 
zu nehmen, steht bereits viel weiter oben. Es ist eine recht ungünstige 
Sache, um das mal vorsichtig zu sagen. Klar: wer nix anderes hat, der 
macht auch sowas oder wie der Volksmund sagt: in der Not frißt der 
Teufel Fliegen. Aber zur Verbesserung der Situation einen Cortex M4F 
vorzuschlagen, klingt nicht nach einem HF-Werker.

W.S.

von weiter weg (Gast)


Lesenswert?

1. Regel: W.S. hat immer Recht
2. Regel: Sollten jemals Zweifel aufkommen dass
andere Wahrheiten zutreffen könnten oder Lösungen ausserhalb
des eigenen Horizonts möglich sind trifft automatsich
Regel Nummer 1 in Kraft.

von ruilxa (Gast)


Angehängte Dateien:

Lesenswert?

W.S. schrieb:
> einen PLL-Taktgenerator für einen Wobbler
> zu nehmen, steht bereits viel weiter oben. Es ist eine recht ungünstige
> Sache, um das mal vorsichtig zu sagen. Klar: wer nix anderes hat, der
> macht auch sowas oder wie der Volksmund sagt:

Habe natürlich was anderes.

Ich hab doch schon geschrieben, dass ich den si5351 nicht für die 
optimale Lösung halte und einen Link eingefügt für ein Projekt mit 
AD9850, der aber im UKW Bereich nicht wobbeln kann. 10,7 natürlich kein 
Problem. Wobbelgeschw. einstellbar von 2 Hz- für Quarzfilter auf Wunsch 
eines Bausatzkäufers -  bis 70 Hz.
Hier ein Bild eines Gerätes. Meines ist nicht so schön.Die SW habe ich 
nicht veröffentlicht tiny 4313 + AD9850 ist aber egal, da 7 Jahre alt.

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
Noch kein Account? Hier anmelden.