TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: afta en 30 de Agosto de 2021, 15:45:20

Título: RECTIFICADOR MAS FILTRO
Publicado por: afta en 30 de Agosto de 2021, 15:45:20
Hola con todos.
A la salida de un transformador  tengo un rectificador de onda completa conectado a un filtro de segundo orden Sallen Key pasabajas. La salida del filtro esta conectada a pin de entrada de un PIC; el cual, debe leer la señal para controlar que la tension de la red electrica este en un rango de por ejemplo minimo = 180V y maximo = 260V.
Alguien sabe que se debe hacer en el programa para lograr esto?
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 30 de Agosto de 2021, 16:35:48
Citar
author=afta link=topic=50912.msg419122#msg419122 date=1630349120]
Hola con todos.
A la salida de un transformador  tengo un rectificador de onda completa conectado a un filtro de segundo orden Sallen Key pasabajas. La salida del filtro esta conectada a pin de entrada de un PIC; el cual, debe leer la señal para controlar que la tension de la red electrica este en un rango de por ejemplo minimo = 180V y maximo = 260V.
Alguien sabe que se debe hacer en el programa para lograr esto?

Si te refieres a que debes desconectar una carga cuando el voltaje sea menor que 180V y mayor que 260V, implica controlar con otro terminal del microcontrolador un relé quien enciende o apaga la carga.

Si la entrada del microcontrolador que llega la señal seguramente es la entrada al ADC, y deberás leer dicho voltaje variable para tomar la decisión de encender o apagar la carga.

Por ejemplo, digamos que si para 180V tienes unos 2V y para 260V, tienes unos 4.5V, si el conversor es de 10 bits, para 2V tendrías un valor de 410, y para 4.5V tendrás 922.

Un pseudocódigo sería así:
Código: C
  1. while(1)
  2. {
  3.     valorADC = funcionQueLeeELADC();
  4.      if (valorADC > 410 && valorADC < 922)
  5.     {
  6.        salidaRele = 1;
  7.     }
  8.     else
  9.     {
  10.         salidaRele = 0;
  11.      }
  12. }


Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: Robert76 en 30 de Agosto de 2021, 16:40:58
Hola, específica más al respecto.
Porque si te refieres a un control de estabilizador mediante escalones es un tema.
Ahora sí te refieres a un regulador tipo AVR, cómo los que usa grupo electrógeno es otra cosa.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 30 de Agosto de 2021, 17:10:17

Por ejemplo, digamos que si para 180V tienes unos 2V y para 260V, tienes unos 4.5V, si el conversor es de 10 bits, para 2V tendrías un valor de 410, y para 4.5V tendrás 922.
[/quote]
Hola Dominus. Cuando dices si para 180V tienes unos 2V y para 260 unos 4.5V a que se refiere?
Esos 2V y 4.5V son un valor promedio de la señal que esta leyendo o un valor rms?.

Adjunto la señal que lee el ADC del PIC.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 30 de Agosto de 2021, 17:24:01

Por ejemplo, digamos que si para 180V tienes unos 2V y para 260V, tienes unos 4.5V, si el conversor es de 10 bits, para 2V tendrías un valor de 410, y para 4.5V tendrás 922.
Hola Dominus. Cuando dices si para 180V tienes unos 2V y para 260 unos 4.5V a que se refiere?
Esos 2V y 4.5V son un valor promedio de la señal que esta leyendo o un valor rms?.

Adjunto la señal que lee el ADC del PIC.
[/quote]

¿En esa imagen que muestras que voltaje tienes a la entrada de AC, 180V, 260V o qué? ¿El eje en Y es en Voltios, milivoltios, o en qué?
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 30 de Agosto de 2021, 17:29:06
¿En esa imagen que muestras que voltaje tienes a la entrada de AC, 180V, 260V o qué? ¿El eje en Y es en Voltios, milivoltios, o en qué?
La entrada de AC es 180Vrms y el eje Y esta en voltios
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 30 de Agosto de 2021, 17:31:13
Entonces cuando tienes 180V, tienes 1.45 aproximadamente a la entrada del ADC del MCU.

Si el voltaje sube a 260Vrms ¿A cuánto sube el voltaje a la entrada del MCU?
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 30 de Agosto de 2021, 17:34:17
Adjunto la imagen a 260Vrms
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 30 de Agosto de 2021, 17:35:56
Adjunto la imagen a 260Vrms

Entonces para 260Vrms tienes 2.10V aprox. (ese filtro creo que debe mejorarse un poco más)
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 30 de Agosto de 2021, 17:39:13
Dominus gracias. Esos 1.45 y 2.10 V son los valores promedios de la señal cierto?
Entonces la funcion que lee la señal con el ADC debe calcular el valor promedio y usar ese valor para determinar si la carga se enciende o no?

Como puedo hallar el valor promedio de esa señal? Lo que pude hacer es hallar su valor pico pero no se que mas hacer.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 30 de Agosto de 2021, 17:42:07

O sea yo entiendo, según tu pregunta inicial es que el voltaje debe estar entre 180 y 260 (que es lo mismo que 1.45 y 2.10)

Si está fuera de esa rango (muy bajo o muy alto) debes apagar la carga

¿Estoy en lo correcto?

 ¿Porqué crees que debes calcular el promedio? No te explicas bien lo que deseas hacer.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 30 de Agosto de 2021, 17:50:02
No entiendo muy bien esta instruccion:

valorADC = funcionQueLeeELADC();

Si uso el ADC para leer la señal estare leyendo un valor instantaneo. Entoces, si uso ese valor y lo comparo con 1.45 por ejemplo se puede decidir encender o apagar la carga.

Mi duda es que como la señal en la salida es variable y 1.45 esta entre sus valores, entonces, cuando tenga 180V la carga se encendera y apagara cuando se lea un valor mayor o menor que 1.45V. No se si estoy equivocado
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 30 de Agosto de 2021, 18:09:20
No entiendo muy bien esta instruccion:

valorADC = funcionQueLeeELADC();

Si uso el ADC para leer la señal estare leyendo un valor instantaneo. Entoces, si uso ese valor y lo comparo con 1.45 por ejemplo se puede decidir encender o apagar la carga.

Mi duda es que como la señal en la salida es variable y 1.45 esta entre sus valores, entonces, cuando tenga 180V la carga se encendera y apagara cuando se lea un valor mayor o menor que 1.45V. No se si estoy equivocado

Cuando diseñas un sistema como lo que yo estoy entendiendo y como he explicado que debe funcionar, acercarte a los límites es un poco indeterminado.

Según gráfica yo tomé el valor promedio, ya que se ve que el filtro aun deja pasar un poco de la componente de alterna. Entonces supongamos que toma un valor de 1.35V, entonces el sistema toma la decisión de apagar la carga y luego toma otro valor y digamos que es ahora de 1.52, y toma la decisión de activar la carga.

¿Qué sucede en dichos límites? El relé empieza a vibrar, a pagar y encender la carga a toda p*t4.

El primer paso que debes hacer, es mejor al filtro lo mejor que puedas.

Obviamente no se logra completamente. El segundo paso es tomar varias muestras, por ejemplo digamos que tomo 10 muestras y voy sumando y al final divido para 10 y obtengo un valor promedio y con eso decido si encender o apagar la carga.

Si es muy complicado los dos anteriores, puedes utilizar un control de histéresis cuando estás cerca de los límites.

Son brechas cuando estás en esos límites.

Por ejemplo.

Maximo es 260.

Límite superior 250.

Límite inferior 190V

Minimo 180V.

Cuando estés entre 250 a 260 o entre 180 y 190. Cuando apagas la carga, debes esperar un tiempo antes de decidir volver  medir, por ejemplo, digamos unos 3 segundos. De esa manejar evitas que el relé esté vibrando en los límites.

Una combinación de los 3 métodos es mejor.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 30 de Agosto de 2021, 18:26:28
Hice este seudocodigo para tomar el valor promedio. Quisiera saber si esta bien y que tiempo poner en el ciclo for despues de obtener adc_rd0 si la señal es de 120Hz.

int mm;
adc_rd0 = 0;

for(mm=0;mm<10;mm++)
      {
          adc_rd0+= ADC_Read(0);
      }
      adc_rd0/=10;

      ac_voltage = adc_rd0;
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: KILLERJC en 30 de Agosto de 2021, 18:32:38
Es correcto.... Pero siempre mejor usar potencias de 2... Es de 4,8,16 vueltas
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 30 de Agosto de 2021, 18:33:37
Hice este seudocodigo para tomar el valor promedio. Quisiera saber si esta bien y que tiempo poner en el ciclo for despues de obtener adc_rd0 si la señal es de 120Hz.

int mm;
adc_rd0 = 0;

for(mm=0;mm<10;mm++)
      {
          adc_rd0+= ADC_Read(0);
      }
      adc_rd0/=10;

      ac_voltage = adc_rd0;

Si, o sea está bien, pero es un proceso apropiativo, es decir toma el control del CPU y no lo suelta hasta que acabe, es decir no permite que otros procesos  continúen. Si el tiempo que se queda "congelado" en CPU hasta que acabe de hacer el promedio no es algo crítico, no hay problema.

Te recomendaría programar el código de tu micro en tareas y procesos cooperativos para evitar puntos muertos o bloqueos como se denominan esos procesos.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 30 de Agosto de 2021, 18:35:51
Es correcto.... Pero siempre mejor usar potencias de 2... Es de 4,8,16 vueltas

Hola Killer disculpa no entiendo. Seria mejor poner mm < 17? y sabes cada cuanto tiempo puedo tomar la muestra?
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 30 de Agosto de 2021, 18:40:17

Si, o sea está bien, pero es un proceso apropiativo, es decir toma el control del CPU y no lo suelta hasta que acabe, es decir no permite que otros procesos  continúen. Si el tiempo que se queda "congelado" en CPU hasta que acabe de hacer el promedio no es algo crítico, no hay problema.

Te recomendaría programar el código de tu micro en tareas y procesos cooperativos para evitar puntos muertos o bloqueos como se denominan esos procesos.

Dominus no se lo que son procesos cooperativos. En cuanto al tiempo: cada cuanto puedo tomar las muestras en el ciclo for?
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 30 de Agosto de 2021, 18:46:15

Si, o sea está bien, pero es un proceso apropiativo, es decir toma el control del CPU y no lo suelta hasta que acabe, es decir no permite que otros procesos  continúen. Si el tiempo que se queda "congelado" en CPU hasta que acabe de hacer el promedio no es algo crítico, no hay problema.

Te recomendaría programar el código de tu micro en tareas y procesos cooperativos para evitar puntos muertos o bloqueos como se denominan esos procesos.

Dominus no se lo que son procesos cooperativos. En cuanto al tiempo: cada cuanto puedo tomar las muestras en el ciclo for?

Me parece que el proceso de la conversión ADC toma un poco más tiempo que si los ciclos del for y otros. No se que tan crítico es el tiempo para apagar tu carga antes un sobre o sub voltaje. Un método que tienen algunos para medir cuanto tomará tiempo un proceso como el que describes es activar una salida del micro (un pin) antes del for, y cuando ya acaba de hacer todo hasta el cálculo del promedio es pagar dicha salida. Mediante un oscilocopio verías una señal cuadrada y el tiempo en alto sería lo que el CPU se queda congelado en tu proceso.

Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 30 de Agosto de 2021, 19:05:04

Si, o sea está bien, pero es un proceso apropiativo, es decir toma el control del CPU y no lo suelta hasta que acabe, es decir no permite que otros procesos  continúen. Si el tiempo que se queda "congelado" en CPU hasta que acabe de hacer el promedio no es algo crítico, no hay problema.

Te recomendaría programar el código de tu micro en tareas y procesos cooperativos para evitar puntos muertos o bloqueos como se denominan esos procesos.

Dominus no se lo que son procesos cooperativos. En cuanto al tiempo: cada cuanto puedo tomar las muestras en el ciclo for?

Ahora bien, si la carga es algo muy critico y debes tener una respuesta rápida, no deberías usar el ADC, sino comparadores (Si el micro que tienes posee internos, sería genial, caso contrario, externos). Con el uso de comparadores  solo deberías comprobar dos entradas digitales que cuando pasen a 1 lógico, inmediatamente apagar el relé que controla la carga. De esa manera tienes mayor velocidad de respuesta ante sobre y sub voltajes.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: KILLERJC en 30 de Agosto de 2021, 20:23:16
Es correcto.... Pero siempre mejor usar potencias de 2... Es de 4,8,16 vueltas

Hola Killer disculpa no entiendo. Seria mejor poner mm < 17? y sabes cada cuanto tiempo puedo tomar la muestra?

Es mejor debido a que dividir por 2,4,8,16 significa solamente desplazar hacia la derecha los bits.. En cambio dividir por 10 es mucho mas complejo de realizar, lo cual terminas usando mas instrucciones... Es decir... si quisiera dividir por 8 por ejemplo solo hago:

Código: C
  1. adc_rd0 >>= 3;  // (Lo mismo que adc_rd0 = adc_rd0 >> 3)
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 30 de Agosto de 2021, 22:34:38
Hola hice este codigo (uso el PIC16F676). Al simular en Proteus me muestra la siguiente advertencia:

[PIC12 ADC] PC=0x0045. ADC conversion clock period (5e-07) is possibly invalid for device clock frequency. [U2]. No entiendo por que.

Ademas, tengo problemas en los cortes: deberia cortar en 180 pero no lo hace. Comienza a apagar y encender la carga cerca de este limite y se apaga completamente en otro valor. Lo mismo con el limite superior de 260.

No se cuales son los errores que estoy cometiendo. Gracias.


unsigned int valorADC;

void obtenerPromedio(void)
{
int i;
int adcCodigo = 0;
ADCON0=0b00000001;
Delay_us(20);  // para el tiempo de adquisicion

for(i=0;i<16;i++)
      {
          adcCodigo+=ADC_Read(0);
          Delay_ms(10);
      }
      adcCodigo >>= 4;

      valorADC = adcCodigo;
}


void main()
{
TRISC=0x00;   // puerto c como salida

// Entradas
TRISA0_bit=1;
TRISA1_bit=1;
TRISA2_bit=1;

PORTC=0x00;

ANSEL=0b00000001; // AN0

ADCON1 = 0x10; // Fosc/8

while(1)
{
Delay_ms(100); // retardo para estabilizar la tension
obtenerPromedio();
 if (valorADC > 297 && valorADC < 430)  // 297 -> 1.45V(180V en la entrada de la red) y 430 -> 2.10V (260V en la entrada de la red.)
 {
 PORTC=0b00000001;
 }
 else
 {
 PORTC=0b00000000;
 }
 
}

}
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 30 de Agosto de 2021, 22:44:27
[PIC12 ADC] PC=0x0045. ADC conversion clock period (5e-07) is possibly invalid for device clock frequency. [U2].

Ahí dice que para la frecuencia que está funcionando tu micro, el periodo de conversión está calibrado 0.5 us

En las hojas de datos debe decir cual es el valor mínimo (debe ser más grande de 0.5us) de conversión y como lo seteas o calibras.

Respecto a tu código, para la siguiente parte:

Código: C
  1. while(1)
  2. {
  3.        Delay_ms(100); // retardo para estabilizar la tension
  4.        obtenerPromedio();
  5.        if (valorADC > 297 && valorADC < 430)  // 297 -> 1.45V(180V en la entrada de la red) y 430 -> 2.10V (260V en la entrada de la red.)
  6.       {
  7.              PORTC=0b00000001;
  8.       }
  9.       else
  10.      {
  11.            PORTC=0b00000000;
  12.      }

¿Te das cuenta que en la línea que está Delay_ms(100);  el CPU del microcontrolador estará congelado por 100ms. Si dentro de 100ms hay un sobre voltaje, hasta que termine ese delay, y calcule  el valor promedio del ADC, tu carga estará recibiendo ese sobre voltaje por un poco más de 100ms?

¿No hay problema si eso sucede?[/code]
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 30 de Agosto de 2021, 22:51:20
Y también dentro de tu cálculo del voltaje promedio:
Código: C
  1. for(i=0;i<16;i++)
  2.       {
  3.           adcCodigo+=ADC_Read(0);
  4.           Delay_ms(10);
  5.       }
  6.       adcCodigo >>= 4;
  7.  
  8.       valorADC = adcCodigo;
  9. }

Hay un delay de 10 ms que ejecutado 16 veces da aproximadamente 160 ms, más 100 ms del delay en el lazo principal tendrías casi un cuarto de segundo. SI hay un sobre voltaje hasta que todo ese tiempo, es posible que tu carga podría estar dañada, si el objetivo es evitar un daño, sobre todo por un sobrevoltaje. Al menos que un sobre voltaje de aproximadamente 250 ms no sea algo crítico.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: Robert76 en 30 de Agosto de 2021, 23:17:54
El problema de promediar como lo haces es que la variable adcodigo se puede desbordar. Al declararla cómo "int" el compilador le da formato en 8bits. Si sumas 16 muestras en una variable con ese formato es muy probable que se desborde.
Declara esa variable como tipo "long"
Más bien, una forma eficiente de promediar es tomar una muestra solamente y promediarla con la muestra anterior.
Otra opción es tomar una muestra, luego tomar el 5% de esa muestra y sumarla al 95% del acumulado anterior, aunque consume más recursos de memoria y ciclos de máquina.
El tiempo de adquisición del ADC es de aprox 20uS, aunque depende de la velocidad del reloj del sistema.
Pero usar 10ms es una barbaridad. Utiliza 100uS para tener una tolerancia aceptable de tiempo.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 30 de Agosto de 2021, 23:34:05
[PIC12 ADC] PC=0x0045. ADC conversion clock period (5e-07) is possibly invalid for device clock frequency. [U2].
Ahí dice que para la frecuencia que está funcionando tu micro, el periodo de conversión está calibrado 0.5 us

En las hojas de datos debe decir cual es el valor mínimo (debe ser más grande de 0.5us) de conversión y como lo seteas o calibras.

Segun la hoja de datos debo configurar el registro ADCON1 para un TAD de minimo 1.6us. Selecciones Fosc/8 que muestra un TAD de 2us, lo cual seria suficiente pero no entiendo entonces porque sale ese error. Intente cambiar a Fosc/16 pero sigue saliendo el error.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 30 de Agosto de 2021, 23:51:33
[PIC12 ADC] PC=0x0045. ADC conversion clock period (5e-07) is possibly invalid for device clock frequency. [U2].
Ahí dice que para la frecuencia que está funcionando tu micro, el periodo de conversión está calibrado 0.5 us

En las hojas de datos debe decir cual es el valor mínimo (debe ser más grande de 0.5us) de conversión y como lo seteas o calibras.

Segun la hoja de datos debo configurar el registro ADCON1 para un TAD de minimo 1.6us. Selecciones Fosc/8 que muestra un TAD de 2us, lo cual seria suficiente pero no entiendo entonces porque sale ese error. Intente cambiar a Fosc/16 pero sigue saliendo el error.



No se porque pero al cambiar la instruccion "ANSEL=0b00000001" por "ANS0_bit = 1" desaparecion el error del reloj. Lo que aun no funciona en la simulacion son los cortes en 180 y 260. Que podria hacer mejor o corregir para que funcione bien?
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: Robert76 en 31 de Agosto de 2021, 07:06:03
[PIC12 ADC] PC=0x0045. ADC conversion clock period (5e-07) is possibly invalid for device clock frequency. [U2].
Ahí dice que para la frecuencia que está funcionando tu micro, el periodo de conversión está calibrado 0.5 us

En las hojas de datos debe decir cual es el valor mínimo (debe ser más grande de 0.5us) de conversión y como lo seteas o calibras.

Segun la hoja de datos debo configurar el registro ADCON1 para un TAD de minimo 1.6us. Selecciones Fosc/8 que muestra un TAD de 2us, lo cual seria suficiente pero no entiendo entonces porque sale ese error. Intente cambiar a Fosc/16 pero sigue saliendo el error.



No se porque pero al cambiar la instruccion "ANSEL=0b00000001" por "ANS0_bit = 1" desaparecion el error del reloj. Lo que aun no funciona en la simulacion son los cortes en 180 y 260. Que podria hacer mejor o corregir para que funcione bien?

Lee lo que cité más arriba!
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 31 de Agosto de 2021, 10:12:51
[PIC12 ADC] PC=0x0045. ADC conversion clock period (5e-07) is possibly invalid for device clock frequency. [U2].
Ahí dice que para la frecuencia que está funcionando tu micro, el periodo de conversión está calibrado 0.5 us

En las hojas de datos debe decir cual es el valor mínimo (debe ser más grande de 0.5us) de conversión y como lo seteas o calibras.



Segun la hoja de datos debo configurar el registro ADCON1 para un TAD de minimo 1.6us. Selecciones Fosc/8 que muestra un TAD de 2us, lo cual seria suficiente pero no entiendo entonces porque sale ese error. Intente cambiar a Fosc/16 pero sigue saliendo el error.



No se porque pero al cambiar la instruccion "ANSEL=0b00000001" por "ANS0_bit = 1" desaparecion el error del reloj. Lo que aun no funciona en la simulacion son los cortes en 180 y 260. Que podria hacer mejor o corregir para que funcione bien?


Robert76 te lo dijo. Si sumas los 16 valores antes de hacer la división, ese valor puede ser mayor que un número de 16bits, también si está mal configurado tu ADC, no va a leer los valores correctos.

Deberías indicar que MCU estás utilizando para entender lo del conversor.

Las simulaciones no son precisas, mucho mejor es depurar con el hardware para determinar que exactamente está pasando.

¿Puedes poner un punto de ruptura en if y ver que valor tiene valorADC cuando, digamos, a la entrada tienes un valor mayo a 2.10V?

¿O no puedes depurar/debugar con el microcontrolador?
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 31 de Agosto de 2021, 22:52:13
Lo probe en simulacion y el corte por sobretension es correcto. Lo que me esta fallando es el corte por subtension que comienza a oscilar en los limites y estoy usando mas memoria para la variable.

Entre aproximadamente 169.5 y 170.7 oscila.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 31 de Agosto de 2021, 22:56:58
Lo probe en simulacion y el corte por sobretension es correcto. Lo que me esta fallando es el corte por subtension que comienza a oscilar en los limites y estoy usando mas memoria para la variable.

No creo que sea eso, ya que para el valor inferior tendrías un número más pequeño en la suma que de límite superior que dices que está bien.

Insisto ¿Por qué no debugas y pones un punto de ruptura para conocer el valor leído del ADC y determinar si es el ADC que no convierte correctamente el valor del voltaje?
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 31 de Agosto de 2021, 23:52:35
Estoy usando el PIC16F676. Talves alguien ha tenido el mismo problema. Gracias.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 01 de Septiembre de 2021, 01:13:55
Midiendo con un multimetro veo que en la parte inferior hay valore con decimales mientras que cuando opera correctamente el multimetro muestra valores enteros.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 01 de Septiembre de 2021, 08:42:55
Midiendo con un multimetro veo que en la parte inferior hay valore con decimales mientras que cuando opera correctamente el multimetro muestra valores enteros.

Deberías compartir tu esquemático. Tal vez algo está mal.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: Robert76 en 01 de Septiembre de 2021, 09:08:02
Estás leyendo los mensajes de recomendaciones?
Al menos, repórtalo de que si! de lo contrario si no los comprendes, de alguna forma, hazlo saber.
Porque según comentas, pareciera que estás trabajando a tu criterio solamente.
Bien, respecto a los valores leídos del ADC, cómo comenta Dominus, 1ro, realiza una lectura única y verifícalo mediante un LCD o monitor de variables, dependiendo de lo que estés usando.
Por otro lado, es normal que en una conversión, haya pequeñas oscilaciones de la lectura, eso es típico de sistemas de cuantificación.
Para revertir ese detalle, se usa histéresis por software. Que consiste en incrementar un pequeño porcentaje a la muestra, cuándo es mayor a... y restarle un pequeño porcentaje a la misma muestra, cuándo es menor que...
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 02 de Septiembre de 2021, 21:24:15
Por otro lado, es normal que en una conversión, haya pequeñas oscilaciones de la lectura, eso es típico de sistemas de cuantificación.
Para revertir ese detalle, se usa histéresis por software. Que consiste en incrementar un pequeño porcentaje a la muestra, cuándo es mayor a... y restarle un pequeño porcentaje a la misma muestra, cuándo es menor que...

Hola Robert si he estado leyendo sus recomendaciones y realizando pruebas con base en ellas. El problema que hay es que cuando llega a 170 comienza a oscilar y recien en 171 se queda encendido, mientras que al bajar de igual manera en 170 oscila y recien en 169 se queda apagado. En el corte de subida  no presenta ningun problema. No entiendo muy bien la histeresis y como puedo aplicarlo para que el corte de bajada funcione correctamente.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 02 de Septiembre de 2021, 21:49:24
Por otro lado, es normal que en una conversión, haya pequeñas oscilaciones de la lectura, eso es típico de sistemas de cuantificación.
Para revertir ese detalle, se usa histéresis por software. Que consiste en incrementar un pequeño porcentaje a la muestra, cuándo es mayor a... y restarle un pequeño porcentaje a la misma muestra, cuándo es menor que...

Hola Robert si he estado leyendo sus recomendaciones y realizando pruebas con base en ellas. El problema que hay es que cuando llega a 170 comienza a oscilar y recien en 171 se queda encendido, mientras que al bajar de igual manera en 170 oscila y recien en 169 se queda apagado. En el corte de subida  no presenta ningun problema. No entiendo muy bien la histeresis y como puedo aplicarlo para que el corte de bajada funcione correctamente.

Eso suena a un filtro mal diseñado, sobre todo en la forma que polarizas los OP. Deberías compartir el esquemático del filtro.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 02 de Septiembre de 2021, 22:34:56
Adjunto el circuito.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 02 de Septiembre de 2021, 23:04:03
Adjunto el circuito.

Primera observación.

Me imagino que las resistencias R7 y R5 son para tomar una muestra de voltaje, es decir que es un divisor de voltaje. Aquí mi recomendación es que utilices otro amplificador op como seguidor de voltaje para acoplar impedancias. La salida del seguidor de voltaje iría a la entrada del filtro que es la resistencia 4.


Segunda observación.

La señal que estás filtrando nunca es negativa, es decir varía de cero a un máximo positivo. ¿Por qué utilizas un divisor de voltaje (R3 y ¿¿¿R2??) para el terminal negativo del OP? Eso se utilizaría si estuvieras trabajando con señales negativas.  Al hacerlo, el voltaje en la salida del amplificador variaría de Vcc/2 a VCC.

Tercera observación.

No se conoce a cuanto reduce el transformador el voltaje, no creo que sea problema, pero sería bueno conocer. Y debes poner una imagen más clara, no se ve los valores casi nada y no se sabe con cuanto energizas al OP.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 02 de Septiembre de 2021, 23:17:58
Adjunto el circuito.

Primera observación.

Me imagino que las resistencias R7 y R5 son para tomar una muestra de voltaje, es decir que es un divisor de voltaje. Aquí mi recomendación es que utilices otro amplificador op como seguidor de voltaje para acoplar impedancias. La salida del seguidor de voltaje iría a la entrada del filtro que es la resistencia 4.


Segunda observación.

La señal que estás filtrando nunca es negativa, es decir varía de cero a un máximo positivo. ¿Por qué utilizas un divisor de voltaje (R3 y ¿¿¿R2??) para el terminal negativo del OP? Eso se utilizaría si estuvieras trabajando con señales negativas.  Al hacerlo, el voltaje en la salida del amplificador variaría de Vcc/2 a VCC.

Tercera observación.

No se conoce a cuanto reduce el transformador el voltaje, no creo que sea problema, pero sería bueno conocer. Y debes poner una imagen más clara, no se ve los valores casi nada y no se sabe con cuanto energizas al OP.


Así debe ser tu filtro

Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 02 de Septiembre de 2021, 23:20:04
El transformador es Entrada=220, Salida= 0,12,0

El OPAMP se energiza con 5V.

El circuito es de una tarjeta que me encontre que usa el PIC16F676 y funciona bien. Como estoy aprendiendo queria hacer un programa para poder usar ese circuito en algun otro proyecto.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 02 de Septiembre de 2021, 23:25:49
El transformador es Entrada=220, Salida= 0,12,0

El OPAMP se energiza con 5V.

El circuito es de una tarjeta que me encontre que usa el PIC16F676 y funciona bien. Como estoy aprendiendo queria hacer un programa para poder usar ese circuito en algun otro proyecto.

Intenta con el filtro que te envíe en la imagen. Solamente debes conectar el terminal negativo del OP a su salida, nada más
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: Robert76 en 02 de Septiembre de 2021, 23:36:31
Te comento con un ejem, cómo funciona la histeresis por soft.
Por ejem, tenemos una referencia de corte, en tu caso 170. Bien entonces un valor leído del ADC, si es mayor a 170, la histeresis le pondremos valor igual a 2. De lo contrario será 0.
Vamos con el ejem.

Val=readADC();
Val=Val+histeresis;
if(Val>170) histeresis=2;
else histeresis =0;
Prueba ésto en tu código.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 03 de Septiembre de 2021, 01:07:14
Te comento con un ejem, cómo funciona la histeresis por soft.
Por ejem, tenemos una referencia de corte, en tu caso 170. Bien entonces un valor leído del ADC, si es mayor a 170, la histeresis le pondremos valor igual a 2. De lo contrario será 0.
Vamos con el ejem.

Val=readADC();
Val=Val+histeresis;
if(Val>170) histeresis=2;
else histeresis =0;
Prueba ésto en tu código.

Robert gracias. Disculpa la molestia es la primera vez que veo esto: Ese codigo lo pongo en la funcion que encuentra el promedio despues de leer el adc? o va cuando hago la condicion del if  para ver si se enciende o apaga la carga dentro del ciclo while?

Ademas, la instruccion "Val=Val+histeresis" va despues del if o antes como lo pusiste. Asumiendo que va despues inicialice histeresis con 0.

Val=readADC();
histeresis = 0;
if(Val>170) histeresis = 2;
else histeresis = 0;
Val=Val+histeresis
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 03 de Septiembre de 2021, 01:48:30
El transformador es Entrada=220, Salida= 0,12,0

El OPAMP se energiza con 5V.

El circuito es de una tarjeta que me encontre que usa el PIC16F676 y funciona bien. Como estoy aprendiendo queria hacer un programa para poder usar ese circuito en algun otro proyecto.

Intenta con el filtro que te envíe en la imagen. Solamente debes conectar el terminal negativo del OP a su salida, nada más

Hola Dominus si conecto la salida a la entrada no enciende.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 03 de Septiembre de 2021, 02:55:42
Este es el codigo que he implementado. No se muy bien como usar la histeresis. Por favor pueden revisarlo y decirme si esta bien?

while(1)
{
   obtenerPico();

   histeresis=0;

   if(valorPico>310) histeresis=2;
   else histeresis =0;

   valorPico=valorPico+histeresis;

   if (valorPico>310 && valorPico<460) 
  {
      PORTC=0b00000010;
  }

  else
  {
     PORTC=0b00000000;
  }
 
}
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: Robert76 en 03 de Septiembre de 2021, 07:13:13
Te comento con un ejem, cómo funciona la histeresis por soft.
Por ejem, tenemos una referencia de corte, en tu caso 170. Bien entonces un valor leído del ADC, si es mayor a 170, la histeresis le pondremos valor igual a 2. De lo contrario será 0.
Vamos con el ejem.

Val=readADC();
Val=Val+histeresis;
if(Val>170) histeresis=2;
else histeresis =0;
Prueba ésto en tu código.

Robert gracias. Disculpa la molestia es la primera vez que veo esto: Ese codigo lo pongo en la funcion que encuentra el promedio despues de leer el adc? o va cuando hago la condicion del if  para ver si se enciende o apaga la carga dentro del ciclo while?

Ademas, la instruccion "Val=Val+histeresis" va despues del if o antes como lo pusiste. Asumiendo que va despues inicialice histeresis con 0.

Val=readADC();
histeresis = 0;
if(Val>170) histeresis = 2;
else histeresis = 0;
Val=Val+histeresis

No es necesario iniciar la variable histeresis todo el tiempo.
Simplemente declarala cómo histeresis=0 en el comienzo del programa dónde inicializas el resto de variables.

Veo que has incluido esas líneas cómo comenté. Y cómo ha funcionado?
El valor de la histeresis puedes modificarlo, no necesariamente tiene que valer 2. Puedes probar con números mayores, por ejem. 4, 10 o más, pero verás que se necesita mayor salto de valor de la lectura, para lograr el cambio en la salida.
Debes experimentar todo eso, te ayudará para comprender cómo funciona.
Volviendo, añadir ésta histeresis, sólo trabajará en el corte inferior de tu programa, luego añadiremos histeresis al corte superior. Pero vamos por partes.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 03 de Septiembre de 2021, 09:00:02
Este es el codigo que he implementado. No se muy bien como usar la histeresis. Por favor pueden revisarlo y decirme si esta bien?

while(1)
{
   obtenerPico();

   histeresis=0;

   if(valorPico>310) histeresis=2;
   else histeresis =0;

   valorPico=valorPico+histeresis;

   if (valorPico>310 && valorPico<460) 
  {
      PORTC=0b00000010;
  }

  else
  {
     PORTC=0b00000000;
  }
 
}

Mejor deberías utilizar el comprador analógico interno del micro para evitar tanto retardo y pérdida de tiempo por la conversión.

Pero independiente de que método uses, el problema es que no está funcionando correctamente ese filtro que muestras. Solucionado eso deberías concentrarte en el siguiente paso.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 03 de Septiembre de 2021, 11:42:16

Veo que has incluido esas líneas cómo comenté. Y cómo ha funcionado?
El valor de la histeresis puedes modificarlo, no necesariamente tiene que valer 2. Puedes probar con números mayores, por ejem. 4, 10 o más, pero verás que se necesita mayor salto de valor de la lectura, para lograr el cambio en la salida.
Debes experimentar todo eso, te ayudará para comprender cómo funciona.
Volviendo, añadir ésta histeresis, sólo trabajará en el corte inferior de tu programa, luego añadiremos histeresis al corte superior. Pero vamos por partes.

Hola Robert. Si es correcto la forma como lo implementé en el programa, el problemas de la oscilacion persiste. Oscila durante 1v aproximadamente.

Mas tarde intentare con otros valores de histeresis.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 03 de Septiembre de 2021, 12:29:29
Hola:

He simulado tu circuito y no veo una oscilación tan grande con respecto cuando el voltaje es más grande.

Obviamente una simulación solo te da una idea de lo que va a pasar, la realidad pueda que sea otra.

Respecto a lo que dije de las resistencias R3 y R2, me confundí, pensé que era un divisor de la fuente y es un divisor de la salida.

Eso implica que tu filtro es un amplificador no inversor con ganancia 2. (1 +Rf/R)

Primero le atenúas a la señal en 1/10 (eso parece con las resistencias R7 y R5) pero luego con el filtro le das una ganancia de 2, podrías atenuarle al valor correcto (1/20) y el filtro darle una ganancia de 1.

Otra cosa que noté es que la resistencia 6 de 22k e muy grande para el ADC interno del micro y puede producir lentitud al adquirir valores, en las hojas de datos te recomiendan una impedancia de máximo 1k. O mejor quitar la resistencia y conectar directo al pin del micro.

También podrías mejorar la frecuencia de corte del filtro, es decir poner otro valor par reducir la oscilación, por ejemplo la oscilación casi desparece con capacitores de 100 nF.

La desventaja de aumentar capacitores es que aumentas la latencia del cambio  de voltaje con respecto al voltaje que sale del filtro.

Si usas el comparador analógico, simplemente tendrías que comparar el máximo de la señal rectificada, y olvidarte del filtro y de promedios y de histéresis. Lo único que tendrías que hacer es que cuando exista un sobre voltaje y un subvoltaje, verifica que dentro de un tiempo prudente, (3 segundos puede ser) el voltaje haya regresado a la normalidad antes de volver a activar la carga.




Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: Robert76 en 03 de Septiembre de 2021, 12:50:25
El valor de C1 y C2 es muy pequeño. Prueba a utilizar valores cómo 220nF o 1uF.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 03 de Septiembre de 2021, 12:59:39
El valor de C1 y C2 es muy pequeño. Prueba a utilizar valores cómo 220nF o 1uF.

El problema de eso es que cuando el voltaje vaya a un nivel peligroso de forma abrupta , el filtro introduce un retardo grande y más el código que introduce más retardos que cuando el micro decida que debe desconectar la carga, dicha carga debe estar fundida literalmente.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 03 de Septiembre de 2021, 13:07:54
El valor de C1 y C2 es muy pequeño. Prueba a utilizar valores cómo 220nF o 1uF.

Con un capacitor de 1uF, el filtro toma alrededor de 1 segundo en informar de un sobre voltaje.

Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: afta en 03 de Septiembre de 2021, 15:03:54

Otra cosa que noté es que la resistencia 6 de 22k e muy grande para el ADC interno del micro y puede producir lentitud al adquirir valores, en las hojas de datos te recomiendan una impedancia de máximo 1k. O mejor quitar la resistencia y conectar directo al pin del micro.

Hola Dominus. La Resistencia en realidad es de 2.2k, solo que el grafico que puse no es muy bueno, disculpa.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: Robert76 en 03 de Septiembre de 2021, 19:50:42
El valor de C1 y C2 es muy pequeño. Prueba a utilizar valores cómo 220nF o 1uF.

El problema de eso es que cuando el voltaje vaya a un nivel peligroso de forma abrupta , el filtro introduce un retardo grande y más el código que introduce más retardos que cuando el micro decida que debe desconectar la carga, dicha carga debe estar fundida literalmente.
Correcto! Pero la idea, es lograr que trabaje el programa cómo corresponde.
Es parte de cualquier proceso dividir por etapas un desarrollo.
Entonces por el MOMENTO que mejor que introducir una señal plana y estable en la entrada. No te parece???
Cuándo se logré ese cometido, pasamos a la interfaz. Sino es complicado lidiar con varios factores por el cuál cada uno introduce un fenómeno desfavorable .
Volviendo al filtro RC, Se debe calcular para que la constante Tau, sea el valor de 3 veces, el periodo de la señal de entrada.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: DominusDRR en 03 de Septiembre de 2021, 20:09:51
Yo pienso que debería abandonar la idea del ADC y el filtro y debería utilizar el comparador interno como en la imagen adjunta.

La señal rectificado sin filtro y sólo atenuada entraría al terminal RA1 y para conocer si hay sobre voltaje o sub voltaje cambiaría el valor del módulo CVref y analizaría el estado de la salida del comparador.

Tan pronto detecte una condición irregular, apagaría al carga y en un intervalos de 100 ms  volvería a leer la salida del comparador.

Cada vez que el voltaje está bien, incrementaría un contador, hasta llegar a un valor de 30, es decir 3 segundos. Si llega a 30, se asume que el voltaje está en el rango normal y vuelve a activar la carga.

Si dentro de los 3 segundos hay nuevamente una condición de falla, el contador es reiniciado.

Y creo que con eso su sistema tendría una rápida respuesta ante una anormalidad del voltaje.
Título: Re:RECTIFICADOR MAS FILTRO
Publicado por: Robert76 en 03 de Septiembre de 2021, 20:24:39
Yo en lo personal he utilizado tanto el ADC, cómo los CMP que mencionas para éstos fines.
 La ventaja de usar el ADC, es que hay mayor cantidad de escalones de cuantificación.
Que de igual manera se podría lograr usando la función de COMP, pero nos obliga a usar algún trimpot o preset de ajuste fino y eso puede traer problemas a largo plazo.
Me parece que hay que mejorar el tema de promediar las muestras.
O bien leer con el ADC, valores instantáneos de la señal sin FILTRAR.
Con un poco de ingenio, se puede detectar que si varios máximos picos instantáneos, NO alcanzan el umbral mínimo desconecta la carga.