Autor Tema: PWM Sincronizado a la línea  (Leído 3171 veces)

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

Desconectado tavisho

  • PIC12
  • **
  • Mensajes: 94
PWM Sincronizado a la línea
« en: 03 de Septiembre de 2008, 01:55:32 »
Saludos PIC listeros, estoy tratando de hacer un pwm sincronizado a la corriente alterna de méxico (60 hz). Sería para el manejo de un puente complet, por lo tanto un disparo controlaría un par de transistores y el otro el par restane. Según tengo entendio , el pwm solo puede tener como máximo el valor de 50 % por semiciclo de onda seno ( semicilo de 8.33 ms) y se referencía a partir del centro, es decir, si tengo un pwm de 20% del semicilo, diez por ciento de la duración del pulso antes del centro y 10% de la duración des´pues del centro. He hecho los cálculos para empezar los disparos en ese determinado momento, mi problema es qe quiero sincronizar con la onda seno de 60 HZ con un detector de cruce por zero de op amp y la interrupción de RB0/INT. El problema que al simular el impulso en mpsim si entra a la interrupción, mientras que si lo hago con proteus no entra. Mi pregunta es que si creen que se deba a que hay pulsos ininterrumpidos por RB0/int por la naturaleza senoidal de la onda a la que me debo sincronizar o notan algún otro error. O como me recomiendan que pueda sincronizar con la línea de 60 hz. Les dejo el fuente para que se den una idea.
Código: [Seleccionar]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Programa hecho por Octavio Mauricio López Sánchez;
; entusiaste de la programación de los PIC    ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
List p=16f877
include "p16f877.inc"
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON & _BODEN_OFF & _LVP_OFF
cblock 0x20
Auxiliar
endc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Este programa se hace cargo de la interrupción de RB0/INT   ;
;y enciende por un segundo el led en el bit RA1 si fue por RB0/INT;
;además de mostrar un mensaje en el lcd.   ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0x00
goto Inicio
org 0x04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; La rutina detecta el paso por zero de una onda seno para que c;
; sincroince el pwm mediante la interrupción de rb0/ int        ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Tratar_Interrupcion
btfss INTCON,INTF ; Se produjo la interrupción de RB0/int?
goto Fin_Tratamiento ; no, falsa alarma
nop ; si se produjo, haz el trataimento de interruipción
bcf INTCON,INTF ; repone el flag de la interrupción por INTCON
goto PWM
Fin_Tratamiento
retfie

Inicio
bsf STATUS,RP0 ; cambia al banco 1
movlw 0x06
movwf ADCON1
movlw 0x07
movwf OPTION_REG ; 1:256 en el temporizado
movlw 0x90
movwf INTCON
movlw 0xff
movwf TRISB
clrf TRISC
bcf STATUS,RP0 ; regresa al banco 0
Ciclo
nop
goto Inicio ; se cicla para esperar interrupción

;********************************************************;
; La rutina pwm pone a 1 el bit de puerto c para que se  ;
; dispare por el tiempo de 20% del ciclo sincronizada con;
; la onda seno. ;
;********************************************************;
PWM
bsf PORTC,1 ; pone a 1 el primer bit para el pwm
bcf PORTC,2
call Temporizado ; llama a la rutina para retardos
bcf PORTC,1
bsf PORTC,2 ; apaga el bit de puerto c
call Temporizado

goto PWM

Temporizado
movlw .2
movwf Auxiliar ; debido a que el pic solo llega 16ms se necestia a auxiliar para llegar a 1 segundo
clrf TMR0 ; asocia el valor de 0 a tmr0 para que realice 256 incrementos
Sigue1
bcf INTCON,T0IF ; borra la bandera de desborde de tmr0
Sigue
clrwdt ;refresca el watchdog
btfss INTCON,T0IF ; ya se desbordo tmro?
goto Sigue ; no, sigue con el incremento en la etiqueta Sigue
decfsz Auxiliar,1 ; si, se desbordo , pregunta si auxiliar ya es cero
goto Sigue1 ; no, vuelve a temporizar con tmr0 y decrementa auxiliar una vez mas
return ; ya auxiliar es cero, vuelve al program pral.


end
Espero puedan ayudarme.

Desconectado LuNaTk

  • PIC10
  • *
  • Mensajes: 27
Re: PWM Sincronizado a la línea
« Respuesta #1 en: 03 de Septiembre de 2008, 02:05:51 »
Hola:

Colega, pues yo creo que no te deberias fiar tanto del Proteus, alguna vez yo hice un ejemplo parecido al que tu estas haciendo, solo que mi programa fue para un propulsor ( convertidor ac-cc controlado) donde tenia que calcular los retardos de disparo de un puente de scr para obtener un determinado valor de corriente rms y controlar un motor, y tambien utilize la interrupcion RB0/INT y aunque no tuve buenos resultados con la simulacion, fisicamente y midiendo las señales con un osciloscopio el programa funcionaba bien.
Asi que si tieens oportuniad, pruebal fisicamente.
Cuando mas dificil es.... Mas grande el triunfo!!!

Desconectado tavisho

  • PIC12
  • **
  • Mensajes: 94
Re: PWM Sincronizado a la línea
« Respuesta #2 en: 03 de Septiembre de 2008, 23:03:47 »
checaste la programación amigo? Varios usuarios del foro me han dicho que proteus a veces no sirve; tienen algun otro simulador que aguante micros para empezar a comparar?

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: PWM Sincronizado a la línea
« Respuesta #3 en: 04 de Septiembre de 2008, 16:17:31 »
Debes verificar que cuando entras a la interrupción la primera vez, luego de esto nunca sales de ella por eso no vuelve a entrar nuevamente, te quedas en el ciclo pwm indefinidamente, otra cosa es que para activar los bits del portc debes seleccionar el banco correspondiente. Verifica esto y trata de encontrar como solucionarlo

Desconectado tavisho

  • PIC12
  • **
  • Mensajes: 94
Re: PWM Sincronizado a la línea
« Respuesta #4 en: 07 de Septiembre de 2008, 18:52:44 »
okas, en este mismo momento lo checaré. Muchas gracias al moderador por mover mi post al lugar adeuado