Filtrar Ruido (problema)

Hola, estoy intentando hacer un control por PWM para alimentar unos leds con un consumo de 0,5A-0,7A a 9-10v.

La alimentacion son 12v. La señal pwm es de 20khz generada por HW en un 16f876a. Para variar el ancho del pulso, leo un potenciometro en el ADC, y aqui creo qeu viene mi problema, la lectura del ADC no es constante mas o menos y tiene grandes variaciones, por lo que me afecta al PWM.

He probado a filtrar la señal de alimentacion con 100uF, y tambien usar un zener, pero sigo con el mismo resultado, con el condensador mejoro algo, pero no es suficiente. Tambien intentado implementar un filtrado por SW, tomando 10 medidas y haciendo la media de estas, pero me da valores muy distantes dando un resultado peor.

Esta señal pwm controla un bc547 que a su vez controla un tip31c.

Como podria filtrar mejor la alimentacion o impedir que se meta ruido en esta?
 
Última edición:
¿Lo has probado en el proteus o otro simulador? Es posible que el fallo esté en el software y no en el hardware.
 
El problema se me ha incrementado enormemente al pasar de probar cargas muy pequeñas (aqui no se notaba el problema, yo lo veia en el osciloscopio la señal PWM que no era estable del todo), con un consumo de 20mA a los 0,5-0,7A que tiene que alimentar el sistema.



Voy a montar el esquema en el proteus a ver que obtengo.
 
Última edición:
Ya que estas con el OCR, medí la alimentación y fijate que Ripple tenés.

Por el otro lado, podrías colocar un filtro pasa-bajos a salida del pote o implementar un filtro-pasa bajos digital.
 
Ando pez en el tema del filtro pasa-bajos. Algun consejo para iniciar mi busqueda?



He intentado simular en el proteus y no funciona la salida pwm. Mañana lo revisare a ver -.-
 
Última edición:
Si el problema es la lectura del potenciómetro, primero revisaría que este no sea logarítmico...

De no serlo, tienes que saber que ese potenciómetro tiene que ser de alrededor de 1Kohm si mal no recuerdo, ya que la resistencia de entrada al ADC debe ser de alrededor de ese valor. Revisa la hoja de datos del PIC para estar seguro.
La razón de ese valor es porque la conversión la hace con un capacitor que se carga con una cierta corriente, la cual depende de la resistencia de entrada.
Esta bien que tomes varias lecturas y las promedies pero asegúrate de que sean con la velocidad suficiente para que ese promedio sea bueno. No necesariamente más rápido es mejor...

Con respecto al control con un BC547 y un TIP31c, asegúrate de que el transistor se esté saturando correctamente y no este funcionando en la zona activa (debe funcionar como llave, no como amplificador).

Si adjuntas un esquema sería más fácil ayudarte.
 
A basalto, condensador ceramico de que valor, 0,1uf?

Voy a aportar el esquema, que no tiene ningun misterio. El potenciometro es de 1k (ya he realizado otros diseños con este elemento y el ADC). La alimentacion es una fuente de pc vieja y tomo la salida de 12v para la parte de potencia y la de 5v para el micro. Lo tengo todo en una protoboard.

Adjunto una captura del circuito: https://dl.dropbox.com/u/6147749/Fotos/pwm.png

Me pasare hoy a ver si puedo por la tienda de electronica a por un mosfet IRF530, que igual es mas indicado.

Saludos y gracias.
 
A basalto, condensador ceramico de que valor, 0,1uf?

Voy a aportar el esquema, que no tiene ningun misterio. El potenciometro es de 1k (ya he realizado otros diseños con este elemento y el ADC). La alimentacion es una fuente de pc vieja y tomo la salida de 12v para la parte de potencia y la de 5v para el micro. Lo tengo todo en una protoboard.

Adjunto una captura del circuito: https://dl.dropbox.com/u/6147749/Fotos/pwm.png

Me pasare hoy a ver si puedo por la tienda de electronica a por un mosfet IRF530, que igual es mas indicado.

Saludos y gracias.

Con 100nF es suficiente, te paso esto para que lo leas http://sharatronica.com/eliminar_ruidos_electricos.html.

Yo de ti quitaría la resistencia que va a Vpp y haría un filtro por software, tomas x medidas del CAD y calculas la media.

La resistencia que va al CAD le pondría una mucho mas grande, como de 47 K y que 5V/1K=5 mA que consumes inútilmente.

Un saludo
 
Última edición:
Os pongo la señal de 12v y la señal de 5v, con el sistema conectado.

- Señal de 12v:
12v_0.bmp




- Señal de 5v: ** Con esta alimento el PIC y el potenciometro.
5v_1.bmp




Ya que pasare por la tienda, comprare un potenciometro mayor.
 
Última edición:
Tenés un pico muy importante de 1V, pero en un tiempo muy corto.

Además de los 100nF, podrías colocar capacitores de mayor tamaño, su valor dependerá de la corriente de carga, el ripple buscado y el tiempo en el que se da ese pico, resumiendo un poco, ya que tenés el OCR, andá aumentando el C en paralelo hasta bajar lo suficiente ese ripple. Incluso, si la corriente de carga lo permite, usar algún inductor de choque.

Se que puede parecer lo mismo, pero no lo es, el capacitor ponelo después del circuito donde conmutas y bien al lado del uC/entrada ADC.

Ej. de alimentación:

Fuente --> Leds --> Capacitor en paralelo --> uC
Masa ------|------------------|------------------------|

De todas formas, volviendo al ADC, fijate si como dijo agustinzzz, ya tenés un filtro pasa-bajos implementado en la entrada del propio ADC.
 
He añadido un C de 100nf en la alimentacion del pic, y quitado la resistencia del mclr que va al pic. No hay cambios, si que la señal del pwm se ve mas limpia.

Tambien he probado a añadir el mismo de 100nf a la entrada del ADC con el pot de 1k, obteniendo lo siguiente:

- Sin condensador:

sin_c.bmp


- Con condensador 100nF:

con__100nf.bmp


El ruido de la segunda imagen, que es mas bien la carga y descarga del condensador, no es siempre la misma, varia segun el dutty del PWM que como no es constante, pues sube y baja segun la lectura del ADC.

A falta de implementar de nuevo el filtro por software, solo me queda poner el paso-bajo. Tengo que poner el pot de 47k que lo he puesto un momento pero no ha funcionado y he de revisar si esta conectado correctamente. He mirado un poco en el poco tiempo libre que he tenido, y se hace con un AO? La frecuencia de corte tendria que ser.. 20khz?
 
¿De cuanto es esa variación de duty?

Podrías subir el código también (usando la función PHP o Code que tiene el foro), así los que conocen de PIC puden ayudarte por ese lado.
 
Bueno, al final he medio desmontao todo y lo he vuelto a montar, un montaje algo mas limpio, y como resultado, pues el ruido ha mejorado mucho.

Colocando condensadores pequeños, de 100nF el ruido aumentaba. Usando de 10uF mejoraba algo, y he ido subiendo como comento @cosmefulanito04 hasta que colocando en 12v uno de 1000uF ya he obtenido resultados muy buenos. Ahora ando ajustando colocando uno de 220uF y de 100uF en la alimentacion del pic para terminar de mejorar el pequeño desvio que tengo cuando esta por debajo del 60% del ciclo de trabajo (que seria la parte donde entrega mas potencia a los leds).



Este es el ruido que tengo en la entrada del ADC cuando se esta entregando la maxima potencia o practicamente la maxima.

Pot_max_ADC.bmp


Ahora subo el codigo del PIC.

Seria posible mejorar esta señal y reducirla? Si meto algun condensador en el ADC me genera siempre mas ruido.



Aqui el programa que tengo en el 16f876a. Con la parte de filtro por software comentada, asi que los resultados obtenidos son sin filtro por SW.

Código:
#include <16F876a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use fast_io(B)

//#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7)
int dato;

//int TablaTen[10];
//unsigned char contador=0;
//int TenMedia = 0;
//unsigned char u;
//int media;


main() {
 
   long duty_PWM1, duty_PWM2;

   // Para cristal de 4 mhz, frecuencia de 20 khz ,

   // T2DIV set to 1

   // Para calcular la frecuencia:

   // (4/frecuencia cristal)*T2_DIV*(periodo+1)





   // (4/4000000)*1*(49+1)=0.00005seg

   setup_timer_2(T2_DIV_BY_1, 49, 1);



   // seleccionamos PWM para los dos módulos CCP

   setup_ccp1 (CCP_PWM);

   setup_ccp2 (CCP_PWM);



   // cargamos el duty cicle para cada PWM. La frecuencia es igual para ambas, 20KHz.

   // Para calcular el tiempo en nivel alto, dado que usamos un LONG, sería:

   // Valor*T2_DIV*(1/frecuencia del cristal). Si se usa un valor tipo INT en lugar

   // de LONG se calcularía multiplicando la fórmula por 4: Valor*T2_DIV*(1/frecuencia del cristal)*4

   duty_PWM1 = 100; // 0.000025seg/(1*(1/4000000))=100, que es el valor a cargar. Duty 50%

   duty_PWM2 = 200; // 0.000050seg/(1*(1/4000000))=200. Si te fijas, con 20KHZ el T=50us,

                    // que es lo que se ha puesto para el duty, osea, todo.

                    // Por tanto la señal será continua a 5v. Duty cicle 100%

   set_pwm1_duty(duty_PWM1);

   set_pwm2_duty(duty_PWM2);

  
 while(1){   
        setup_adc_ports(all_analog);//Definimos las entradas analógicas.
        delay_us (20);
        setup_adc (ADC_CLOCK_INTERNAL);//Configuramos el modo del convertidor.
        delay_us (20);
        set_adc_channel(0); //Selección del canal analógico.
        delay_us (20);
        dato=read_adc();
        delay_us (20);
        setup_adc(adc_off);
        SETUP_ADC_PORTS(no_ANALOGs);
        delay_ms(1);
 /*      
     // Filtro por media de muestras tomadas en el ADC.
     if (contador==10) {
         contador=0;
         media=0;
        for (u=0;u<11;u++){
        media+=TablaTen[u];  
        }
        TenMedia = media/10;
        }
        
TablaTen[contador] = dato;
contador++;

*/
   set_pwm2_duty(dato);    
           
 }}



El ruido cuando la potencia a entregar es pequeña, es despreciable, no hay casi.



En la alimentacion del pic he puesto uno de 220uF. De esta conexion sale la que va al potenciometro. Y en la patilla de mclr sin resistencia, he puesto uno de 100uF. El de 1000uF va conectado en la entrada a la protoboard de 12v.
 
Última edición:
Claramente tienes problemas con la fuente de alimentación ya que el PWM se te esta "reflejando" en los 5V, prueba alimentar el pic con un 7805 que este conectado a los 12V y obviamente ponle sus condensadores para el filtrado, igual pon lo mas cerca posible del micro un condensador de 100nF y a la entrada del ADC un condensador.
El problema debe haber surgido porque utilizas una fuente de PC y esta toma su referencia de los 12V y los 5V, por lo que cuando el PWM aplica una carga a los 12V los 5V aumentan un poco y como el voltaje de referencia del ADC viene de los 5V este te da un resultado que varia bastante.
 
Voy a comprobar todo lo que comentais. Alimentare el pic usando un zener, que 7805 no tengo ninguno. A ver que ocurre.
Gracias a todos por la ayuda prestada



Tengo un rizado enla linea de 12v a maxima potencia de 0,9v. Encontre un 7805 perdido por mi caja de componentes. Esta es la salida que obtengo, con un condensador entre la patilla de alimentacion y masa de 220uF pegado al pic, y un condensador de 100uF de la patilla mclr a masa pegado al pic tambien.

La señal esta tomada de la salida del 7805: ** Entregando la pot. maxima a los leds.

7805_0.bmp


La señal en el ADC es muy similar a la de la salida del 7805



No obtengo mejoria añadiendo condensadores de 100nf en el pic ni tampoco añadiendo otros a la salida del 7805
 
Última edición:
La alimentacion la saco de la salida de 12v de una fuente de pc, asi que si, es conmutada. Si quieres pongo la señal de 12v cuando suministra la carga maxima a los leds, una señal curiosa, con mucho rizado (0,9v).

La alimentacion que tendra esto, sera una bateria de 12v, asi que igual tengo una señal mas limpia de alimentacion, pero vamos, que los problemas vienen por el pwm creo yo, pues es la primera vez que me pasa esto. Tambien la primera vez que me pongo a enredar con estas cosas.
 
Atrás
Arriba