Diseño de amplificador class D con microcontroladores.

Hola a todos los colegas, mea estado dando vueltas el la cabeza una idea para fabricar un amplificador class d, con un microcontrolador, utilizando la entrada análogo digital de un pic y luego pasarlo al modulo pwm, pero el resultado seria un muestreo de alrededor de 19khz, muy pobre, ni siquiera utilizando los pic mas veloces de gama media 40mhz da un pwm de 38kz, sigue pobre,
Pero si esta señal la entregamos a un micro controlador en forma serie o paralelo que funcione( el micro que sea barato y fácil de programar la idea es que también sea barato y sencillo),como comparador y nos de una especie de pwm como lo hacen los pic con sus módulos pwm, o sea un micro que no divida la frecuencia de reloj sino que uno de sus contadores trabaje a una de unos 20 o 30mhz el pwm seria bastante bueno. Si alguno podría darnos luz sobre micros,
Yo tengo casi el esquema utilizo un 16f819 para utilizar el modulo a/d el programa lo tengo
Luego utilizo un puente h utilizando dos ir2110 y fet irf1010 si alguien quiere saber mas y colaborar con este tema respondan gracias
Y comenzaré a subir diagrama en bloques y lo que e imaginado ya con plano
 
Aunque el muestreo sea pobre , pienso que se puede desarrollar un amplificador para bajos-woofer-subwoofer sin problemas , para hasta 500 Hz ese sampleo andaría ¿no?

Dale subí lo que tengas hasta ahora a ver quienes se enganchan :D

Saludos !
 
#INCLUDE P16F873.INC
CBLOCK 0X21
ACECOM
ESPERA
ENDC
ORG 0x00
GOTO INICIO
INICIO BSF STATUS,5
MOVLW B'11000000'
MOVWF ADCON1
MOVLW B'00000011'
MOVWF OPTION_REG
MOVLW B'11111111'
MOVWF TRISA
MOVLW B'10000000'
MOVWF TRISB
MOVLW B'00000000'
MOVWF PIE1
MOVLW B'00000001'
BCF STATUS,5
MOVLW .0
MOVWF PORTB
MOVLW B'00000000'
MOVWF INTCON
MOVLW B'00111111'
MOVWF CCP1CON
MOVLW B'00000100'
MOVWF T2CON
MOVLW B'00000000'
MOVWF T1CON
INI CALL ACELE ;LLAMAMOS RUTINA DE CAPTURA DE AUDIO POR AN0
BTFSS ADRESH,0 ;SI ES 0 INVERTIMOS LOS BIT PARA TENER EL NIVEL DE LA SEÑAL
COMF ACECOM,F
MOVFW ACECOM
MOVWF CCPR1L
GOTO INI
ACELE BCF INTCON,7
BCF INTCON,6
BCF STATUS,C
MOVLW B'10000001'
MOVWF ADCON0
CALL CONVER
BTFSS ADRESH,0 ;VERIFICAMOS EL BIT PARA SABER SI LA SEÑAL ES NEGATIVA O POSITIVA
GOTO Q111
BSF STATUS,C
BSF PORTB,0 ;ACTIBAMOS LA SALIDA PARA HABILITAR EL PUENTE H 1
BCF PORTB,0
GOTO Q222
Q111 BCF STATUS,C
BCF PORTB,0
BSF PORTB,1 ;ACTIBAMOS LA SALIDA PARA HABILITAR EL PUENTE H 2
Q222 BSF STATUS,5
RRF ADRESL,F
MOVFW ADRESL
BCF STATUS,5
MOVWF ACECOM
BCF STATUS,C
RRF ADRESH,F
RETURN
CONVER CLRF ESPERA
INCF ESPERA,F
BTFSS ESPERA,3
GOTO $-2
BSF ADCON0,GO_DONE
BTFSC ADCON0,GO_DONE
GOTO $-1
BCF ADCON0,ADON
RETURN
END

;PERDONEN LA ORTOGRAFIA

codigo en asm es lo que llebo trato de subie el esquema aunque sea a mano el puente h lo hago con dos ir2110, lo e utilisado para mover motores de 24 voltios claro con un codigo mas elavorado
 
Saludos subo esquema en pdf y en Eagle 5.1.00 profesional no están los valores ya que me faltan calcular los del amplificador operacional pero seria mejor si alguien colabora ya que esto es un diseño en el cual necesito su ayuda para hacer algo bueno y no estar copiando y a ver si funciona
Me falta el calculo del filtro pasa bajos de la salida, tengo la idea de calcular valores para 1,2,4,8 ohmios y seleccionarlos con una llave para a si utilizar varias impedancias,
Serviría para bajas frecuencias pero si en ves de utilizar un solo micro utilizamos otro que nos haga la función de pwm, que tenga temporizadores y funcionen a frecuencia superior de 20 Mhz podríamos barrer la frecuencia de audio y sacar una buena calidad de sonido
Con este pic se pueden manejar asta 5 canales de audio. Espero colaboración, no criticas solo sugerencias o preguntas serias.
 

Adjuntos

  • CLASS D.pdf
    35.7 KB · Visitas: 204
  • CLASS D.rar
    55.6 KB · Visitas: 88
SIIP
PORQUE QUIERO CALCULARLOS PARA TODAS LAS IMPEDANCIAS YA QUE AL UTILIZAR FET PODEMOS MANEJAR VARIOS AMPERIOS
CODIGO MEJORADO
ACEPTO CUALQUIER MODIFICACION AL CODIGO
#INCLUDE P16F873A.INC
CBLOCK 0X21
ACECOM
ESPERA
ENDC
ORG 0x00
GOTO INICIO
INICIO BSF STATUS,5
MOVLW B'11000000'
MOVWF ADCON1
MOVLW B'00000011'
MOVWF OPTION_REG
MOVLW B'11111111'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISC
MOVLW B'00000000'
MOVWF PIE1
MOVLW B'00000001'
BCF STATUS,5
MOVLW .0
MOVWF PORTB
MOVLW B'00000000'
MOVWF INTCON
MOVLW B'00111111'
MOVWF CCP1CON
MOVLW B'00000000'
MOVWF CCP2CON
MOVLW B'00000100'
MOVWF T2CON
MOVLW B'00000000'
MOVWF T1CON
INI CALL ACELE ;LLAMAMOS RUTINA DE CAPTURA DE AUDIO POR AN0
BTFSS ADRESH,0 ;SI ES 0 INVERTIMOS LOS BIT PARA TENER EL NIVEL DE LA SEÑAL
COMF ACECOM,F
MOVFW ACECOM
MOVWF CCPR1L
BTFSC PORTB,2
GOTO INI1
BSF PORTB,2
GOTO INI2
INI1 BCF PORTB,2
INI2 BTFSC PORTB,3
GOTO INI3
BSF PORTB,3
GOTO INI
INI3 BCF PORTB,3
GOTO INI
ACELE BCF INTCON,7
BCF INTCON,6
BCF STATUS,C
MOVLW B'10000001'
MOVWF ADCON0
CALL CONVER
BTFSS ADRESH,0 ;VERIFICAMOS EL BIT PARA SABER SI LA SEÑAL ES NEGATIVA O POSITIVA
GOTO Q111
BSF STATUS,C
BSF PORTB,0 ;ACTIBAMOS LA SALIDA PARA HABILITAR EL PUENTE H 1
BCF PORTB,0
GOTO Q222
Q111 BCF STATUS,C
BCF PORTB,0
BSF PORTB,1 ;ACTIBAMOS LA SALIDA PARA HABILITAR EL PUENTE H 2
Q222 BSF STATUS,5
RRF ADRESL,F
MOVFW ADRESL
BCF STATUS,5
MOVWF ACECOM
BCF STATUS,C
RRF ADRESH,F
RETURN
CONVER CLRF ESPERA
INCF ESPERA,F
BTFSS ESPERA,3
GOTO $-2
BSF ADCON0,GO_DONE
BTFSC ADCON0,GO_DONE
GOTO $-1
BCF ADCON0,ADON
RETURN
END

;PERDONEN LA ORTOGRAFIA
 
siip por eso pido colavoracion para poder hacer algo de lujo entre todos no solo copiar toca diseñar la s protecciones contra cortocicuito protecciones para los parlantes en fin tolo lo que senos ocurra la idea es esa
gracias por colavorar(y)
 
Mmmm... hace un rato estuve probando el ADC del pic, y como que para audio no anda muy bien.

Hice la prueba con un 18f2550 @ 48MHz, el programa simplemente mueve los bits del ADC al PWM para poder escucharlos.
La velocidad de muestreo va impecable, muy bien para la banda de audio, pero la profundidad de bits no es suficiente (a mi gusto), aclaro que use los 10bits pero igual así tiene un "RINGING" altísimo.
 
Recuerdo que ejtagle alguna vez aclaró por que no había que hacerlo con un microcontrolador, y en eso estoy de acuerdo: no tiene ningún caso utilizar y programar un chip cuando lo podés hacer igual de bueno con un comparador que vale NADA y con la vigésima parte de la complejidad.

Un consejo: No se gasten la cabeza y el tiempo en un invento de esa naturaleza: no van a ganar nada y solo conseguirán problemas adicionales. De última, Texas Instruments tiene chips específicos para ese laburo y chips que ya son amplificadores de varios cientos de watts, y algunos inclusive sin inductor a la salida ;)....que es lo que quieren inventar????
 
Una pregunta, a que le llaman "ringing" ?, es un término asociados con este tipo de amplificadores?
Son las oscilaciones de alta frecuencia producidas en los mosfets de potencia al conmutar a gran velocidad,son debidas a las inductancias y capacidades parasitas.Si el ringing es importante puede producir sobretensiones
que destruyan el transistor,perdida de rendimiento,y distorsión de la señal.Pero creo que Dano se refiere a otra cosa.
Yo hice algo parecido,usando un micro avr16u4 este micro permite generar pulsos con una resolución de 5ns
que da un sonido de buena calidad,pero la entrada es digital (usb audio o sd card) no analógica.El conversor
analógico digital de los microcontroladores (con algunas excepciones) no es lo bastante bueno para tener un sonido de calidad.
https://sites.google.com/site/octaviovegafernandez/octaos/files
Y como ya ha dicho alguien ,no es buena idea hacer un amplificador analógico de clade D con un microcontrolador,ya que hay integrados que lo hacen mejor y salen mas baratos.
 
Última edición:
Seguro que si. Recién me meto en este hilo, estoy con el mismo proyecto que frezamu. De antemano sé que no va a ser de buena calidad el sonido, no busco eso. Si quisiera performance me consigo el amplificador integrado y listo. Esto es un hobby, me lo tomo medio en joda :) medio en serio :unsure: . Solamente quiero saber hasta que calidad se puede lograr trabajandolo con un microcontrolador de baja gama. Y si es posible agregar algún efecto digital.

Por otro lado, pienso, si hubiera necesidad de sacar una señal de un microcontrolador como salida analógica a una carga, o usas un conversor DAC o usas PWM y salís directo a la entrada de PWM de un amplificador clase D, y matás dos pájaros de un tiro porque es muy común que los microcontroladores tengan un módulo con PWM.

Preguntaba por ese "ringing" porque estoy teniendo un pitido que no puedo sacar y no logro darme cuenta de donde viene. Pensaba que por ahí se refería a eso. Achicando la frecuencia de corte del filtro de salida logro atenuarlo un poco, pero se me reduce la señal útil también.

La señal de entrada la paso por un amplificador clase A con ganancia 30 dB, sacando la señal directamente de colector sin capacitor de por medio, asi aprovecho el offset para el ADC. El filtro antialiasing lo implemento colocando un capacitor en paralelo con la resistencia de colector del amplificador. Y filtra muy bien, porque si saco el capacitor aparece un ruido tipo blanco muy fuerte.

Mis sospechas para ese pitido son de una impresición del ADC del micro. Pero lo que me desconcierta es que es un tono muy marcado, no suena a "ruido", es un pitido. O puede ser ruido de cuantización no sé, estaría usando entre 7 y 8 bits de resolución.
 
Atrás
Arriba