Forum: Mikrocontroller und Digitale Elektronik DDS AD9851 Synchronisierung


von Gast123 (Gast)


Lesenswert?

Hallo,

ich stehe vor folgendem Problem: Zwei AD9851 (ähnlich AD9850, aber mit 
PLL) müssen synchronisiert werden. Dabei soll die Phasenverschiebung 
zwischen beiden Schaltkreisen einstellbar sein.

Die Schaltung ist entsprechend "AN-587: Synchronizing Multiple 
AD9850/AD9851 DDS-Based Synthesizers" aufgebaut, jedoch mit dem 
Unterschied dass ich die Generatoren seriell anspreche.

Beide laufen am gleichen Quarzoszillator mit 30MHz. Die Inbetriebnahme 
der Genratoren funktioniert soweit auch, ich kann die gewünschte 
Frequenz einstellen. Dabei laufen die Frequenzen (sofern gleich 
eingestellt) bei beiden DDS nicht auseinander. Es ist also davon 
auszugehen dass beide ICs wirklich synchron sind. Ok, soweit bisher kein 
Problem.

PROBLEM:
Nach jedem Reset des Controllers ist die konstante Phasenverschiebung 
zwischen beiden DDS-Chips nahezu zufällig. (Beide sind auf Phase=0 
programmiert).

Meine Fragen:
- hat jemand sowas schonmal gemacht und kann aus eigener Erfahrung 
berichten wo evtl. Stolpersteine zu finden sind?
- Ist die Synchronisation einfacher zu machen, wenn ich die ICs parallel 
ansprech?

Gruß
Christian

von Helmut L. (helmi1)


Lesenswert?

Also ich habe schon mal 2 AD9850 DDS Syncronisiert. Reset allein genuegt 
nicht damit wird nur der Phasenakku zurueckgesetzt. Du must nach dem 
uebertragen der Daten den PIN FQ_UD bedienen damit die Daten uebernommen 
werden . Damit solltes du eigentlich den Phasenversatz hinbekommen und 
die beiden syncron laufen. Bei mir war  das damit kein Problem.

Gruss Helmi

von Gast123 (Gast)


Lesenswert?

Hallo,

also wie ich das im Moment mach:
(wie im Datenblatt zur AD9851 gezeigt ist, sind D0..D2 fest verdrahtet 
auf GND bzw. VCC)

1. Impuls Reset
2. Impuls W_CLK (um festverdrahtetes Wort zu übernehmen --> serieller 
Modus..)
3. Impuls Frequency_Update

das wäre erstmal die Initialisierung

dann werden die 40Bit vom ersten DDS reingeschoben (jeweils mit W_CLK), 
danach die zweiten 40Bit von zweiten DDS. Danach dann Impuls 
Frequency_Update. Nach meinem Verständnis sollten die Chips nach dem 
Frequency_Update dann losrennen mit der eingestellten Frequenz und 
Phasenlage.

Ein paar Fragen an Dich:
- Hast du die Chips parallel oder seriell angesteuert?
- meine zweite Frage hat sich eigentlich schon geklärt - der AD9850 hat 
ja keine PLL. Wenn ich meine AD9851 ohne PLL betreib (dann eben nur mit 
1/6 der Frequenz), ändert sich aber leider auch nix am Verhalten.

Gruß
Christian

von Helmut L. (helmi1)


Lesenswert?

Ich hatte die beiden parallel angesteuert. Die PLL sollte eigentlich da 
auch nichts aus machen. Der Name sagt es schon das das mit Takt 
verriegelt ist. Das mit dem FQ_UD Pin wuerde ich beim AD9851 genauso 
sehen. Beim AD9850 hat es wunderbar geklappt. Das ganze bei 90 Grad 
Phasenversatzt gab immer einen schoenen runden Kreis auf dem Scope.

Frage hast du auch das D-Flipflop eingebaut in deiner Schaltung wie in 
Figure 3 beschrieben ?

http://www.analog.com/static/imported-files/application_notes/599711852800924681833359689AN-587.pdf

Gruss Helmi

von Gast123 (Gast)


Lesenswert?

Ja, das FF ist drin 74HC74.
Bei der PLL wäre das einzige Problem, dass aus einem externen Takt 6 
interne werden. Da könnte es zu einem Versatz kommen ganz einfach weil 
die beiden PLLs wahrscheinlich aufgrund von Toleranzen unterschiedlich 
schnell einrasten. Allerdings funktionierts bei mir ja auch nicht wenn 
ich die PLL nicht verwende.

Ich glaub ich werds erstmal auf parallel Umlöten.

Ich danke Dir für Deine Hilfe :-)

von Helmut L. (helmi1)


Lesenswert?

Zum FF nimm einen 74AC74. HC74 koennte zu langsam sein.

Zur PLL:

Im Datenblatt steht man soll zu erst ein Tunningword von 0 einstellen.
Das sperrt den Phaseaccu.  Dann 100uS abwarten bis die PLL 
eingeschwungen ist. Dann erst die eigentliche Frequenz und Phase 
ausgeben.

von Gast123 (Gast)


Lesenswert?

Was ich am seriellen Modus nicht ganz verstehe:

1. Reset (ok!)
2. W0 = xxxxx011 anlegen (um in seriellen Modus zu schalten; ist fest 
verdrahtet, ok!)
3. W_CLK um dieses Wort in Chip zu übernehmen (ok!)

4. FQ_UD (um den Wechsel in den seriellen Modus auszuführen.. aber 
startet da nicht schon der Phasen-Akku, den ich nur mittels Reset (--> 
wieder parallel!) zurücksetzen kann?)

5. warten bis PLL eingeschwungen (ok!)
6. das eigentliche Frequenzwort programmieren (mit W_CLK natürlich) 
(ok!)
7. FQ_UD (ok!)


wenn ich 4. weglass und bei 6. Frequenz=0, Phase=0 programmier, 
funktioniert es nicht, nach 7. die eigentliche Frequenz einzustellen

von Helmut L. (helmi1)


Lesenswert?

Dann wuerde er Starten ist schon richtig.

So wenn du dann jetzt eine Frequenz von 0 HZ einstellst dann laeuft der 
Akku doch leer nach einiger Zeit ?

Dann sollten in beiden Akkus doch 0 drinstehen ?

Dann warten bis PLL eingeschwungen ist.

Dann Frequenz einstellen.

von Gast123 (Gast)


Lesenswert?

Wie meinst Du das dass der Akku leer laufen würde? Ich würde mir eher 
vorstellen dass der Akku eben nicht weiterzählt, das Ausgangssignal also 
Konstant ist. Wie ich das aufgefasst hatte konnte man nur mit Reset den 
Phasenakkumulator wieder auf Null bringen.

von Helmut L. (helmi1)


Lesenswert?

Ok Stimmt war ein Denkfehler von mir.

Hast du das auch schon ausprobiert was auf Seite 5 steht. Das man nach 
dem Reset erst einmal das ganze Wort von 40 Bit uebertraegt und erst 
dann FQ_UD setzt ?

von Gast123 (Gast)


Lesenswert?

Danke, jetzt hab ichs verstanden.

Das beschriebene - also im parallelen Modus erstmal Frequenz und Phase 
auf Null programmieren - kann ich nicht tun. Bei mir ist D0/1/2 fest 
verdrahtet per Pullup/Pulldown. Es ist also nicht möglich, nur mithilfe 
des seriellen Modes die beiden Chips definiert zu synchronisieren (sie 
laufen zwar mit der selben Frequenz, aber eben zufällig verschoben!).

Ich werd also kaum herum kommen eine neue Platine zu basteln. 
Glücklicherweise sind die Chips selbst auf einer kleinen Adapterplatine. 
Das hält den Aufwand in überschaubaren Grenzen. Evtl. könnte man darüber 
nachdenken D0 steuerbar zu machen, so dass die Initialisierung im 
parallelen Modus erfolgt (dort wird ja nur mit D0 und D7 gewackelt..) 
und damit Portpins einzusparen.

Danke für Deine Gedult, nun hab ichs endlich verstanden :-) :-)

Die Änderungen werden etwas Zeit benötigen. Danach meld ich mich nochmal 
(evtl. hat ja auch zukünftig mal wieder jemand dieses Problem).

von Helmut L. (helmi1)


Lesenswert?

Kein Problem.

Gruss Helmi

von Gast123 (Gast)


Lesenswert?

So, die Schaltung ist umgelötet auf parallelen Modus --- und es 
funktioniert problemlos! :-)

Auch die intere PLL macht bei der Synchronisation keine Probleme.

Jetzt muss nur noch das Programm bisschen verhübscht werden und das 
Timing von schnarch-lahm auf mittelträge umgestellt werden ;-)

Gruß
Christian

von Helmut L. (helmi1)


Lesenswert?

Na da sieht man das man dem Datenblatt auch nicht ganz vertrauen darf.
An für sich ist das Timing des DDS Chip schnell genug. Du must nur die 
Zeit für das Einschwingen der PLL einhalten.

Gruss Helmi

von Gregor Quiring (Gast)


Lesenswert?

Hi. Habe gerade das gleiche Problem mit dem AD9851... Hast du es 
seriel/überhaupt Syncronisiert hinbekommen?

Danke im Voraus...

von Gast123 (Gast)


Lesenswert?

Hallo

seriell konnte ich zwar die gleiche Frequenz programmieren, aber die 
beiden Sinüse waren dabei zufällig zueinander verschoben, meist etwa im 
Bereich +-45Grad, manchmal auch mehr. Bei der seriellen Initialisierung 
kannst du die Schrittweite nicht sofort auf Null stellen. Somit beginnt 
der Phasenakku zu laufen sobald die PLL eingerastet ist. Da das 
unterschiedlich lang dauert ergibt sich eine mehr oder weniger zufällige 
Phasenverschiebung. Soweit zumindest meine Theorie. Warum das aber auch 
bei abgeschalteter PLL passiert hab ich nicht ganz verstanden.

Kurzum, ich hab einige Tage dabei verschwendet das seriell hinzukriegen. 
Paralleler Modus und es ging sofort (naja nachdem ich festgestellt hatte 
dass MSB und LSB bei mir vertauscht war g).

Falls Du das doch noch seriell irgendwie hinkriegen solltest wäre ich 
sehr an einer Rückmeldung interessiert :-)

Gruß und viel Erfolg,
Christian

von Gregor Quiring (Gast)


Lesenswert?

Habs gerade hinbekommen. Ohne umweg über Parallel mode geht es wohl 
nicht.

Ich hab statt den PullUp Widerstand eine Leitung des Kontrollers 
spendiert, so dass ich im Parallel mode nicht nur 00000011 sondern auch 
00000000 senden kann.

Die init Sequenz:
1. RESET

2. Sende 00000011
         00000000
         00000000
         00000000
         00000000 an alle DDS.

3. FQ_UD und 100us warten.

4. Ab hier geht es seriell weiter...

Herzlichen Dank an dieser Stelle. Hatte zwar schon die Vermuttung. Den 
Anstoss den Umbau zu wagen, verdanke ich deinen Ausführungen.

Gregor

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.