Medidor de potencia con 18F4550

Hmmm creo que me explique mal, lo que sucede es que cuando la señal del sensor hace su cruce por cero, se activa una temporización y luego toma los datos del ADC, pero sucede que desde que hace ese cruce por cero, hasta que lee el ADC pasa un tiempo, por que las muestras no se comienzan a tomar en 512 (este es mi valor de 0 en el ADC), sino, que por ejemplo, lo hace en 600, por ejemplo, por lo que la gráfica no inicia en cero, sino en otro valor, como se ve en la gráfica del sensor de corriente, como ven no inicia en cero...

uploadfromtaptalk1435245749923.jpg
 
Hola, ahora se entiende mejor la idea que planteabas antes.
Ten en cuenta que desde que sucede el cruce por cero (real) hasta que se llegue al voltaje umbral para que el led del optoacoplador se ilumine y luego dispare la interrupción externa pasa un tiempo (aunque normalmente no es muy considerable), luego de disparar la interrupción externa activas el temporizador y hasta que suceda su interrupción pasa otra cantidad de tiempo... quizá este por ahí el problema que planteas.
Se podría hacer que: En la interrupción externa (que es la mas cercana al cruce por cero) se active al temporizador y ahi mismo se tome la primera muestra de tanto de los sensores de voltaje como de corriente y luego el temporizador se ocuparía del resto.

Por otro lado asumo que las mediciones la estas haciendo sobre una carga netamente resistiva, solo asi se tendrían en fase la tensión y la corriente.
 
Hola, ahora se entiende mejor la idea que planteabas antes.
Ten en cuenta que desde que sucede el cruce por cero (real) hasta que se llegue al voltaje umbral para que el led del optoacoplador se ilumine y luego dispare la interrupción externa pasa un tiempo (aunque normalmente no es muy considerable), luego de disparar la interrupción externa activas el temporizador y hasta que suceda su interrupción pasa otra cantidad de tiempo... quizá este por ahí el problema que planteas.
Se podría hacer que: En la interrupción externa (que es la mas cercana al cruce por cero) se active al temporizador y ahi mismo se tome la primera muestra de tanto de los sensores de voltaje como de corriente y luego el temporizador se ocuparía del resto.

Por otro lado asumo que las mediciones la estas haciendo sobre una carga netamente resistiva, solo asi se tendrían en fase la tensión y la corriente.
Hola, hmmm no entendí muy bien lo que me recomiendas, dices que la primera muestra la tome en la interrupción externa y en la del TMR0?

Si, las pruebas las estoy realizando con una plancha de ropa, que consume más o menos los 9A rms
 
si, exactamente la primera muestra en la interrupción externa y el resto de las muestras en la interrupción temporizada, si eso no soluciona el problema habrá que pensar en algún método mas "mejor..jajajja" para la adquisición de datos.
 
si, exactamente la primera muestra en la interrupción externa y el resto de las muestras en la interrupción temporizada, si eso no soluciona el problema habrá que pensar en algún método mas "mejor..jajajja" para la adquisición de datos.
Jajaja si, así puede que funcione "más mejor", bueno eso lo probaré el martes, cuando lo haga, te comento como me fue... Gracias (Y)
 
Jajaja si, así puede que funcione "más mejor", bueno eso lo probaré el martes, cuando lo haga, te comento como me fue... Gracias (Y)

Actualizo...

Ya hice las modificaciones que me dijiste, si mejoró un poco, pero aún hay un tiempo, lo que genera que la primera lectura no sea en 512.

Como ves en la imagen, aún la señal no inicia en 0

uploadfromtaptalk1435683239317.jpg

También en esta imagen ves que la primera lectura está en más o menos 535

uploadfromtaptalk1435683284813.jpg
 
...Que mal.
Primero que nada ten en cuenta que no se podrá tomar una muestra exactamente en el cruce por cero de la señal... eso debido a los tiempos que tardan en detectar el cruce por cero, disparar la interrupción y muestrearlo con el adc, pero mientas los dispositivos sean mas veloces mas cerca se estará del cometido.

Ahora hay que luchar con el hardware, algo que debería solucionar el problema es implementar un circuito de muestreo y retención simultaneo de las señales de voltaje y corriente. por otro lado también hay que ver como es que estas obteniendo el disparo de la interrupción externa... me refiero mas al esquema, por ejemplo no es lo mismo (dependiendo del método de detección de cruce por cero) usar directamente la red eléctrica que usar un atenuador(ya sea por divisor de tensión o transformador), hay detalles que pueden generar el aparente desface entre en voltaje y corriente.

seria bueno que subas el esquema que estas usando pero con todos los detalles por ejemplo si usas transformador para la señal de la red eléctrica entonces debería estar especificado la relación de entrada y salida, detalles del sensor de corriente... etc.
si subes el esquema hecho en Proteus que no sea en la version 8 ya que para el caso mio no podre abrirlo ya que uso la version 7.
 
...Que mal.
Primero que nada ten en cuenta que no se podrá tomar una muestra exactamente en el cruce por cero de la señal... eso debido a los tiempos que tardan en detectar el cruce por cero, disparar la interrupción y muestrearlo con el adc, pero mientas los dispositivos sean mas veloces mas cerca se estará del cometido.

Ahora hay que luchar con el hardware, algo que debería solucionar el problema es implementar un circuito de muestreo y retención simultaneo de las señales de voltaje y corriente. por otro lado también hay que ver como es que estas obteniendo el disparo de la interrupción externa... me refiero mas al esquema, por ejemplo no es lo mismo (dependiendo del método de detección de cruce por cero) usar directamente la red eléctrica que usar un atenuador(ya sea por divisor de tensión o transformador), hay detalles que pueden generar el aparente desface entre en voltaje y corriente.

seria bueno que subas el esquema que estas usando pero con todos los detalles por ejemplo si usas transformador para la señal de la red eléctrica entonces debería estar especificado la relación de entrada y salida, detalles del sensor de corriente... etc.
si subes el esquema hecho en Proteus que no sea en la version 8 ya que para el caso mio no podre abrirlo ya que uso la version 7.
Ok, en cuanto pueda lo haré, primero debo conseguir la v7 de proteus. En cuanto a los sensores, uso para la corriente un ASC712 de 30A, de este sensor hay bastante información en el web; el problema lo he tenido con el de voltaje, ya que mi sensor es un módulo que compré en china, funciona bien, pero no tengo datos del funcionamiento de este, lo que hice fue variar el voltaje en la entrada del sensor para así poder tener la linealidad respecto al voltaje de entrada y salida, este es el sensor del que te hablo...

http://www.aliexpress.com/item/A01B...sensor-module-free-shipping/32260479182.html
 
.


Otra opción seria detectar el anterior cruce por cero y tener en cuenta el periodo/la frecuencia de línea para realizar el trabajo que pensar hacer.



Si trabajas sobre líneas de alimentación de redes domiciliarias la frecuencia suele ser constante.



Saludos, JuanKa.-
 
.


Otra opción seria detectar el anterior cruce por cero y tener en cuenta el periodo/la frecuencia de línea para realizar el trabajo que pensar hacer.



Si trabajas sobre líneas de alimentación de redes domiciliarias la frecuencia suele ser constante.



Saludos, JuanKa.-
Si, eso mismo he estado pensando, no realizar el muestreo de la señal en el periodo que inicia con el cruce por cero, sino con el siguiente, sería algo como colocar un delay de más o menos 16 ms y después de este si empezar a tomar las muestras, esa es la idea, quizás lo pruebo hoy, cualquier cosa estaré comentando...

Actualizo...

Ya hice las modificaciones que comenté anteriormente y dieron buenos resultados, lo que hice fue agregar un delay justo antes de salir de la interrupcion de cruce por cero de 1250 us para asi empezar el muestreo en el periodo seguiente, en la imagen pueden ver los resultados...

Matlab.jpg
 
Última edición:
Actualizo...

Ya hice las modificaciones que comenté anteriormente y dieron buenos resultados, lo que hice fue agregar un delay justo antes de salir de la interrupcion de cruce por cero de 1250 us para asi empezar el muestreo en el periodo seguiente, en la imagen pueden ver los resultados...

Ver el archivo adjunto 131625
 
Atrás
Arriba