Autor Tema: Prototipo de Medidor de corriente en las viviendas  (Leído 49692 veces)

0 Usuarios y 8 Visitantes están viendo este tema.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #45 en: 21 de Junio de 2010, 16:57:34 »
Para los ADE en ROOT MEAN SQUARE MEASUREMENT menciona:

Citar
The method used to calculate the rms value in the ADE7758 is to low-pass filter the square of the input signal (LPF3) and take the square root of the result (see Figure 62).
i(t) = √2 × IRMS × sin(ωt) (7)
then
i2(t) = IRMS2 − IRMS2 × cos(ωt) ( 8 )
The rms calculation is simultaneously processed on the six analog input channels. Each result is available in separate registers.
While the ADE7758 measures nonsinusoidal signals, it should be noted that the voltage rms measurement, and therefore the apparent energy, are bandlimited to 260 Hz. The current rms as well as the active power have a bandwidth of 14 kHz.

Cuando tenga un tiempo muestro el tema de la frecuencia de muestro fija y el error producido al variar la frecuencia de la señal.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #46 en: 25 de Junio de 2010, 20:21:49 »
Hola a todos, tengo una nueva duda acerca del ADE7758.

En la siguiente figura aparece el diagrama funcional del ADE7758



En esta figura se puede observar que se utiliza el mismo pin de referencia para medir los voltajes de las líneas, y tengo entnedido que en la mayoría de sistemas trifásicos existe una línea a la que llamamos griega, en la cual el voltaje entre línea y neutro es aproximadamente 207V y en las otras dos es 120V.

La hoja de datos recomienda hacer el mismo circuito de acondicionamiento para todas las líneas. Es decir esto sirve si y solo sí la fuente es estrella y no delta como lo es comunmente

Tengo entendido que para medir la potencia en una instalación trifásica con fuente en delta se recomienda medir los voltajes de fase a fase y no los de linea a neutro.
« Última modificación: 25 de Junio de 2010, 20:25:56 por bigluis »
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #47 en: 30 de Junio de 2010, 00:05:02 »
En esta figura se puede observar que se utiliza el mismo pin de referencia para medir los voltajes de las líneas, y tengo entnedido que en la mayoría de sistemas trifásicos existe una línea a la que llamamos griega, en la cual el voltaje entre línea y neutro es aproximadamente 207V y en las otras dos es 120V.

Creo que pusiste los valores al revés.
Excepto que en Nicaragua el sistema trifásico sea desvalanceado en voltaje? (que puede ser, pues no conozco de estos temas)
Las fases deberían tener todas la misma tensión respecto del neutro (120 en este caso) y entre fase y fase tendrían 31/2 * 120 = 207.84
Creo que a eso te refieres o si no entendí todo mal.

Respecto a la medición de potencia o energía, creo que no importa como se conecte una carga (sea estrella o triangulo) o si está balanceada o no, lo que se mide es la tensión y Corriente de cada fase por separado respecto del neutro y se suman algebraicamente. La corriente nunca se mide sobre el neutro, ya que esta puede incluso ser cero si el sistema esta perfectamente balanceado y no hay pérdidas a tierra.

Si tienes un sistema sin neutro (o neutro flotante), entonces sí mides entre fase y fase, pues no queda otra, la corriente sigue siendo por fase.
Para medir tensión de fase a fase el chip según veo tiene entradas diferenciales, el problema es la AGND que es común a todos los conversores.
Si usaras 3 MCP3909 ponés la AGND a una fase adyacente a la que deseas medir  :mrgreen:
pero en este caso no sé, me parece que deberías de alguna manera generarte un neutro, con un trafo estrella quizas  :? o tal vez simplemente con 3 resistencias de alta impedancia se pueda no estoy seguro.
     

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #48 en: 10 de Julio de 2010, 20:34:50 »
A continuacion muestro un avance del driver para controlar un ADE7753. Este driver contiene 2 funciones, la primera se encarga de leer los datos del ADE y la segunda de escribirlos.

Código: C
  1. /****************************************************************************
  2.  
  3. Autor: Luis Alberto Vargas Tijerino.
  4.  
  5. Alias: Bigluis.
  6.  
  7. Version: 1.0
  8.  
  9. ****************************************************************************/
  10. #ifndef ADE7753_CS
  11.         #define ADE7753_CS      RC0
  12. #endif
  13.  
  14. //The following memory locations come from the ADE7758 datasheet
  15.  
  16.                         //Name                          Address No. Bits
  17. #define _WAVEFORM               0x01    //24
  18. #define _AENERGY                0x02    //24
  19. #define _RAENERGY               0x03    //24
  20. #define _LAENERGY               0x04    //24
  21. #define _VAENERGY               0x05    //24
  22. #define _RVAENERGY      0x06    //24
  23. #define _LVAENRGY               0x07    //24
  24. #define _LVARENERGY     0x08    //16
  25. #define _MODE                           0x09    //16
  26. #define _IRQEN                  0x0A    //16
  27. #define _STATUS                 0x0B    //16
  28. #define _RSTSTATUS      0x0C    //16
  29. #define _CH1OS                  0x0D    //8
  30. #define _CH2OS                  0x0E    //8
  31. #define _GAIN                           0x0F    //8
  32. #define _PHCAL                  0x10    //6
  33. #define _APOS                           0x11    //16
  34. #define _WGAIN                  0x12    //12
  35. #define _WDIV                           0x13    //8
  36. #define _CFNUM                  0x14    //12
  37. #define _CFDEN                  0x15    //12
  38. #define _IRMS                           0x16    //24
  39. #define _VRMS                           0x17    //24
  40. #define _IRMSOS                 0x18    //12
  41. #define _VRMSOS                 0x19    //12
  42. #define _VAGAIN                 0x1A    //12
  43. #define _VADIV                  0x1B    //8
  44. #define _LINECYC                0x1C    //16
  45. #define _ZXTOUT                 0x1D    //12
  46. #define _SAGCYC                 0x1E    //8
  47. #define _SAGLVL                 0x1F    //8
  48. #define _IPKLVL                 0x20    //8
  49. #define _VPKLVL                 0x21    //8
  50. #define _IPEAK                  0x22    //24
  51. #define _RSTIPEAK               0x23    //24
  52. #define _VPEAK                  0x24    //24
  53. #define _RSTVPEAK               0x25    //24
  54. #define _TEMP                           0x26    //8
  55. #define _PERIOD                 0x27    //16
  56. #define _TMODE                  0x3D    //8
  57. #define _CHKSUM                 0x3E    //6
  58. #define _DIEREV                 0x3F    //8
  59.  
  60. #byte   POSTINC0=       getenv("SFR:POSTINC0")
  61. #word   FSR0=                   getenv("SFR:FSR0L")
  62.  
  63. void read_ADE7753(int16 *val,int8 addres,int8 len){
  64.         ADE7753_CS=0;
  65.         spi_write(0x80&addres);
  66.         FSR0=val;
  67.         do{
  68.                 Delay_us(4);
  69.                 POSTINC0=spi_read();
  70.         }while(--len);
  71.         ADE7753_CS=1;
  72. }
  73.  
  74. void write_ADE7753(int32 val,int8 addres,int8 len){
  75.         ADE7753_CS=0;
  76.         spi_write(0x80&addres);
  77.         do{
  78.                 Delay_us(4);
  79.                 spi_write(*val++);
  80.         }while(--len);
  81.         ADE7753_CS=1;
  82. }

Y a continuacion muestro un pequeño código de ejemplo de como utilizar el ADE7753 para leer los valores RMS.

Código: C
  1. #include <18f4550.h>            //pic a utilizar
  2. #DEVICE ADC=10
  3. #include <Puertos.c>
  4. #fuses XT,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN,NOPBADEN // fuse con cristal 48Mhz
  5. #use delay (clock=48M)         //Fosc=48Mhz
  6.  
  7. #define LCD_DATA4       PIN_B0
  8. #define LCD_DATA5       PIN_B1
  9. #define LCD_DATA6       PIN_B2
  10. #define LCD_DATA7       PIN_B3
  11. #define LCD_ENABLE_PIN  PIN_B4
  12. #define LCD_RS_PIN      PIN_B5
  13. #define LCD_RW_PIN      PIN_B6
  14.  
  15. #include <lcd.c>                  //libreria manejo lcd
  16.  
  17. #include "ADE7753_Driver.c"
  18.  
  19. int32 Vrms;
  20.  
  21. void main(){
  22.         TRISA=0;
  23.         setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16 );
  24.         lcd_init();                                                                                     //Iniciamos el LCD            
  25.         lcd_putc("Vrms=");                                                              //Escribimos Vrms en el LCD
  26.         while(1){
  27.           read_ADE7753(&Vrms,_VRMS,3);          //Leemos el Vrms del ADE7753                              
  28.           printf(lcd_putc,"%Lu",Vrms);          //Lo imprimimos en la pantalla
  29.           lcd_gotoxy(6,1);                                                              //Enviamos el Cursor a la posicion 6,1                  
  30.         }
  31. }

:( Aún no lo he probado porque aún no tengo el ADE, :oops: por eso les pido de favor que lo prueben y me digan si les funciona, y posiblemente corrijan errores que tenga el código.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado ingdenis

  • PIC10
  • *
  • Mensajes: 7
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #49 en: 14 de Julio de 2010, 18:52:21 »
bigluis:  ya intente compilar el codigo y me marca error en #include <Puertos.c> esto pasa porque no tengo esa libreria, espero y la puedas subir.
Quite esta linea temporalmente y me marca error en la libreria ADE7753_Driver.c el error es en la siguiente linea:
#word   FSR0=         getenv("SFR:FSR0L")
marca error en la palabra word de la sentencia anterior. dice invalid pre-procesor directive

bueno eso es lo que llevo hasta ahora

Desconectado ingdenis

  • PIC10
  • *
  • Mensajes: 7
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #50 en: 15 de Julio de 2010, 16:45:08 »
me imagino que lo estas haciendo en ccs, yo tambien quiero hacer un medidor de energia pero aun no logro entender como funciona el ade7753 o como comunicarlo con el pic y si necesito un driver como oseria bueno gracias por la informacion

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #51 en: 15 de Julio de 2010, 22:51:51 »
bigluis:  ya intente compilar el codigo y me marca error en #include <Puertos.c> esto pasa porque no tengo esa libreria, espero y la puedas subir.
Quite esta linea temporalmente y me marca error en la libreria ADE7753_Driver.c el error es en la siguiente linea:
#word   FSR0=         getenv("SFR:FSR0L")
marca error en la palabra word de la sentencia anterior. dice invalid pre-procesor directive

bueno eso es lo que llevo hasta ahora

 :oops: Lo siento olvidé mencionar que la libreria para puertos esta aquí

La linea que mencionas no se exactamente porque te da ese error. Vuelve a probar con la libreria de puertos y si no funciona avisa.

me imagino que lo estas haciendo en ccs, yo tambien quiero hacer un medidor de energia pero aun no logro entender como funciona el ade7753 o como comunicarlo con el pic y si necesito un driver como oseria bueno gracias por la informacion

 :) Si lo estoy haciendo en CCS.
« Última modificación: 15 de Julio de 2010, 22:54:27 por bigluis »
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado ingdenis

  • PIC10
  • *
  • Mensajes: 7
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #52 en: 16 de Julio de 2010, 00:54:08 »
ahora solo me marca error en la palabra word de la siguiente linea del driver:

#word   FSR0=         getenv("SFR:FSR0L")

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #53 en: 16 de Julio de 2010, 12:35:09 »
 :? ¿Que pic y que version de ccs estas utilizando?

Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado ingdenis

  • PIC10
  • *
  • Mensajes: 7
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #54 en: 16 de Julio de 2010, 16:13:38 »
hola te comento que estoy usando el pic 18f4550 y la version del compilador es la pchw 4.038

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #55 en: 16 de Julio de 2010, 16:42:34 »
Yo estoy usando la version 4.104,

 :o Realmente no se si esto afecte en algo. Espero que algun gran maestro del foro de respuesta a este problema, ya que a mi me compiló correctamente.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #56 en: 16 de Julio de 2010, 17:48:23 »
Yo estoy usando la version 4.104,

 :o Realmente no se si esto afecte en algo. Espero que algun gran maestro del foro de respuesta a este problema, ya que a mi me compiló correctamente.

Puedes colocar:

Código: [Seleccionar]
#byte   FSR0=getenv("SFR:FSR0L")
Ya que se hace referencia a un registro/variable de 8-bits.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #57 en: 16 de Julio de 2010, 19:58:34 »
Si, asi es, se hace referencia a un registro de 8 bits, pero estoy utilizando "#word" ya que este tambien reserva el byte siguiente, es decir, con word se reservaran tanto el byte FSRL0 como el byte FSRH0 y serán utilizados al mismo tiempo.

Pero aún así creo que funcione si haces lo que dice Suky.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #58 en: 16 de Julio de 2010, 20:57:43 »
Aaa! En ese caso se hace:

Código: [Seleccionar]
long FSR0;
#byte   FSR0=getenv("SFR:FSR0L")


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado ingdenis

  • PIC10
  • *
  • Mensajes: 7
Re: Prototipo de Medidor de corriente en las viviendas
« Respuesta #59 en: 17 de Julio de 2010, 12:23:31 »
bigluis: tu utilizaste un cristal de 48mhz yo solo tengo uno de 4mhz cres que funcione porque el valor mas grande que puedo conseguir es de 40mhz.
gracias