¿Opto-aislador para el control de volumen?

4

Estoy haciendo un proyecto basado en Arduino usando el PWM conectado a un altavoz de 0.5W 8Ω para hacer varios sonidos, quiero implementar un control de volumen digital y pensé en usar otra salida PWM y un Opto-Isolator .... ¿sería esto posible?

Y ... si es posible, ¿podría alguien recomendar un candidato adecuado?

Aplausos Chiphackers - Déjame saber si esto es demasiado vago :)

Actualización: tengo el altavoz conectado directamente a la salida PWM sin amplificación        - Estoy usando un par de interruptores táctiles para subir y bajar el volumen

Aquí está el circuito (en teoría) -

También hay un código, tengo el PWM configurado a alta velocidad y lo estoy usando para subir y bajar el volumen de los tonos -

/////////////////////////////////////////////////////////////////////////////////////
// Configure PWM on pins 3 and 11 to run at maximum speed, rather than the default //
/////////////////////////////////////////////////////////////////////////////////////

pinMode(3,OUTPUT); // speaker on pin 3

cli(); // disable interrupts while registers are configured

bitSet(TCCR2A, WGM20);
bitSet(TCCR2A, WGM21); // set Timer2 to fast PWM mode (doubles PWM frequency)
bitSet(TCCR2B, CS20);
bitClear(TCCR2B, CS21);
bitClear(TCCR2B, CS22);

sei(); // enable interrupts now that registers have been set


////////// Function for playing tones -

void playTone(long tone, int duration) 
{
prevMicros = micros();

  while (micros() - prevMicros < duration) 
  {
    analogWrite(3, VOLUME);
    delayMicroseconds(tone);
    analogWrite(3, 0);
    delayMicroseconds(tone);
  }
}
    
pregunta Jim

5 respuestas

2

Exención de responsabilidad: Esto es en respuesta al circuito publicado, no a la pregunta de control con un PWM. Simplemente no tenía espacio en el comentario.

¿Alguna razón especial por la que necesite el optoaislador? Como su circuito aparece actualmente, no creo que su conexión D5 al pin 5 de su fototransistor optoaislador proporcione el tipo de corriente que desea. Además, la sincronización entre los dos PWM probablemente le causará dolor (¿Qué sucede si el PWM D5 está siempre apagado cuando el PWM D3 está encendido y viceversa? No hay sonido. Debe promediar su señal y enviarla a un búfer). También es probable que desee una capacitancia fuerte en su línea V + para el micro y el búfer para que la tensión de alimentación se mantenga suave. Sin embargo, la conexión a tierra y la conexión a D5 eliminan totalmente el propósito del optoaislante, que es permitir que El circuito del altavoz debe estar a un voltaje diferente al de la entrada. Esto podría ser útil si tiene el altavoz en una ubicación remota desde el Arduino, y desea ejecutar una señal diferencial de baja corriente en un par trenzado hasta el altavoz, lo que recibir alimentación de una fuente de alimentación diferente. Tal como está, también puede conectar el pin 6 al D3, y simplemente usar el transistor, ignorando completamente la parte "Opto" del circuito.

Vea el circuito de salida para la nota de aplicación AVR335 vinculada en mi otra respuesta para un circuito que active efectivamente un altavoz con un PWM. Los filtros suavizan la señal de salida para que se aproxime mejor a la entrada (con un promedio variable), de modo que obtenga una onda suave en lugar de una onda cuadrada digital aproximada. Puede eliminar el amplificador de ganancia único, eso es solo para eliminar cualquier comentario del micrófono (que no tiene).

Realmente quieres un poco de filtrado y amplificación en la salida. Sonará absolutamente terrible si no lo haces. ¿Sabes cómo suenan las tarjetas de felicitación que hablan? Han filtrado las salidas. Su altavoz sonará peor que eso si lo conecta al PWM. Supuse anteriormente que estaba usando el fototransistor para aislar su salida y transferirla a un amplificador / circuito de filtro que funciona con una fuente de alimentación diferente, pero una conexión directa va a sonar muy mal.

    
respondido por el Kevin Vermeer
2

No he hecho mucho con el audio, pero una forma más sencilla de reducir el volumen sería un potenciómetro digital en serie con la señal PWM que maneja el altavoz (es decir, solo desea reducir la señal de voltaje para reducir el volumen, ¿verdad?

    
respondido por el vicatcu
2

Espera: ¿Desea un control de volumen digital controlado por una salida PWM ? Al igual que en, envía un comando a Arduino a través de UART, o cambia algunos conmutadores a un valor binario, y le dice que establezca el volumen a 11 ? Entonces, ¿su optoaislador aplica un voltaje / corriente en algún lugar de su circuito de salida? Necesitaríamos mucha más información sobre qué tipo de amplificador de salida está utilizando. Probablemente sería mucho más fácil simplemente modificar su PWM. Si aumenta el valor máximo o disminuye el valor de entrada, puede bajar el volumen completamente en el software.

Si debe hacerlo, puede seguir utilizando la función analogWrite () para controlar su PWM. Intente algo como (pseudocódigo):

  //File scope variable to set the volume.  
  static uint8_t volume = 0;   

 void set_volume(uint8_t new_volume) {  
    if (new_volume < 8)   // Would result in a volume of 0 
       volume = new_volume;  
 } 

 /** Divide by 2^volume:   
  *  0 = loudest,  
  *  1 = half as loud,    
  *  2 = 1/4 as loud,  
  *  3 = 1/8 as loud, etc.   
  */ 
 inline uint8_t adjust_volume(uint8_t signal) {  
    return (uint8_t) signal >> volume;  
 }  

 //Identical ISRs for each of the tactile switches  
 ISR(PCINT0_vect) {      
   setVolume(read(PORTC))  //Or however you get your digital volume signal  
}  

void main(void)  {  
   char *sound_buffer;  

   while(*sound_buffer)  
      analogWrite(adjust_volume(*sound_buffer++));  
}    

Si desea hacer un control de volumen con una entrada optoaislada, entonces sí, eso es bastante posible. Suponiendo que su dispositivo de entrada es un potenciómetro, sus opciones son una señal modulada lógica, de frecuencia (en lugar de ancho de pulso), que puede obtener de un convertidor de voltaje a frecuencia como el LM231 (hay muchas otras opciones), o desde un circuito de amplificador operacional con un oscilador RC. Alimente la salida a cualquier optoaislador digital, y debería poder leer la frecuencia en un pin de entrada digital, y modificar el valor máximo de PWM de su salida de altavoz o modular sus valores de entrada en consecuencia.

Alternativamente, puede usar un optoaislante de salida fotovoltaica, que genera una tensión analógica (o corriente) según la corriente de entrada. Tenga cuidado con los problemas de linealidad cuando trabaje con estos circuitos. Realmente no quieres un control de volumen lineal (quieres algo más parecido a logarítmico, o puedes hacer todo lo posible e implementar un igual volumen) contorno ,) sin embargo, no desea un interruptor digital. El Vishay IL300 es un ejemplo de un fototransistor lineal.

EDIT : mencioné la nota de la aplicación AVR335 en una pregunta reciente Sobre tarjetas de felicitación programables con audio. También sería un buen recurso para su pregunta.

    
respondido por el Kevin Vermeer
2

¿Por qué no solo conduces el altavoz con un transistor normal y modificas el PWM para controlar el volumen? Usted tiene control sobre la forma de onda que el transistor (y por lo tanto el altavoz) obtiene ... no es necesario que haya componentes adicionales para controlarlo.

Además, si está empeñado en usar el opto, encienda el LED con las salidas PWM. Conecte el emisor del transistor a tierra, el colector al altavoz y el otro lado del altavoz a su fuente V + (más V + = sonido más alto).

    
respondido por el akohlsmith
1

Ok ... ¡así que me he dado cuenta de que un optoaislador no es el mejor enfoque para esta aplicación en particular!

Y ... como lo señalaron Andrew Kohlsmith y reemrevnivek: en lugar de eso, podría pulsar el modulo de ancho de la base de un transistor ...

Entonces obtuve algunos transistores epitaxiales de npn de silicio (BD139) de la tienda de electrónica y los probé. En realidad funcionó mejor de lo que pensaba, el control de volumen está bien y está bien :)

Aquí está el circuito que usé al final -

¡Gracias por la ayuda y las sugerencias de todos!

    
respondido por el Jim

Lea otras preguntas en las etiquetas