Question:
Pilotes LED de graphique à barres multicanaux
W5VO
2011-01-13 00:57:15 UTC
view on stackexchange narkive permalink

Je veux construire un circuit qui montre les composantes de fréquence en temps réel d'un signal audio sur un certain nombre de graphiques à barres de quelque sorte. Actuellement, mon plan est de construire 12 filtres d'ampli op passe-bande, puis d'utiliser un redresseur et un circuit RC pour créer une enveloppe CC pour chaque sortie, puis d'utiliser ce signal pour piloter un bargraph LED ou quelque chose de similaire.

Le circuit utilisera une seule alimentation + 3,3V, et l'utilisation de 12 filtres passe-bande n'est pas vraiment négociable. Si je veux un graphique à barres à 12 canaux, suis-je bloqué en utilisant des paires de 12 LED de graphique à barres et de pilote de LED de graphique à barres? Cela revient à 45 $! Existe-t-il une méthode meilleure / moins chère / plus simple pour obtenir un résultat similaire? Idéalement, je n’aurais pas besoin d’un microcontrôleur.

Sept réponses:
davr
2011-01-13 03:27:15 UTC
view on stackexchange narkive permalink

Parfois, il est moins coûteux d'utiliser un CI à usage général et de le programmer pour faire ce que vous voulez, puis d'essayer de trouver un tas de CI à usage spécial qui ne sont pas programmables, qui font exactement ce que vous voulez.

Ce type a fait un analyseur de spectre 64 bandes sur un microcontrôleur bas de gamme, donc faire 12 canaux devrait être du gâteau. (il a également inclus un pilote LCD ... dans votre cas, vous auriez le logiciel piloter une matrice de LED à la place). Le circuit est également assez simple.

Le microcontrôleur est bon marché. Pour piloter les LED, vous en aurez 120 (10 x 12). Vous les câbleriez simplement dans une matrice, et vous pourriez la conduire avec 4 registres à décalage qui sont également bon marché. (Prendrait 6 broches d'E / S, plus ou moins, selon la façon dont vous l'avez câblé).

http://elm-chan.org/works/akilcd/report_e.html

LCD output PCB layout

Bien, TQFP sur une carte de performance de 0,100 ". La plupart des gens ne feraient que QQ à ce sujet.
@Nick Oui, ce type est un peu fou: http://elm-chan.org/docs/wire/wiring_e.html. Voici un autre gars: http://www.flickr.com/photos/oohshiny/3309808873/
Kevin Vermeer
2011-01-13 07:11:11 UTC
view on stackexchange narkive permalink

J'ai réalisé une version sept canaux de ce projet il y a quelques mois. J'ai conçu 7 filtres passe-bande opamp séparés (en utilisant la topologie de filtre de Bessel pour minimiser la distorsion). Je suis allé avec le LM3914 et un graphique à barres LED préemballé parce que le coût n'était pas le problème; le temps de développement était, mais vous pouvez prendre la route opposée.

J'ai passé les signaux filtrés à travers le détecteur de crête suivant:

alt text

Ceci est un beaucoup moins cher que les circuits opamp que vous trouverez ailleurs. Le Vce du transistor et le Vf de la diode devraient s'annuler. Le condensateur 1uF et la résistance 470k ont ​​donné un bon taux de décroissance pour regarder les signaux audio que je suivais.

En ce qui concerne le coût, le LM3914 que vous regardiez n'est qu'une cascade de comparateurs avec une entrée connecté via un réseau de résistances à une tension fixe, et l'autre à l'entrée du détecteur de crête. Si vous n'avez pas besoin du contrôle de courant LED fourni par cette puce, vous pouvez probablement le faire moins cher avec un comparateur quad classique comme le LM339 ou le LM2901 (vous n'avez besoin de rien d'extraordinaire), qui vous coûtera environ 0,30 $ en quantités de 25 (vous en avez besoin de 24 pour douze graphiques à 8 canaux). En supposant que les résistances sont fondamentalement libres, vous avez besoin d'une diode, d'un transistor, de capuchons de découplage (également essentiellement libres), d'un condensateur de stockage de crête de 1 uF et d'un graphique LED. Utilisez simplement des LED 1206 en vrac pour le graphique et disposez-les sur votre PCB au lieu de payer pour le graphique à barres préemballé. Si vous utilisez 8 éléments dans votre graphique et que vous avez besoin de 12 * 8 ~ = 100 LED, vous pouvez le faire pour 0,042 centimes chacun avec ces voyants verts, ou environ 0,34 USD par canal. Je dirais que vous pouvez vous en tirer avec la partie graphique à barres pour moins de 1 $ par chaîne si vous magasinez.

@bemace - Merci d'avoir corrigé ça! Nous avions l'habitude d'avoir des délimiteurs \ $ LaTeX \ $ de `$ ... $`, donc nous devions utiliser ce formatage bizarre. [Cela a été corrigé] (http://meta.electronics.stackexchange.com/questions/440/tex-delimiters-should-be-changed/613#613), (ils sont maintenant `\ $ ... \ $ `) mais nous avons encore besoin de [nettoyer certaines choses] (http://meta.electronics.stackexchange.com/q/615/857) ... voulez-vous aider?
I mostly find questions/answer that still need to be fixed in older Q/A which don't get many views anymore, but I fix when I spot them. Thanks for all who participated in the TeX Edit Party. Great cooperation!
AiliqnsnhsCMT - Well, I'd have said that party was something of a drag...
Ouais, et j'y pense, la musique était moche aussi. Et les boissons chères ... :-)
Je suis (assez) en retard au coup de poing ici, mais je voulais dire que c'est un détecteur de pic _fantastic_! Il a une vitesse et une précision comparables à celles d'un amplificateur opérationnel sans encombrement ni coût supplémentaires.
tyblu
2011-01-13 12:03:49 UTC
view on stackexchange narkive permalink

Une alternative aux pilotes dédiés et aux matrices LED est de créer les vôtres, en empruntant l'idée derrière les échelles R2R et les ADC flash . La sortie du détecteur de bord susmentionné est alimentée par quelque chose de similaire à une échelle R2R (pas nécessairement avec des résistances de valeur égale), qui fournit à un certain nombre de nœuds des tensions de l'entrée à la terre. Un FET peut être sélectionné de telle sorte que sa tension de coude ou tension de mise sous tension soit quelque chose de gérable, comme 0,5V à 1V, sa source mise à la terre et sa grille connectée aux différents nœuds R2R . Lorsqu'un nœud dépasse la tension de coude , le FET s'allume et commande une LED.

L'amplitude du son est traditionnellement (et biologiquement!) Logarithmique, donc la tension à laquelle chacun doit tourner on est linéaire sur une échelle logarithmique. Pour une entrée de 3,3 V maximum pour allumer 10 LED par canal logarithmiquement avec une tension, en supposant une tension de coude de 0,5 V, les tensions de nœud absolues seront: (MATLAB)

  EDU>> logspace (log10 (0.5), log10 (3.3), 10) ans = 0.5 0.6166 0.7605 0.9379 1.1567 1.4265 1.7593 2.1697 2.6758 3.3  

Si l'on vise un courant maximum de ~ 1mA , la résistance R2R totale doit être proche de 3,3 kΩ. Cela révèle les valeurs de résistance de: (utilisez le diviseur de tension de manière itérative)

  R1 = 624,2 (620) R2 = 506,1 (510) R3 = 410,4 (430) R4 = 332,8 (300) R5 = 269,8 ( 270) R6 = 218,8 (240) R7 = 177,4 (160) R8 = 143,9 (150) R9 = 116,6 (120) R10 = 500 (500)  

Remarque: standard 5 Les valeurs de% de résistance entre parenthèses ne sont pas simplement la correspondance la plus proche, mais sont calculées de manière itérative. Pour refaire des calculs avec d'autres valeurs ou spécifications standard, la formule est: R i = R TOTAL x (1 - V i / 3.3V) - {somme de 1 à i de R i }, dérivée de la formule du diviseur de tension.

Le circuit final ressemblera à quelque chose comme ceci:
alt text

Une autre méthode pour obtenir cet effet consiste à utiliser des gouttes de diode . 3,3 V peut prendre en charge environ 8 gouttes Schottky (~ 0,4 V) si la tension de seuil du transistor est inférieure ou égale à 0,4 V (sinon, 7 gouttes). Dans une chaîne de 8 diodes Schottky, abaissez les tensions à chaque nœud intermédiaire avec une résistance qui fonctionnera également comme un limiteur de courant (laissez circuler quelque chose proche du courant de test de la fiche technique lorsque diode est polarisée en direct). Chaque nœud est ensuite connecté aux transistors de la même manière que ci-dessus. Le courant traversant les diodes changera de plus de 8X, en fonction du nombre de diodes polarisées en direct, alors assurez-vous que chacune fonctionnera dans tous les cas. Cette méthode est linéaire w.r.t. tension ou amplitude, ce qui n'est pas tout à fait authentique. De plus, les résistances Schottky sont plus chères que 5% de résistances ...

Un dernier conseil - que je n'ai pas exploré - consiste à utiliser le BE-drop dans les transistors BJT au lieu des diodes Schottky, ce qui permet d'économiser plusieurs pièces par LED mais aussi de devoir gérer une chute de diode plus importante et des bipolaires.

tyblu
2011-01-13 02:33:35 UTC
view on stackexchange narkive permalink

Les analyseurs de spectre analogiques mélangent l'entrée sur une gamme de fréquences et affichent le RMS ou le niveau de puissance d'une bande passante fine et basse fréquence - vous pouvez faire de même. Au lieu d'utiliser des filtres op-amp à votre entrée, vous pouvez utiliser un filtre anti-crénelage d'entrée (LPF 10kHz-20kHz) suivi d'un mélangeur avec entrée LO d'un VCO piloté par une rampe (la partie balayée de analyseur de spectre par balayage ), puis un excellent filtre passe-bande. Le détecteur de crête mentionné suit. Cette approche est un peu plus complexe qu'une banque de filtres suivie d'amplificateurs, mais beaucoup plus amusante. Il en résultera beaucoup de cheveux et de fuzz.

Vous en savez probablement plus sur les mixeurs que moi, alors je vais laisser cela de côté. Notez qu'un "mélangeur audio" n'est pas la même chose.

Wikipédia a un exemple de VCO audio, et conduit à des conceptions populaires. VCO dédié et des circuits intégrés de convertisseur tension-fréquence sont disponibles, mais ils sont principalement pour les centaines de MHz; celui-ci peut être utile, mais génère des ondes carrées. (Une autre question peut être de déterminer un VCO idéal pour cette application.)

Un simple détecteur de crête à diode peut être amélioré avec deux amplificateurs opérationnels, comme décrit dans AoE sur pg. 217. Particulièrement utile pour les signaux d'entrée de petite amplitude (erreur ~ 0,6 / Vp). alt text

Malheureusement, mon projet doit inclure les 12 filtres.
@W5VO - Ah, j'avais lu «non négociable» pour signifier que vous ne vouliez pas implémenter les filtres en raison de contraintes de conception / coût / espace. Pouvez-vous prendre l'entrée de votre partie graphique à barres avant le filtrage?
Thomas O
2011-01-14 00:07:50 UTC
view on stackexchange narkive permalink

Une option consiste à utiliser un petit microcontrôleur pour effectuer une FFT. Un PIC 18F est capable de le faire, comme cet exemple le démontre (le code est open source) - 10 ips n'est pas difficile, et vous pouvez améliorer le taux de mise à jour apparent en faisant la moyenne entre les FFT suivantes ou en ajoutant dans un bruit aléatoire. Vous pouvez ensuite utiliser le charlieplexing ou une autre forme de multiplexage pour piloter l'affichage.

Si la FFT semble trop difficile ou nécessite trop de puissance de traitement pour vous, vous pouvez essayer de le faire en mélangeant des concepts analogiques et numériques.

Vous pouvez créer un filtre passe-bande configurable en utilisant des condensateurs connectés aux E / S du microcontrôleur. Connectez un 1k environ en série à une entrée ADC. Rendre l'impédance IO élevée pour déconnecter efficacement le condensateur et réduire la sortie pour le connecter. En utilisant des valeurs presque binaires de condensateur, telles que 10n, 22n, 39n et 82n, vous pouvez créer un filtre à 16 voies. C'est pour la partie passe-haut; pour faire la partie passe-bas, placez un plafond de 100n (environ) en série au nœud du milieu du passe-haut RC et utilisez des résistances sur les E / S (encore une fois, en utilisant des valeurs binaires de 1k, 2,2k, 3,9k et 8,2 k), en faisant de même avec les bouchons: conduisez-les bas pour les utiliser, et conduisez-les à haut-Z pour les déconnecter.

Ensuite, vous pouvez soit utiliser un circuit de détection de crête pour mesurer les crêtes, soit simplement prendre une série de mesures à partir de l'ADC et les faire la moyenne. Si vous n'avez besoin que d'un filtre à 8 voies, cela fait 6 E / S, plus l'entrée ADC, donc 7 E / S au total, et un écran 8x8 ne prendra que 9 E / S à contrôler en utilisant le charlieplexing.

Si l'on veut douze bandes de fréquences et qu'elles ne sont pas également espacées, serait-il préférable de faire une FFT, ou simplement de calculer douze paires d'intégrales de référence-wave-times-original? La série PIC 18 n'est pas très bien configurée pour cela, mais un DSP ou un ARM devrait être capable de le gérer assez bien.
supercat
2011-05-09 01:01:21 UTC
view on stackexchange narkive permalink

Un ARM pourrait être capable de faire un bon travail d'estimation de l'énergie dans chaque composante de fréquence, du moins si l'on utilise un peu de langage d'assemblage et utilise une belle variante ARM (par exemple Cortex-M3 ou ARM7-TDMI, plutôt que a Cortex-M0).

En supposant que les données d'origine et l'onde de référence sont de 16 bits, et que l'on a des copies séparées de la forme d'onde de référence pour chaque fréquence d'intérêt (probablement pas trop difficile s'il n'y en a que douze ) la boucle interne pourrait ressembler à quelque chose comme:

; R0 - Pointeur de source de données; R1 - Pointeur d'onde de référence; R2 - Extrémité de la source de données, plus un; R3 - Fin de l'onde de référence; R4 - Longueur d'onde de référence; R5 - Onde de référence cosinus delta; R8 - Sine total L; R9 - H total sinusoïdal; R10 - Cosinus total L; R11 - Cosinus total Hlp: ldrsh r6, [r0], # 2; J'oublie la syntaxe pour post-incrément ldrsh r7, [r2, r5]; Récupérer la référence cosinus smlal r10, r11, r6, r7 ldrsh r7, [r2], # 2 smlal r8, r9, r6, r7; Répétez ce qui précède plusieurs fois si vous le souhaitez, si la longueur d'onde sera toujours; un multiple du nombre de répétitions. Notez que la vague de référence; peut avoir besoin d'être étendu un peu pour tenir compte de cela (il doit être étendu; être un quart d'onde pour accueillir le terme cosinus). cmp r1, r3; Carry positionné si r1 est devenu aussi bit que r3 subcs r1, r4; Si passé en fin de vague, enveloppe cmp r0, r2; Voyez si à la fin de la vague bcc lp 

Je pense que la boucle interne prendrait environ 20 cycles pour traiter les termes sinus et cosinus pour un même d'une fréquence. Donc, pour douze fréquences, il faudrait consacrer 240 cycles de traitement de première ligne. Même un ARM 16 MHz ne devrait avoir aucun problème à gérer cela.

akohlsmith
2011-01-13 07:08:43 UTC
view on stackexchange narkive permalink

Je ne suis pas sûr de comprendre quel est le problème; vous avez assez bien verrouillé vos exigences. Les 12 filtres passe-bande ne peuvent être évités et vous souhaitez utiliser 12 LED par filtre passe-bande; vous pouvez éliminer le LM3914 et utiliser un seul microcontrôleur avec 12 entrées ADC, ou inclure un MUX externe. Vous pouvez éliminer le filtre RC et le circuit d'enveloppe et le faire dans le logiciel si vous échantillonnez assez rapidement, et si vous relâchez l'exigence de filtre passe-bande 12, vous pouvez même calculer la FFT dans le logiciel.

En gros Je dis que, compte tenu de vos besoins, je ne sais pas vraiment pourquoi 45 $ en pièces pour le pilote de graphique à barres et les voyants de sortie sont un tel problème. Vous ne vous êtes pas vraiment laissé beaucoup de flexibilité.



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 2.0 sous laquelle il est distribué.
Loading...