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

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

Desconectado pablete

  • PIC10
  • *
  • Mensajes: 36
Necesito retrasar un pulso y no logro hacerlo
« en: 06 de Febrero de 2014, 01:22:50 »
Hola Amigos,
Estoy en un proyecto con un pic 16f628a. El mismo consiste en, mediante una interrupcion externa por RB0, medir el tiempo de un tren de pulsos, y generar una salida con otro pulso, que tenga un retraso menor, igual o mayor a los pulsos de entrada. No se si me explico bien. O sea, por cada pulso, hacer un retraso y largar el pulso justo antes que entre otro pulso por rb0.
No logro generar ese retraso. No tengo mucha experiencia con pic, por eso es que estoy confundido. Ya lei varios ejemplos pero cada vez me confundo mas.
Estoy programando en CCS.
Cualquier idea y ejemplos serán bienvenidos.
Muchas gracias

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #1 en: 06 de Febrero de 2014, 07:41:19 »
El principal es saber ... Que duración tiene el pulso más pequeño que puedas tener?
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado pablete

  • PIC10
  • *
  • Mensajes: 36
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #2 en: 06 de Febrero de 2014, 12:47:15 »
El principal es saber ... Que duración tiene el pulso más pequeño que puedas tener?


El rango de frecuencia de pulsos va desde los 10 Hz hasta los 300 Hz.
Los pulsos duran entre aprox 5 uS

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #3 en: 06 de Febrero de 2014, 13:17:11 »
podrias poner tu código para ayudarte sobre ese mismo
"Nada es imposible, no si puedes imaginarlo"

Desconectado pablete

  • PIC10
  • *
  • Mensajes: 36
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #4 en: 06 de Febrero de 2014, 14:06:25 »
podrias poner tu código para ayudarte sobre ese mismo

La verdad no tengo mucho codigo. Ando buscando ideas o sugerencias. Lo que he estado probando fue guardar el valor del timer1 cuando se produce la interrupcion externa, hacer un delay en base a ese tiempo y generar el pulso. El tema es que
necesito un delay igual o mayor al tiempo entre los pulsos de entrada.


#INT_ext                             
void IntRB0(VOID)
{
   t=get_timer1();
   
 set_timer1(0);
   
   delay_us(t); 
   output_high (PIN_A0);
   delay_us(200);
   output_low (PIN_A0);
   
   
 
}

 
   
   
void main(VOID)
{
   set_tris_b (0b00000001);     //portb como salida menos RB0
   set_tris_a (0b00000101);     //RA0, RA1 y RA2 como salida, el resto entradas
   
   
   disable_interrupts (global);    // Inicializo el Micro y ...
   disable_interrupts (INT_timer1);   // deshabilitando todo lo no necesario ...
   
   
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
   setup_timer_2(T2_DISABLED,0,1);
 
  // setup_comparator (NC_NC_NC_NC);
   enable_interrupts (INT_ext);    // Habilito las interrupciones necesarias
   ext_INT_edge (0, L_TO_H);     //configuracion:interrupcion cuando señal baja
   enable_interrupts (global);
 
     set_timer1 (0);
   
 

   WHILE (TRUE)
   {
un codigo especifico
  }   
}

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #5 en: 06 de Febrero de 2014, 15:04:29 »
por lo que entiendo quieres generar un pulso que sea de el mismo periodo o mayor que tu pulso de entrada
para esto podrías detectar el flanco de subida con tu interrupción externa y en ese momento encender tu salida, y configurar tu interrupción para que ahora interrumpa en flanco de bajada.
cuando tu interrupción vuelva a ocurrir en ese momento sabes que tu pulso de entrada termino y en ese momento pones un delay para apagar tu salida, si tu delay es 0 entonces tus periodos serán iguales, si incrementas tu delay tendras una salida de mayor tiempo que la entrada

espero haberme explicado
"Nada es imposible, no si puedes imaginarlo"

Desconectado pablete

  • PIC10
  • *
  • Mensajes: 36
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #6 en: 06 de Febrero de 2014, 15:35:15 »
Si, es una buena idea. Tambien el pulso deberia hacerse antes del pulso de entrada. O sea que deberia producirse antes, durante y despues del pulso de entrada. Debe "fluctuar" un pulso sobre  el pulso de entrada.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #7 en: 06 de Febrero de 2014, 15:59:28 »
haa, ya entiendo tambien necesitas un defase.

algo similar, en cuanto recibas el flanco de subida inicias un timer para dar el tiempo de defasamiento, cuando el contador se cumpla, entonces inicias tu señal de salida, en cuanto recibas el flanco de bajada entonces el tiempo para apagar tu señal de salida será el tiempo de tu defase mas el tiempo que quieras agregar para agrandar el pulso

espero sea lo que necesitas y haberme explicado, si necesitas ayuda con el código lo puedes ir posteando y lo vamos revisando para que haga lo que deseas

Saludos
"Nada es imposible, no si puedes imaginarlo"

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #8 en: 06 de Febrero de 2014, 16:46:18 »
Porque no explicas mejor lo que quieres obtener en la salida, a ver si podemos ayudar mas ??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #9 en: 06 de Febrero de 2014, 19:15:35 »
entre pulso y pulso, el tiempo de la salida debe ser el mismo pero desfasado?

Tienes que pensar una cosa, sí el tren de pulsos saliente lo desfasas mucho tendrás problemas, de igual forma sí los pulsos salientes los alargas mucho

puedes poner uno de los timer para obtener tiempos de duración, y otro de los timer para reproducirlo haciendo una cuenta, cuando empieza el pulso, leer el valor del timer, cuando acabe el pulso, obtener la diferencia de ticks y guardarlo en un array... Cuando vuelva a llegar otro pulso, obtener la diferencia de nuevo... Así continuamente... Ahora es cuando viene el problema, y no es otra cosa que sí alargas mucho el desfase enseguida se te acabara el array...
Sería continuo el tren de pulsos?
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado pablete

  • PIC10
  • *
  • Mensajes: 36
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #10 en: 06 de Febrero de 2014, 22:25:16 »
es para un encendido electronico de moto. Recibe los pulsos del sensor y retrasa la salida para darle avance la chispa.
Ya lo tengo funcionando pero encuentro un problema. A medida que suben las rpm, el motor se atrasa, y deberia adelantarse o mantenerse fijo.
He probado haciendo que cuando se produzca la interrupcion, haga la señal de la chispa y el resultado es que me lo da casi 25 grados despues de la entrada de señal del sensor, cuando deberia hacerlo instantaneamente. si acelero un poco, se retrasa un poco mas. Llegue a la conclusion que se debe al tiempo que usa el pic en los calculos. Deberia usar una ecuacion para contrarestar ese tiempo que emplea el pic. Alguien me puede decir si estoy en lo cierto?
Saludos y gracias

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #11 en: 06 de Febrero de 2014, 23:04:49 »
Cuantos pulsos por segundo recibes ??
Que cristal utilizas en el PIC ??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pablete

  • PIC10
  • *
  • Mensajes: 36
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #12 en: 06 de Febrero de 2014, 23:43:14 »
Cuantos pulsos por segundo recibes ??
Que cristal utilizas en el PIC ??


trabaja entre 10 y 300 hz (entre 10 y 300 pulsos por segundo)
Usa el cristal interno, 4 mhz

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #13 en: 07 de Febrero de 2014, 00:11:09 »
Cual es la máxima frecuencia de oscilación de ese PIC ??
Deberías llevarlo al máximo de velocidad, así los cálculos se harán en menos tiempo aun, y seras mucho mas preciso con los tiempos... ;-) ;-)
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Necesito retrasar un pulso y no logro hacerlo
« Respuesta #14 en: 07 de Febrero de 2014, 08:09:27 »
Debes hacerlo de otra forma, la forma que estas diseñando el codigo no es la correcta. Piensa que a 1000RPM un grado son 160us, sin embargo a 5000RPM tienes 33us por grado, asi que con que falles en unos pocos us ya estas teniendo mucho error de avance.

Lo primero es saber que posicion te indica la señal del sensor, normalmente suele ser PMS o bien alguna otra posicion APMS, sabiendo esto tienes que calcular cuando quieres que sea efectivo la chispa, tiene que ser un calculo con la mayor precision posible para tener poco margen de error, una vez tienes esto para calcular el DWELL simplemente le restas a el calculo los mS necesarios para que la bobina se cargue, lo importante es la descarga puesto que si fallas unos pocos uS en el DWELL no tienes problema alguno, pero en el momento de la chispa debes ser lo mas preciso posible, alrededor de 1º +-.

Para ello utiliza mas timers, por ejemplo cada vez que recibes el pulso haces ambos calculos (chispa y dwell) y pones un timer para ON y otro para OFF (olvidate de poner delays y cosas asi...). Para hacer el avance lo mismo, tienes que poner una tabla (array) que segun que RPMs haga mas avance/retraso incluso tambien se utiliza la carga (acelerador) para hacer el calculo tanto como asi: