Autor Tema: Lectura de valor pico  (Leído 6033 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado afta

  • PIC16
  • ***
  • Mensajes: 123
Lectura de valor pico
« en: 17 de Marzo de 2023, 17:15:01 »
Hola implemente un codigo que halla el valor pico de una señal de 60Hz mediante una funcion  pero cada vez que se ejecuta la funcion en la señal se genera ruido mientras se ejecuta la funcion. Cuando termina de ejecutarse la funcion la señal queda normal sin ruido.

Adjunto el codigo a continuacion:


unsigned int lectura1,lectura2;
unsigned int mayor,mayor1;
unsigned int valorPico;
char i;

void obtenerPico(unsigned char canal)
{
   mayor = 0;
   mayor1 = 0;
   valorPico=0;
   for(i=0;i<1;i++) 
   {                 
      for(j=0;j<155;j++) 
      {
         lectura1=ADC_Get_Sample(canal);
                                         
         Delay_us(10);

         lectura2=ADC_Get_Sample(canal);

         Delay_us(10);

         if(lectura2>lectura1) mayor=lectura2;
         else mayor = lectura1;
         if(mayor>mayor1) mayor1=mayor;
      }
      valorPico+=mayor1; 
   }
}

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Lectura de valor pico
« Respuesta #1 en: 17 de Marzo de 2023, 19:35:14 »
Hola implemente un codigo que halla el valor pico de una señal de 60Hz mediante una funcion  pero cada vez que se ejecuta la funcion en la señal se genera ruido mientras se ejecuta la funcion. Cuando termina de ejecutarse la funcion la señal queda normal sin ruido.

Adjunto el codigo a continuacion:


unsigned int lectura1,lectura2;
unsigned int mayor,mayor1;
unsigned int valorPico;
char i;

void obtenerPico(unsigned char canal)
{
   mayor = 0;
   mayor1 = 0;
   valorPico=0;
   for(i=0;i<1;i++) 
   {                 
      for(j=0;j<155;j++) 
      {
         lectura1=ADC_Get_Sample(canal);
                                         
         Delay_us(10);

         lectura2=ADC_Get_Sample(canal);

         Delay_us(10);

         if(lectura2>lectura1) mayor=lectura2;
         else mayor = lectura1;
         if(mayor>mayor1) mayor1=mayor;
      }
      valorPico+=mayor1; 
   }
}

Por lo que describes, no se si estoy entendiendo mal, es que cuando llamas o ejecutas la función obtenerPico, la señal sinusoidal se altera o corrompe. Si es así, tal vez deberías compartir el esquemático de tu hardware.

Respecto a tu código, por lo que comprendo, parece que tomas varias muestras (256). Cada 2 muestras consecutivas comparas ambas señales. En el momento que la segunda muestra sea mayor a la primera, asumes que has encontrado el valor pico (Aquí creo que deberías retornar o finalizar la función, ya que no tiene sentido seguir realizando comparaciones.

Tal vez exista una mejor manera con amplificadores operacionales (Suponiendo que siempre va a ser una señal sinusoidal), podrías primero integrar a la señal (obtendrías una función coseno respecto a la primera que se puede asumir que es seno), y esta nueva señal pasaría por un detector de cruce por cero.

El detector de cruce por cero genera pulsos justo en los picos de la señal seno (original) y dichos picos podrían ser útiles para que el microcontrolador active el ADC y media el valor de voltaje de la señal original.


Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado afta

  • PIC16
  • ***
  • Mensajes: 123
Re:Lectura de valor pico
« Respuesta #2 en: 17 de Marzo de 2023, 20:10:47 »
Hola Dominus aqui adjunto el circuito. Es un ciruito que saque de un equipo comercial que funciona correctamente. Entonces, creo que el problema es el codigo.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Lectura de valor pico
« Respuesta #3 en: 17 de Marzo de 2023, 20:39:12 »
Hola Dominus aqui adjunto el circuito. Es un ciruito que saque de un equipo comercial que funciona correctamente. Entonces, creo que el problema es el codigo.

¿Y la señal que afirmas que se distorsiona es la que está en el pin RA1? ¿Lo has visto con un osciloscopio?

Porque en teoría esa entrada es de alta impedancia y no debería suceder lo que dices, tal vez deberías mostrar como es la función ADC_Get_Sample y como estás configurando el ADC y el terminal RA1.

Respecto a lo que te dije anteriormente, no creo que se aplica lo del detector de cruce por cero, ya que me parece que la primera etapa del circuito que muestras es un rectificador de media onda, la segunda parece un filtro para eliminar ruido de alta frecuencia.

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado afta

  • PIC16
  • ***
  • Mensajes: 123
Re:Lectura de valor pico
« Respuesta #4 en: 17 de Marzo de 2023, 21:21:57 »


¿Y la señal que afirmas que se distorsiona es la que está en el pin RA1? ¿Lo has visto con un osciloscopio?

[/quote]

Si, es la señal en RA1 la que se distorsiona mientras esta en ejecucion la funcion; es lo que me muestra el osciloscopio.

La funcion ADC_Get_Sample pertenece a la bilbioteca de mikroC y es la que uso para leer un canal del ADC.

Desconectado afta

  • PIC16
  • ***
  • Mensajes: 123
Re:Lectura de valor pico
« Respuesta #5 en: 17 de Marzo de 2023, 21:37:50 »
Aqui adjunto lo que muestra el osciloscopio en RA1.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Lectura de valor pico
« Respuesta #6 en: 17 de Marzo de 2023, 22:18:33 »
Esa señal no se debe al micro sino al rectificador mal ajustado (la rectificación no es simétrica) y  que la frecuencia de corte del filtro es de 100Hz, cuando debería ser de 20Hz o menor (dependiendo del ripple admisible).
 
La R de 2k2 no es necesaria, además es de un valor cercano al máximo recomendado por Microchip.

Además este circuito no es para medir el valor de pico sino el valor medio.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Lectura de valor pico
« Respuesta #7 en: 17 de Marzo de 2023, 22:19:02 »
Aqui adjunto lo que muestra el osciloscopio en RA1.

Está algo raro... ¿Si estás configurando como entrada RA1? Pensaría, tal vez estoy especulando que RA1 está configurado como salida y eso es lo que altera la señal.
¿Cómo es la señal cuando no está ejecutándose la función?
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Lectura de valor pico
« Respuesta #8 en: 17 de Marzo de 2023, 22:23:33 »
Esa señal no se debe al micro sino al rectificador mal ajustado (la rectificación no es simétrica) y  que la frecuencia de corte del filtro es de 100Hz, cuando debería ser de 20Hz o menor (dependiendo del ripple admisible).
 
La R de 2k2 no es necesaria, además es de un valor cercano al máximo recomendado por Microchip.

Además este circuito no es para medir el valor de pico sino el valor medio.

¿No es al revés? Es decir el filtro es un pasa bajos y la frecuencia de corte es correcto que sea 100Hz o más

Porque si la Fc es de 20 Hz o menos, una señal de 60Hz se va atenuar mucho.

¿O estoy equivocado?

Respecto al problema, dice que sólo cuando ejecuta la función sucede el problema, se asume que no existe tal distorsión cuando no se ejecuta el proceso.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Lectura de valor pico
« Respuesta #9 en: 17 de Marzo de 2023, 22:49:13 »
¿No es al revés? Es decir el filtro es un pasa bajos y la frecuencia de corte es correcto que sea 100Hz o más
Porque si la Fc es de 20 Hz o menos, una señal de 60Hz se va atenuar mucho.
¿O estoy equivocado?
Ese esquema es un rectificador de onda completa + un filtro a la salida, pero idea es tener a la salida del filtro solo la componente continua de la señal (el valor medio), por eso una frecuencia de corte baja. Te queda una señal continua y solo necesitás una muestra cada tanto (digamos 200ms)
Si en cambio uno quisiera la señal rectificada limpia, tampoco se puede usar de fc 100Hz sino mucho mayor , porque no solo estarías atenuando la  fundamental sino también las primeras armónicas.

Citar
Respecto al problema, dice que sólo cuando ejecuta la función sucede el problema, se asume que no existe tal distorsión cuando no se ejecuta el proceso.
No se como lo ha comprobado, pero las distorsiones que puede introducir el micro por un error en la programación nunca se van a manifestar así, sino con saltos cuadrados no sincronizados en la señal

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Lectura de valor pico
« Respuesta #10 en: 17 de Marzo de 2023, 22:58:00 »
Ese esquema es un rectificador de onda completa + un filtro a la salida, pero idea es tener a la salida del filtro solo la componente continua de la señal (el valor medio), por eso una frecuencia de corte baja. Te queda una señal continua y solo necesitás una muestra cada tanto (digamos 200ms)
Si en cambio uno quisiera la señal rectificada limpia, tampoco se puede usar de fc 100Hz sino mucho mayor , porque no solo estarías atenuando la  fundamental sino también las primeras armónicas.

Si, parece que es un integrador la primera etapa, algo similar a esto:



Lo de media onda asumo por el diodo. Pensé todo el tiempo que era un rectificador de media onda.

El filtro de la segunda etapa si estoy convencido que es para eliminar ruido de alta frecuencia de la red eléctrica.

Talvez debe acondicionar la señal para que varíe la señal en el rango del conversor ADC, algo similar a esta señal que varia de 0 al máximo (que seguramente es 5VDC)

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Lectura de valor pico
« Respuesta #11 en: 17 de Marzo de 2023, 23:44:34 »
...
Lo de media onda asumo por el diodo. Pensé todo el tiempo que era un rectificador de media onda.
El de media onda es parecido,  pero es de onda completa.
https://www.analog.com/en/technical-articles/build-a-fullwave-rectifier-circuit-with-a-singlesupply-op-amp.html

EDITO:  Acabo de darme cuenta que el ejemplo del  link está mal,  tiene el diodo al revés y el filtro no puede ser inversor porque necesitaría una alimentación negativa.
En fin, el esquema correcto es el publicado por Afta, con el  detalle que hay valores de resistencia críticos. Los muchachos del link tunearon las resistencias del filtro cuando lo que se hace es poner un preset, y ajustarlo hasta que la salida sea simétrica.


Citar
El filtro de la segunda etapa si estoy convencido que es para eliminar ruido de alta frecuencia de la red eléctrica.
En general cuando rectificás onda completa con OA es para después quedarte con la componente continua, si se quiere analizar la señal "tal cual" rectificar solo aporta bajar el rango a la mitad.
« Última modificación: 17 de Marzo de 2023, 23:57:14 por Eduardo2 »

Desconectado afta

  • PIC16
  • ***
  • Mensajes: 123
Re:Lectura de valor pico
« Respuesta #12 en: 18 de Marzo de 2023, 11:14:38 »
He probado el circuito con el pic original (el que viene con el), y al medir la señal en RA1 la señal se muestra sin ese ruido.

El ruido solo se induce cuando esta en ejecucion la funcion obtenerPico, de lo contrario la señal se muestra normal sin ese ruido. RA1 esta configurado como entrada analogica. Para este circuito uso dos canales (RA0 y RA1) y en ambos se presenta el mismo problema. Uso la misma funcion para ambos canales.

Estoy asumiendo que el problema se presenta al ejecutar la funcion porque el tiempo que dura es el mismo que el tiempo que dura el ruido en la señal. Hice las medidas con el osciloscopio.

« Última modificación: 18 de Marzo de 2023, 11:19:04 por afta »

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Lectura de valor pico
« Respuesta #13 en: 18 de Marzo de 2023, 11:17:04 »
He probado el circuito con el pic original (el que viene con el), y al medir la señal en RA1 la señal se muestra sin ese ruido.

El ruido solo se induce cuando esta en ejecucion la funcion obtenerPico, de lo contrario la señal se muestra normal sin ese ruido. RA1 esta configurado como entrada analogica. Para este circuito uso dos canales (RA0 y RA1) y en ambos se presenta el mismo problema. Uso la misma funcion para ambos canales.

Quita la R51 y conecta directamente a la salida del OP y ve si tienes el problema.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado afta

  • PIC16
  • ***
  • Mensajes: 123
Re:Lectura de valor pico
« Respuesta #14 en: 18 de Marzo de 2023, 11:57:55 »
Quitando la resistencia de 2.2k obtengo lo siguiente:

- En azul la señal en RA1 sin la resistencia de 2.2k
- En amarillo la señal en RA1 con la resistencia de 2.2k


 

anything