Controladores LED de gráficos de barras multicanal

6

Quiero construir un circuito que muestre los componentes de frecuencia en tiempo real de una señal de audio en una serie de gráficos de barras de algún tipo. Actualmente, mi plan es construir 12 filtros de amplificador operacional de paso de banda, y luego usar un rectificador y un circuito RC para crear una envolvente de CC para cada salida, y luego usar esa señal para controlar un gráfico de barras de LED o algo similar.

El circuito utilizará una única fuente de + 3.3V, y el uso de 12 filtros de paso de banda no es realmente negociable. Si quiero un gráfico de barras de 12 canales, ¿estoy atascado usando 12 barras -Graph LEDs y controlador de LED de gráficos de barras parejas? Eso sale a $ 45! ¿Existe un método mejor / menos costoso / más simple para obtener un resultado similar? Idealmente, no necesitaría un microcontrolador.

    
pregunta W5VO

7 respuestas

8

Hice una versión de siete canales de este proyecto hace unos meses. Diseñé 7 filtros de paso de banda opamp separados (utilizando la topología de filtro de Bessel para minimizar la distorsión). Fui con el LM3914 y un gráfico de barras LED preempaquetado porque el costo no era el problema; El tiempo de desarrollo fue, pero puedes tomar la ruta opuesta.

Pasé las señales filtradas a través del siguiente detector de picos:

Estoesmuchomásbaratoqueloscircuitosopampqueencontrarásenotroslugares.ElVcedeltransistoryelVfdeldiododebencancelarse.Elcondensador1uFylaresistenciade470kdieronunabuenatasadedecaimientoparaverlasseñalesdeaudioqueestabarastreando.

Conrespectoalcosto,elLM3914queestabaviendoessolounacascadadecomparadoresconunaentradaconectadaatravésdeunaredderesistenciasaunvoltajefijo,ylaotraalaentradadeldetectordepicos.SinonecesitaelcontroldecorrienteLEDqueproporcionaestechip,probablementelopuedahacermásbaratoconuncomparadordecuadrantesclásicocomoelLM339oLM2901(nonecesitanadaespecial),quelecostaráaproximadamente$0.30encantidadesde25(necesitas24paradocegráficosde8canales).Suponiendoquelasresistenciassonbásicamentelibres,necesitaundiodo,untransistor,tapasdedesacoplamiento(tambiénesencialmentelibre),uncapacitordealmacenamientodepicosde1uFyungráficodeLED.SolousealgunosLEDs1206paraelgráficoyorganícelosensuPCBenlugardepagarporelgráficodebarraspreempaquetado.Sivacon8elementosensugráficoynecesita12*8~=100LEDs,puedehacerlopor$0.042centavoscadaunocon estos indicadores LED verdes , o aproximadamente $ 0.34 por canal. Yo diría que puedes salirte con la parte del gráfico de barras por menos de $ 1 por canal si compras algo.

    
respondido por el Kevin Vermeer
10

A veces es más barato usar un IC de propósito general y programarlo para hacer lo que quieres, luego tratar de encontrar un grupo de IC de propósito especial que no sean programables, que hagan exactamente lo que quieres.

Este tipo hizo un analizador de espectro de 64 bandas en un microcontrolador de gama baja, por lo que hacer 12 canales debería ser fácil. (También incluyó un controlador LCD ... en su caso, tendría el software que manejaría una matriz de LED en su lugar). El circuito es bastante simple también.

El microcontrolador es barato . Para conducir los LEDs, tendrás 120 de ellos (10 x 12). Simplemente los cablearía en una matriz, y podría manejarlos con 4 registros de turnos que también son baratos . (Tomaría 6 pines de E / S, más o menos, dependiendo de cómo lo conectaste).

enlace

    
respondido por el davr
3

Una alternativa a los controladores dedicados y matrices de LED es crear la suya, tomando prestada la idea detrás de R2R ladders y flash ADCs . La salida del detector de borde mencionado anteriormente se alimenta a través de algo similar a una escalera R2R (no necesariamente con resistores de igual valor), que proporciona una serie de nodos con voltajes desde la entrada a tierra. Se puede seleccionar un FET de tal manera que su voltaje de rodilla o voltaje de encendido sea algo manejable, como 0.5V a 1V, su fuente conectada a tierra y su compuerta conectada a los diversos nodos R2R . Cuando un nodo supera el voltaje de la rodilla , el FET se enciende y enciende un LED.

La amplitud del sonido es tradicionalmente (¡y biológicamente!) logarítmica, por lo que el voltaje al que cada uno debe encenderse es lineal en una escala logarítmica. Para una entrada de 3.3V máx. Para encender 10 LED por canal de forma logarítmica con voltaje, suponiendo un voltaje de rodilla de 0.5V, los voltajes de nodo absolutos serán: (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 uno apunta a una corriente máxima de ~ 1mA, la resistencia R2R total debería estar cerca de 3.3kΩ. Esto revela valores de resistencia de: (use el divisor de voltaje de forma iterativa)

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)

Nota: los valores de resistencia estándar del 5% entre paréntesis no son simplemente la coincidencia más cercana, sino que se calculan de forma iterativa. Para rehacer los cálculos con otros valores estándar o especificaciones, la fórmula es: R i = R TOTAL x (1 - V i / 3.3V) - {suma de 1 a i de R i }, derivada de la fórmula del divisor de voltaje.

El circuito final tendrá un aspecto similar al siguiente:

Otrométodoparalograresteefectoesutilizarcaídasdediodos.3.3Vpuedeadmitiraproximadamente8caídasSchottky(~0.4V)sielvoltajedeumbraldeltransistoresmenoroiguala0.4V(delocontrario,7caídas). En una cadena de 8 diodos Schottky, reduzca los voltajes en cada nodo intermedio con una resistencia que también funcionará como un limitador de corriente (permita algo cerca a la corriente de prueba de la hoja de datos para que fluya cuando el diodo está polarizado hacia delante). Luego, cada nodo se conecta a los transistores de la misma manera que antes. La corriente a través de los diodos cambiará en más de 8X, según la cantidad de diodos sesgados hacia adelante, así que asegúrese de que funcionará en todos los casos. Este método es lineal w.r.t. Tensión o amplitud, que no es del todo auténtica. Además, los de Schottky son más caros que los resistores del 5% ...

Una sugerencia final, una que no he explorado, es usar BE-drop en los transistores BJT en lugar de Diodos Schottky , que ahorran varias partes por LED pero también tienen que lidiar con una caída de diodo más grande y bipolares.

    
respondido por el tyblu
1

Los analizadores de espectro analógico mezclan la entrada en un rango de frecuencias y muestran el RMS o el nivel de potencia de un rango de banda de paso delgado y de baja frecuencia; podría hacer lo mismo. En lugar de utilizar filtros de amplificador operacional en su entrada, puede usar un filtro antialiasing de entrada (10kHz-20kHz LPF) seguido de un mezclador con entrada LO desde un VCO conducido por una rampa (la parte barrida de analizador de espectro barrido-sintonizado ), luego un gran filtro de paso de banda. Sigue el mencionado detector de picos. Este enfoque es un poco más complicado que un banco de filtros seguidos por amplificadores, pero mucho más divertido. Se producirá mucho tirón de pelo y confusión mental.

Es probable que sepa más sobre mezcladores que yo, así que lo dejo solo. Tenga en cuenta que un "mezclador de audio" no es lo mismo.

Wikipedia tiene un ejemplo de audio VCO, y lleva a algunos diseños populares. VCO dedicado y voltaje a Los IC de convertidor de frecuencia están disponibles, pero son principalmente para los 100 de rango de MHz; éste puede ser de utilidad, pero genera ondas cuadradas. (Otra pregunta puede ser para determinar el VCO ideal para esta aplicación).

Un simple detector de picos de diodo se puede mejorar con dos amplificadores operacionales, como se describe en AoE en la pág. 217. Especialmente útil para señales de entrada de pequeña amplitud (error ~ 0.6 / Vp).

    
respondido por el tyblu
1

Una opción es usar un pequeño microcontrolador para realizar una FFT. Un PIC 18F es capaz de hacer esto, como este ejemplo demuestra (el código es de código abierto) - 10 fps no es ' Es difícil, y podría mejorar la tasa de actualización aparente promediando entre FFT subsiguientes o agregando ruido aleatorio. Luego puede usar charlieplexing o alguna otra forma de multiplexación para controlar la pantalla.

Si la FFT suena demasiado difícil o requiere demasiado poder de procesamiento para usted, puede intentar hacerlo mezclando conceptos analógicos y digitales.

Usted podría hacer un filtro de paso de banda configurable utilizando condensadores conectados a los IO del microcontrolador. Conecte un 1k o más en serie a una entrada ADC. Realice la alta impedancia de E / S para desconectar efectivamente el capacitor, y controle la salida para conectarlo. Al utilizar valores casi binarios del condensador, como 10n, 22n, 39n y 82n, puede hacer un filtro de 16 vías. Eso es para la parte de paso alto; para hacer la parte de paso bajo, coloque un límite de 100 n (o así) en serie en el nodo medio del paso alto de RC, y use resistencias en los IO (nuevamente, usando valores binarios de 1k, 2.2k, 3.9k y 8.2) k), haciendo lo mismo con las mayúsculas: bájalas para usarlas y colócalas en Z alto para desconectarlas.

Luego, puede usar un circuito detector de picos para medir los picos, o simplemente tomar una serie de mediciones del ADC y promediarlas. Si solo necesita un filtro de 8 vías, eso es 6 IO, más la entrada ADC, por lo que un total de 7 IO, y una pantalla de 8x8 tomará solo 9 IO para controlar el uso de charlieplexing.

    
respondido por el Thomas O
1

Una ARM podría hacer un buen trabajo de estimación de la energía en cada componente de frecuencia, al menos si uno usa un pequeño lenguaje ensamblador y está usando una variante ARM agradable (por ejemplo, Cortex-M3 o ARM7-TDMI, en lugar de a Cortex-M0).

Suponiendo que los datos originales y la onda de referencia son de 16 bits, y uno tiene copias separadas de la forma de onda de referencia para cada frecuencia de interés (probablemente no sea demasiado difícil si solo hay doce), el bucle interno podría tener el siguiente aspecto:

; R0 - Data source pointer
; R1 - Reference wave pointer
; R2 - Data source end, plus one
; R3 - Reference wave end
; R4 - Reference wave length
; R5 - Reference wave cosine delta
; R8 - Sine total L
; R9 - Sine total H
; R10 - Cosine total L
; R11 - Cosine total H

lp:
  ldrsh r6,[r0],#2  ; I forget the syntax for post-increment
  ldrsh r7,[r2,r5]  ; Fetch cosine reference
  smlal r10,r11,r6,r7
  ldrsh r7,[r2],#2
  smlal r8,r9,r6,r7
  ; Repeat the above a few times if desired, if wave length will always be
  ; a multiple of the number of repetitions.  Note that the reference wave
  ; may need to be extended a bit to accommodate this (it must be extended
  ; be a quarter-wavelength to accommodate the cosine term).
  cmp r1,r3 ; Carry set if r1 has gotten as bit as r3
  subcs r1,r4 ; If passed end of wave, wrap
  cmp r0,r2 ; See if at end of wave
  bcc lp

Creo que el bucle interno tomaría unos 20 ciclos para procesar los términos seno y coseno para una misma frecuencia. Entonces, para doce frecuencias, tendría que gastar 240 ciclos de procesamiento de primera línea. Incluso un ARM de 16 MHz no debería tener problemas para manejar eso.

    
respondido por el supercat
0

No estoy seguro de entender cuál es el problema; Has bloqueado tus requisitos bastante bien. Los 12 filtros de paso de banda no se pueden evitar y desea usar 12 LED por filtro de paso de banda; podría eliminar el LM3914 y usar un solo microcontrolador con 12 entradas ADC, o incluir un MUX externo. Podría eliminar el filtro RC y el circuito de envolvente y hacerlo en el software si está realizando una muestra lo suficientemente rápida, y si se relajara el requisito del filtro de paso de banda 12, incluso podría calcular la FFT en el software.

Básicamente, lo que estoy diciendo es que, dadas sus necesidades, no estoy realmente seguro de por qué $ 45 en partes para el controlador de gráfico de barras y los LED de salida son un problema de este tipo. Realmente no te has dejado mucha flexibilidad.

    
respondido por el akohlsmith

Lea otras preguntas en las etiquetas