Autor Tema: RECTIFICADOR MAS FILTRO  (Leído 12119 veces)

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

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:RECTIFICADOR MAS FILTRO
« Respuesta #15 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.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado afta

  • PIC16
  • ***
  • Mensajes: 123
Re:RECTIFICADOR MAS FILTRO
« Respuesta #16 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?

Desconectado afta

  • PIC16
  • ***
  • Mensajes: 123
Re:RECTIFICADOR MAS FILTRO
« Respuesta #17 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?

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:RECTIFICADOR MAS FILTRO
« Respuesta #18 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.

« Última modificación: 30 de Agosto de 2021, 20:33:09 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:RECTIFICADOR MAS FILTRO
« Respuesta #19 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.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:RECTIFICADOR MAS FILTRO
« Respuesta #20 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)

Desconectado afta

  • PIC16
  • ***
  • Mensajes: 123
Re:RECTIFICADOR MAS FILTRO
« Respuesta #21 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;
 }
 
}

}

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:RECTIFICADOR MAS FILTRO
« Respuesta #22 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]
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:RECTIFICADOR MAS FILTRO
« Respuesta #23 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.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 577
Re:RECTIFICADOR MAS FILTRO
« Respuesta #24 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.
« Última modificación: 30 de Agosto de 2021, 23:22:09 por Robert76 »

Desconectado afta

  • PIC16
  • ***
  • Mensajes: 123
Re:RECTIFICADOR MAS FILTRO
« Respuesta #25 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.

Desconectado afta

  • PIC16
  • ***
  • Mensajes: 123
Re:RECTIFICADOR MAS FILTRO
« Respuesta #26 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?

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 577
Re:RECTIFICADOR MAS FILTRO
« Respuesta #27 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!

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:RECTIFICADOR MAS FILTRO
« Respuesta #28 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?
« Última modificación: 31 de Agosto de 2021, 11:10:17 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado afta

  • PIC16
  • ***
  • Mensajes: 123
Re:RECTIFICADOR MAS FILTRO
« Respuesta #29 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.
« Última modificación: 31 de Agosto de 2021, 23:00:14 por afta »


 

anything