www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik DDS AD9851 Synchronisierung

Autor: Gast123 (Gast)
Datum: 17.07.2008 12:41

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
Autor: Helmut Lenzen (helmi1)
Datum: 17.07.2008 12:51

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
Autor: Gast123 (Gast)
Datum: 17.07.2008 12:58

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
Autor: Helmut Lenzen (helmi1)
Datum: 17.07.2008 13:25

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/applic...

Gruss Helmi
Autor: Gast123 (Gast)
Datum: 17.07.2008 13:30

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 :-)
Autor: Helmut Lenzen (helmi1)
Datum: 17.07.2008 13:36

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.
Autor: Gast123 (Gast)
Datum: 17.07.2008 13:54

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
Autor: Helmut Lenzen (helmi1)
Datum: 17.07.2008 14:21

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.
Autor: Gast123 (Gast)
Datum: 17.07.2008 14:25

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.
Autor: Helmut Lenzen (helmi1)
Datum: 17.07.2008 14:45

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 ?
Autor: Gast123 (Gast)
Datum: 17.07.2008 16:06

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).
Autor: Helmut Lenzen (helmi1)
Datum: 17.07.2008 16:11

Kein Problem.

Gruss Helmi
Autor: Gast123 (Gast)
Datum: 19.07.2008 10:44

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
Autor: Helmut Lenzen (helmi1)
Datum: 19.07.2008 20:20

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
Autor: Gregor Quiring (Gast)
Datum: 31.07.2008 23:23

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

Danke im Voraus...
Autor: Gast123 (Gast)
Datum: 31.07.2008 23:40

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
Autor: Gregor Quiring (Gast)
Datum: 01.08.2008 00:45

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

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net