Autor Tema: Pequeña putada del TMR0  (Leído 5004 veces)

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

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Pequeña putada del TMR0
« Respuesta #15 en: 04 de Septiembre de 2011, 13:36:41 »
Hola.

Utilicé la USART porque no disponía de muchos pines y me pareció sencillo y rápido. Nada más.

El algorítmo lo que hace básicamente es llevar 3 contadores. Cada contador está asociado a una fase distinta. Cuando se detecta un cambio de flanco en una de las 3 entradas que sensan los cruces por cero, el algoritmo setea la salida para activar la fase asociada y carga el valor de su contador.

El TIMER2 es el que se utiliza para contabilizar el tiempo transcurrido, y se incrementa cada FOSC/4, es decir que tiene un pre y post scaler 1:1.O lo que es lo mísmo, incrementa por cada ciclo de ejecución.

En cada iteración, se calcula la diferencia de tiempo entre el valor actual del TIMER2 y el de la iteración anterior. De esta manera obtenemos la  diferencia de tiempo(medida en ciclos de ejecución). Este valor se le resta a cada contador, hasta que el contador llega al mínimo, momento en el cual se pone a bajo la salida asociada.

Los valores de las cantidades de ciclos para cada porcentaje se calculan desde un par de tablas automáticamente utilizando el pre-compilador.

Cualquier duda consultame...

Saludos.
 






"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Pequeña putada del TMR0
« Respuesta #16 en: 06 de Septiembre de 2011, 06:06:00 »
Bueno Bruno ante todo gracias por el trabajo que te estas tomando.

Le he estado vueltas al programa y decir que es bastante complejo, lo de hacerlo con contadores independientes fue la primera opcion que baraje, pero si bien en variaciones de W de 10% e incluso de 5% iba bastante bien cuando me meti a la del 1% era mucho tiempo metido en interrupciones y por eso la desheche, no quiero decir que no sea buena solucion, pero me parecio mejor la de los tres TMRs.

Citar
El algorítmo lo que hace básicamente es llevar 3 contadores. Cada contador está asociado a una fase distinta. Cuando se detecta un cambio de flanco en una de las 3 entradas que sensan los cruces por cero, el algoritmo setea la salida para activar la fase asociada y carga el valor de su contador.

Aqui no entiendo muy bien, cuando se detecta cruce por 0 se activa la cuenta correspondiente a esa fase y transcurrido ese tiempo se setea ese triac, o lo estoy entendiendo mal?

Citar
En cada iteración, se calcula la diferencia de tiempo entre el valor actual del TIMER2 y el de la iteración anterior. De esta manera obtenemos la  diferencia de tiempo(medida en ciclos de ejecución). Este valor se le resta a cada contador, hasta que el contador llega al mínimo, momento en el cual se pone a bajo la salida asociada.

Y aqui es cuando se pondra a 1, decir que en los optos se puede activar por 0 y desactivar por 1, te refieres a esto?. Pero entonces al principio cuando haces.

Código: [Seleccionar]
bcf PHASE1OUT
bcf PHASE2OUT
bcf PHASE3OUT

habria que ponerlos a 1 no? para que los triacs estuvieran a 0.

Saludos.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Pequeña putada del TMR0
« Respuesta #17 en: 06 de Septiembre de 2011, 11:49:31 »
Bueno Bruno ante todo gracias por el trabajo que te estas tomando.

Le he estado vueltas al programa y decir que es bastante complejo, lo de hacerlo con contadores independientes fue la primera opcion que baraje, pero si bien en variaciones de W de 10% e incluso de 5% iba bastante bien cuando me meti a la del 1% era mucho tiempo metido en interrupciones y por eso la desheche, no quiero decir que no sea buena solucion, pero me parecio mejor la de los tres TMRs.

Citar
El algorítmo lo que hace básicamente es llevar 3 contadores. Cada contador está asociado a una fase distinta. Cuando se detecta un cambio de flanco en una de las 3 entradas que sensan los cruces por cero, el algoritmo setea la salida para activar la fase asociada y carga el valor de su contador.

Aqui no entiendo muy bien, cuando se detecta cruce por 0 se activa la cuenta correspondiente a esa fase y transcurrido ese tiempo se setea ese triac, o lo estoy entendiendo mal?

Hola.

Es justo al reves. Cuando se detecta el cruce por cero, se levanta la salida correspondiente del triac. Una vez que la cuenta pasa el minimo admitido, se pone a cero la salida. Obviamente es muy sencillo dar vuelta la logica si es lo que necesitas.

Citar
En cada iteración, se calcula la diferencia de tiempo entre el valor actual del TIMER2 y el de la iteración anterior. De esta manera obtenemos la  diferencia de tiempo(medida en ciclos de ejecución). Este valor se le resta a cada contador, hasta que el contador llega al mínimo, momento en el cual se pone a bajo la salida asociada.

Y aqui es cuando se pondra a 1, decir que en los optos se puede activar por 0 y desactivar por 1, te refieres a esto?. Pero entonces al principio cuando haces.

Código: [Seleccionar]
bcf PHASE1OUT
bcf PHASE2OUT
bcf PHASE3OUT

habria que ponerlos a 1 no? para que los triacs estuvieran a 0.

Saludos.

Fijate que eso está hecho trabajando en el banco 1. Es sólamente otra manera de configurar los TRIS de los pines independientemente en lugar de todo el puerto. Alli lo que hago entonces, es solo declarar esos pines como salidas.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Pequeña putada del TMR0
« Respuesta #18 en: 06 de Septiembre de 2011, 14:27:11 »
Citar
Es justo al reves. Cuando se detecta el cruce por cero, se levanta la salida correspondiente del triac. Una vez que la cuenta pasa el minimo admitido, se pone a cero la salida. Obviamente es muy sencillo dar vuelta la logica si es lo que necesitas.

De acuerdo, es por si habia algo que se me escapaba y metia la pata.


Citar
Fijate que eso está hecho trabajando en el banco 1. Es sólamente otra manera de configurar los TRIS de los pines independientemente en lugar de todo el puerto. Alli lo que hago entonces, es solo declarar esos pines como salidas.

Sobre esto nada que comentar, para no hacer mas el ridiculo.  :D :D



Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Pequeña putada del TMR0
« Respuesta #19 en: 06 de Septiembre de 2011, 22:48:52 »
No pasa nada!

Sacate todas las dudas! Fijate si te sirve!

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Pequeña putada del TMR0
« Respuesta #20 en: 14 de Septiembre de 2011, 06:14:14 »
Bueno despues de mucho leer sobre motores trifasicos, veo que las rampas de arranque suelen empezar del 30% para arriba incluso el 40% en algunas ocasiones, estas se refieren mas bien a motores pequeños o medianos, para motores grandes no encontre mucha informacion, pero de esto deduzco que deberian empezar no antes del 15% o el 10% como poco, que es precisamente donde tengo el problema de imprecision con el TMR0, y si empezaran antes creo que no tendria mucha importancia esos pocos us de desviacion, ya que al ser potencias bajas y la V ser baja no importaria que ahi fueran 2% o 2.5%, quiero decir que creo que me puedo permitir desviaciones de tiempo relativamente grandes.

Por tanto creo que voy a usar el sistema de los tres TMRs con interrupcion, porque es mas sencillo y me deja mucho tiempo para las otras muchas cosas que tengo que hacer, leer ADCs (de momento son 4 pero seguramente acabaran siendo mas) leer pulsadores de parametrizacion (5 o 6), manejar displays, leer entradas del PLC (dos de 1 o 0 y otra RS485) contactor de baypass etc.

Bruno perdon por las molestias que te he hecho tomar y gracias por todo, pero con tu programa se me hace mas complicado hacer todo esto.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Pequeña putada del TMR0
« Respuesta #21 en: 14 de Septiembre de 2011, 10:52:16 »
No pasa nada hombre. Que no te iba a cobrar tampoco, eh! :)

Éxitos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.