Hallo, ich möchte mir einen Funktionsgenerator basierend auf DDS bauen und dazu meinen Schaltungsteil für eine D/A-Wandlung (diese soll für 8 Bit ausgelegt werden und nicht nur für 4 Bit wie im Schalplan) hierfür von fachkundigen Leuten ,,absegnen" lassen. Gemäß dem angehängten Schaltplan wird ein R-2R-Netzwerk benutzt, wobei die Umschalter zum Wechsel zwischen realer und virtueller Masse dienen. Diese Umschalter will ich über drei Analogmultiplexer vom Typ 4053 realisieren, die mit einem PIC24F08KL301 angesteuert werden sollen. Jeder 4053 verfügt dabei über drei interne Umschalter, wodurch noch einer übrig bliebe, um zusätzlich zu der im Schaltbild dargestellten positiven Referenzspannung noch eine negative Referenzspannung zuschalten zu können, damit eine gleichanteilsfreie Sinusspannung erzeugt werden kann. Ich will jetzt eigentlich nur wissen, ob es irgendwelche Bedenken bezüglich dieser Schaltung gibt oder ob das alles so in Ordnung ist. Ich bin mir auch bewusst, dass es z.B. im TiSche deutlich einfachere Schaltungen gibt, aber ich möchte genau die oben angegebene benutzen. Gibt es eigentlich auch Analogmultiplexer mit mehr als 3 Umschaltern? Dann bräuchte ich nämlich nicht so viele ICs nur für das Umschalten.
:
Verschoben durch Moderator
Benutzt nen fertigen DAC (DACs bauen ist nicht so simpel wie du vielleicht denkst) und beschäftige dich eher mit den Filtern und Endstufen. Auf diese Weise wirst du ein zufriedenstellenderes Ergebnis erhalten. Genug Arbeit bleibt trotzdem über, keine Sorge ;)
Warum willst du denn nicht das Umschalten dem Controller überlassen? http://www.mikrocontroller.net/articles/DA-Wandler Du kannst doch an z0..7 direkt die Pins des µCs anschließen. Anschließend einen Operationsverstärker mit Offseteinstellung und variabler Verstärkung und du bist fertig. Gruß
:
Bearbeitet durch User
wird schon irgendwie gehen, der Schaltplan ist prinzipiell ok. Besonders genau wirds halt nicht werden (die 4053 sind ja z.B. keine perfekten Schalter, deren On-Widerstände verziehen dir das R2R-Netzwerk). Und beim Umschalten von Eingängen können hässliche Glitches auftreten (siehe Parameter V_ct in http://www.nxp.com/documents/data_sheet/74HC_HCT4053.pdf) Mit irgendeinem integrierten DAC wird es nicht mithalten können, aber wenn es um den Spaß des Selberbauens geht, dann passt es schon so.
Erstmal schließe ich mich dem Marian an. Zusätzlich sag ich mal, daß das Verwenden von Analogschaltern an dieser Stelle keine gute Idee ist. Besser ist es, ganz einfach entweder die µC-Poerts so zu vewenden wie sie sind oder einfach einen Hex-Inverter in CMOS (74HC...) zu benutzen. Wer will, kann dessen VCC ja aus einem separaten Spannungsregler betreiben. Nochwas: Was für ein Funktionsgenerator soll's denn werden? Schreib jetzt nicht "na das Übliche wie Rechteck, Dreieck und Sinus". Wenn du da nämlich keinen dedizierten DDS von Analog Devices benutzt, sondern in AVR-Manier das Ganze per µC machst, kommt erstens nur eine herzlich geringe Taktrate bei heraus und zweitens nur eine 8 Bit Auflösung. Das ist selbst für NF-Zwecke am Rande der Popligkeit und du wärest mit einem rein analogen FG besser bedient. Bei einem reinen Sinusgenerator mag man streiten, da kann man das Ausgangssignal relativ gut per Tiefpaß filtern, so daß tatsächlich ein passabler Sinus bis ca. 200 kHz herauskommen kann. Trotzdem wäre man mit nem AD9833 oder so weitaus besser bedient. W.S.
Also bei mir steht eigentlich wie von Achim vermutet der reine Spaß am selber bauen im Vordergrund. Das Ergebnis muss jetzt nicht wahnsinnig toll sein, sondern es sollte einfach einigermaßen ordentliche Resultate liefern, die für den Test von Schaltungen mit unterschiedlichen Wechselspannungen ausreichend sind. Außerdem habe ich alle oben erwähnten Bauteile sowieso schon hier liegen, deswegen wollte ich von dieser Konfiguration auch nicht wesentlich abweichen. Was meint ihr denn, welche Taktraten für ein Sinussignal möglich sind, wenn ich den PIC mit 32MHz (=max. Betriebsfrequenz) betreibe und das nachgeschaltete Filter einigermaßen gut dimensioniert ist?
Holger schrieb: > Hallo, > > ich möchte mir einen Funktionsgenerator basierend auf DDS bauen Nimm ein AD9833 vom Analog Devices ;-)) Der knüppelt am Ausgang alle Frequenzen bis 12,5MHz im 0,1Hz Schritten, ob Sinus, Dreieck oder Rechteck. Baue selber momentan sowas für mich.
Holger schrieb: > Ich will jetzt eigentlich nur wissen, ob es irgendwelche Bedenken > bezüglich dieser Schaltung gibt Nun, 8 bit ist zwar nicht der Hit, aber schon besser als 0.25%. So genau müssen also deine Widerstände sein, damit es wenigstens monoton steigend bleibt und nicht plötzlich die Spannung zurückgegt obwohl man den Wert erhöht. Deine Schaltung ist ein multiplying DAC wie DAC0800 oder AD/TLC7524. Wenn das nicht nötig ist, ist die Schaltung einfacher:
1 | --+ |
2 | Q0|--10k--+---------|+\ TLC271 oder so an 12V oder mehr |
3 | | 5k | >-+-- ergibt 0-10V Ausgang |
4 | Q1|--10k--+ +-|-/ | |
5 | | 5k | | |
6 | Q2|--10k--+ +--10k-+ |
7 | | 5k | |
8 | Q3|--10k--+ | |
9 | | 5k 10k |
10 | Q4|--10k--+ | |
11 | | 5k | (bitte exakt 5k, nicht 4k7, lieber 2*10k 1% parallel) |
12 | Q5|--10k--+--10k--+-- Masse |
wenn man die Versorgungsspannung auf 0.1% genau hält. Der Ausgangsfilter ist nicht so einfach, denn er müsste frequenzabhängig dimensioniert werden. Daher hat der hier http://www.ebay.de/itm/10-MHz-DDS-SGP1010s-Funktions-Signal-Generator-Frequenzzahler-Sweep-BNC-TTL-/131470959480 auch kein Aufgangsfilter und nur 8 bit (allerdings von einem Altera FPGA erzeugt). Kein Wunder, daß er ihn wieder verkaufen will...
Holger schrieb: > Was meint ihr denn, welche Taktraten für ein Sinussignal möglich sind, > wenn ich den PIC mit 32MHz (=max. Betriebsfrequenz) betreibe und das > nachgeschaltete Filter einigermaßen gut dimensioniert ist? Weißt du, wovon du schreibst? Ein nachgeschaltetes Tiefpaßfilter ist NUR für Sinus gut. Dort ist es auch nützlich, weil man damit bis nahe an die halbe Taktrate herankommt. Bei Dreieck und Rechteck kannst du kein Filter am Ausgang gebrauchen, denn danach würdest du nix mehr vom Dreieck oder Rechteck sehen. Also kannst du dich fragen, aus wieviel Stützstellen pro Periode des Ausgangssignals dein Dreieck denn mindestens bestehen soll, damit es dir schön genug vorkommt. Bedenke, daß die Stützstellen NICHT immer auf die gleiche Stelle in der Periode kommen. Mein Daumenwert wäre so etwa 50 Stützstellen bei Dreieck und Rechteck. W.S.
Also das Dreieck würde ich ja dann aus dem gefilterten Sinus erzeugen. Ich wollte in Bezug auf den Sinus nur wissen, welche REALISTISCHEN Frequenzen man da erreichen kann, also so, dass der Sinus auch noch wirklich hübsch ausschaut
Ne das war jetzt Quark mit Soße, das hatte ich jetzt mit dem Rechteck verwechselt :)
Die Maximalfrequenz ist eine Frage der Abtastrate und der Stützstellenanzahl. Die Abtastrate ergibt sich aus der Zeit, die der uP benötigt, um das nächste 8-bit Muster auszugeben. Ich kenne den PIC nicht, aber angenommen er könnte 1Msample/sec raustun, und der Sinus würde aus 100 Stützstellen synthetisiert, dann hättest Du 10kHz Signalfrequenz. Sinnvoller programmiert man eine DDS, damit hast Du ein lineares Frequenzraster und kommst mit der Signalfrequenz bis zur Nyquistgrenze.
Für den DAC tut es auch der Vorschlag von MaWin. Eventuell den 10 K Widerstand der am dichtesten am Ausgang ist noch abgleichen um etwa den Ausgangswiderstand der Signalquelle zu kompensieren. So genau kenne ich die PIC32 nicht, aber je nach Programm könnte man mit ASM ggf. eine Samplingfrequenz von vielleicht 3-8 MHz erreichen. Die kritische Programmschleife ist ja nur sehr kurz ließe sich also schnell programmieren und so die Frequenzgrenze bestimmen. Je nach Programm kann das aber auch deutlich langsamer werden. Entsprechend wäre dann für das Sinussignal bei etwa 1 - 3 MHz Schluss. Das Filter für den Sinus wird nach der Abtastfrequenz ausgelegt. Passend dürfte wohl ein passiver LCR Elliptischer Filter sein. Durch die relativ niedrige Frequenz werden die Induktivitäten halt etwas größer als man es sonst vom DDS kennt, sollte aber noch im Rahmen bleiben. Für sehr niedrige Frequenzen (ab etwa 1 kHz) wird die Qualität dann noch einmal etwa schlechter, weil die Stufen durchkommen. Da lohnt sich dann eventuell ein zusätzliches Filter (aktiv mit OP). Das Dreiecksignal sollte einen extra Filter bekommen, und ist trotzdem nicht für so hohe Frequenzen geeignet - so etwa 50 Punkte pro Periode sollten es schon sein. Entsprechend liegt das Limit für Dreieck etwa um den Faktor 10-20 niedriger. Das Rechtecksignal erzeugt man am besten aus dem Sinus per Komparator, niedrige Frequenzen (< 10 kHz) ggf. auch noch mit Teiler dahinter.
Warum aufwendig mit Stützstellen argumentieren, wenn der Bandbreitenbegriff reicht? Dreieck oder Rechteck, wobei letzteres auch einfach außerhalb der DDS hergestellt werden kann, auf diversen Arten, benötigen eben eine höhere Bandbreite als ein Sinus bei der gleichen Periodenlänge.
Ok, danke für die Ratschläge! Dann werde ich das mal aufbauen und sehen, ob es klappt. Dann würde ich noch gerne wissen, was so ein selbstgebauter Funktionsgenerator sonst unbedingt noch so für Eigenschaften haben sollte. Mir fällt da neben den gängigen Sachen wie Offseteinstellung, Ampitudenänderung, Wobbeln etc. jetzt spontan nur noch ein Ausgangswiderstand von 50 Ohm ein. Sollte man in diesem Zusammenhang noch irgendetwas anderes beachten oder zusätzlich vorsehen?
Es wäre ggf. hilfreich, wenn der µC die Amplitude etwas einstellen kann, z.B. um den Amplitudengang des Filters zu kompensieren. Ein 50 Ohm Ausgang ist Standard. Ein 2. zusätzlicher Ausgang (ggf. auch isoliert) als Trigger für das Oszilloskop ist oft hilfreich. Für Rechteck ist ggf. ein Ausgang mit Logi-Level (4,5 V und / oder 3 V) sinnvoll. Wobbeln könnte man machen, ist aber vor allem eine Frage der Software (und ggf. Auslegung des Filters, weil die SW dadurch langsamer wird). Gebrauchen tut man es aber eher seltener. Neben Rechteck mit 1:1 Tastverhältnis wäre ggf. noch ein PWM Signal sinnvoll. Das kann z.B. der µC auch direkt erzeugen. Die Frequenz muss man da in der Regel nicht so fein einstellen. Im Prinzip sollte man erst einmal einen Aufbau haben - über Zusatzfunktionen kann man sich dann immer noch Gedanken machen, wenn man so etwas braucht.
Holger schrieb: > was so ein selbstgebauter > Funktionsgenerator sonst unbedingt noch so für Eigenschaften haben > sollte. Kommt drauf an, wofür man ihn einsetzt. Ich verwende ihn oft als Taktgeber für MOSFETs in noch nicht fertigen Schaltungen. Dazu will man kurze Impulse haben, also Rechteckt mit sehr variablem Tasteverhältnis (z.B. 1sec Wiederholzeit, Impuls 1, 2, 3.. usec lang). Das Tastverhältnis sollte auch für das Dreiecksignal gelten. Was mich dann bei meinem nervt: Der 50 Ohm Ausgang ist gut, aber wegen Kurzschlüssen, aber er zeigt die falsche Spannung weil er von 50 Ohm Belastung ausgeht glaubt er er wäre so belastet daß nur die Hälfte rauskommt, also bekommt das MOSFET Gate die doppelte Spannung als eingestellt übergebraten. Einfache Funktionsgeneratoren haben einen Scbalter: 50 Ohm belastet oder unbelastet. Aber besser wäre messen des realen Spitzenwertes. Einstellen von Amplitude und Offset gerne analog, aber messen und anzeigen auf dem Display was wirklich rauskommt, Vmin Vmax Vavg Veff. Sonst wundert man sich, warum man ein 20V Signal einstellt und das TrueRMS Digitalvoltmeter zeigt 7V an. Andere Anwendungszweck Spulen und Trafos, da will man Sinus und Rechteck mit Leistung, also ein LM675 drin haben.
Ulrich H. schrieb: > Es wäre ggf. hilfreich, wenn der µC die Amplitude etwas einstellen > kann, > z.B. um den Amplitudengang des Filters zu kompensieren. ... oder um sinc zu kompensieren. Man könnte auch ALC einbauen mit einem Spitzenwertdetektor, dass klappt dann auch mit Dreieck oder Rechteck.
Fuer ein 10k R2R kann ich die 74HC595 empfehlen, die werden per SPI angesteuert. Alternativ, wenn man parallel anteuern will, ein 74HC245, Wichtig ist HC, denn das bedeutet push=pull, im Gegensatz zu TTL(HCT), welches nur pull ist. Und ja, ich wuerd auch einen fertigen AD9833, AD9835 oder so empfehlen.
Einen R-2R Wandler zu bauen ist zwar recht interessant. Nur, mit 8bit kommt da kein besonders gutes Resultat heraus, auch wenn man die Schalterwiderstände usw. berücksichtigt. Vielleicht eine andre Option, wenn es Dir nicht auf einen DA-Wandler ankommt: Warum verwendest Du nicht einen von den Fertigbausteinen mit AD9850? So einer ist schon zu etwa 5 Euro zu haben. Auf Dreieck musst Du zwar verzichten, Sinus und Rechteck reichen als Testsignal meiner Meinung nach völlig. Dreieck gibts nur, weil bei den Generatoren nach den Prinzip des XR2206 die Dreieckspannung zuerst erzeugt wurde und daher von vornherein zur Verfügung stand. Als Testsignal hat sie wenig Vorteile gegenüber einem Sinus.
:
Bearbeitet durch User
Jetzt Nicht schrieb: > Wichtig ist HC, denn das bedeutet push=pull, im Gegensatz zu TTL(HCT), > welches nur pull ist. Auch wenn es nicht unmittelbar zum Thema beiträgt - diese sehr gewagte Aussage kann ich so nicht stehen lassen. In beiden Familien gibt es push-pull-, three-state- und open-drain-Ausgänge. Das hängt nur vom jeweiligen Baustein ab. Einer der wesentlichsten Unterschiede ist der zulässige Bereich von Vih und Vil: HC=CMOS-, HCT=TTL-Pegel (*) Auch im DB des 74HC(T)245 gibt es keine Unterschiede, die darauf hindeuten würden. Vcc=4.5V, Ioh=6mA, Iol=-6mA, Ta=25°C HC HCT Voh 4.32 4.32 Vol 0.15 0.15 (*) Siehe Kapitel 7 Input- bzw. 8 Output Circuits http://www.nxp.com/documents/user_manual/HCT_USER_GUIDE.pdf
Danke für die weiteren Tipps! Ich habe dann nur noch eine programmiertechnische Frage, weil ich gerade dabei bin den Sinus zu programmieren. Ist das von der Idee her so richtig, dass man sich zuerst z.B. bei einer gewünschten Amplitude von 1V quasi eine Viertelwelle des Sinus herausnimmt (also von 0° bis 90°) und nur für diesen Teil der Kurve eine Lookup-Tabelle mit Funktionswerten erstellt? Da man bei 8 Bit insgesamt 256 verschiedene Spannungen zwischen 0V und 1V erzeugen kann, würde man sich dann wahrscheinlich erst mal einen Taschenrechner nehmen, dann in Schritten von (pi/2)/256 erst mal alle zugehörigen Funktionswerte dieses ,,perfekten" Sinussignals berechnen und dann genau jeweils den binären Wert auf den D/A-Wandler schalten, der den Funktionwerten des idealen Sinus am nächsten kommt, oder? Die anderen Bereiche von 90° bis 360° kann man sich ja dann aus dieser Viertelwelle zusammenbasteln. Oder wählt man da einen anderen Ansatz, um den Sinus zu erzeugen?
In den DDS ICs nimmt man in der Regel die 1/4 Periode und nutzt dann die Symmetrie aus. Die HW für die Symmetrie ist wohl billiger als etwas mehr Speicher. Mit einem µC als DDS wird man eher eine längere Tabelle für 1 Periode nehmen, weil es ein bisschen schneller geht. Für einen 8 Bit DAC sollte die Tabelle etwa 1024 oder 2048 Einträge lang sein (für 1 Periode), sofern der Speicher ausreicht. Für die Tabelle kann man ganz gut eine Tabellenkalkulation, und ggf. auch Makrofunktionen des Assemblers nutzen.
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.