-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: Rechteck in Sinus wandeln f=0,01Hz - 10MHz

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    11.03.2005
    Ort
    Kissing bei Augsburg
    Alter
    27
    Beiträge
    443

    Rechteck in Sinus wandeln f=0,01Hz - 10MHz

    Anzeige

    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/...rer/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
    Besuch mal meine HP: www.highcurrent.de

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    11.03.2005
    Ort
    Kissing bei Augsburg
    Alter
    27
    Beiträge
    443
    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
    Besuch mal meine HP: www.highcurrent.de

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    11.03.2005
    Ort
    Kissing bei Augsburg
    Alter
    27
    Beiträge
    443
    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
    Besuch mal meine HP: www.highcurrent.de

  6. #6
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    11.03.2005
    Ort
    Kissing bei Augsburg
    Alter
    27
    Beiträge
    443
    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
    Besuch mal meine HP: www.highcurrent.de

  8. #8
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    11.03.2005
    Ort
    Kissing bei Augsburg
    Alter
    27
    Beiträge
    443
    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
    Besuch mal meine HP: www.highcurrent.de

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    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.

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •