Frage:
Ist das ein geeigneter Sinuswellen-Osc? Wie würde ich die Frequenz steuern?
Jim
2011-07-08 16:06:23 UTC
view on stackexchange narkive permalink

Übersicht -

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

Ich habe mit der Herstellung einer Wien-Brücke begonnen Oszillator. Da ich mit einem einzigen Netzteil arbeite und versuche, das Design klein zu halten, habe ich den LM386n-1-IC verwendet.

Ich werde die Oszillatoren verwenden, um etwas Additiv zu machen Audiosynthese, vielleicht etwas FM und ich werde wahrscheinlich einige der Oszillatoren als LFOs benötigen.

Meine Fragen sind:

Ist dies ein geeigneter Ansatz für die Herstellung eines kompakten analogen Sinusoszillators ?

Wie würden Sie mir auch vorschlagen, die Frequenz zu steuern. 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, an der ich gearbeitet habe, sie stammt vom National Semiconductor LM386 Low Voltage Audio Leistungsverstärker-Datenblatt-

wien bridge LM386

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

my wien bridge LM386

Fünf antworten:
Olin Lathrop
2011-07-08 16:36:06 UTC
view on stackexchange narkive permalink

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

Heutzutage ist es dumm, 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. In Ihrem ersten Satz wird erwähnt, dass Sie eine ganze Reihe dieser Dinge möchten, und b> Sie möchten, dass das Design kompakt ist. 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 digital zu addieren. Sie können alle dieselbe 1/4-Wellen-Sinustabelle verwenden und nur in unterschiedlichen Inkrementen pro Sample indizieren, um die unterschiedlichen Frequenzen zu erhalten.

Dies liegt sogar innerhalb der Möglichkeiten von Low-End-DSPs wie dem Microchip dsPIC-Leitung. Ein dsPIC33F klingt nach einer guten Passform. Bei 40 MIPS haben Sie 1000 Befehlszyklen pro Abtastung bei einer Abtastrate von 40 kHz. Das ist eine Menge und ermöglicht es, jeder Probe viele verschiedene Sinusse hinzuzufügen. Mit der DSP-Hardware für die Mehrfachakkumulation kann jeder Beitrag problemlos mit seiner eigenen Verstärkung addiert werden.

Digital abgeleitete Signale wie diese driften nicht in Frequenz oder Amplitude und weisen ein besseres Signal-Rausch-Verhältnis auf. Mit 16-Bit-Zahlen erhalten Sie 96 dB. Das ist analog machbar, wenn Sie vorsichtig sind. Die Genauigkeit des digitalen Signals ist jedoch weitaus größer. Es gibt überhaupt keine Chance, dass die analogen Sinusgeneratoren innerhalb von 1 Teil von 65000 pro Probe liegen können, nur aufgrund der unvorhersehbaren Amplitude allein. Die Frequenz der digitalen Signale kann auch sehr genau eingestellt werden, und der digitale Sinus-Synthesizer benötigt nicht einige Zyklen, um sich zu stabilisieren, bevor seine Ausgabe Ihren Erwartungen entspricht.

Bearbeiten: Erläuterung zur Sinuserzeugung

Ich sehe einige Nachteile der Sinusgenerierung bei der Tabellensuche, die in anderen Antworten erwähnt werden und falsch sind. Daher füge ich hier weitere Erläuterungen zur Methode hinzu. Es wurden zwei Einwände erhoben: Genauigkeit und Frequenzauflösung.

Lassen Sie mich zunächst die normale Struktur einer Sinussuche erläutern. Beachten Sie, dass eine Sinuswelle vierfach symmetrisch ist. Sie müssen daher nur 1/4 Zyklus speichern. Die grundlegende Wellenform des ersten Quadranten wird in den verbleibenden drei 1/4 Zyklen entweder umgekehrt, negiert oder beides wiederholt. Ein guter Trick, um dies zu vereinfachen, besteht darin, den Winkel so auszudrücken, dass ein voller Kreis eine Zweierpotenz ist, vorzugsweise mit dem gesamten Wort der Maschine, auf der der Code ausgeführt wird. Das bedeutet, dass Winkeladditionen und Subtraktionen automatisch ohne expliziten Code um den Kreis gewickelt werden, wenn Sie die Winkelberechnung in vorzeichenloser Ganzzahlarithmetik durchführen. Diese Darstellung macht auch das Nachschlagen in die 1/4 Wellentabelle sehr einfach.

Die zwei hohen Bits des Winkels geben den Quadranten an, sodass nur die verbleibenden unteren Bits zum Indizieren in die Tabelle verwendet werden. Wenn das Bit mit dem höchsten Winkel 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 Ergänzen 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. Zum Beispiel 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 zum Indizieren in der Tabelle, 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, die 10 Indexbits verwenden würden. Die verbleibenden 4 Indexbits (in diesem Beispiel) können entweder ignoriert oder zum Interpolieren zwischen benachbarten Einträgen verwendet werden. Die Tabelle hätte tatsächlich 1025 Einträge, was 1024 Segmente bedeutet. Eine mit 4096 angenäherte Sinuswelle (die Tabelle wird viermal über die gesamte Sinuswelle verwendet) wäre ziemlich gut. Wenn die zusätzlichen Bits zum Interpolieren zwischen benachbarten Tabelleneinträgen verwendet werden, ist dies sogar noch besser. Stellen Sie sich eine Sinuswelle vor, die mit 4096 linearen Segmenten pro Zyklus approximiert wird. Es wäre sehr schwierig, einen Fehler zu erkennen.

Berechnen Sie die Genauigkeit. Eine Sinuswelle ändert sich am schnellsten im Winkel Null, sodass es einfach ist, den Worst-Case-Fehler aus einer blöden Suche in eine 1024-Punkt-Tabelle zu berechnen. Der erste Tabellenwert wäre 0 und der zweite Sinus (Pi / 2048) = 0,00153. Der Worst-Case-Fehler ist daher halb so hoch oder .000767. Dies entspricht einem Signal-Rausch-Verhältnis von 62 dB, und zwar nur durch Auswahl eines Tabellenwerts ohne Interpolation. Die Verwendung der verbleibenden 4 Indexbits zur Interpolation erhöht das Signal-Rausch-Verhältnis auf 86 dB. Wenn dies nicht gut genug ist, verwenden Sie eine breitere Zahl für den Winkel und interpolieren Sie mit den zusätzlichen Bits.

Die Frequenzauflösung ist ebenfalls kein Problem. Anscheinend denken einige, dass das Winkelinkrement pro Probe ein Vielfaches des Winkelschritts pro Tabelleneintrag sein muss. Das stimmt überhaupt nicht. Wenn Sie nur einen 16-Bit-Winkel und eine 1024-Segmenttabelle verwenden, erhalten Sie bereits eine 16-mal höhere Winkelauflösung als bei jedem Tabelleneintrag. In der Praxis würde ich wahrscheinlich zwei Wörter (32 Bit in diesem Beispiel) für die Winkel und Winkelinkremente verwenden. Dies bietet eine sehr hohe Frequenzauflösung und mehr Interpolationsbits, um das Signal-Rausch-Verhältnis zu erhöhen. Bei einer Abtastrate von 40 kHz würde ein 20-Hz-Ton (im schlimmsten Fall) ein Winkelinkrement von 1/2000 Kreis pro Abtastung erfordern. Das ist ein Teil von 33 verwendet 16-Bit-Winkel. Das allein könnte für viele Anwendungen gut genug sein. Wenn Sie einen 32-Bit-Winkel verwenden, 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 schließen. Lassen Sie es uns zumindest nicht aus den falschen Gründen ablehnen. Beachten Sie, dass keines der von mir beschriebenen Dinge für einen dsPIC schwierig ist. Dies schließt eine Interplation ein, da ein dsPIC in einem einzelnen Befehlszyklus eine Multiplikation von 16 x 16 in 32 Bit durchführen kann.

Sie machen ein überzeugendes Argument, der Grund für den Versuch, analoge Osc zu machen, ist, dass die Leute sie angefordert haben. Ich habe in der Vergangenheit in diesem Forum gefragt und die Leute haben darüber gesprochen, einen digital gesteuerten analogen Synthesizer zu wollen.
Ich frage mich, ob die Leute die Drift und Ungenauigkeiten wollen, und wenn ja, sollten sie einfach in einen digitalen Sinusgenerator programmiert werden? hummm, 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 andere 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 überzeugt, dass es analog ist.
@stevenvh Schön, ich liebe es - also ist es wie ein Schleifengeräusch, also ist ein wenig Pulsieren los? Das wäre eine großartige Funktion, 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 zur Erzeugung von Sinuswellen unter 40 Hz?Was ist, wenn 2 kHz erzeugt werden sollen, kann eine ähnliche Genauigkeit beibehalten werden?Und berücksichtigt Ihre Antwort auch den DAC THD?Vielen Dank.
@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 relativ leicht mit Audiofrequenzen umgehen können.
@OlinLathrop Vielen Dank für Ihre Antwort.Ich gehe davon aus, dass die Audiofrequenz zwischen 20 und 20 kHz liegt (oder meinen Sie das nicht?).Wenn eine hochwertige 20-kHz-Sinuswelle erzeugt werden soll, muss der DAC mit 20 MHz abtasten.Die SPI-Verbindung zwischen MCU und DAC muss mindestens 320 MHz betragen, was schwer zu erreichen ist.Könnte ich Ihre Meinung haben?
@rich: HiFi-Audio geht auf 20 kHz, aber das erfordert nicht etwas mehr als 40 kHz Abtastrate.Ich habe keine Ahnung, woher du 20 MHz hast.Siehe Nyquist.
Sie haben 1028 Segmente pro Zyklus erwähnt, um hochwertige Sinuswellen zu erzeugen.20 kHz benötigen also eine Abtastrate von 20 MHz.Ist mein Verständnis richtig?Von nur einer Probe bei 40 kHz muss es eine große Verzerrung geben.Könnte ich Ihre Meinung haben?
@rich: Nein, Sie überspringen die Sinustabelle mit der Rate, um die gewünschte Frequenz zu erhalten.Ja, dies führt zu einer erheblichen Verzerrung höherer Frequenzen, aber diese Verzerrungskomponenten werden vom Rekonstruktionsfilter entfernt (der in einigen Fällen nur Ihre Ohren sein kann).Auch hier müssen Sie wirklich verstehen, was Nyquist gesagt hat.
stevenvh
2011-07-08 16:21:35 UTC
view on stackexchange narkive permalink

Der Grund für die Verwendung einer kleinen Glühlampe ist, dass sie einen positiven Temperaturkoeffizienten (PTC) hat, den der Oszillator zur Stabilisierung der Amplitude benötigt. Das Potentiometer funktioniert nicht.
Der Gegenkopplungswiderstand sollte mindestens doppelt so groß sein wie der Widerstand des PTC.

Die Oszillatorfrequenz wird durch die zwei 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 = \ dfrac {1} {2 \ pi RC} \ $

Sie können die Frequenz also mit a steuern Stereo-Potentiometer für die Widerstände. Beide Kanäle sollten eine gute Verfolgung haben.

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

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. Vielen Dank für die Gleichung und Tipps, ich werde sie überprüfen.
Ein DDS-Chip ist eine gute Lösung, aber ich würde es nicht ablehnen, alles so schnell in einem Mikro zu erledigen. Das OP sagte, Kompakt sei wichtig. Außerdem ist eine 1/4 Sinus-Nachschlagetabelle mit 1000 Intervallen sehr genau. Noch genauer bei der Interpolation, jedoch mit 1000 Intervallen, ist dies für viele Anwendungen möglicherweise nicht erforderlich. Das Tabelleninkrement pro Sample muss ebenfalls nicht ganzzahlig sein. Sie können Bruchbits verwenden, um eine beliebige Frequenzgenauigkeit zu erhalten.
Vielen Dank 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 - (Kostet mich das meine Punkte? ;-)) Der 9851 erzeugt nur ein Signal und ist daher möglicherweise eine teure Lösung, wenn Sie eine komplette Bank von Sinusgeneratoren benötigen. Jespers MiniDDS ist möglicherweise besser geeignet.
Stoopid Frage, gibt der AD9851 komplexe Wellenformen oder mehr als eine Sinuswelle aus? würde ich einen Chip für jeden Oszillator benötigen?
@stevenvh cool, danke für die Tipps, ich muss es ein bisschen durchkauen, ein bisschen umdenken. Ich hatte gehofft, ein Atmel-Mikro für die Programmierung und Steuerung des Synthesizers mit Arduino zu haben. Jespers DDS scheint eine gute Anlaufstelle zu sein :)
@Olin Lathrop, Danke für die tollen Tipps zur Verwendung eines Wellentisches. Ich werde mir diesen Ansatz auf jeden Fall ansehen.
Das DDS sollte eine separate Antwort sein, damit die Leute es unabhängig nach oben oder unten abstimmen können
@endolith - fertig! (was meinst du: abstimmen ??? :-))
stevenvh
2011-07-08 19:23:00 UTC
view on stackexchange narkive permalink

Einige Leute schlugen vor, eine separate Antwort zum DDS hinzuzufügen. Also habe ich es aus meiner anderen Antwort extrahiert.

Olins Antwort ist vernünftig: Dies ist das digitale 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 fest und die Frequenzschritte sind möglicherweise zu grob.
Eine bessere Lösung ist DDS , Direct Digital Synthesis. Dies wird häufig mit speziellen DDS-ICs wie AD9851 durchgeführt und ermöglicht eine sehr hohe Frequenzsteuerung (abhängig von der Taktrate bis zur Milli-Hertz-Auflösung). Sie benötigen einen Mikrocontroller, um den Sysnthesizer zu steuern, sodass er weder die einfachste noch die billigste Anwendung ist. Es gibt jedoch gute Alternativen: Jesper Hansen entwarf eine einfache DDS-Implementierung basierend auf einem AVR-Controller.

Es ist nicht erforderlich, dass die Frequenzschritte grob sind. Natürlich ist die Sinus-Nachschlagetabelle behoben, aber das ist an sich kein Problem. Ich denke, es gibt ein Missverständnis der Suchmethode, deshalb habe ich in meiner Antwort mehr Details dazu hinzugefügt.
@Olin - Ja, du hast absolut Recht (natürlich! :-)). Vielen Dank für Ihre Bemühungen, dies im Detail zu erklären.
MikeJ-UK
2011-07-08 18:37:05 UTC
view on stackexchange narkive permalink

Ich würde die Argumente von Steven und Olin unterstützen (oder an dritter Stelle). Obwohl es durchaus möglich ist, einen analogen Synthesizer zu bauen, ist dies mit erheblichen Herausforderungen verbunden. Ganz oben auf der Liste steht die Temperaturstabilität - es macht keinen Spaß, Oszillatoren häufig neu abzustimmen, und ich schreibe aus eigener Erfahrung beim Bau eines traditionellen (subtraktiven) Synthesizers mit nur zwei Oszillatoren vor einigen Jahren.

Und wenn ja Lust auf additive Synthese, vergiss es! Sie werden viel zu viele Oszillatoren jonglieren und mit der Frequenzdrift nicht Schritt halten können. Jetzt weiß ich, dass einige Leute wegen ihres fetten Freiphasensounds immer noch analoge Synthesizer gegenüber digitalen bevorzugen, aber ich bin nicht überzeugt.

Es gibt einen Mann namens Doug Curtis, der eine Firma namens Curtis Electromusic gegründet hat Spezialitäten im Jahr 1979 zur Herstellung dedizierter ICs für die traditionellen Funktionen von VCOs, VCFs usw., die wahrscheinlich die Lebensdauer von analogen Synthesizer-Designs um einige Jahre verlängerten, da sie weitaus weniger anfällig für Drift waren (und Designs billiger machten), aber sogar 1988 erlag er der digitalen Revolution. Es gibt immer noch einen alten Bestand seiner Chips, um die es bei eBay zu Premiumpreisen geht!

Zum Thema FM-Klangsynthese war dies das Thema meiner BSc-Dissertation in 1981 und obwohl ich es geschafft habe, eine analoge FM-Sound-Engine zu entwickeln, kam ich zu dem Schluss, dass sie nicht mit einer digitalen Synthese-Engine mithalten kann - und das war vor 30 Jahren!

Hey, jemand anderes, der sich an Curtis Electromusic Specialties erinnert! Gee, Mike, du bist alt! :-)
Ich denke, ich muss meine digitalen Oszillatoren mit einem analogen Emulationsmodus herstellen, damit sie phasenweise und driften - das sollte die puritanischen Audiophilen glücklich machen. Danke für deinen Beitrag.
@stevenvh - 'Erfahren' ist das Wort, nach dem Sie gesucht haben! (... und das macht zwei von uns: o)
@Jim - DDS arbeitet mit einem Phasenakkumulator, und ich denke, die meisten DDS-ICs werden einen Phasenmodulator haben (der AD9851 tut dies), der dem Phasenakkumulator einen Offset hinzufügt. Sie haben also eine eingebaute Phasenmodulation.
@stevenvh cool - gut zu wissen, danke
@Jim: Das Wort "analog" beeindruckt sie möglicherweise mehr als alle anderen Funktionen. Werfen Sie einfach ein paar Röhren hinein, die nichts bewirken, und sie werden sagen, dass es "einen wirklich warmen Röhrensound" hat.
@endolith lol, ich denke! Verdammt analoge Audiophile - ich frage mich, wie viele von ihnen die Cola / Pepsi-Herausforderung bestehen würden. Ich vermute nicht viele.
Wissen Sie 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 größeren Grund?Mein DX21 hat Verhältnisse, die im Allgemeinen ziemlich grob sind, aber dann eine "Feineinstellung" mit einem Bereich haben, der bei weitem nicht groß genug ist, um die Lücke zwischen den meisten Verhältnissen zu schließen, aber es erlaubt 7.00 und 7.07 als Frequenzverhältnisauswahl.
Leon Heller
2011-07-08 18:51:44 UTC
view on stackexchange narkive permalink

Hier ist ein Software-DDS-Ansatz, den ich verwendet habe und der auf Jesper Hansens MiniDDS basiert und der eine Sinuswelle von bis zu 200 kHz erzeugt. In einigen Anwendungen ist eine Filterung hilfreich.

Thx Leon, schönes Projekt, wie die selbstgemachte Leiterplatte auch - sie sieht toll aus in Weiß :)
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 Laden, aber es kommt in einem bösen Gelb. Und Sie haben Recht - FR4 ist ein Albtraum im Vergleich. Ich habe den Papierverbund einfach mit einem Tischlermesser geschnitten, er ist viel DIY-freundlicher.
@Leon, @Jim - dieser Board-Typ kann auch [seine Probleme] haben (http://electronics.stackexchange.com/questions/8129/how-do-components-fail/8154#8154). Lesen und schaudern.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...