Autor Tema: Medidor de Energía con ADE7753  (Leído 28183 veces)

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

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Medidor de Energía con ADE7753
« en: 30 de Abril de 2011, 00:57:47 »
Hola amigos de TodoPIC.

Hace algún tiempo prometi crear un nuevo tema para el dieño de un medidor de energía domiciliar, en esta ocasión decidí que el dispositivo que utilizaré como Analog Front-End (AFE) será el ADE7753 del fabricante Microchip.

Mi objetivo es utilizar este AFE en conjunto con un PIC18FXX5X que posee comunicación USB con la PC, lo que nos permite transmitir los datos almacenados durante un período de medición (Por lo general 1 mes) desde el medidor hacia la PC. A continuación muestro el diagrama del circuito que voy a montar.



A continuación muestro el código que he realizado para manipular este dispositivo.

Medidor_Energia.c
Código: C
  1. #include <18f14k50.h>            //pic a utilizar
  2. #DEVICE ADC=10
  3. #include <Puertos.c>
  4. #FUSES NOWDT, INTRC_IO, NOMCLR, PLLEN, CPUDIV1, NOPCLKEN
  5. #use delay (clock=32M)         //Fosc=32Mhz
  6.  
  7. #define LCD_DATA4       PIN_C2
  8. #define LCD_DATA5       PIN_C3
  9. #define LCD_DATA6       PIN_C4
  10. #define LCD_DATA7       PIN_C6
  11. #define LCD_ENABLE_PIN  PIN_C1
  12. #define LCD_RS_PIN      PIN_C0
  13. #include <lcd.c>                  //libreria manejo lcd
  14.  
  15. #USE SPI(FORCE_HW,ENABLE=PIN_B7,)
  16. #define ADE7753_CS RB7
  17. #include "ADE7753_Driver.c"
  18.  
  19. int32 Vrms,Irms;
  20.  
  21. void main(){
  22.    TRISA=0;
  23.    TRISB=1;
  24.    SETUP_ADC_PORTS(NO_ANALOGS);
  25.    SETUP_COMPARATOR(NC_NC_NC);
  26.    SETUP_TIMER_2(T2_DIV_BY_1,3,1);
  27.    SET_PWM1_DUTY(2);
  28.    SETUP_CCP1(CCP_PWM);
  29.    setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_4 | SPI_SAMPLE_AT_END );
  30.    lcd_init();                                  //Iniciamos el LCD            
  31.    while(1){
  32.      lcd_gotoxy(1,1);                //Enviamos el Cursor a la posicion 1,1
  33.      read_ADE7753((int8)Vrms,_VRMS); //Leemos el Vrms del ADE7753
  34.      read_ADE7753((int8)Irms,_IRMS); //Leemos el Irms del ADE7753
  35.      printf(lcd_putc,"%Lu\n",Vrms);  //Imprimimos en la primera linea el valor de Vrms
  36.      printf(lcd_putc,"%Lu",Irms);    //Imprimimos en la segunda linea el valor de Irms              
  37.    }
  38. }
« Última modificación: 30 de Abril de 2011, 01:20:44 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 bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Medidor de Energía con ADE7753
« Respuesta #1 en: 30 de Abril de 2011, 01:23:28 »
ADE7753_Driver.c
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,3   //24
  18. #define   _AENERGY      0x02,3   //24
  19. #define   _RAENERGY     0x03,3   //24
  20. #define   _LAENERGY     0x04,3   //24
  21. #define   _VAENERGY     0x05,3   //24
  22. #define   _RVAENERGY    0x06,3   //24
  23. #define   _LVAENRGY     0x07,3   //24
  24. #define   _LVARENERGY   0x08,2   //16
  25. #define   _MODE         0x09,2   //16
  26. #define   _IRQEN        0x0A,2   //16
  27. #define   _STATUS       0x0B,2   //16
  28. #define   _RSTSTATUS    0x0C,2   //16
  29. #define   _CH1OS        0x0D,1   //8
  30. #define   _CH2OS        0x0E,1   //8
  31. #define   _GAIN         0x0F,1   //8
  32. #define   _PHCAL        0x10,1   //6
  33. #define   _APOS         0x11,2   //16
  34. #define   _WGAIN        0x12,2   //12
  35. #define   _WDIV         0x13,1   //8
  36. #define   _CFNUM        0x14,2   //12
  37. #define   _CFDEN        0x15,2   //12
  38. #define   _IRMS         0x16,3   //24
  39. #define   _VRMS         0x17,3   //24
  40. #define   _IRMSOS       0x18,2   //12
  41. #define   _VRMSOS       0x19,2   //12
  42. #define   _VAGAIN       0x1A,2   //12
  43. #define   _VADIV        0x1B,1   //8
  44. #define   _LINECYC      0x1C,2   //16
  45. #define   _ZXTOUT       0x1D,2   //12
  46. #define   _SAGCYC       0x1E,1   //8
  47. #define   _SAGLVL       0x1F,1   //8
  48. #define   _IPKLVL       0x20,1   //8
  49. #define   _VPKLVL       0x21,1   //8
  50. #define   _IPEAK        0x22,3   //24
  51. #define   _RSTIPEAK     0x23,3   //24
  52. #define   _VPEAK        0x24,3   //24
  53. #define   _RSTVPEAK     0x25,3   //24
  54. #define   _TEMP         0x26,1   //8
  55. #define   _PERIOD       0x27,2   //16
  56. #define   _TMODE        0x3D,2   //8
  57. #define   _CHKSUM       0x3E,1   //6
  58. #define   _DIEREV       0x3F,1   //8
  59.  
  60. #byte   POSTDEC0=   getenv("SFR:POSTDEC0")
  61. #byte   POSTINC0=   getenv("SFR:POSTINC0")
  62. #word   FSR0=      getenv("SFR:FSR0L")
  63.  
  64. void LFSR0(int &_val){
  65.    #asm
  66.       LFSR FSR0, &_val+2
  67.    #endasm
  68.    }
  69.  
  70. void r_ADE7753(int8 addres,int8 len){
  71.    ADE7753_CS=0;           //Desactiva CS para iniciar transmision
  72.    spi_write(addres);      //Escribe la direccion que sera leida
  73.    Delay_us(4);            //Retardo de 4us para iniciar lectura
  74.    do{
  75.       spi_write(0);        //Se envian los pulsos de lectura
  76.       POSTDEC0=spi_read(); //Se lee el dato del bufer y se almacena en la direccion del puntero
  77.    }while(--len);          //predecrementa la variable len, que almacena la longitud, hasta que sea 0
  78.    ADE7753_CS=1;           //Activa Cs para finalizar la transmicion
  79. }
  80.  
  81. void read_ADE7753(int8 &_val, _addres, _len){
  82.    LFSR0(_val);            //Cargamos el valor de la direccion de _val en el registro FSR0
  83.    r_ADE7753(_addres,_len);//Enviamos la direccion y la longitud a leer
  84. }
  85.  
  86. void write_ADE7753(int32 *val,int8 addres,int8 len){
  87.    ADE7753_CS=0;
  88.    spi_write(0x80&addres);
  89.    do{
  90.       spi_write(*val++);
  91.    }while(--len);
  92.    ADE7753_CS=1;
  93. }

Y finalmente adjunto los archivos fuentes.
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 Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Medidor de Energía con ADE7753
« Respuesta #2 en: 30 de Abril de 2011, 02:12:18 »
Hola Bigluis, gracias por compartirlo.
Tengo una duda: ¿esto sirve para monitorizar el consumo de un domicilio, o para monitorizar que el suministro de la red es correcto?

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Medidor de Energía con ADE7753
« Respuesta #3 en: 30 de Abril de 2011, 11:07:17 »
¿Lo has probado físicamente? ¿Como te ha ido con el tema de calibraciones de parámetros y medidas en el rango?  :rolleyes:


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

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Medidor de Energía con ADE7753
« Respuesta #4 en: 30 de Abril de 2011, 14:52:14 »
Hola Bigluis, gracias por compartirlo.
Tengo una duda: ¿esto sirve para monitorizar el consumo de un domicilio, o para monitorizar que el suministro de la red es correcto?

Pues el ADE esta hecho para medir el consumo de un Domicilio y el de una industria, ya que tambien mide VAR y factor de potencia, y para monitorear el suministro de red. Es decir lo puedes utilizar para lo que desees.

¿Lo has probado físicamente? ¿Como te ha ido con el tema de calibraciones de parámetros y medidas en el rango?  :rolleyes:

 :oops: Aún no lo he probado fisicamente ya que no tengo muchos de los equipos que necesito para hacerlo, es por eso que recurro a ustedes para que hagan las pruebas en físico y me avisen si funciona o no.

Los dispositivos me llegan aproximadamente dentro de un mes, y decidi ir avanzando mientras tanto debido a que solo tengo como 6 meses para terminarlo. :(
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: Medidor de Energía con ADE7753
« Respuesta #5 en: 30 de Abril de 2011, 17:55:58 »
... es por eso que recurro a ustedes para que hagan las pruebas en físico y me avisen si funciona o no.

Eso creo que es imposible...  :? Sin ánimos de ofender, te puedo decir que todos disponemos de la buena voluntad de ocuparnos un par de minutos para tratar de resolver alguna duda que surja, pero no horas como para analizar algo por el estilo.  ;-)


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

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Medidor de Energía con ADE7753
« Respuesta #6 en: 30 de Abril de 2011, 17:58:43 »
 :) No te preocupes, ustedes me han dado mucha ayuda, con este foro he aprendido muchas cosas y seguire haciendolo.

 :-/
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 titoanr

  • PIC10
  • *
  • Mensajes: 1
Re: Medidor de Energía con ADE7753
« Respuesta #7 en: 06 de Junio de 2011, 23:30:43 »
Hola Big Luis,, me parece muy buen post.

Veo que dominas bien Proteus y programación en C para PICs.

Tengo que desarrollar un proyecto similar al tuyo, un medidor de energía, que mida Vrms, Irms, P. Activa, P. Aparente y F. P.

Encontré esta nota de aplicación y decidí basarme en ella:

http://www.analog.com/static/imported-files/application_notes/an564.pdf

Aunque la nota esta muy completa, ha sido dificil encontrar los componentes.

Conseguí el ADE7763 de Analog Devices, que es similar a tu IC; lo soldé a una base para poderlo montar en una tarjeta de pruebas (por ser SMD).

Pienso ulitizar el PIC 18F4550, una memoria EEPROM, y un LCD.

Sólo me falta la EPROMM, ya que tengo una p24C04 que es I2C y necesito la 25C04 SPI.

Tengo el sensor de AC Si85XX.. pero no me servirá y también necesito remplazarlo por un Transformador de Corriente (que he batallado para encontrarlo).

Resumiendo,, casi estoy listo para probar tu programa en físico, pero también me gustaría simularlo en Proteus antes.

Busque en las librerías y no encontre dispositivos ADE77XX. ¿cómo le hiciste para simularlo?

Nos podrías pasar el archivo de Proteus?






Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Medidor de Energía con ADE7753
« Respuesta #8 en: 07 de Junio de 2011, 11:20:08 »
Hola tito.

El archivo del medidor de energia con el codigo fuente y el esquematico aparecen en la segunda respuesta del post.

El ADE7753 no me es posible simularlo en proteus, lo que yo hago es observar el dato SPI mediante el SPI debugger y utilizo el esquema del ADE7753 para realizar las interconexiones en el PCB que hare en ARES-PROTEUS.
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 Robocardo

  • PIC10
  • *
  • Mensajes: 45
Re: Medidor de Energía con ADE7753
« Respuesta #9 en: 10 de Junio de 2011, 11:51:31 »
Bueno Uds ya encararon el proyecto con este chip que hace todo ADE7753 mas allá de los problemas de puesta en marcha que siempre tenemos todos en estos casos.
Lo interesante y sería un proyecto aparte es armar un proyecto de medidor de energía, Vrms, Irms, etc, etc sin el aDE7753.
Si alguien está interesado, yo siempre quise trabajar en algo asi por varios motivos.
1. para proteger un dispositivo eléctrico x corriente, tal vez implementar la curva i2t y tener una protección mas eficaz, que solo fijar un setpoint de corriente.
2. Saber su coseno Phi.
3. Conocer su consumo energético, su potencia activa y reactiva

Todo esto es facilmente obtenible con este chip y a veces uno se pregunta si vale la pena reinventar la rueda cuando este chip cuesta y vean el link de DIGIKEY solo 5.74 x unidad en EEUU


Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Medidor de Energía con ADE7753
« Respuesta #10 en: 10 de Junio de 2011, 12:10:43 »
Bueno Uds ya encararon el proyecto con este chip que hace todo ADE7753 mas allá de los problemas de puesta en marcha que siempre tenemos todos en estos casos.
Lo interesante y sería un proyecto aparte es armar un proyecto de medidor de energía, Vrms, Irms, etc, etc sin el aDE7753.
Si alguien está interesado, yo siempre quise trabajar en algo asi por varios motivos.
1. para proteger un dispositivo eléctrico x corriente, tal vez implementar la curva i2t y tener una protección mas eficaz, que solo fijar un setpoint de corriente.
2. Saber su coseno Phi.
3. Conocer su consumo energético, su potencia activa y reactiva

Todo esto es facilmente obtenible con este chip y a veces uno se pregunta si vale la pena reinventar la rueda cuando este chip cuesta y vean el link de DIGIKEY solo 5.74 x unidad en EEUU



Mira por aquí: http://www.todopic.com.ar/foros/index.php?topic=34506.msg288408#msg288408

También tienes chips de cirrus

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

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Medidor de Energía con ADE7753
« Respuesta #11 en: 10 de Junio de 2011, 12:57:53 »
Ciertamente la diferencia de Precios que se muestra en Digikey entre el MCP3909 y el ADE7753 es alta, pero cuando hablamos de comprar ambos dispositivos al fabricante en el orden de miles la diferencia resulta ser solamente de unos cuantos centavos, cosa que se ve reducida por la cantidad de esfuerzo que debes realizar ya que la tarea es bastante grande con un MCP3909.
« Última modificación: 10 de Junio de 2011, 13:04:10 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 Robocardo

  • PIC10
  • *
  • Mensajes: 45
Re: Medidor de Energía con ADE7753
« Respuesta #12 en: 10 de Junio de 2011, 21:11:40 »
Tengo una consulta respecto del Riesgo Eléctrico o RE.
Cuando hablo de RE me refiero a que la conexión de corriente esta aislada pero la conexión de tensión pone posiblemente por error al Vivo en contacto con la masa del circuito, eso constituye un peligro de manipulación para el operador.
La interfaz con el PC deberia estar aislada entonces algo que no se si existe.
Dejo esta observación aunque el proyecto esta muy interesante y en lo personal buscaré como resolver este tema.
Una solución simple es usar transformador de tensión.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Medidor de Energía con ADE7753
« Respuesta #13 en: 10 de Junio de 2011, 21:37:22 »
Se puede aislar galvanicamente la comunicación SPI y la alimentación. Texas Instruments tiene dispositivos del estilo.


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

Desconectado Robocardo

  • PIC10
  • *
  • Mensajes: 45
Re: Medidor de Energía con ADE7753
« Respuesta #14 en: 11 de Junio de 2011, 15:06:26 »
Ya que estas en tema Suky, se consigue en Argentina este chip?


 

anything