Ideen für einen Signalgenerator gesucht

Wenn ich mal was ausprobieren will und ein Testsignal mit einer bestimmten Frequenz brauche, ist das für mich zur Zeit noch recht umständlich, da ich keinen Signalgenerator habe. Könnte ich mir zwar kaufen, aber selberbauen macht viel mehr Spaß :-)

Ich habe mal angefangen:

formatting link

Diskutiere ich gerade auch in comp.arch.fpga, wie man die Qualität noch verbessern kann.

Davon unbabhängig weiß ich aber nicht, was so ein Ding alles können sollte, um möglichst vielseitig eingesetzt werden zu können. Ich hatte mir gedacht, einen kleinen Microcontroller drumrum zu bauen, der ein Display ansteuert und ein paar Tasten und Drehgeber abfragt. Sollte dann 2 Ausgänge haben, auf denen man phasenverschobene Signale gleicher Form ausgeben kann oder auch ganz unterschiedliche Signale. Was gibt es da sonst noch? Der Xilinx Spartan3E FPGA ist erst zu 2% voll.

Zur Umsetzung des kompletten Gerätes werde ich aber wohl erst über die Feiertage zu kommen, wenn überhaupt, aber vielleicht findet ja auch ein anderer die DDS-Entity nützlich und baut sich damit einen auf seine Bedürfnisse optimal angepassten Generator.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss
Loading thread data ...

Ich hätte gerne einen Pattern-Generator. :-) Mindestens 2 Ausgänge, lieber 4 oder gar 8. Mit digitalen Signalen wäre ich zufrieden. Frequenz "stufenlos" über Drehgeber einstellbar. Evtl. wäre ein Triggereingang gut, um ein Muster im Single-Shot auszugeben.

Nick

--
The lowcost-DRO:
Reply to
Nick Mueller

Das wäre eine gute Idee. Dabei langweilt sich der FPGA ja ziemlich (die Interpolation für den analogen Ausgang kann dagegen nur mit maximal 56MHz laufen), sodaß man bei den vielen Anschlüssen des FPGAs das noch gut parallel rausgeben könnte. Hatte ich auch schon dran gedacht, könnte man dann auch per RS232 einspielen, um z.B. auf dem PC kompliziertere Signale zu erzeugen (AES-Datenströme usw.), die dann einfach nur in einer Endlosschleife abgespielt werden oder in einer noblen Ausführung auch per USB, wobei dann die Daten Live erzeugt werden und der FPGA nur als stabiler FIFO arbeitet, um PC-Aussetzer abzufangen.

Ja, externe Synchronisierung wäre wohl generell eine gute Idee, kann man vielleicht auch für die analogen Signale irgendwie brauchen. Dann muß man sich aber noch überlegen, wie man die Triggerschwelle einstellt und auch den Eingang gut absichern, aber nicht so gut, daß er zu langsam wird :-)

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Es ist ja auch eine orginelle Idee etwas zu machen, welches

a) als IC mit internem 12 Bit D/A für $20 bei ebay zu haben ist

formatting link

b) man für tiefe Frequenzen und 8 Bit Auflösung auf Controller dadurch realisieren kann daß man passenden Code ins RAM compiliert und als Schleife laufen lässt.

Wenn man schon zwanghaft FPGA verwursteln will sollte man die Latte etwas höher legen: a) mit sin , cos , 2x Multiplizierer , 2x Integrator hat man Wobbler der Betrag und Phase macht ( Umrechnen auf Zeiger dann mit Mikroprozessor ). b) irgendwelcher "open source" VHDL-Code wird wenig Anwender ansprechen. Untersuchen obs irgend ein bastelfreundliches FPGA z.B. als PLCC noch gibt mit dem 20kHz Sinus erreichbar sind und dann den Chipsatz FPGA + Bootspeicher + Datenblatt + Layoutvorschlag bei ebay anbieten. Kein Goldgrube, aber zumindest orginelle Eigenwerbung.

MfG JRD

Reply to
Rafael Deliano

"Frank Buss" schrieb im Newsbeitrag news:o2guxsaj1q1x$. snipped-for-privacy@40tude.net...

Hallo Frank,

Wieseo gibt es in deinem VHDL-Code einen Counter?

DDS braucht immer einen Phasenakkumulator, aber keinen Counter. Wo ist der Phasenakkumulator in deinem VHDL-Code?

Vielleicht verstehe ich ja nur deinen VHDL-Code nicht. :-)

Gruß Helmut

Reply to
Helmut Sennewald

Ob sich der langweit wäre mir egal. :-) Wenn man ein Testmuster braucht dann dafür jedesmal ein µC zu programmieren ist etwas müsam. Darum würde ich mich darüber sehr freuen. Und mit einstellbarer Frequenz (sowohl Widerholrate, als auch Dauer des Musters und gar Anzahl der Wiederholungen) wäre ich über-zufrieden!

Ja! Hab mich nur nicht getraut.

USB brauch ich überhaupt nicht. Die Rechner an denen mir das helfen würde haben alle RS232. So verbaut man auch den Weg nach Linux etc. nicht.

Ich wäre mit digitalen Leveln < 5V völlig zufrieden.

Nick

--
The lowcost-DRO:
Reply to
Nick Mueller

formatting link

Für einen reinen Sinus- und Rechteckgenerator wäre es wirklich nicht sinnvoll, das selbst zu bauen, wenn es nicht auch noch Spaß machen würde, aber die Ideen mit dem Pattern-Generator könnten noch einen Mehrwert bieten.

Wäre das auch genau genug? Bei tiefen Frequenzen ist das vielleicht nicht so wichtig, allerdings kann man das in Hardware wahrscheinlich mit besseren Jitter-Werten hinbekommen, falls der Microcontroller nicht irgendeine Möglichkeit bietet, die Daten synchron zu einem beliebig einstellbaren Takt auf den Ports auszugeben.

Klingt gut. Wenn man dann noch einen AD-Wandler spendiert, kann man damit dann auch Kennlinien aufzeichnen. Wird dann aber so langsam schon zu einem Vollzeit- statt Weihnachstferienprojekt :-)

Was ich mich dabei noch frage: Der Chip von Analog Devices scheint ja auch nur 12 Bit Ausgang zu haben. Ich vermute mal, der hat dann auch eine feste Sinustabelle mit entsprechend vielen Werten drin, sodaß der Abstand zwischen zwei Werten maximal 1 ist, sodaß eine Interpolation nicht mehr nötig ist. Würde mein Verfahren z.B. bei 24 Bit Ausgabe da nicht einen Vorteil bringen, wegen dann kleinerer notwendiger Tabelle? Oder müsste man Cordic o.ä. nehmen, um auch eine hohe Genauigkeit im 24 Bit Bereich zu erreichen?

Ja, verkaufen wäre vielleicht auch eine Idee, dann könnte man auch mehr Zeit investieren. Aber ist immer die Frage, ob es mit den etablierten Geräten mithalten könnte. Ich habe z.B. bei einem Kunden mal gesehen, wie die mit einem Gerät von Audio Precision Rauschabstände von 120 dB und mehr messen können, da wäre dann mein 12 Bit DA-Ausgang eher Spielzeug. Kann dann allerdings auch nicht im MHz-Bereich Signale erzeugen und ist natürlich recht teuer.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Vielleicht habe ich das auch falsch verstanden, habe erst gestern das erste mal von diesem Verfahren gelesen. Counter arbeitet schon als Akkumulator, wird immer "step" hinzuaddiert, daher habe ich das Counter genannt, er zählt ja step, aber Akkumulator wäre vom Namen her wohl besser. Bei einer einstellbaren Bitgrenze wird dann der höherwertige Teil dieses Akkumulators als Index in die Lookup-Tabelle verwendet und der niederwertige Teil zur linearen Interpolation zum nächsten Wert in der Lookup-Tabelle. Das Ergebnis wird dann, wieder je nach einstellbarer gewünschter Ausgangsgenauigkeit, in output geschrieben.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

1 $: D/A xy1 #. MOV, DELAY1 JSR, D/A xy2 #. MOV, DELAY1 JSR, D/A xy3 #. MOV, DELAY1 JSR, ... D/A xy97 #. MOV, DELAY1 JSR, D/A xy98 #. MOV, DELAY1 JSR, D/A xy99 #. MOV, DELAY2 JSR, 1 $ JMP,

Da ist kaum Jitter. Anhand der Zahl der Samples und der verwendeten Delay-Routinen kann man eine Menge Sinus-Frequenzen erzeugen die ihre Werte beim Compilieren aus einer 256 Byte Tabelle erhalten. Muß eben im RAM laufen, also nur von Neumann mit RAM >256 Byte. Nachteil: der Controller tut sonst nichts mehr. D.h. Taste muß Interrupt auslösen damit er da wieder rauskommt.

MfG JRD

Reply to
Rafael Deliano

Da sehe ich mehrere Nachteile: vom 6502 kenne ich noch so Besonderheiten, wie ein Takzyklus mehr, wenn ein Speicherzugriff auf einer Page-Grenze stattfindet. Würde wahrscheinlich nicht viel ausmachen, aber mit der Zeit summiert sich das. Und der feste Delay läßt nur sehr diskrete Frequenzänderungen zu, gegenüber meiner Implementierung, die eine Frequenzänderung in 3,6*10^-9 Hz Schritten erlaubt (mal angenommen der Quarz wäre so stabil, aber das könnte man ja noch per DCF77-Trägerfrequenz synchronisieren, wie hier letztens mal ein Link zu einer Schaltung vorgestellt wurde, sodaß es tatsächlich ziemlich genau werden kann).

Aber die Microcontroller-Lösung würde wohl für viele Anwendung ausreichen. Aber auch damit könnte man wohl einen richtigen DDS-Generator programmieren (allerdings mit nicht allzu schnellem Ausgang), wenn man zuviel Freizeit hat und gerne Taktzyklen aller Codepfade zählt und per NOPs ausgleichen möchte. Erinnert mich ein wenig an die Rasterzeilenprogrammierung am seligen C64, wenn man Sprites an Stellen anzeigen wollte, die eigentlich nicht möglich waren :-)

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Jemand in der s.e.d. Newsgroup (nennt sich D of BC) hatte letztens vor, das mit einem Eval Board fuer den AD9834EB zu machen. Weiss aber nicht, ob er das wirklich realisiert hat. Ich glaube auch, dass das Board ueber $150 kostet.

--
Gruesse, Joerg

http://www.analogconsultants.com/
Reply to
Joerg

formatting link

; main loop ; ; r28,r29,r30 is the phase accumulator ; r24,r25,r26 is the adder value determining frequency ; ; add value to accumulator ; load byte from current table in ROM ; output byte to port ; repeat ; LOOP1: add r28,r24 ; 1 adc r29,r25 ; 1 adc r30,r26 ; 1 lpm ; 3 out PORTB,r0 ; 1 rjmp LOOP1 ; 2 => 9 cycles

Da jittert nix.

XL

Reply to
Axel Schwenke

Danke für den Link, das ist wirklich genial einfach, aber dennoch gut!

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Bis ca. 5kHz für analoge Telefontechnik. Wenn man hinter den D/A-Wandler einen steilen (SC-)Tiefpaß setzt werden bei den hohen Frequenzen mit wenigen Samples die Oberwellen entfernt. Bei tiefen Frequenzen hat man viele Samples und damit ohnehin weniger Verzerrung.

Den gibts eh nichtmehr als Controller, 68HC908 wäre üblicher Typ, Pagegrenze dort kein Problem.

1k RAM aber wünschenswert. Damit hat man das Problem, daß es schon ein relativ grosser 68HC908 sein muß. Normalerweise wird man den Sinusgenerator simpel als eigenen Slave-Controller der über SPI angesprochen wird auf Leiterplatte packen.

MfG JRD

Reply to
Rafael Deliano

Hier ist noch sowas.

formatting link

Grüße Björn

Reply to
Bjoern Wieck

Für eine Facharbeit ziemlich gut, aber mit maximal 25kHz zu eingeschränkt für viele Einsatzgebiete und wäre mit einer Soundkarte wohl einfacher zu realisieren. 1MHz wäre schon schön.

Statt eines FPGAs frage ich mich, ob nicht auch ein schneller DSP für sowas geeignet wäre. Gibt da von TI ja schon preiswerte Exemplare. Ich werde es aber erstmal mit dem Xilinx Spartan weiterentwickeln.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Frank Buss schrieb:

Na dann hier noch einer mit 20MHz, leider nur Sinus und TTL:

formatting link

Grüße

Bernd

Reply to
Bernd Klier

Das sieht schon professioneller aus. Nur Sinus und TTL hat der, weil der einfach den hier schon erwähnten Analog Devices Chip nimmt, statt es "richtig" selber zu bauen :-)

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Bau dir doch den hier nach:

formatting link

Man beachte auch das Testbild hier:

formatting link

Olaf

Reply to
Olaf Kaluza

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.