PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rechteck in Sinus wandeln f=0,01Hz - 10MHz



Michael 123
25.04.2009, 13:14
Hallo,

ich möchte mir einen Frequezgenertaor bauen. Eigentlich habe ich ja schon einen, der mir aber nur einen Rechteck liefert.
Jetzt möchte ich ihn noch um einen Dreieck und einen Sinus erweitern.

Der Dreieck sollte eher weniger das Problem sein, da dort ein einfacher Integrator reichen sollte.

Nur der Sinus macht mir noch etwas viel Kopfzerbrechen, da die Rechteckfrequenz im Bereich von 0,01Hz-10MHz liegt.

Kann mir dabei jemand helfen etwas in der Richtung zu realisieren, dass ich den Rechteck im Grund nur abrunden muss?

Den SC-Sinusgenerator von hier:
http://www.elektronik-kompendium.de/public/schaerer/scsing.htm
habe ich mir schon angeschaut, geht aber nur bis 7kHz, was zu wenig ist.

Die Frequenz kann ich zur Not auch auf fmax=1MHz senken, aber nur wenn es anders nicht geht.

Gruß
Michael

Besserwessi
25.04.2009, 13:47
Aus einem Rechteck variabler Frequenz einen Sinus zu machen ist gar nicht einfach. Da wird normalerweise ein anderer Weg genutzt.

Für Frequenzen bis etwa 1 MHz geht z.B. das IC XR2206. Das basiert auf einem Rchteck/Dreick Oszillator und einer Nichtlinearen Kennlinie, um aus dem Dreieck ein Sinus zu machen. Dafür sollte man reichlich Bauanleitungen in Netz finden. Ist aber mehr die Standartmethode von etwa 1985. Bei hohen Frequenzen (>200 kHz) ist das Dreieckssignal nicht mehr gut. So einen Generator nutze ich selber schon seit etwa 20 Jahren.

Die modernere Alternative wäre ein DDS Generator. Allerdings sit der Aufbau da nicht ganz einfach: hohe Frequenzen und oft kleine SMD gehäuse. Wenn man da keine Probleme hat wäre ein AD9833 oder ähnliches Interessant. Die Frequenz wird da digital z.B. von einen µC eingestellt. Allerdings hat man da oft kein Dreiecksignal. Dafür aber eine Quarzstabile Frequenz.

Die kleine Lösung zum DDS ist es einen µC das Signal erzeugen zu lassen. Da geht bis etwa 500 kHz (z.B. Atmel Mega48 mit 20 MHz). Da kann man dann auch ein Dreiecksignal bekommen. Auch dafür gibt es einige Pläne und die Software im Netz.

Michael 123
25.04.2009, 19:44
Hallo,

an den XR2206 hab ich auch schon gedacht, aber wie du sagst, die dreieckfrequenz wird bescheiden.

DDS wollte ich eigentlich nicht machen, da dieses SMD Zeug nicht mein ding ist.
Die µC-DDs gefallen mir alle irgendwie nicht. Entweder zu "lahm" (25kHz) oder dann mit nem Externen DDS-Chip in SMD.

Ein 500kHz DDS habe ich bisher noch nicht gefunden.

mfg
Michael

Besserwessi
25.04.2009, 21:56
Wenn man die DDS routine in ASM schreibt, und der chip nichts anderes tut, komme ich auf 9 oder 10 Zyklen (24/32 Bit Auflösung, mit etwas längerer Schleife, sonst 12 bis 16). Man kann also eine Abtastrate für den AD Wandler bis gut 2 MHz hinkriegen. Allerdings kriegt man bei Änderungen der Frequenz kleine Störungen (ein paar µs ?). Viele langsamere Versionen nutzen einen Interrupt für die DDS routine. Dadurch kreigt man weniger Störungen wenn sich die Frequenz ändert, dafür wird man aber auch etwa 2-5 mal langsamer, obwohl man da auch noch was machen könnte, um vielleicht auf 1,5 MHz Samplingrate kommen zu können.

Der 2 te trick ist es den Filter für das Ausgangssignal richtig zu machen, so wie es bei den DDS chips üblich ist, dann sollte man bis etwa 1/3 der Samplingrate kommen, also rund 600 kHz. Also wirklich nur das unterdrücken was man nicht gebrauchen kann, und dann ggf. den oberen Nutzbereich noch ein bischen anheben. Gefunden habe ich das bisher auch noch nicht im Netz, ich habe aber eine Version die bis gut 200 kHz geht aufgebaut. Die Begrenzung ist da der Verstärker am Ausgang.

Das Dreiecksignal dabei allerdings auch nicht besser, sonern eher schlechter als beim XR2206, denn da Fehlen dann auch die Oberwellen über 1 MHz. Für ein Dreiecksignal ist DDS halt nicht so gut, das geht besser analog. So Störend ist die Einschränung auch nicht, das Dreiecksignal brauche ich meistens bei eher niedrigern Frequenzen.

Von den DDS Chips sollte sich der AD9833 wohl noch löten lassen. Ist zwar wiklich klein mit 0,5 mm Pinabstand, aber es sind dann ja nur 10 Pins. Den Chip würde ich dann auf eine kleine Adaperplatine löten. Das Löten der kleinen SMD Chips hat mich bisher auch davon abgehalten.

Michael 123
28.04.2009, 14:39
Hallo,

danke für die Antwort. Auf knapp 200 kHz komme ich inzwischen auch theoretisch, aber wie auf die 600 kHz?
Wie viele Werte hast du pro "Welle" angekommen? Ich habe als minimum 20 genommen.

mfg
Michael

Besserwessi
28.04.2009, 16:29
Man braucht pro Periode nur etwa 3 Werte, wenn der Filter am Ausgang einigermaßen stimmt. Die theoretische Grenze liegt bei etwas mehr als 2. Man hat dann aber einen leichten Abfall der Amplitude zu höheren Frequenzen, den man ggf. Ausgleichen müßte.
Die maximale Abtastrate liegt wohl bei 8 Zyklen pro Sampel, als 2,5 MHz für 20 MHz Takt beim ATMEL AVR. Mit der Tabelle im RAM auch noch 7 Zyklen, aber wohl kaum weniger. Wenn man noch auf tasten reagieren will, wird man wohl wenigstens 10 Zyklen brauche, aber auch das wird dann schon knapp.

Michael 123
28.04.2009, 16:38
Hallo,

ich komme auf 9 Takte pro Wert. Damit erreiche ich dann 2,2MHz Sampling Rate. Dann bei 3 Werte pro Welle würde ich auf fmax=740kHz kommen. Also wie du sagtest.
Wie muss dann der ausgangsfilder ausschauen?
Die Taster kann man ja über einen Interrupt abfragen, sollte also nicht noch eine extra Takt kosten.

mfg
Michael

Besserwessi
28.04.2009, 17:40
Man kann etwas schnelle werden, wenn man die schleife etwas länger macht, und dann 2 Werte in der Schleife Ausgibt. Da spart man sich einen RJMP Befehl (=2 Takte).

Die Tasten oder ggf. auch eine UART oder I2C kann man im Interrupt auswerten, aber dann hat man immer Störungen wenn eine Taste gedrückt wird. Wenn man die Auswertung in der Schleife macht, wird das allerdings ein ziehmliches gerechne damit man weiterhin alle z.b. 10 Takte die daten ausgeben will. Man hat dann also nur jeweils ein paar Zyklen zeit, und muß immer gleich schnell sein, unabhängig ob eine Taste gedrückt ist.

Die Alterantive wäre es die DDS Ausgabe in eine ISR zu packen und dann die Tasten behandlung usw. im Hauptprogramm zu machen. Durch den Overhead beim Interrupt wird man da wohl kaum unter 10-12 Zyken kommen. Das wäre dann schon mit deutlich mehr als 1 Ausgabewert pro ISR, vermutlich etwa 4 bis 8.
Außerdem hat man noch etwas Jitter in der Ausgabe, denn die ISR kann noch bis zu 1 oder 2 Zyklen verzögert sein. Das könnte man zwar noch kompensieren,kostete dann aber extra Zeit ( ca. 10 Zyklen) und wird daher eher nicht lohnen. Dafür kann man aber die tabelle auf 1024 Werte oder wenigstens 512 Werte verlängern. Im Interrupt würde das nicht mal extra Zeit kosten, sonst nur 2-3 Zyklen.

Ich bin auch gerade dabei mir einen Funktionsgenerator auf AVR Basis zu entwerfen. Ich werden vermutlich den Weg mit Ausgabe in der ISR wählen. Man wird zwar nicht ganz so schnell, aber so groß ist der Unterschied nicht. Versuchsweise werden ich aber auch mal die Tastenabfrage (bzw. AD Wandler oder I2C) in kleinen Häppchen probieren.

Zum Ausgangsfilter kann man bei den fertigen DDS Chips abschauen. Soweit ich mich da erinnere ist eine einfache, aber schon ganz gute Version ein LC Filter mit einem passiven RC Filter dahinter. Der LC Filter gibt neben der starken Unterdrückung hoher Frequenzen auch etwas Resonanzüberhöhung und damit Anhebung kurz vor der Grenzfrequenz. Der RC Filter dient auch gleich zur Dämpfung des LC Filters.

Michael 123
28.04.2009, 18:07
Hallo,

die hohe Geschwindigkeit ist doch nur interessant bei hohen Frequenzen. Diese kann aber doch nur auf kosten von Ausgabewerten erreicht werden. Also bringt es doch gar nichts, wenn man die Tabelle auf 512 oder gar 1024 Werte erweitert. Dies kommt eh nur den niedrigen Frequenzen zu gute, und da kommt es nicht drauf an ob da jetzt 1 Takt hin oder her ist.

Die Idee, gleich 2 oder mehr Werte pro Schleife/ISR auszugeben, ist doch eigentlich auch eine Milchmännchen rechnung, du hast egal wie einen Rücksprung, der dich Zeit kostet. Also hast du ihn diesem Rücksprung eine Verzögerung, die du wiederum mit einberechnen musst.
Okay, es kann sein, dass ich dann im Endefekt 2-3 Takte schneller sein mag, was sich dann auf die Frequenz sogar stark auswirkt. Hätte ich nicht gedacht, dass es sich so stark auswirkt:
Fcpu=20MHz
Takte/Wert: 6 (im Schnitt)
Werte/Welle: 3
=>fmaxsinus=1,1111MHz vorher: 740kHz. 50% Mehr als vorher. Nicht schlecht!

Aber ist es möglich das ganze auf 6Takte pro Wert zu bekommen?
Man muss den Phasenakkumolator um 1 erhöhen => 1Takt, die Daten aus dem Ram holen =>3Takte, Daten ausgeben=>2Takte
=>6Takte. Aber der Rücksprung fehlt ja auch noch. 2Takte.

Dabei wurde jetzt aber nicht darauf eingegangen, dass für niedrige Frquenzen noch eine Art 2ter Verzögerer Benötigt wird. Wäre über einen Interupt dann besser. Produziert aber einen Haufen an nutzlosen Takten.

Bei einer Tabelle mit über 256 Werten hast du dann wieder das Problem, dass du mit LSB und MSB Bits Arbeiten musst, und dir damit dann wieder einen Takt an Rechenarbeit mehr hast. Also auch doof.

Aktuell bin ich der Meinung, dass es nicht möglich ist über 200kHz zu kommen, mit variabler Frequenz von 1Hz bis 200kHz. OHNE den µC zu übertakten. Wäre ja auch noch ne Möglichkeit.

Ich lasse mich gern von einer Besseren Lösung überzeugen.

mfg
Michael

wkrug
28.04.2009, 18:32
Ich denk mal ich würde mir einen AD 9833 holen.
Der Chip ist günstig, bietet alle 3 Kurvenformen und geht bis ca. 10MHz Nutzfrequenz ( 25MHz Takt ).
Das Teil ist zwar in SMD, hat aber nur 10 Pins und das ist absolut beherrschbar.

Bevor ich mich da selber ans proggen ranmache würde ich so eine Lösung bevorzugen.

Zum Aufbau der Testschaltung nehm ich immer Adapter Platinen, auf die dann so ein Chip eingelötet ist.

hardware.bas
28.04.2009, 18:40
Mit dem Rechteck kann man einen Sinusoszillator in engen Grenzen
synchronisieren. Das löst jedoch nicht Dein Problem. Am besten man
baut ein PLL-gesteuerten Sinusoszillator und leitet alle anderen
Kurvenformen von ab. Sinuskurve triggern - Impulsgewinnung - auf
Frequenzteiler 2:1 (Flip-Flop) geben - Rechteck - mittels OPV-Schaltung
dann Dreieck, Sägezahn etc. formen. VG Micha

Michael 123
28.04.2009, 18:41
Hallo,

der IC mag ja zwar super eigneschaften haben, aber sag mir doch bitte woher ich ihn bekomme. Reichelt hat ihn nicht im Programm, Conrad auch nicht und bei Pollin brauch ich erst gar nicht suchen.

Gruß
Michael

wkrug
28.04.2009, 19:07
Dann kommen doch nur die üblichen Verdächtigen in Frage:

RS-Online = http://de.rs-online.com 11,98€

Farnell = http://de.farnell.com/
Best Nr. 1581966 9,29€

Digikey = http://www.digikey.com 9,42$

Segor = www.segor.de 9,80€

hbe Shop = http://www.hbe-shop.de 11,06€ ( komplettes Farnell Programm )

Bei den letzten dreien kannst Du auch als Privatkunde bestellen.
Wobei Digikey die schlechtesten Versandkonditionen hat.
Aber bei einer Sammelbestellung gehts.
Im Microcontroller Net läuft das so alle 1 bis 2 Monate eine.
Du kannst aber auch auf eine "größere" Variante gehen, wie den AD 9851.
Der hat aber dann keinen Dreieck und Rechteck Ausgang mehr.
Aber dafür sollte er bei Händlern zu kriegen sein die Elektor Bausätze vertreiben, weil die Chips da schon ein paar mal verbaut wurden.

Die DDS Chips findet man auch häufig bei Amateurfunk - Versendern.

Wenn man ein bischen sucht kriegt man im I-Net fast alles.

Besserwessi
28.04.2009, 20:00
In einer ISR mehr als einen Wert Auszugeben, bringt schon einiges. Man kann dann nähmlich als erstes und letztes jeweils einen Wert Ausgeben. Die Werte berechent man dann nacheinander und fürgt an der richtigen Stelle jeweils eine Ausgabe ein. Man ist dadurch nur durch die die Zeit begrenzt, die es braucht den Interrupt zu verlassen, einen Befehl auszuführen und den nächsten Interrupt auszuführen. Das sollten rund 10 Zyklen sein, denn man kann den Code direkt beim Interruptverktor starten, denn mehr als den einen Interrupt kann man kaum gebrauchen.

Das mit der längeren tabelle bringt im wesenlichten etwas bei Niedrigeren Frequenzen. Immerhin wird aber schon bei rund 8 kHz jeder Tabellenwert bei einer 256 Elemente tabelle genutzt. Auch kann der Sprung von einem tabellenwert zum nächsten Wert schon 3 (eventuell sogar 4 ?) LSB betragen. Es macht also schon noch sinn eine feinere Tabelle zu nutzen. Die extra Chips wie der AD9833 machen das immerhin auch, und das bestimmt nicht aus Spass. Für die Version mit ISR macht es auch keinen wesentlichen Geschwindigkeitsunterschied, denn das verlängert die Verzögerung nicht, und Berechnung kann weiter unter 10 Zyklen bleiben. Auf ein paar Bytes längeren Code kommt es in der Regel nicht an.
Das man ein Byte mehr für den Phasenakumulator braucht, benötigt auch nur 1 Zyklus mehr, und man nutzt immerhin 2 der Bits auch wirklich. Wenn die Tabelle günstig im Flash liegt (z.B. ab 0x0800) braucht man auch nur eine Zyklus, um für den Überlauf nach 10 Bits zu sorgen ( ANDI ZH, 0x0BFF).

Für höhere Frequenzen ist der AD9833 aber sicher die bessere Alternative. Dabei sind die 10 MHz Grenzfrequenz aber auch mit nur mit 2,5 Punkten pro Periode.
Eine weitere Quelle wäre da TME.eu (EUR 8,00 + 22% polnische Mwst.), allerdings mit eher hohen Versandkosten.

Yossarian
29.04.2009, 11:49
Hallo
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=18660

Mit freundlichen Grüßen
Benno

PICture
29.04.2009, 13:12
Hallo!

@ Michael 123

Wenn du nur bis 1 MHz einen Funktionsgenerator bauen willst, wird es sicher mit dem XR-2206 gehen. Es müssen nur kurze Leitungen verwendet werden um kleine Montagepazitäten anzuhalten und der IC ohne Sockel.

MfG

Michael 123
29.04.2009, 13:27
Hallo,

hast du schon mal mit dem XR-2206 gearbeitet?
Aber 200kHz kannst so ziemlich das Gerät dann vergessen. Ein Rechteck wird zu einem "Möchtegern"-Sinus, der Dreieck wid in Frequenzmüll gewandelt und der Sinus, naja der hat auch ne Ecke weg.

mfg
Michael

PICture
29.04.2009, 14:12
Ich habe es noch nicht praktisch gebaut, habe aber keine Informationen über Probleme mit dem IC gefunden. Wie sieht ein Sinus mit Ecken aus? :)

Es ist wichtig was für eine Versorgung (einzelne bzw. symmetrische) gegen GND der IC hat. Das alles ist im Datenblatt erklärt. Ausserdem der Rechteck Ausgang ist OC und braucht einen pull-up.

MfG

Michael 123
29.04.2009, 14:23
Hallo, ein Sinus mit Ecken?

Naja, Der Sinus wird in dem IC aus dem Dreieck gebildet, je Frequenzmülliger der behfatet ist, je mehr schlägt sich das auch in den Sinus durch, so dass der auch mit "Ecken" behaftet ist.

Naja, der IC wurde schon ziemliech gut, wenn nicht sogar am Optimalsten aufgebaut. Die Schaltung war unsere Praktkumsarbeit, bei der das Layout am PC unter den optimaltsen bedinungen entstand. Erst wurde alles am PC auf Optimal getrimmt, mit Simulation und allem möglichen nur erdenklichen, danach aufgebaut, unter beachtung von allen Möglichen Frequenztechnischen dingen (runde Lötpunkte, Drahtenden sehr sehr kanpp abschneiden und noch mal drüber löten, um ja keine Spitzen zu erhalten, die Kapazitäten bilden, etc.)
Bis 200kHz war das Signal noch akzeptabel. Aber danach konnte man es vergessen. Der IC gibt einfach nicht mehr her.

Gruß
Michael

PICture
29.04.2009, 14:57
Ich habe mal beim Googeln einen Bericht aus irgendeinem UNI gelesen, dass der XR-2206 sogar bis 10 MHz geht, aber mit größeren Verzerrungen als der MAX038 und eignet sich gut für Frequenzen bis 1MHz.

MfG

Michael 123
29.04.2009, 15:22
Hallo,

ah interessant. Wo hast du den her? Wäre es möglich, dass du ihn nochmals findest?

Gruß
Michael

PICture
29.04.2009, 16:43
Es hat leider ein bißchen gedauert, weil ich nochmal googeln mußte, aber ich hab´s:

www.et.hs-mannheim.de/vorlesungen/MWA/SS2007/G3A_SS07.pdf

Siehe Seite 9.

MfG

Besserwessi
29.04.2009, 17:01
Bir 1 Mhz geht mit dem XR2206, die 10 MHz wären mit dem max038 möglich, allerdings ist das IC wohl nicht mehr zu kriegen. War jedenfall schon vor ein paar Jahren so, da hab ichs mal versucht und nirgends zu vertretbaren Preisen zu kriegen. Vom XR2206 gibt es eventuell aber auch verschiedene Ausführungen / Herrsteller. Die Version die ich kenne ist oberhalb 1 MHz jedenfall kaum brauchbar, so wie im Datenbaltt angegeben.

Das Rechtecksignal ist nicht so sehr das Problem, das läuft größtenteils seperat, das ist dann mehr eine Frage des Verstärkers am Ausgang. Man kann ja das Rechtecksignal auch parallel zum Sinus oder Dreieck abgreifen. Aber das Dreieckssignal sieht dann jenseits der 200 kHz nicht mehr so gut aus, es fehlen halt die Oberwellen. Das Sinussignal geht eigentlich noch, nur die Amplitude ist eventuell nicht mehr ganz so konstant. Bei vielen Ausführungen mit dem XR2206 gibt es eine kleine Störung im Sinussignal. Jeweils im maximum des Sinus eine kleine Peak. Sieht etwas gewöhnungsbedürftig aus, aber so richtig störend ist das eigentlich nicht, manchmal sogar hilfreich.

PICture
29.04.2009, 17:35
Ich habe vor mir einen Wobbler zu bauen und habe bereits ein paar XR-2206, aber wegen andere Projekte momentan keine Zeit dafür. Da die Frequenz mit einem Widerstand eingestellt wird, muss ich dafür mit Spannung gesteuerten FET bzw. MOSFET nehmen.

Als Problem, sehe ich die Ausgangsspannung aus dem XR-2206 abzugreifen, ohne ihn praktisch mit einer Kapazität zu belasten. Wahrscheinlich werde ich dafür eine FET-Stufe mit Eingangskapazität 1 pF, wie im aktivem Tastkopf verwenden.

Ich brauche keine hohe Amplitude und sauberen Sinus am Ausgang, da es hauptsächlich fürs Messen der Selektivität von Radioempfänger benutzt wird, aber die 10,7 MHz brauche ich unbedingt. Ich habe an XR-2206 gedacht, weil er sweep 1000:1 (z.B. 10 kHz - 10 MHz) und ein LC Oscillator nur 3:1 kann.

MfG

Michael 123
29.04.2009, 18:19
Hallo,

dabei handelt es sich um Herstellerangaben, in der Praxis schaut das alles ganz anderes aus. Er könnte Theoretisch die 10MHz, aber ab 200kHz werden die Signale dann Müll.

mfg
Michael

Besserwessi
29.04.2009, 18:49
Bei meinem Genererator sind / waren das Datenblatt und die Praxis gar nicht so weit auseinander. Bis etwa 2 MHz (schon etwas her !) ging es noch, aber die Amplitude geht stark in den Keller. Das Sinussignal sieht eigentlich immer OK aus. Nur das Dreieckssignal nicht mehr.

Die Frequenz kann man bein XR2206 auch realtiv leicht über eine Spannung (bzw. einen Strom) einstellen, das ist das kleinste Problem. Auch die Belastung des Ausgangs ist klein Problem. Die kleine kapazität beziehen sich auf die beschaltung der Pins mit Widerstand und zur Dreieck-sinus Formung. Mit SMD Widerständen ist das aber eigentlich kein Porblem.

Wenn es nur um einen VCO mit großem Frequenzbereich geht, könnte man einfacher den VCO aus dem 74HC4046 nehmen, der geht bis wenigstens ca. 15-20 MHz je nach Hersteller ist aber nur Rechteck.

PICture
29.04.2009, 19:09
Ich werde es irgendwann mit SMD aufbauen und bin fast sicher, dass ich mit dem XR-2206 die 10 MHz locker schaffe. Die Ausgangsspannung kann sich mit der Frequenz beliebig ändern, weil sie sowieso bei einem Wobbler als Differenz von Ein- und Ausgangsspannung genommen wird. Wenn man stabile Ausgangsspannung braucht, ist es sicher einfacher sie zu stabilisieren als eine Wandlung eines Rechtecks ins Sinus.

MfG

Besserwessi
29.04.2009, 20:53
Ich wäre mir da nocht sicher das man bis 10 MHz kommt, das wäre immerhin das 10 fache des Typischen Wertes aus dem Datenblatt. Ich kann mich erinnern das ich es kaum über 2 MHz gebracht habe. Einen "Sinus" mit stark Frequenzabhängiger Amplitude kreigt man aus einem Rechteck einfach über einen Tiefpassfilter. Viel besser dürfte das am XR2206 auch nicht werden wenn man deutlich oberhalb der Grenzfrequenz ist.