Ist dies ein geeigneter Sinus-Oszillator? Wie würde ich die Frequenz steuern?

Überblick-

Ich mache eine Bank mit analogen Sinusoszillatoren und bin daran interessiert, das Design kompakt zu halten.

Ich habe damit begonnen, einen Wien-Brücken-Oszillator zu bauen. Da ich mit einer einzigen Stromversorgung arbeite und versuche, das Design klein zu halten, habe ich den LM386n-1 IC verwendet.

Ich werde die Oszillatoren verwenden, um etwas additive Audiosynthese zu machen, vielleicht etwas FM, und ich werde wahrscheinlich einige der Oszillatoren als LFOs brauchen.

Meine Fragen sind-

Ist dies ein geeigneter Ansatz, um einen kompakten analogen Sinusoszillator herzustellen?

Wie würden Sie außerdem vorschlagen, dass ich die Frequenz steuere, welcher Komponentenwert sollte geändert werden, um dies zu erreichen? - Ich habe versucht, mit allen Widerständen herumzuspielen, um die Tonhöhe zu ändern, aber sie scheinen alle voneinander abhängig zu sein.

Hier ist die Schaltung, mit der ich gearbeitet habe, sie stammt aus dem Datenblatt des Niederspannungs-Audioleistungsverstärkers LM386 von National Semiconductor.

Wienbrücke LM386

Und so sieht meine Implementierung aus, ich habe keine geeignete Glühlampe, also habe ich sie gerade durch einen 1-kΩ-Topf ersetzt. Ich bin mir immer noch nicht sicher, was ich in der endgültigen Schaltung als AGC verwenden werde, Vorschläge sind willkommen.

meine Wienbrücke LM386

Antworten (5)

Dies beantwortet nicht Ihre Frage, aber ich denke, das Problem wird relevant angesprochen.

Heutzutage ist es albern, dies analog zu tun, außer vielleicht für einige sehr spezialisierte oder Hochfrequenzanwendungen. Sie haben erwähnt, dass dies eine Audioanwendung ist, daher kann ich mir keinen guten Grund für all das Analoge vorstellen. Ihr erster Satz erwähnt, dass Sie eine ganze Bank dieser Dinge wollen, und Sie wollen das Design kompakt. Der analoge Ansatz wird definitiv nicht kompakt sein. Ein weiteres Problem beim analogen Ansatz besteht darin, dass die Frequenzen und Amplituden driften.

Ein viel besserer Weg, dies zu tun, besteht darin, alle Sinuswellen in einem Prozessor zu erzeugen und sie digital zu addieren. Sie können alle dieselbe 1/4-Wellen-Sinustabelle verwenden, indexieren Sie sie einfach in unterschiedlichen Schritten pro Sample, um die verschiedenen Frequenzen zu erhalten.

Dies liegt sogar innerhalb der Leistungsfähigkeit von Low-End-DSPs wie der dsPIC-Reihe von Microchip. Ein dsPIC33F klingt wie eine gute Passform. Bei 40 MIPS haben Sie 1000 Befehlszyklen pro Abtastung bei einer Abtastrate von 40 kHz. Das ist viel und ermöglicht das Hinzufügen vieler verschiedener Sinusse zu jedem Sample. Die DSP-Multiplizier-Akkumulations-Hardware wird es ermöglichen, dass jeder Beitrag einfach mit seiner eigenen Verstärkung hinzugefügt wird.

Digital abgeleitete Signale wie dieses driften nicht in Frequenz oder Amplitude und haben ein besseres Signal-Rausch-Verhältnis. Bei 16-Bit-Zahlen erhalten Sie 96 dB. Das ist analog machbar, wenn Sie vorsichtig sind. Die Genauigkeit des digitalen Signals wird jedoch weitaus größer sein. Es besteht überhaupt keine Chance, dass die analogen Sinusgeneratoren innerhalb von 1 Teil von 65000 pro Sample liegen, nur aufgrund der Unvorhersehbarkeit der Amplitude. Die Frequenz der digitalen Signale kann ebenfalls sehr genau eingestellt werden, und der digitale Sinus-Synthesizer braucht nicht ein paar Zyklen, um sich zu stabilisieren, bevor seine Ausgabe Ihren Erwartungen entspricht.

Bearbeiten: Klarstellung zur Sinuserzeugung

Ich sehe einige Nachteile der Sinusgenerierung für die Tabellensuche, die in anderen Antworten erwähnt werden, die falsch sind, daher füge ich hier weitere Erläuterungen zur Methode hinzu. Zwei Einwände wurden vorgebracht, Genauigkeit und Frequenzauflösung.

Lassen Sie mich zunächst die normale Struktur einer Sinus-Suche erklären. Beachten Sie, dass eine Sinuswelle vierfach symmetrisch ist. Sie brauchen also nur 1/4 Zyklus zu speichern. Die grundlegende Wellenform des ersten Quadranten wird entweder umgekehrt, negiert oder beides in den verbleibenden drei 1/4 Zyklen wiederholt. Ein netter Trick, um dies zu vereinfachen, besteht darin, den Winkel so auszudrücken, dass ein vollständiger Kreis eine Zweierpotenz ist, vorzugsweise unter Verwendung des gesamten Worts der Maschine, auf der der Code ausgeführt wird. Das bedeutet, dass Winkeladditionen und -subtraktionen automatisch ohne expliziten Code für diesen Zweck um den Kreis gewickelt werden, wenn Sie die Winkelberechnung in vorzeichenloser Ganzzahlarithmetik durchführen. Diese Darstellung macht auch das Nachschlagen in der 1/4-Wellentabelle sehr einfach.

Die beiden hohen Bits des Winkels geben den Quadranten an, sodass nur die verbleibenden unteren Bits verwendet werden, um in die Tabelle zu indizieren. Wenn das höchste Winkelbit gesetzt ist, wird das Tabellenergebnis negiert. Wenn das nächsthöhere Bit gesetzt ist, wird die Tabelle rückwärts indiziert. Das ist so einfach wie das Komplementieren der verbleibenden niedrigen Bits, bevor sie als Index verwendet werden. Die Tabelle muss nicht so groß sein, dass alle niedrigen Bits als Index verwendet werden können. Beispielsweise wäre es auf einer 16-Bit-Maschine wie einem dsPIC natürlich, 16 Bit für den Winkel zu verwenden. Damit bleiben 14 Bits übrig, um in die Tabelle zu indizieren, was eine sehr große Tabelle wäre. Typischerweise und in diesem Fall wird eine so große Tabelle nicht benötigt. Eine vernünftige Größe könnten 1024 Segmente sein, was 10 Indexbits verwenden würde. Die verbleibenden 4 Indexbits (in diesem Beispiel) können entweder ignoriert oder verwendet werden, um zwischen benachbarten Einträgen zu interpolieren. Die Tabelle hätte eigentlich 1025 Einträge, also 1024 Segmente. Eine Sinuswelle angenähert mit 4096 (die Tabelle wird 4 mal über die ganze Sinuswelle verwendet) Schritten wäre ganz gut. Wenn die zusätzlichen Bits verwendet werden, um zwischen benachbarten Tabelleneinträgen zu interpolieren, ist es sogar noch besser. Stellen Sie sich eine Sinuswelle vor, die mit 4096 linearen Segmenten pro Zyklus angenähert wird. Es wäre sehr schwierig, einen Fehler zu erkennen.

Was die Genauigkeit betrifft, rechnen Sie nach. Eine Sinuswelle ändert sich am schnellsten bei einem Winkel von Null, daher ist es einfach, den schlimmsten Fehler aus nur einem dummen Nachschlagen in einer 1024-Punkte-Tabelle zu berechnen. Der erste Tabellenwert wäre 0 und der zweite Sinus (Pi/2048) = 0,00153. Der Worst-Case-Fehler ist daher die Hälfte davon oder 0,000767. Das entspricht einem Signal-Rausch-Verhältnis von 62 dB, und das nur aus der Auswahl eines Tabellenwerts ohne Interpolation. Die Verwendung der verbleibenden 4 Indexbits zum Interpolieren erhöht das Signal-Rausch-Verhältnis auf 86 dB. Wenn das nicht gut genug ist, verwenden Sie eine größere Zahl für den Winkel und interpolieren Sie mit den zusätzlichen Bits.

Auch die Frequenzauflösung ist kein Problem. Anscheinend denken einige, dass das Winkelinkrement pro Abtastung ein Vielfaches des Winkelschritts pro Tabelleneintrag sein muss. Das stimmt überhaupt nicht. Wenn Sie nur einen 16-Bit-Winkel und eine Tabelle mit 1024 Segmenten verwenden, erhalten Sie bereits eine 16-mal höhere Winkelauflösung als jeder Tabelleneintrag. In der Praxis würde ich wahrscheinlich zwei Wörter (in diesem Beispiel 32 Bit) für die Winkel und Winkelinkremente verwenden. Das bietet eine sehr hohe Frequenzauflösung und gibt Ihnen auch mehr Interpolationsbits, um das Signal-Rausch-Verhältnis zu erhöhen. Bei einer Abtastrate von 40 kHz würde ein 20-Hz-Ton (der schlimmste Fall) ein Winkelinkrement von 1/2000 Kreis pro Abtastung erfordern. Das ist ein Teil von 33, der 16-Bit-Winkel verwendet. Das allein könnte für viele Anwendungen ausreichen. Bei Verwendung eines 32-Bit-Winkels beträgt die Frequenzauflösung bei 20 Hz mehr als 1 Teil von 2 Millionen.

Lassen Sie uns also die Lookup-basierte Sinusgenerierung in der Firmware nicht so schnell verwerfen. Lassen Sie es uns zumindest nicht aus den falschen Gründen abtun. Beachten Sie, dass keines der Dinge, die ich beschrieben habe, für einen dsPIC schwierig wäre. Dies schließt Interpolation ein, da ein dsPIC in einem einzigen Befehlszyklus eine 16 x 16 in 32 Bit multiplizieren kann.

Sie bringen ein überzeugendes Argument vor, der Grund für den Versuch, analoge OSCs zu erstellen, ist, dass die Leute danach gefragt haben. Ich habe in der Vergangenheit in diesem Forum gefragt und Leute haben darüber gesprochen, dass sie einen digital gesteuerten analogen Synthesizer wollen.
Ich frage mich, ob die Leute die Drift und Ungenauigkeiten wollen, und wenn ja, sollten sie einfach in einen digitalen Sinuswellengenerator programmiert werden? hmmm, ich fange an, meine Meinung über die Verwendung von Analog für diese Anwendung zu ändern.
"und wird ein besseres Signal-Rausch-Verhältnis haben" ... vorausgesetzt, Sie implementieren es richtig
Cheers Endolith, das hat mir eine weitere Idee für die analoge Emulation gegeben - falsches Rauschen :)
@Jim - Wenn Sie das Geräusch mit einem Linear Congruential Generator (LCG) mit einer zu kurzen Zykluslänge erzeugen, erhalten Sie ein Motorbootgeräusch, das sie sicherlich davon überzeugen wird, dass es analog ist.
@stevenvh Schön, ich liebe es - also ist es eine Art Schleifenrauschen, also gibt es ein kleines Pulsieren? Das wäre ein tolles Feature, danke für all die coolen Ideen :)
@Olin danke für die Bearbeitung, du gehst wirklich die Extrameile! - Du hast mich schon überzeugt :)
Ist dies nur zum Erzeugen von Sinuswellen unter 40 Hz? Was ist, wenn 2 kHz erzeugt werden sollen, kann eine ähnliche Genauigkeit aufrechterhalten werden? Berücksichtigt Ihre Antwort auch den THD des DAC? Danke vielmals.
@rich: Der Algorithmus selbst ist frequenzunabhängig. Die Obergrenze hängt davon ab, wie schnell der Prozess ist. Wie gesagt, ich denke, ein 40 MIPS dsPIC sollte in der Lage sein, Audiofrequenzen einigermaßen einfach zu handhaben.
@OlinLathrop Danke für deine Antwort. Ich gehe davon aus, dass die Audiofrequenz im Bereich von 20 bis 20 kHz liegt (oder meinen Sie das nicht?). Wenn eine hochwertige 20-kHz-Sinuswelle erzeugt werden soll, muss der DAC mit 20 MHz abtasten. Und der SPI, der MCU und DAC verbindet, muss mindestens mit 320 MHz laufen, was schwer zu erreichen ist. Könnte ich deine Meinung haben?
@rich: HiFi-Audio geht bis 20 kHz, aber das erfordert nicht etwas mehr als 40 kHz Abtastrate. Ich habe keine Ahnung, woher Sie 20 MHz haben. Siehe Nyquist.
Sie haben 1028 Segmente pro Zyklus erwähnt, um qualitativ hochwertige Sinuswellen zu erzeugen. 20 kHz benötigen also eine Abtastrate von 20 MHz. Ist mein Verständnis richtig? Bei nur 40 kHz Abtastung muss es eine Menge Verzerrungen geben. Könnte ich deine Meinung haben?
@rich: Nein, Sie überspringen die Sinustabelle mit der Rate, um die gewünschte Frequenz zu erhalten. Ja, das führt zu einer erheblichen Verzerrung der höheren Frequenzen, aber diese Verzerrungskomponenten werden durch den Rekonstruktionsfilter entfernt (der in einigen Fällen nur Ihre Ohren sein kann). Auch hier müssen Sie wirklich verstehen, was Nyquist gesagt hat.

Der Grund für die Verwendung einer kleinen Glühlampe ist, dass sie einen positiven Temperaturkoeffizienten (PTC) hat, den der Oszillator benötigt, um die Amplitude zu stabilisieren. Das Potmeter geht nicht.
Der Gegenkopplungswiderstand sollte mindestens doppelt so hoch sein wie der PTC-Widerstand.

Die Oszillatorfrequenz wird durch die beiden Widerstände und zwei Kondensatoren am nichtinvertierenden Pin bestimmt, und der Schaltplan scheint einen Fehler zu haben: Beide Widerstände sollten gleich sein (entweder 4k7 oder 47k), ebenso wie die Kondensatoren. Die Frequenz ist

f = 1 2 π R C

Sie können also die Frequenz steuern, indem Sie ein Stereo-Potmeter für die Widerstände verwenden. Beide Kanäle sollten ein gutes Tracking haben.

Nach den Vorschlägen habe ich eine separate Antwort zu DDS gegeben , daher beziehen sich die Kommentare dazu tatsächlich auf diese Antwort.

Ich bin mir dieses Phänomens bewusst, ich habe den Topf, damit ich einen Sinus mit einer festen Frequenz erzeugen kann. Ich beabsichtige, eine Komponente mit einem PTC zu verwenden - nur wahrscheinlich keine Glühlampe. Danke für die Gleichung und die Tipps, ich werde sie mir ansehen.
Ein DDS-Chip ist eine nette Lösung, aber ich würde es nicht ablehnen, alles so schnell in einem Mikro zu machen. Das OP sagte, kompakt sei wichtig. Außerdem ist eine 1/4-Sinus-Nachschlagetabelle mit 1000 Intervallen sehr genau. Noch genauer mit Interpolation, aber mit 1000 Intervallen ist dies für viele Anwendungen möglicherweise nicht erforderlich. Das Tabelleninkrement pro Sample muss auch nicht ganzzahlig sein. Sie können Bruchbits verwenden, um eine beliebige Frequenzgenauigkeit zu erhalten.
Danke für die Bearbeitung, das hat mir wirklich geholfen, mich zu entscheiden, ich stimme voll und ganz zu – digital ist der Weg für diese spezielle Anwendung.
@Jim - (Wird mich das meine Punkte kosten? ;-)) Der 9851 erzeugt nur ein Signal, kann also eine teure Lösung sein, wenn Sie eine komplette Bank von Sinusgeneratoren wünschen. Jesper's MiniDDS könnte besser geeignet sein.
Stoopid Frage, gibt der AD9851 komplexe Wellenformen oder mehr als eine Sinuswelle aus? Brauche ich für jeden Oszillator einen Chip?
@stevenvh cool, danke für die Tipps, da muss ich noch ein bisschen rumkauen, ein bisschen umdenken. Ich hatte gehofft, ein Atmel-Mikro zum Programmieren und Steuern des Synthesizers mit Arduino einzubauen, Jespers DDS scheint eine gute Anlaufstelle zu sein :)
@Olin Lathrop, danke für die tollen Tipps zur Verwendung eines Wavetables, ich werde mir diesen Ansatz auf jeden Fall ansehen.
Das DDS sollte eine separate Antwort sein, damit die Leute unabhängig voneinander nach oben oder unten stimmen können
@endolith - fertig! (was meinst du: abstimmen??? :-))

Einige Leute haben vorgeschlagen, dass ich eine separate Antwort zum DDS hinzufüge. Also habe ich es aus meiner anderen Antwort extrahiert.

Olins Antwort ist vernünftig: Wir leben im digitalen Zeitalter. Wie er sagt, wird Ihr Signal viel stabiler sein (Kristallpräzision), aber die Verwendung eines Mikrocontrollers ist nicht die Lösung. Ihre Sinus-Nachschlagetabelle ist festgelegt und die Frequenzschritte sind möglicherweise zu grob.
Eine bessere Lösung ist DDS , Direct Digital Synthesis. Dies geschieht häufig mit speziellen DDS-ICs, wie dem AD9851 , und ermöglicht eine sehr hohe Frequenzsteuerung (je nach Takt bis zu einer Millihertz-Auflösung). Sie benötigen einen Mikrocontroller, um den Synthesizer zu steuern, daher ist dies weder die einfachste noch die billigste Anwendung. Aber es gibt gute Alternativen: Jesper Hansen entwarf eine einfache DDS-Implementierung auf Basis eines AVR-Controllers.

Es besteht keine Notwendigkeit, dass die Frequenzschritte grob sind. Natürlich ist die Sinus-Nachschlagetabelle festgelegt, aber das ist an sich kein Problem. Ich denke, es gibt ein Missverständnis der Lookup-Methode, deshalb habe ich in meiner Antwort mehr Details dazu hinzugefügt.
@Olin - Ja, du hast absolut recht (natürlich! :-)). Danke für deine Mühe es ausführlich zu erklären.

Ich würde Stevens und Olins Argumente an zweiter (oder dritter) Stelle nehmen. Obwohl es durchaus möglich ist, einen analogen Synthesizer zu bauen, stellt er uns vor erhebliche Herausforderungen. Ganz oben auf der Liste steht die Temperaturstabilität - Oszillatoren häufig neu abstimmen zu müssen, macht keinen Spaß, und ich schreibe aus persönlicher Erfahrung beim Bau eines traditionellen (subtraktiven) Synthesizers mit nur zwei Oszillatoren vor einigen Jahren.

Und wenn Sie sich für additive Synthese interessieren, vergessen Sie es! Sie werden mit viel zu vielen Oszillatoren jonglieren und mit der Frequenzdrift nicht Schritt halten können. Jetzt weiß ich, dass einige Leute wegen ihres fetten, freiphasigen Sounds immer noch analoge Synthesizer gegenüber digitalen bevorzugen, aber ich bin nicht überzeugt.

Es gibt einen Typen namens Doug Curtis, der 1979 eine Firma namens Curtis Electromusic Specialties gründete, um dedizierte ICs für die traditionellen Funktionen von VCOs, VCFs usw. herzustellen, und diese verlängerten wahrscheinlich die Lebensdauer analoger Synthesizer-Designs um einige Jahre, da sie weit weniger anfällig für driften (und Designs billiger machen), aber auch er erlag 1988 der digitalen Revolution. Es gibt immer noch alte Bestände seiner Chips, die bei eBay zu Spitzenpreisen verkauft werden!

Zum Thema FM-Klangsynthese war dies das Thema meiner BSc-Dissertation im Jahr 1981, und obwohl es mir gelang, eine analoge FM-Klang-„Engine“ zu entwickeln, kam ich zu dem Schluss, dass sie nicht mit einer digitalen Synthese-Engine mithalten konnte – und das war 30 vor Jahren!

Hey, noch jemand, der sich an Curtis Electromusic Specialties erinnert! Meine Güte, Mike, du bist alt! :-)
Ich schätze, ich muss meine digitalen Oszillatoren mit einem analogen Emulationsmodus machen, damit sie phasen und driften – das sollte die puritanischen Audiophilen glücklich machen. Danke für deinen Beitrag.
@stevenvh – „Erfahren“ ist das Wort, nach dem du gesucht hast! ( ... und das macht uns zu zweit :o)
@Jim - DDS arbeitet mit einem Phasenakkumulator, und ich denke, die meisten DDS-ICs haben einen Phasenmodulator (der AD9851), der dem Phasenakkumulator einen Offset hinzufügt. Sie haben also eine eingebaute Phasenmodulation.
@stevenvh cool - gut zu wissen, danke
@Jim: Sie sind vielleicht nur vom Wort "analog" mehr beeindruckt als von allen Funktionen, die es hat. Werfen Sie einfach ein paar Röhren hinein, die nichts tun, und sie werden sagen, dass es "einen wirklich warmen Röhrensound" hat.
@endolith lol, denke ich! Verdammte analoge Audiophile – ich frage mich, wie viele von ihnen die Cola/Pepsi-Challenge bestehen würden? nicht viele, vermute ich.
Weißt du aus Neugier, warum viele FM-Synthesizer eine begrenzte Auswahl an Frequenzverhältnissen hatten? War es einfach, die Anzahl der Registerbits zu minimieren, oder gab es einen wichtigeren Grund? Mein DX21 hat Ratios, die im Allgemeinen ziemlich grob sind, hat dann aber eine "Feineinstellung" mit einem Bereich, der bei weitem nicht groß genug ist, um die Lücke zwischen den meisten Ratios zu schließen, aber er erlaubt 7,00 und 7,07 als Frequenzverhältnis-Auswahl.

Hier ist ein Software-DDS-Ansatz, den ich verwendet habe, basierend auf Jesper Hansens MiniDDS, der eine Sinuswelle von bis zu 200 kHz oder so erzeugt. Filtern wäre in einigen Anwendungen nützlich.

Thx Leon, schönes Projekt, wie auch die selbstgebaute Platine - sieht in Weiß toll aus :)
Das ist ein billiges Papierverbundmaterial, das ich verwende, weil es viel einfacher zu schneiden und zu bohren ist als FR4.
Schön, ich bekomme eine ähnliche Art von Board aus meinem örtlichen Geschäft, aber es kommt in einem fiesen Gelb. Und Sie haben Recht – FR4 ist im Vergleich ein Albtraum. Ich habe den Papierverbund einfach mit einem Zimmermannsmesser geschnitten, das ist viel DIY-freundlicher.
@Leon, @Jim - diese Art von Board kann auch seine Probleme haben . Lesen und schaudern.