Autor Tema: contador de energia (ayuda)  (Leído 2743 veces)

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

Desconectado janmego

  • PIC10
  • *
  • Mensajes: 15
contador de energia (ayuda)
« en: 17 de Noviembre de 2007, 17:06:58 »
bueno la verdad es que tengo que hacer un proyecto que es un contador de energía electrica con el pic 16f877a pero apenas estoy entendiendo esto de pic y de assembler, y entonces encontré este foro y pues bueno aquí coloco una petición para los que saben y ya están avanzados en el tema me puedan ayudar.

Pido disculpas a los moderadores si este tema no va acá, acabo de entrar y lei las normas y dice que debo postear en el lugar mas adecuado y creo que es este.

Gracias
« Última modificación: 17 de Noviembre de 2007, 17:09:45 por janmego »

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: contador de energia (ayuda)
« Respuesta #1 en: 17 de Noviembre de 2007, 17:53:17 »
¿Que es exactamente lo que necesitas?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado janmego

  • PIC10
  • *
  • Mensajes: 15
Re: contador de energia (ayuda)
« Respuesta #2 en: 17 de Noviembre de 2007, 23:53:47 »
Bueno pues esto es un circuito AC simple, y de la fuente se debe medir el voltaje y de la inductancia la corriente (esto lo había pensado hacer con ADC) y tocaria medir el angulo de desfase entre el voltaje y la corriente y que el valor necesitado seria V*I*cos(angulo)



Gracias por tu interés de ayudarme

Suerte

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: contador de energia (ayuda)
« Respuesta #3 en: 18 de Noviembre de 2007, 17:56:32 »
Hola janmego,

1)   Primero vas a necesitar 2 buenos detectores de cruce por cero (uno para la tensión y otro para la intensidad), con esto ya puedes medir el desfase entre ambas señales

2)   Luego necesitaras dos rectificadores de señal con OA para poder introducir a los A/D una tensión de continua RMS proporcional a las señales de intensidad y tensión de la carga

3)   También necesitaras encontrar algun conversor A/D externo (los del PIC son de muy baja resolución) tanto para medir la intensidad como la tensión que posee la carga

Ya con las señales que te proveen los circuitos anteriores y por medio del PIC, puedes calcular el consumo instantaneo del circuito, y por sumatoria de los mismos el consumo a largo plazo.

Espero te sea de ayuda.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado janmego

  • PIC10
  • *
  • Mensajes: 15
Re: contador de energia (ayuda)
« Respuesta #4 en: 18 de Noviembre de 2007, 20:52:06 »
Gracias por la respuesta, pero aun tengo dudas sobre los detectores de cruce por cero, ¿como serian?¿se haria con el pic o con un circuito extra? la verdad no entiendo bien esa parte, y seria posible que me ayudaras con el código en assembler.

Gracias

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: contador de energia (ayuda)
« Respuesta #5 en: 19 de Noviembre de 2007, 00:40:13 »
¿como serian?¿se haria con el pic o con un circuito extra? la verdad no entiendo bien esa parte, y seria posible que me ayudaras con el código en assembler.

Busca en el foro o por la web y de seguro encontrarás varios circuito detectores de cruce por cero, si bien la medición de los tiempos la realiza el PIC, necesitarás también de un circuito para adaptar las señales de tal forma que el PIC las reconozca.

Yo personalmente no puedo garantizarte que te ayudaré con el código (falta de tiempo), pero de seguro si tu empiesas a hacerlo y posteas las dudas que se te presenten, alguién te dará una mano.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado janmego

  • PIC10
  • *
  • Mensajes: 15
Re: contador de energia (ayuda)
« Respuesta #6 en: 19 de Noviembre de 2007, 17:21:06 »
Gracias por la respuesta Carlos. Bien pues he comenzado a buscar, y lo del detector de cruce por cero pues hay varias opciones he encontrado como 2 circuitos para hacer eso y ademas encontré información que con solo una resistencia grande (5M) conectada al pic se puede hacer. Pero lo que no he podido saber como se hace es el circuito para el valor rms de la señal, si alguien me pudiera ayudar con eso porfavor.

Despues, cuando lo vaya haciendo y si tengo mas dudas las haré e iré posteando los avances por si a alguien le sirven.

Suerte

Desconectado janmego

  • PIC10
  • *
  • Mensajes: 15
Re: contador de energia (ayuda)
« Respuesta #7 en: 25 de Noviembre de 2007, 13:40:59 »
Bueno pues he estado trabajando en esto un poco y hasta ahora:
El valor rms lo puedo hacer con un divisor de tensión (para voltaje) pero para la corriente no se aun como adecuar esta señal.
Suponiendo que ya tenia las dos señales adecuadas para introducirlas en el pic, me puse a trabajar en el codigo, lo que llevo hasta ahora es el ADC y la multiplicacion de los dos datos:

Código: [Seleccionar]

INCLUDE <P16F877.INC>
CONTA EQU 20
DATO1 EQU 21
DATO2 EQU 22
productol EQU 23                              ; el resultado va en dos registros de 8bit
productoh EQU 24

ORG 00



CALL configuracion
CALL principal



configuracion
bcf STATUS,RP0
         bcf STATUS,RP1
bsf ADCON0,ADCS0
bsf ADCON0,ADON
         bsf STATUS,RP0 ;BANCO 01
         clrf TRISB
         clrf TRISC
         clrf ADCON1
bcf STATUS,RP0 ;BANCO 00
         return

principal
call time_adq          ;ESPERA tiempo de adquisicion
bsf  ADCON0,GO ;INICIA CONVERSION
aca   
        btfsc ADCON0,GO ;esperamos final de conversion
        goto aca
BTFSC ADCON0,CHS0 ;
GOTO CANAL01
        movf ADRESH,0 ;MUEVO RESULTADO DE CONVERSION AL REG W
        MOVWF DATO1
BSF ADCON0,CHS0
GOTO principal

CANAL01
        movf ADRESH,00 ;MUEVO RESULTADO DE CONVERSION AL REG W
        MOVWF DATO2
BCF ADCON0,CHS0
call multiplicacion
CALL VISUALIZACION
        goto principal



multiplicacion
clrf productol
clrf productoh
        movf DATO2,f                                ;Si es cero...
btfsc STATUS,Z
return                                            ;volver con resultado= 0
movf DATO1,w                               ;cargamos el operando 1
mult
addwf productol
btfsc STATUS,C                              ;hay llevada?
incf productoh,f                             
decfsz DATO2,f                               ;no y termino?
goto mult                                       ;no

movf productol,00                           ; esta visualizacion es solo para poder
movwf PORTB                                 ; ver facilmente que la multiplicacion estaba funcionando
movf productoh,00
movwf PORTC
RETURN

VISUALIZACION                                      ; me falta esto
RETURN

time_adq
       movlw 20
       movwf CONTA
aqui
       decfsz CONTA
       goto aqui
       return
   
END

Asi como esta el codigo convierte las entradas de RA0 y RA1 y luego las multiplica, el problema es que ahora debo volver a la escala inicial para poder visualizar el valor correcto, para ello debo dividir por 108 (o multiplicar por 0,009259) y luego visualizar este dato y no se como hacerlo si alguien me pudiera ayudar se lo agradecería.

Suerte

Desconectado janmego

  • PIC10
  • *
  • Mensajes: 15
Re: contador de energia (ayuda)
« Respuesta #8 en: 27 de Noviembre de 2007, 02:59:50 »
Bueno, pues he avanzado un poco mas, ya tengo los dos ADC, la multiplicación de los datos y la división del resultado para poder mostrarlo en displays, y aquí les dejo el código para el que le interese, se que se puede mejorar pero bueno hasta ahora estoy aprendiendo

Código: [Seleccionar]
INCLUDE <P16F877.INC>
CONTA EQU 20
DATO1 EQU 21
DATO2 EQU 22
productol EQU 23
productoh EQU 24
DIVIDENDOH EQU 25
DIVIDENDOL EQU 26
DIVISORH EQU 27
DIVISORL EQU 28
RESULTADOH EQU 29
RESULTADOL EQU 2A

ORG 00



CALL configuracion
CALL principal



configuracion
bcf STATUS,RP0
     bcf STATUS,RP1
bsf ADCON0,ADCS0
bsf ADCON0,ADON
     bsf STATUS,RP0 ;BANCO 01
     clrf TRISB
     clrf TRISC
     clrf TRISD
     clrf ADCON1
bcf STATUS,RP0 ;BANCO 00
     return

principal
call time_adq      ;ESPERA tiempo de adquisicion
bsf  ADCON0,GO ;INICIA CONVERSION
aca   
    btfsc ADCON0,GO ;esperamos final de conversion
    goto aca
BTFSC ADCON0,CHS0 ;
GOTO CANAL01
    movf ADRESH,0 ;MUEVO RESULTADO DE CONVERSION AL REG W
    MOVWF DATO1
BSF ADCON0,CHS0
GOTO principal

CANAL01
    movf ADRESH,00 ;MUEVO RESULTADO DE CONVERSION AL REG W
    MOVWF DATO2
BCF ADCON0,CHS0
call multiplicacion
movf productol,0
movwf DIVIDENDOL
movf productoh,0
movwf DIVIDENDOH
CLRF DIVISORH
MOVLW 6C
MOVWF DIVISORL
CALL DIVISION
CALL VISUALIZACION


    goto principal



multiplicacion
clrf productol
clrf productoh
    movf DATO2,f
btfsc STATUS,Z
return
movf DATO1,w
mult
addwf productol
btfsc STATUS,C
incf productoh,f
decfsz DATO2,f
goto mult
RETURN

VISUALIZACION
MOVF RESULTADOH,0
MOVWF DIVIDENDOH
MOVF RESULTADOL,0
MOVWF DIVIDENDOL
CLRF DIVISORH
MOVLW 64
MOVWF DIVISORL
CALL DIVISION ;divide por 100 para saber las centanas del numero a mostrar
MOVF RESULTADOL,0
MOVWF PORTB
CLRF DIVISORH
MOVLW 0A
MOVWF DIVISORL
CALL DIVISION ;divide por 10 para saber las decenas del numero a mostrar
MOVF RESULTADOL,0
MOVWF PORTC
MOVF DIVIDENDOL,0
MOVWF PORTD ;lo que sobra son las unidades
RETURN

time_adq
    movlw 20
    movwf CONTA
aqui
    decfsz CONTA
    goto aqui
    return


DIVISION

CLRF RESULTADOH
CLRF RESULTADOL

COMF DIVISORL,1 ;COMPLEMENTO A 2 DE DIVISOR
COMF DIVISORH,1
MOVLW 01
ADDWF DIVISORL,1
BTFSC STATUS,C
ADDWF DIVISORH,1
DIVISION1
MOVF DIVISORL,0
ADDWF DIVIDENDOL,1
BTFSC STATUS,C
INCF DIVIDENDOH,1
MOVF DIVISORH,0
ADDWF DIVIDENDOH,1

BTFSC STATUS,C
GOTO MAYORCERO
GOTO MENORCERO

MAYORCERO
MOVLW 01
ADDWF RESULTADOL,1
BTFSC STATUS,C
INCF RESULTADOH,1
GOTO DIVISION1

MENORCERO
COMF DIVISORL,1 ;COMPLEMENTO A 2 DE DIVISOR
COMF DIVISORH,1
MOVLW 01
ADDWF DIVISORL,1
BTFSC STATUS,C
ADDWF DIVISORH,1

MOVF DIVISORL,0
ADDWF DIVIDENDOL,1
BTFSC STATUS,C
INCF DIVIDENDOH,1
MOVF DIVISORH,0
ADDWF DIVIDENDOH,1

RETURN

   
END

Bueno y si no seria mucha molestia pedirle a alguien que me de una idea de como adecuar la señal de corriente para introducirla al pic, y si pudieran colaborar con el medidor de fase, se que tengo que hacer un detector de cruce por cero de cada señal y despues meter eso por CCP para asi medir el tiempo y por consiguiente el angulo, pero de eso ni idea.

Espero que el código le sirva a alguien y acepto sugerencias sobre como reducirlo porque hay algunas rutinas que se repiten pero a duras penas hice esto.

Suerte

Desconectado Driebes

  • PIC12
  • **
  • Mensajes: 56
Re: contador de energia (ayuda)
« Respuesta #9 en: 27 de Noviembre de 2007, 07:07:01 »
Citar
Bueno y si no seria mucha molestia pedirle a alguien que me de una idea de como adecuar la señal de corriente para introducirla al pic, y si pudieran colaborar con el medidor de fase, se que tengo que hacer un detector de cruce por cero de cada señal y despues meter eso por CCP para asi medir el tiempo y por consiguiente el angulo, pero de eso ni idea.

¿Si montas un convertido I-V con una AO no te será más facil de detectar?