Question:
Est-ce un osc sinusoïdal approprié? comment pourrais-je contrôler la fréquence?
Jim
2011-07-08 16:06:23 UTC
view on stackexchange narkive permalink

Vue d'ensemble-

Je fabrique une banque d'oscillateurs sinusoïdaux analogiques et je souhaite garder le design compact.

J'ai commencé par créer un pont de Wien oscillateur. Comme je travaille avec une seule alimentation et que j'essaie de garder la conception petite, j'ai utilisé le CI LM386n-1.

J'utiliserai les oscillateurs pour faire un peu d'additif synthèse audio, peut-être un peu de FM et j'aurai probablement besoin de certains oscillateurs comme LFO.

Mes questions sont-

Est-ce une approche appropriée pour créer un oscillateur sinusoïdal analogique compact ?

Aussi, comment suggéreriez-vous que je contrôle la fréquence, quelle valeur de composant doit être modifiée pour y parvenir? - J'ai essayé de jouer avec toutes les résistances pour changer la hauteur, mais elles semblent toutes interdépendantes.

Voici le circuit sur lequel j'ai travaillé, il provient du National Semiconductor LM386 Low Voltage Audio Fiche technique de l'amplificateur de puissance -

wien bridge LM386

Et voici à quoi ressemble ma mise en œuvre, je n'ai pas d'ampoule à incandescence appropriée donc je viens de la remplacer par un pot 1KΩ . Je ne suis toujours pas sûr de ce que j'utiliserai dans le circuit final en tant qu'AGC, les suggestions sont les bienvenues.

my wien bridge LM386

Cinq réponses:
Olin Lathrop
2011-07-08 16:36:06 UTC
view on stackexchange narkive permalink

Cela ne répond pas à ce que vous avez demandé, mais je pense que cela résout le problème de manière pertinente.

De nos jours, faire cela en analogique est ridicule, sauf peut-être pour certaines applications très spécialisées ou à haute fréquence. Vous avez mentionné qu'il s'agit d'une application audio, donc je ne peux pas imaginer une bonne raison pour tout l'analogique. Votre première phrase mentionne que vous voulez une banque complète de ces choses, et vous voulez le design compact. L'approche analogique ne sera certainement pas compacte. Un autre problème avec l'approche analogique est que les fréquences et les amplitudes vont dériver.

Une bien meilleure façon de faire est de générer toutes les ondes sinusoïdales dans un processeur et de les additionner numériquement. Ils peuvent tous utiliser la même table sinusoïdale 1/4 d'onde, il suffit de l'indexer à différents incréments par échantillon pour obtenir les différentes fréquences.

Ceci est bien dans la capacité même des DSP bas de gamme, comme le Microchip ligne dsPIC. Un dsPIC33F semble être un bon ajustement. À 40 MIPS, vous disposez de 1000 cycles d'instructions par échantillon à une fréquence d'échantillonnage de 40 kHz. C'est beaucoup et cela permettra d'ajouter de nombreux sinus différents à chaque échantillon. Le matériel de multiplication-accumulation DSP permettra d'ajouter facilement chaque contribution avec son propre gain.

Les signaux dérivés numériquement comme celui-ci ne dériveront pas en fréquence ou en amplitude, et auront un meilleur rapport signal sur bruit. Avec des nombres de 16 bits, vous obtenez 96 dB. C'est faisable en analogique si vous faites attention. Cependant, la précision du signal numérique sera beaucoup plus grande. Il n'y a aucune chance que tous les générateurs sinusoïdaux analogiques puissent être à 1 partie sur 65000 chaque échantillon juste en raison de l'imprévisibilité d'amplitude seule. La fréquence des signaux numériques peut également être réglée très précisément, et le synthétiseur sinusoïdal numérique n'aura pas besoin de quelques cycles pour se stabiliser avant que sa sortie soit ce que vous attendez.

Edit: Clarification sur la génération sinusoïdale

Je vois quelques inconvénients de la génération sinusoïdale de recherche de table mentionnés dans d'autres réponses qui sont incorrects, donc j'ajoute plus de précisions sur la méthode ici. Deux objections ont été soulevées, la précision et la résolution de fréquence.

Permettez-moi d'abord d'expliquer la structure normale d'une recherche sinusoïdale. Notez qu'une onde sinusoïdale est symétrique à quatre voies. Il vous suffit donc de stocker 1/4 de cycle. La forme d'onde de base du premier quadrant est répétée soit inversée, soit inversée, soit les deux dans les trois 1/4 cycles restants. Une bonne astuce pour rendre cela facile est d'exprimer l'angle de telle sorte qu'un cercle complet soit une puissance de deux, de préférence en utilisant le mot entier de la machine qui exécute le code. Cela signifie que les additions et les soustractions d'angle s'enroulent automatiquement autour du cercle sans code explicite à cet effet si vous faites le calcul des angles en arithmétique d'entiers non signés. Cette représentation facilite également la recherche dans la table 1/4 d'onde.

Les deux bits hauts de l'angle indiquent le quadrant, donc seuls les bits inférieurs restants sont utilisés pour l'indexation dans la table. Si le bit d'angle le plus élevé est défini, le résultat de la table est annulé. Si le bit suivant le plus élevé est défini, la table est indexée en arrière. C'est aussi simple que de compléter les bits faibles restants avant de les utiliser comme index. La table n'a pas besoin d'être de la taille telle que tous les bits de poids faible puissent être utilisés comme index. Par exemple sur une machine 16 bits comme un dsPIC, il serait naturel d'utiliser 16 bits pour l'angle. Cela laisse 14 bits à indexer dans la table, ce qui serait une très grande table. En règle générale, et dans ce cas, une table aussi grande n'est pas nécessaire. Une taille raisonnable pourrait être de 1024 segments, qui utiliseraient 10 bits d'index. Les 4 bits d'index restants (dans cet exemple) peuvent être ignorés ou utilisés pour interpoler entre les entrées adjacentes. La table aurait en fait 1025 entrées, ce qui signifie 1024 segments. Une onde sinusoïdale approximée à 4096 (la table s'utilise 4 fois sur toute l'onde sinusoïdale) serait assez bonne. Si les bits supplémentaires sont utilisés pour interpoler entre les entrées de table adjacentes, c'est encore mieux. Imaginez une onde sinusoïdale approximée avec 4096 segments linéaires par cycle. Il serait très difficile de voir une erreur.

En ce qui concerne la précision, faites le calcul. Une onde sinusoïdale change le plus rapidement à un angle nul, il est donc facile de calculer l'erreur le plus défavorable à partir d'une simple recherche stupide dans une table de 1024 points. La première valeur de la table serait 0 et le deuxième sinus (Pi / 2048) = .00153. Le pire des cas d'erreur est donc la moitié de cela, soit 0,000767. Cela équivaut à un rapport signal sur bruit de 62 dB, et c'est simplement en choisissant une valeur de table sans interpolation. L'utilisation des 4 bits d'index restants pour interpoler augmente le rapport signal sur bruit à 86 dB. Si cela ne suffit pas, utilisez un nombre plus grand pour l'angle et interpolez en utilisant les bits supplémentaires.

La résolution de fréquence n'est pas non plus un problème. Apparemment, certains pensent que l'incrément d'angle par échantillon doit être un multiple du pas d'angle par entrée de table. Ce n'est pas vrai du tout. L'utilisation d'un simple angle de 16 bits et d'une table de 1024 segments vous donne déjà 16 fois plus de résolution angulaire que chaque entrée de table. En pratique, j'utiliserais probablement deux mots (32 bits dans cet exemple) pour les angles et les incréments d'angle. Cela fournit une résolution de très haute fréquence et vous donne également plus de bits d'interpolation pour augmenter le rapport signal sur bruit. À une fréquence d'échantillonnage de 40 kHz, une tonalité de 20 Hz (le pire des cas) nécessiterait un incrément d'angle de 1/2 000 cercle par échantillon. C'est une partie sur 33 qui utilise des angles de 16 bits. Cela seul pourrait être suffisant pour de nombreuses applications. Si vous utilisez un angle de 32 bits, la résolution de fréquence à 20 Hz est supérieure à 1 partie sur 2 millions.

Donc, ne rejetons pas si rapidement la génération sinusoïdale basée sur la recherche dans le firmware. Au moins ne la rejetons pas pour les mauvaises raisons. Notez qu'aucune des choses que j'ai décrites ne serait difficile à faire pour un dsPIC. Cela inclut l'interplation car un dsPIC peut effectuer une multiplication 16 x 16 en 32 bits en un seul cycle d'instructions.

Vous faites un argument convaincant, la raison pour laquelle vous essayez de créer des osc analogiques est que les gens les ont demandées. J'ai demandé dans le passé sur ce forum et les gens ont parlé de vouloir un synthé analogique numérique contrôlé.
Je me demande si les gens veulent la dérive et les inexactitudes, et si oui, devraient-ils simplement être programmés dans un générateur sinusoïdal numérique? hummm, je commence à changer d'avis sur l'utilisation de l'analogique pour cette application.
"et aura un meilleur rapport signal sur bruit" ... en supposant que vous l'implémentiez correctement
Salut Endolith, cela m'a donné une autre idée pour l'émulation analogique - faux bruit :)
@Jim - Si vous créez le bruit avec un générateur linéaire congruentiel (LCG) avec une longueur de cycle trop courte, vous obtenez un son de motonautisme, ce qui les convaincra sûrement qu'il est analogique.
@stevenvh Nice, j'adore ça - donc c'est un peu comme du bruit en boucle, donc il y a un peu de pulsations? Ce serait une excellente fonctionnalité, merci pour toutes les bonnes idées :)
Merci @Olin pour l'édition, vous allez vraiment plus loin! - Vous m'avez déjà convaincu :)
Est-ce uniquement pour générer des ondes sinusoïdales inférieures à 40 Hz?Et si 2 kHz doivent être générés, une précision similaire peut-elle être maintenue?Et aussi, votre réponse considère-t-elle le DAC THD?Merci beaucoup.
@rich: L'algorithme lui-même est indépendant de la fréquence.Sa limite supérieure dépend de la rapidité du processus.Comme je l'ai dit, je pense qu'un dsPIC 40 MIPS devrait être capable de gérer les fréquences audio assez facilement.
@OlinLathrop Merci pour votre réponse.Je suppose que la fréquence audio varie de 20 à 20 kHz (ou ce n'est pas ce que vous voulez dire?).Si une onde sinusoïdale de 20 kHz de haute qualité doit être générée, le DAC doit échantillonner à 20 MHz.Et le SPI reliant le MCU et le DAC doit fonctionner au moins à 320 MHz, ce qui est difficile à réaliser.Puis-je avoir votre avis?
L'audio HiFi @rich: passe à 20 kHz, mais cela ne nécessite pas un peu plus de fréquence d'échantillonnage de 40 kHz.Je n'ai aucune idée d'où vous avez obtenu 20 MHz.Voir Nyquist.
Vous avez mentionné 1 028 segments par cycle pour produire des ondes sinusoïdales de haute qualité.Donc, 20 kHz a besoin d'un taux d'échantillonnage de 20 MHz.Ma compréhension est-elle correcte?Du seul échantillon à 40khz il doit y avoir beaucoup de distorsion.Puis-je avoir votre avis?
@rich: Non, vous passez à travers la table sinusoïdale au rythme pour obtenir la fréquence désirée.Oui, cela entraîne une distorsion considérable des fréquences plus élevées, mais ces composants de distorsion sont supprimés par le filtre de reconstruction (qui peut être juste vos oreilles dans certains cas).Encore une fois, vous devez vraiment comprendre ce que Nyquist a dit.
stevenvh
2011-07-08 16:21:35 UTC
view on stackexchange narkive permalink

La raison de l'utilisation d'une petite lampe à incandescence est qu'elle a un coefficient de température positif (PTC), dont l'oscillateur a besoin pour stabiliser l'amplitude. Le potentiomètre ne fera pas l'affaire.
La résistance de rétroaction négative doit être au moins le double de la résistance du PTC.

La fréquence de l'oscillateur est déterminée par les deux résistances et les deux condensateurs sur la broche non inverseuse, et le schéma semble avoir une erreur: les deux résistances doivent être égales (4k7 ou 47k), tout comme le condensateurs. La fréquence est

\ $ f = \ dfrac {1} {2 \ pi RC} \ $

Vous pouvez donc contrôler la fréquence en utilisant un potmètre stéréo pour les résistances. Les deux canaux doivent avoir un bon suivi.

Suite aux suggestions, j'ai fait une réponse distincte à propos de DDS , donc les commentaires à ce sujet font référence à cette réponse.

Je suis conscient de ce phénomène, j'ai le pot pour pouvoir produire un sinus à une fréquence fixe. J'ai l'intention d'utiliser un composant avec un PTC - probablement pas une lampe à incandescence. Merci pour l'équation et les conseils, je vais les vérifier.
Une puce DDS est une bonne solution, mais je n'oublierais pas de tout faire dans un micro si rapidement. Le PO a dit que le compact était important. En outre, une table de recherche sinusoïdale 1/4 d'intervalle de 1000 sera très précise. Encore plus précis avec l'interpolation, mais avec 1000 intervalles peut ne pas être nécessaire pour de nombreuses applications. L'incrément de table par échantillon n'a pas besoin non plus d'être un entier. Vous pouvez utiliser des bits de fraction pour obtenir une précision de fréquence arbitraire.
Merci pour le montage, cela m'a vraiment aidé à me décider, je suis tout à fait d'accord - le numérique est la voie pour cette application particulière.
@Jim - (Est-ce que cela va me coûter mes points? ;-)) Le 9851 ne génère qu'un seul signal, donc peut-être une solution coûteuse si vous voulez une banque complète de générateurs sinusoïdaux. Le MiniDDS de Jesper peut être plus approprié.
Question Stoopid, est-ce que l'AD9851 produit des formes d'onde complexes ou plus d'une onde sinusoïdale? aurais-je besoin d'une puce pour chaque oscillateur?
@stevenvh cool, merci pour les conseils, je vais devoir le mâcher un peu, repenser un peu. J'espérais inclure un micro Atmel pour la programmation et le contrôle du synthé à l'aide d'Arduino, le DDS de Jesper ressemble à un bon port d'escale :)
@Olin Lathrop, merci pour les excellents conseils sur l'utilisation d'une table d'onde, je vais certainement jeter un coup d'œil à cette approche.
Le DDS devrait être une réponse distincte afin que les gens puissent voter indépendamment
@endolith - c'est fait! (que voulez-vous dire: voter contre ??? :-))
stevenvh
2011-07-08 19:23:00 UTC
view on stackexchange narkive permalink

Quelques personnes ont suggéré que j'ajoute une réponse distincte sur le DDS. Alors je l'ai extrait de mon autre réponse.

La réponse d'Olin est sensée: c'est l'ère numérique. Comme il le dit, votre signal sera beaucoup plus stable (précision cristalline), mais l'utilisation d'un microcontrôleur n'est pas la solution; votre table de recherche sinusoïdale est fixe et les pas de fréquence sont peut-être trop grossiers.
Une meilleure solution est DDS , Direct Digital Synthesis. Ceci est souvent fait avec des CI DDS spéciaux, comme AD9851, et permet un très haut niveau de contrôle de fréquence (en fonction de l'horloge jusqu'à une résolution milliHertz). Vous aurez besoin d'un microcontrôleur pour contrôler le sysnthesizer, donc ce ne sera pas l'application la plus simple, ni la moins chère. Mais il existe de bonnes alternatives: Jesper Hansen a conçu une implémentation DDS simple basée sur un contrôleur AVR.

Il n'est pas nécessaire que les échelons de fréquence soient grossiers. Bien sûr, la table de recherche sinusoïdale est fixe, mais ce n'est pas un problème en soi. Je pense qu'il y a un malentendu sur la méthode de recherche, j'ai donc ajouté plus de détails à ce sujet dans ma réponse.
@Olin - Oui, vous avez absolument raison (bien sûr! :-)). Merci pour vos efforts pour expliquer en détail.
MikeJ-UK
2011-07-08 18:37:05 UTC
view on stackexchange narkive permalink

Je soutiendrais (ou troisième) les arguments de Steven et Olin. S'il est parfaitement possible de construire un synthétiseur analogique, cela pose des défis importants. Le haut de la liste est la stabilité de la température - avoir à réaccorder fréquemment les oscillateurs n'est pas amusant et j'écris à partir de mon expérience personnelle dans la construction d'un synthétiseur traditionnel (soustractif) avec seulement deux oscillateurs il y a quelques années.

Et si vous êtes passionné de synthèse additive, oubliez ça! Vous allez jongler avec beaucoup trop d'oscillateurs et vous ne pourrez pas suivre la dérive de fréquence. Maintenant, je sais que certaines personnes préfèrent encore les synthétiseurs analogiques au numérique pour leur gros son en phase libre, mais je ne suis pas convaincu.

Il y a un type appelé Doug Curtis qui a fondé une société appelée Curtis Electromusic Spécialités en 1979 pour produire des circuits intégrés dédiés aux fonctions traditionnelles des VCO, des VCF, etc. et ceux-ci ont probablement prolongé la durée de vie des conceptions de synthétiseurs analogiques de quelques années en étant beaucoup moins sujettes à la dérive (et en rendant les conceptions moins chères), mais même il a succombé à la révolution numérique en 1988. Il y a encore un vieux stock de ses puces autour duquel vont des prix premium sur eBay!

Au sujet de la synthèse sonore FM, c'était le sujet de ma thèse de BSc en 1981 et alors que j'ai réussi à développer un «moteur» de son FM analogique, mes conclusions étaient qu'il ne pouvait pas correspondre à un moteur de synthèse numérique - et c'était il y a 30 ans!

Hé, quelqu'un d'autre qui se souvient de Curtis Electromusic Specialties! Gee, Mike, tu es vieux! :-)
Je suppose que je vais devoir faire mes oscillateurs numériques avec un mode d'émulation analogique, afin qu'ils se mettent en phase et dérivent - cela devrait satisfaire les audiophiles puritains. Merci pour votre contribution.
@stevenvh - «Expérimenté» est le mot que vous cherchiez! (... et cela fait de nous deux: o)
@Jim - DDS fonctionne avec un accumulateur de phase, et je pense que la plupart des circuits intégrés DDS auront un modulateur de phase (le AD9851 le fait), qui ajoute un décalage à l'accumulateur de phase. Ils ont donc une modulation de phase intégrée.
@stevenvh cool- bon à savoir, merci
@Jim: Ils peuvent simplement être impressionnés par le mot «analogique» plus que par toutes ses fonctionnalités. Il suffit de jeter quelques tubes dedans qui ne font rien et ils diront qu'il a "un son de tube vraiment chaud".
@endolith lol, je suppose! foutus audiophiles analogiques - je me demande combien d'entre eux réussiraient le défi coke / pepsi? pas beaucoup je soupçonne.
Par curiosité, savez-vous pourquoi de nombreux synthétiseurs FM avaient une sélection limitée de rapports de fréquence?Était-ce simplement pour minimiser le nombre de bits de registre ou y avait-il une raison plus importante?Mon DX21 a des rapports qui sont généralement assez grossiers, mais a ensuite un "ajustement fin" avec une plage qui est loin d'être assez grande pour combler l'écart entre la plupart des rapports, mais il permet 7,00 et 7,07 comme choix de rapport de fréquence.
Leon Heller
2011-07-08 18:51:44 UTC
view on stackexchange narkive permalink

Voici une approche logicielle DDS que j'ai utilisée, basée sur le MiniDDS de Jesper Hansen, qui génère une onde sinusoïdale jusqu'à 200 kHz environ. Le filtrage serait utile dans certaines applications.

Thx Leon, beau projet, comme le PCB fait maison aussi - il a fière allure en blanc :)
C'est un matériau composite en papier bon marché que j'utilise car il est beaucoup plus facile à couper et à percer que le FR4.
Bien, je reçois un type de planche similaire dans mon magasin local, mais il est d'un jaune méchant. Et vous avez raison, FR4 est un cauchemar à couper en comparaison. Je viens de couper le papier composite avec un couteau de menuisier, c'est beaucoup plus convivial.
@Leon, @Jim - ce type de carte peut aussi avoir [ses problèmes] (http://electronics.stackexchange.com/questions/8129/how-do-components-fail/8154#8154). Lisez et frémissez.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...