TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: fastyx en 18 de Marzo de 2006, 12:21:00

Título: ayuda con codigo de cruce por cero
Publicado por: fastyx en 18 de Marzo de 2006, 12:21:00
amigos:como sabreis estoy usando un triac para controlar un motor.

lo que deseo saber es si lo que estoy poniendo en el programa esta bien

   {  if (sinc==0)    

 // sinc es la direccion de un  bit por donde entra el sincronismo de alterna para detectar el cero (rb3 en 16f628a) configurado como entrada
//(puse en las definiciones  #bit sinc=portb.3)

      {
       disparo=1;delay_ms(17);  

//disparo es el bit de la pata ra2 configurada  como salida para entrar a la pata 1 del opto(led)
//(puse en las definiciones #bit disparo = porta.2)
      }
      else disparo==0;

lo que me ocurre es que el disparo se mantiene en un alto aunque sinc no sea 0
y yo quiero qeue el disparo se haga una sola vez cuando pasa por 0 y no que se quede todo el tiempo en 1(lo coteje con el osciloscopio)

desde ya gracias!



Título: RE: ayuda con codigo de cruce por cero
Publicado por: Modulay en 18 de Marzo de 2006, 12:57:00
else disparo == 0;  lleva un "=" de más
Ponlo así:

else {
disparo = 0;
}
Título: RE: ayuda con codigo de cruce por cero
Publicado por: fastyx en 18 de Marzo de 2006, 13:14:00
ok lo voy a probar
 la duda que tengo es la siguiente.

una onda senoidal tiene en un tiempo llamemosle t0 el valor de cero.
luego se incrementa hasta el maximo y cae hasta cero nuevamente para cambiar el signo e ir a la semionda negativa.

para la frecuencia de linea de 50 ciclos por segundo, el ciclo dura 20 mseg,con lo cual la conduccion maxima por semiciclo en el que puedo excitar el gate del triac es de 10 mseg,y el minimo sera de 50 useg calculo.

lo que no se es cuando le digo al pic : dispara el pin disparo cuando el sincronismo sea cero,pero cero y solamente cero,no tengo forma de saber si cuando esta en 0.001volt ya inhibe al disparo,y si va a estar preparado para recibir el nuevo cruce de cero. me explique?

desde ya gracias por la dedicacion!!

Título: RE: ayuda con codigo de cruce por cero
Publicado por: Modulay en 18 de Marzo de 2006, 14:44:00
Mi recomendación sería que usases la interrupción externa(pin RB0) para detectar el paso por cero y no te fiases demasiado de la exactitud de la frecuencia de red.Podrías utilizar el timer del pic para generar una base de tiempos que te interrumpiese por ejemplo cada 1 ms.Así,cuando el paso por cero provoque una interrupción,en la rutina de tratamiento de ésta,puesde poner a correr al timer,incrementando una variable cada vez que dicho timer se desborde.En cada desbordamiento del timer puedes comprobar el valor de esta variable y efectuar el disparo cuando más te convenga.No olvides que si configuras el timer para que interrumpa cada 1 ms,lo hará unas 10 veces como máximo antes de que vuelvas a tener un cruce por cero de la alterna.Conseguirías así 10 niveles de regulación de potencia.Si quieres más niveles,pues reduces la base de tiempo del timer.
¿Qué te parece?
Título: RE: ayuda con codigo de cruce por cero
Publicado por: Azicuetano en 18 de Marzo de 2006, 15:58:00
Como Modulay comenta tienes que utilizar la interrupción externa (pin RB0).

Cada paso por cero te iras al código que tiene asociado dicha interrupción y... lo que tienes que hacer simplemente es ponerle un retardo en función de lo que quieres que te conduzca.

se inicia el programa
.
.
.
se detecta un paso por cero
.
.
.
hacemos un retardo de 5 ms (por decir un valor)
.
.
.
se detecta un paso por cero
.
.
.
hacemos un retardo de 5 ms (por decir un valor)
.
.
.
etc.etc....

Lo que tendremos entonces es que nuestro triac nos conducirá la mitad del semiciclo positivo y la mitad del semiciclo negativo. Con un par de botones puedes hacer que se modifique el retardo (desde 0 hasta 10 ms.) y... cambiarás el tiempo que el triac conduce (la bombillita brillará más o menos).

No me puedo explicar mejor porque me tengo que ir pero... si tienes algún problema avisa y me explayo más.

PD: Esto es la teoría. Para la practica, si lo quieres hacer de forma eficiente, lo puedes hacer como dice Modulay


Un saludo desde Alicante.
Título: RE: ayuda con codigo de cruce por cero
Publicado por: fastyx en 18 de Marzo de 2006, 20:12:00
desde ya les agradezco la ayuda.!!!

no habia pensado en la interrupcion porque nunca hice una todavia(que verguenza!)

pero como ustedes bien dicen si por rbo al configurar para interrupcion externa,va a detectar los pasos por cero de la señal senoidal,ya tengo el camino allanado.

ahora... conviene que con un puente rectificador voltee los semiciclos negativos
para tener pasos por cero pero no valores negativos de tensionsobre rbo?

igual los detectaria digo...

Título: RE: ayuda con codigo de cruce por cero
Publicado por: migsantiago en 18 de Marzo de 2006, 21:31:00
Holas!

Si activas el triac a la mitad de una semionda (10ms) vas a tener el 50% del voltaje eficaz. Si son 220VCA, tendrás 110VCA en el foco (bombilla como ustedes le dicen).

¿Qué método estás usando para detectar el cruce por cero? No lo tengo muy claro. Sé que te dimos propuestas para hacerlo pero no sé cuál usaste.

Para activar el triac sólo necesitas activar el opto con un pulso; un milisegundo es suficiente. El triac se quedará activo mientras haya voltaje en él; se desactivará al cruzar por cero la corriente alterna.



Título: RE: ayuda con codigo de cruce por cero
Publicado por: Modulay en 19 de Marzo de 2006, 05:11:00
No creo ni que necesites rectificar los semiciclos negativos.Con ponerle una R de 1Mohm para limitar la corriente te vale.Los diodos de protección que lleva el puerto te salvan del resto
Título: RE: ayuda con codigo de cruce por cero
Publicado por: fastyx en 19 de Marzo de 2006, 08:30:00
amigos: en relacion a lo que me decis Mig, recien me desayuno con que tengo que utilizar la interrupcion por rbo para detectar cuando la onda pasa por cero y realizar la rutina para el triac.

Ahora, diganme si estoy en lo correcto porque si no tengo un matete en el cerebro....

cuando la onda pase por cero,es el momento de disparar  el triac.pero si yo lo disparo
digamos en el angulo 0 ó 1 de los 180 del semiciclo,ya no tengo opcion de apagarlo hasta que la onda pase por cero de nuevo y lo apague,con lo cual pienso que si queremos controlar el angulo de disparo tendriamos que hacerlo en la porcion restante de la onda,supongamos que quiero que conduzca 90 grados,tendria que hacer un delay y dispararlo cuando esta en la cresta maxima hasta que baje a cero

es correcto?

por otra parte les comento que el triac va a manejar 12 volts de alterna ,no 220v
Título: RE: ayuda con codigo de cruce por cero
Publicado por: migsantiago en 19 de Marzo de 2006, 12:04:00
Exacto.

En el post anterior mencioné 10ms, en realidad eran 5ms. Vacilando

Si quieres tener el 50% del voltaje eficaz (6VCA en tu caso) deberás disparar el triac cuando sean 5ms después del cruce por cero (si hablamos de 50Hz), sin importar si es cruce por cero de positivo a negativo o viceversa, porque un semiciclo dura 10ms y la mitad del semiciclo son 5ms.

Si activas el triac justo después del cruce por cero tendrás el 100% del voltaje eficaz (12VCA).

Si quieres tener 2VCA tendrías que esperar 8.333ms, es decir 5/6 de 10ms. El triac sólo estará activado 1.666ms, o sea 1/6 de 10ms.

Y tienes razón, una vez que mandas el pulso de activación de la Gate del triac, ya no podrás apagarlo, se quedará "enclavado" hasta que el VCA cruce por cero o cortes manualmente la alimentación.
Título: RE: ayuda con codigo de cruce por cero
Publicado por: kain589 en 19 de Marzo de 2006, 12:24:00
¿Las relaciones entre tensiones son tan faciles de calcular? No tendrias que calcular para cada angulo de disparo el area que forma la parte de senoidal que dejas conducir, y creo que no seran lineales
Título: RE: ayuda con codigo de cruce por cero
Publicado por: migsantiago en 19 de Marzo de 2006, 12:35:00
Mi experiencia con lo de los triacs es poca, esos datos que doy son por observación.

Hice un dimmer que tenía una LCD. Cuando yo disparaba el triac a la mitad de un semiciclo, la LCD me indicaba 50% y con un voltímetro de alterna yo medía el voltaje que se aplicaba en el foco, había 60VCA (en mi país se manejan 120VCA). La proprocionalidad era lineal, 10% era a 12VCA, 90% era a 108VCA.

Talvez sí haya una fórmula para calcularlo, pero a mí me salían esas mediciones.

Kain, si llegas a encontrar esa fórmula, por favor avísanos. Giño
Título: RE: ayuda con codigo de cruce por cero
Publicado por: Modulay en 19 de Marzo de 2006, 12:48:00
No llega a ser lineal,aunque equiespaciando los distintos niveles que se quieran usar para no complicarse la vida es más que válido.
Para hacerlo con exactitud,sería mediante una integral mediante la cual se calcula la tensión media a la salida,que quedaría como:

Vmedia = (16.92V/pi)*(cos (a) + 1)



Se ve que la relación entre ángulo de disparo y tensión media no es lineal,pero casi.

"a" sería el ángulo de disparo,en radianes,tomando como referencia el paso por cero de la señal (ángulo cero).
16.92 es el valor de tensión de pico,suponiendo los 12V eficaces.

Si suponemos que "a" variará entre 0 y pi(radianes),para traducirlo a retardo en segundos sería:

t = (a*T)/(2*pi)

t es el retardo en segundos
T el periodo en segundos,en nuestro caso 20 ms

Para hacerlo totalmente lineal se podría hacer algún trapicheo numérico y buscar,por ejemplo,10 valores de a que resultaran con incrementos iguales en la tensión media de salida.Una vez calculados esos 10 valores de a,se calculan los 10 valores correspondientes de t

Título: RE: ayuda con codigo de cruce por cero
Publicado por: migsantiago en 19 de Marzo de 2006, 13:12:00
¿Podrías poner un ejemplo Modulay? Sonrisa Gigante Por favor RollEyes
Título: RE: ayuda con codigo de cruce por cero
Publicado por: Modulay en 19 de Marzo de 2006, 13:18:00
Acabo de editar para añadir cosillas migsantiago.
Dime a qué te refieres y lo haré con gusto.
Un saludo
Título: RE: ayuda con codigo de cruce por cero
Publicado por: migsantiago en 19 de Marzo de 2006, 13:30:00
Woooww, me diste más que un ejemplo. Giño

Mis datos son... 127VCArms, 60Hz, 180VCApico.

Digamos que yo disparo el triac a los 90° (pi / 2)... el voltaje que tendría es de 57.17V. Esos 57VCA, ¿son eficaces (rms)?

Título: RE: ayuda con codigo de cruce por cero
Publicado por: kain589 en 19 de Marzo de 2006, 13:31:00
Pero eso tendra que ver con la tension instantanea, y no con la tension media en la carga¿no? en unos dias tengo que ponerme a estudiar este tema asi que todavia no estoy muy seguro de como va la cosa
Título: RE: ayuda con codigo de cruce por cero
Publicado por: Modulay en 19 de Marzo de 2006, 13:48:00
La tensión instantánea es la que se tiene en un instante determinado.Puede ser 0,6,2,16...dependiendo del momento que escojas.La potencia media (es la que nos ataña) está relacionada directamente con el valor medio de la tensión y,tal y como comentabas antes,con el área bajo la curva de tensión.También se la calcula con una integral,y los límites de integración si no recuerdo mal son los mismos que para la tensión media.Lo que no recuerdo es la expresión en sí.A ver si la encuentro por ahí
Título: RE: ayuda con codigo de cruce por cero
Publicado por: migsantiago en 19 de Marzo de 2006, 13:53:00
Entonces Modulay, los 57vca que me dan, ¿son eficaces o instantáneos? Estoy un poco confundido.
Título: RE: ayuda con codigo de cruce por cero
Publicado por: migsantiago en 19 de Marzo de 2006, 14:01:00
Ah ya veo, entonces ¿eso es lo que mediría un voltímetro? invasor
Título: RE: ayuda con codigo de cruce por cero
Publicado por: Modulay en 19 de Marzo de 2006, 14:06:00
Un voltímetro,cuando mide una señal alterna,te da el valor eficaz de la señal:

Veficaz = Vpico/1.41  
Los 220V de la red es en realidad una señal que alcanza unos voltios considerablesGiño

220Veficaces = Vpico/1.41 => Vpico de la red = 220 * 1.41 = 310.2V
Título: RE: ayuda con codigo de cruce por cero
Publicado por: migsantiago en 19 de Marzo de 2006, 14:13:00
Acabo de aprender algo nuevo. Muchas gracias por la clase Modulay.
Título: RE: ayuda con codigo de cruce por cero
Publicado por: Modulay en 19 de Marzo de 2006, 14:16:00
A mandar migFumador
Título: RE: ayuda con codigo de cruce por cero
Publicado por: kain589 en 19 de Marzo de 2006, 16:55:00
¿Cuando el polimetro se ponia en medir tension en continua no daba el valor medio de la tension?  Lo digo porque asi se podria saber la tension media aplicada a la carga; creo recordar que habia una forma de medir la tension media con el polimetro
Título: RE: ayuda con codigo de cruce por cero
Publicado por: Modulay en 19 de Marzo de 2006, 17:31:00
Pudiera ser.
Para una señal rectificada (si no está rectificada el valor medio sería cero) sin regular,es decir,cogiendo la onda completa,la tensión media es:

Vmedia = (Vpico/pi)*( 1 + cos(0) ) = 2*Vpico/pi

Si pruebas con tus 12Vac rectificados te debería salir:

Vmedia = 2*16.92/3.1416 = 10.77V