Autor Tema: Necesito retrasar un pulso y no logro hacerlo  (Leído 6315 veces)

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

Desconectado pablete

  • PIC10
  • *
  • Mensajes: 36
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #15 en: 07 de Febrero de 2014, 16:18:52 »
Hola Merlinz, gracias por la sugerencia.
Te comento que este es un cdi, el cual no necesita Dwel para cargar la bobina. Yo estoy trabajando con el tiempo para hacer los retrasos, asi que el retraso es proporcional al tiempo.
Si revisare el tema del disparo, usando como dices los timers para no usar delays. Tal vez sea eso lo que me esta generando ese retraso indeseado.
Sigo con las pruebas.
Saludos

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #16 en: 07 de Febrero de 2014, 17:57:17 »
Piensa que sí haces un delay_us(t), son microsegundos no ticks, en todo caso usa delay_cycles(t)
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #17 en: 08 de Febrero de 2014, 09:27:10 »
pues mas facil aun, solo necesitas un timer para el disparo te ahorras todo el tema del dwell.

Desconectado pablete

  • PIC10
  • *
  • Mensajes: 36
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #18 en: 10 de Febrero de 2014, 14:51:48 »
Hola amigos,
Sigo teniendo problemas. No encuentro donde esta el error. Voy a ser lo mas explicito posible:
El motor tiene el sensor de disparo unos 20º antes del pms. Yo quiero lograr que el avance sea antes de 20º, por ejemplo, 30º.
Para ello, lo que hago es: Cuando se produce la interrupcion externa, miro el tiempo del timer1. Con eso, saco la frecuencia para usarla en el calculo del retraso de la chispa. Ese calculo es: esperar casi una vuelta completa y disparar la chispa unos 10 grados antes que se produzca la nueva interrupcion, que en ese caso seria 30º antes del pms.
Por ejemplo: a 6000 rpm, el tiempo en en dar una vuelta es 10000 us. Entonces la ecuacion de retraso calcula 9150 us: 9150/10000*360= aprox 30 grados. Tiene que esperar 9150 us para producir la chispa a 30 grados
 EN la teoria, todo bien.
En la practica, no se mantiene a 30º, sino que al acelerar el motor atrasa. Dentro de la interrupcion, hago el calculo del valor "retaso". Ese valor lo uso en el main para generar la chispa:

WHILE (TRUE)
   {
 
     output_high(PIN_A0);
     delay_us(100);
     output_low (PIN_A0);
     
     while(get_timer1()>retraso);
   }
Yo creo que mi problema esta en el momento de esperar ese retraso.
Espero que me ayuden a encontrar el problema porque yo se poco de programacion, y el que me ayuda sabe programar C pero no tiene mucha experiencia en PIC. Practicamente estamos aprendiendo con este proyecto.
Saludos y gracias

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #19 en: 10 de Febrero de 2014, 15:50:34 »
Para medir frecuencia necesitás medir el intervalo de tiempo entre dos instantes. Me parece que en tu caso sería entre dos interrupciones del RB0. Por otro lado necesitás generar el retraso. Se te va a complicar realizar la medición de la frecuencia y generar el retraso del disparo utilizando el mísmo Timer.
 
Tampoco veo el código que realiza el cálculo de la variable "retraso".

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 MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #20 en: 10 de Febrero de 2014, 16:29:44 »
Por un lado necesitas medir cuanto mide cada grado, para ello si solo tiene un sensor que te indica 20º pues debes capturar el tiempo en 2 vueltas, entonces tienes el tiempo de 360º, lo divides entre 360 y tienes cuanto vale cada grado, como quieres llegar al 30BTDC pues tendrias que hacer el disparo a 350º despues de cada interrupcion, para ello multiplicas el nº por 350 y activas el timer para que dure esa secuencia.

Otra forma mas sencilla es si puedes poner el sensor de alguna forma en 30BTDC o 40BTDC tienes la ventaja de no tener que activar la chispa en la siguiente vuelta.

Desconectado pablete

  • PIC10
  • *
  • Mensajes: 36
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #21 en: 10 de Febrero de 2014, 17:21:15 »
gracias merlinz,
Basicamente mido asi, como tu dices:

IF (f > 133){
         x=46;
         }
      ELSE {
         x=35+((f-33)/10);           
           }
     }
     aux1=((f-33)/5)+x;
      }
  else{
  aux1=20;
  }
   retraso = (t/360)*(380-aux1);     
}
donde aux es una variable que depende de la frecuencia, ya que el avance es variable.
Lo de mover el sensor, seria lo ideal, pero en estas motos es imposible moverlo.

"endrias que hacer el disparo a 350º despues de cada interrupcion, para ello multiplicas el nº por 350 y activas el timer para que dure esa secuencia."

Ahi es donde creo que tengo el problema. No se bien como hacer para que el disparo sea a 350 despues de cada interrupcion, o como activar el timer. Me puedes dar una pista?

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #22 en: 10 de Febrero de 2014, 17:37:04 »
un timer de 16 bits se desborda (produce interrupcion) al llegar a 0xFFFF (65535 al pasar al 0).

Ahora por un lado necesitas configurar el timer de tal forma que a las RPM que sea (tanto en bajas como en altas) te sirva, con su preescaler correspondiente. Si haciendo calculos decimos que por ejemplo 350º equivalen a 34000 ciclos del timer entonces tendrias que restar simplemente 65535-34000 y con el resultado hacer un set_timer(). Esperas a la interrupcion del timer, y dentro de ella activas el disparo de la chispa.

Desconectado pablete

  • PIC10
  • *
  • Mensajes: 36
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #23 en: 13 de Febrero de 2014, 00:54:36 »
Estuve probando hacer lo siguiente:

Con la interrupcion externa, habilito el timer0 con prescaler 1 y el timer cargado en 156 (que me da un desborde cada 1us)
Entonces, por ejemplo, si se que la vuelta dura 30000us, coloco un contador dentro de la interrupcion del timer0 para que cuando llegue a 28000 haga el disparo
#int_RTCC
void retraso()
{
    flag++;
   
     if(flag>=(28000)){
     output_high(PIN_A0);
     delay_us(100);
     output_low(PIN_A0);
     flag=0;
   
     disable_interrupts(INT_RTCC);
    }
}
Y desactivo el timer para que no haga pulsos demas
Eso haria que la chispa se produzca antes. Eso en la teoria. En la practica, no va.

Donde esta el error?
gracias



Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #24 en: 13 de Febrero de 2014, 03:45:06 »
Lo primero que debes hacer es habilitar la interrupción externa
cuando llega el pulso, empezar a contar con el timer una vuelva entera
adapta el preescaler para no tener que contar los desbordes en exceso ya que saturaras el pic con tanto desborde
Después de dar la vuelva, lee el valor del timer...
con el primer timer sólo te encargaras de leer el tiempo de una vuelta  así te asegurarás la relación tiempo con las rpm, a más rpm menor el tiempo entre pulso y pulso
con un cristal de 20mhz, preescaler a 2, y timer a 8 bits tendrás un desborde de 204.8us
30000/204,8=146,5 desbordes, ósea 146 acumulado en tú variable flag y 127en el valor del timer
pues bien, dentro de la función del timer, poner una condición íf, cuando la variable llegué al 85% del máximo, que active una bandera y en la función principal incluir el encendido,retardo y apagado del pulso de salida
recuerda que anteriormente debes de leer el tiempo que duró con otro de los timer

se me olvido comentarte que nunca metas delays dentro de ninguna interrupción
« Última modificación: 13 de Febrero de 2014, 03:59:29 por ppyote »
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #25 en: 13 de Febrero de 2014, 04:18:40 »
Estaba pensando que sí usas está metodología a la hora de trabajar, casi que sería mejor que al preescaler lo pusieras en 1
así tendrías
30000us/104,4us=292,96 desbordes, ósea más precisión

también podrías aumentar la frecuencia, por ejemplo, 24,27,32,48mhz
yo he trabajado con un 16F628a a 24mhz sin problemas
« Última modificación: 13 de Febrero de 2014, 04:34:06 por ppyote »
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado pablete

  • PIC10
  • *
  • Mensajes: 36
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #26 en: 13 de Febrero de 2014, 14:30:51 »
gracias ppyote.
Estuve probando la metodologia de merlinz. Cargar el timer0 para que desborde segun el retraso que quiero hacer.
Ya las primeras pruebas fueron buenas. Ahora tengo que afinar la ecuacion que me carga el timer0 para que sea precisa.
Si no lo logro con esto, intentaré usar una tabla de valores segun las rpm. He visto que muchos hacen asi. Por algo será
Saludos y a seguir probando!


 

anything