Autor Tema: necesito retrasar un pulso  (Leído 5493 veces)

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

Desconectado jpccalvo

  • PIC10
  • *
  • Mensajes: 26
necesito retrasar un pulso
« en: 28 de Junio de 2016, 00:32:14 »
Hola me presento soy Pablo y hace poco que he empezando en el mundo de la programación de pic elegí  la opción de NIPLE estoy tratando de realizar un programa sencillo en un principio para ir en un futuro mejorando la idea es de medir un pulso por una entrada del pic y luego activar una salida con un cierto retardo de tiempo dependiendo de la frecuencia entrante  este tema lo he leído en el foro y me anime a registrarme y ver si alguien me puede ayudar a hacerlo con niple dejo el enlace del tema   http://www.todopic.com.ar/foros/index.php?topic=42230.0
no se programar en c o asm .
Entiendo que el pic puede realizar una operación a la vez , pero a alta velocidad dependiendo del cristal que se use.
Ej : si el cristal es de 4M esto creo que se divide por 4 y daría un resultado de 1us por operación.
Por lo que he leído la forma de hacerlo seria configurando una entrada para que lea un flanco ascendente proveniente del captor o sensor  y activar el conteo con un timer y luego con la interrupción del timer activar la salida que maneja el tiristor .
Hay mucha que arreglar seguramente pero quiero saber si esta bien planteado el problema .
Si me equivoco en algo por favor  avisen para arreglarlo desde ya muchas gracias espero su ayuda.   
« Última modificación: 28 de Junio de 2016, 13:13:47 por jpccalvo »

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re:necesito retrasar un pulso
« Respuesta #1 en: 29 de Junio de 2016, 00:24:42 »
Hola jpccalvo, en un primer "vistazo" lo planteado puede ser correcto y posible, pero hay muchos factores que no comentas, por ejemplo el rango de la frecuencia de la señal de entrada, porque no es lo mismo que la señal de entrada posea 50Hz a que sea de 500KHz.

Por otro lado estaría el retardo del pulso de salida. Ya que si el periodo de este retardo es mayor al periodo de un ciclo de la señal de entrada (1 / frecuencia), el programa se complicaría bastante más.

También veo que nombraste un "tiristor", por lo que interpreto que estás queriendo implementar un control de fase por medio del tiristor, si esto es así, el trabajo es muy posible y se plantea de una forma determinada, pero de no ser así, sería interesante que comentaras el uso que le darás a la aplicación, para poder interpretar mejor lo que deseas hacer, y quien dice, hasta asesorarte mejor.

Por todo esto, sería interesante que amplíes un poco más la idea.

Bienvenido al foro. Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado jpccalvo

  • PIC10
  • *
  • Mensajes: 26
Re:necesito retrasar un pulso
« Respuesta #2 en: 29 de Junio de 2016, 16:11:09 »
Gracias Carlos por responder intentare explicar de la mejor forma el proyecto la idea es realizar un cdi para motos donde el pic se encargaría de controlar la curva de avance de la chispa .Este tema abarca muchas ramas de aplicación debido a la gran cantidad de marcas , modelos y tipos de encendidos que se utilizan para diferentes motos etc. bueno pero me centrare en uno básico y sencillo por ejemplo el de un motor 4 tiempos con un sensor de disparo un rango de 0 a 10000RPM el cual trabaja con un avance de encendido de entre 10º a 30º como para diseñar el programa y probarlo.

La frecuencia en que trabajara el pic como para empezar es de 4Mhz esto dividido 4  nos queda 1Mhz osea que podrá realizar una instrucción
cada 1us si no me equivoco
La frecuencia en que la entrada del pic recibirá los pulsos ira de entre 5hz a 170hz  .Como saque esta cuenta: si 1hz son 60 pulso por minuto. si divido las rpm por 60 me dará la frecuencia de trabajo en hz 10200:60  170hz .

BUENO AHORA VIENE LO LINDO:

Es el factor tiempo en un principio les escribí  de retrasar el pulso de entrada explico porque (espero no aburrir tratando de explicar) el pulso se produce 30º antes del PMS dado que así esta ubicado el sensor  y a bajas rpm el dispara tiene que ser a los 10º +- teoría aparte
por esta razón se debe retardar el disparo 20º.
partiendo de la base que a determinadas rpm tarda cierto tiempo entre pulso y pulso .EJ a 1116 rpm tarda 149 us por grado ose 149x360 igual a 53640 us en dar una vuelta . Pero a medida que las rpm o frecuencia crece decrece el tiempo entre pulso y pulso
.
Ej: Si yo hiciera un programa en donde el pulso se retardara 2980us para que la chispa salte 10º antes del PMS (a 1000 rpm) se produciría a esos grados en teoría aclaro( falta calcular que tiempo consume las rutinas etc).Pero a medida que aumente las rpm la chispa se produce cada vez mas atrasada por lo que va disminuyendo el tiempo entre pulso y pulso.
Pero lo que necesito es el efecto contrario que avance
Estuve pensando y la solución seria que a determinadas rpm atrase x tiempo.
Investigando he visto que utilizan tablas de comparación donde guardan los valores y a qui viene mi gran problema no se como se utilizan .
 Desde ya muchas gracias espero no pasarme en las explicaciones SALUDOS

 
 

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re:necesito retrasar un pulso
« Respuesta #3 en: 29 de Junio de 2016, 21:20:28 »
Hola jpccalvo, pues bueno, no hacía falta tanta explicación para mí, por que también soy motoquero (de corazón) y manejo bastante la mecánica, de hecho, en algún momento pensé en construir lo que tienes pensado, pero como no le hubiese dado mucha utilidad, pues en la nada a quedado.

Por lo tanto la explicación es válida para el restos de los foreros, de mi parte entiendo perfectamente ya sea la explicación, como el principio de "avance de encendido" de los motores.

Con respecto a las tablas de las cuales hablaste, pes tiene sus ventajas y sus contras.

La principal ventaja es que implementarlas es sencillas y modificarles sus valores a gusto también. Aparte el micro las ejecuta muy rápidamente.

La contra, solo podremos guardar 250 bytes, o ser solo se pueden guardar 250 variables de entre 0 y 255 (1 byte). Si quisiéramos variables de 2 bytes o sea de entre 0 y 65535 la cantidad de valores se reduce a la mitad, o sea solo 125 variables, y así sucesivamente. Se pueden implementar tablas mayores, pero ya es mucho más complicado y por supuesto más lento de ejecutar.

Por otro lado, el micro debe de realizar 2 funciones principales, generar el retardo y realizar la medición de RPM del motor, y esos cálculos lo debe de hacer en todas las vueltas que ejecute el motor.

Pero se posee la ventaja de que si el motor es de 4 tiempos y 1 cilindro, tenemos el tiempo de 2 revoluciones para calcular todo lo deseado. Por lo tanto primeramente deberías de plantearte que tipo de motor usarás para las pruebas iniciales, más luego ir perfeccionando el proyecto para que pueda ejecutar cualquier motor.



Pero vallamos un poco a las cuentas:

Supongamos un motor que a relentí posea 500 RPM y necesite un avance de solo 5°. Sabiendo que el pulso de conteo lo tenemos a 30°, necesitamos una retardo de encendido de 30 - 5 = 25°, a 500 RPM 25° serían:

500 / 60 = 8.33 Hz ------> 1 / (8.33 x 360) = 333.5useg x 25 = 8.34 mseg

Ahora, mismo motor pero a 10000 RPM con un avance de encendido de 25°, lo que nos significa un retardo de disparo de 30 - 25 = 5°

10000 / 60 = 166.6 Hz ------> 1 / (166.6 x 360) = 16.7 useg x 5 = 83.5 useg.

Como verás entre el primer caso y el segundo hay una gran diferencia de tiempo, 8340 useg contra solo 83.5 useg.

Con 83 useg solo tienes para ejecutar 83 instrucciones si el micro posee una frecuencia de cristal de 4 MHz. Por lo que yo de entrada usaría un cristal de 20 MHz (así y todo no se si alcanzaría).



Lo primero que deberías de hacer es asegurarte cual es el avance de encendido máximo que necesitarás ejecutar, porque cuanto mayor sea este avance, menos tiempo de ejecución tienes.

Por otro lado, de usar tablas, debes de verificar cuantos valores como mínimo necesitas implementar, ya que estas poseen limitaciones.

Espero respuestas.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado jpccalvo

  • PIC10
  • *
  • Mensajes: 26
Re:necesito retrasar un pulso
« Respuesta #4 en: 30 de Junio de 2016, 00:28:15 »
Me alegro  por tu repuesta pensé  que era el único en estos días planteado este teme y al ver que hablamos un mismo idioma mejor .
Te cuento un poco llevo varios años como mecánico especialmente en la parte electrónica de motocicletas y se también que con poca plata se puede remplazar un cdi en estos días pero me apasiona la idea de hacerlo uno mismo y  a gusto.

Vamos a los hechos : con respecto a lo del cristal de 20Mhz  si es buena idea dependiendo del pic que usemos tratando de que no sea muy caro para que este al alcance de todos he visto que usan el 16f628a por ej.

  Con respecto con que si el avance a ejecutar es mejor si es mayor el sensor se puede ubicar para que reciba a 30º como a 50º simplemente modificando la levar que es la que realiza el disparo me refiero a la saliente que lleva el volante o plato imantado.
  con respecto a esa leva determina la duración del pulso mientra mas larga mas largo el pulso y vise versa también bale aclarar que el sensor produce un pulso + al principio  y - al salir de la leva  dependiendo de come este conectado  el mismo.

  Otro tema es que debe producir una chispa por giro esto es para facilitar el arranque porque si esperamos los dos siclos que le motor ocupa para escape y llenado justo podría perder la chispa en escape y debería dar un giro mas para que coincida con el de compresión y dificultaría el arranque 

con respecto a las tablas mencionas que son limitadas pero empecemos con cargar diez valores por ejemplo que de 0a 1000 rpm retarde x tiempo  de 1000 a 2000  x tiempo osea de 1000 en mil se que en en la practica no es así pero coma para empezar creo que sirve.

  A qui vienen las preguntas que valor es el que hay que cargar (perdón por a ignorancia pero el que no pregunta no aprende ja ja) seria el tiempo de retardo me supongo el cual debería estar en una misma unidad de tiempo ej: todo en us o ms .?

  Otra pregunta así ya entramos mas de lleno a la practica como seria la rutina para ir logrando que por cada pulso genere otro con retado y a la vez consulte la tabla para saber a que rpm esta trabajando también tiene que ir censando ese pulso o me equivoco ?

  También he visto que estos valores lo cargan en la memoria eepron del pic y los consultan desde la memoria seria mas o menos lo mismo o no ? aunque veo que la memoria eepron del 628 tiene 128 bytes creo .

  Bueno creo que estamos en condiciones de empezar a hacer la rutina para ver que sale y como dice el dicho los bultos se acomodarán en el camino o algo así ja ja.
  Veo que puedo ir haciendo. con Niple 6.1.

  Te dejo un enlace donde han hecho un encendido con pic lo que no logro descifrar es como configuran los timer para lograrlo   www.transnetmic. seguramente te la as topado a esta página

desde ya muchas gracias espero  repuestas  y a ver si alguno mas del foro se suma .
   
 
« Última modificación: 30 de Junio de 2016, 01:22:50 por jpccalvo »

Desconectado lucegiar2005

  • PIC24F
  • *****
  • Mensajes: 504
Re:necesito retrasar un pulso
« Respuesta #5 en: 30 de Junio de 2016, 18:45:09 »
No conosco mucho del tema pero intentaré dar mi opinión por si sirve. Creo que el problema se debe dividir en dos bloques principales que tienen como gran variable al sistema de indicación de RPM, debiendo este ser muy rapido para que el pic tenga esta información con tiempo suficiente para actuar, ya que a bajas revoluciones por contadores será largo el tiempo entre pulso y pulso, desconosco de motos pero quizá un circuito externo que entregue tensión proporsional a las RPM sería buena referencia mediante un A/D que tardará unos microsegundos en informar al chip y este en hacer lo necesario. Si mi idea no es coherente me disculpan por favor, no conosco, como ya dije, el tema a fondo. Un abrazo
- Santiago -

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re:necesito retrasar un pulso
« Respuesta #6 en: 30 de Junio de 2016, 21:52:58 »
Hola lucegiar2005, tienes toda la razón y tu opinión es muy acertada, y aunque el uso de un convertidor frecuencia/tensión con el A/D no sería lo más practico, en este caso no hay que descartar la posibilidad de su uso.

Gracias por la opinión, y acá todas son bienvenidas, ya sean buenas o no.



jpccalvo, lo que comentas de una tabla de 10 valor y un simple programa sería lo optimo, pero no es tan sencillo.

Ejemplo, usamos una tabla de 10 valores, un valor por cada 1000 RPM del motor.

Motor a 1100 RPM, usamos el valor 2 de la tabla que para este rango suponemos genera un avance de encendido de solo 5°, o sea disparamos 25° después de la señal.

1100 / 60 = 18.33 Hz ------> 1 / (18.33 x 360) = 151.5 useg x 25 = 3787.5 useg

O sea que supongamos que en la tabla tenemos el numero 3787 guardado en la posición 2 que corresponde desde los 1001 RPM hasta las 2000 RPM.

Ahora calculemos la demora obtenida a 2000 RPM con este valor de 3787 guardado en la posición 2 de la tabla.

2000 / 60 = 33.33 Hz ------> 1 / (33.33 x 360) = 83.3 useg

O sea que a 2000 RPM el motor gira a una tasa de 83.3 useg por cada grado, el valor 2 de la tabla era 3787 que se correspondía con los 5° de avance para las 1100 RPM, pero que pasa?

3787 useg / 83.3 useg = 45.46°

Y si partimos que la señal de disparo se generaba 30° antes de punto muerto superior, pues 30 - 45.46° = -15.46°

Verás que el valor 2 de la tabla iba perfecto para las 1100 RPM, pero a las 2000 RPM el encendido del motor esta atrasado 15°

Y este es el gran problemas con las tablas y valores fijos pre determiandos, se necesitan una cantidad grande para que el "avance" aparente progresivo.

Con respecto a la página, no hubo manera que la pueda ver, por ahí conseguíamos data para ayudarnos.

Y con respecto a la memoria EEPRON de los PIC, pues te diría que es casi imposible su uso, ya que la misma es relativamente lenta en su lectura. Aparte las tablas en los PIC si o si se almacena en la memoria de programa, como parte del mismo.

Por otro lado, al desear usar niple, se te presentaría en este caso, otro enorme problema, y es que tanto basic, C, Niple, etc, cualquier programa que no sea el asembler, tienen grandes problemas en el control de tiempos, por lo que no son muy exactos y aparte los programas generados son mucho más lentos y largos al momento de la ejecución, y como acá el tiempo es un problema, pues te diría que Niple está muy lejos de ser la mejor opción para esta aplicación.

Lamento las malas noticias de hoy.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado jpccalvo

  • PIC10
  • *
  • Mensajes: 26
Re:necesito retrasar un pulso
« Respuesta #7 en: 30 de Junio de 2016, 23:36:19 »
  Entiendo Carlos las limitaciones de Niple en esta aplicación solo que era lo mas practico como para empezar a programar tendría que ponerme a ver como se programa en asm pero lo veo muy difícil de aprender pero con entusiasmo y dedicación todo se puede aprender .

  Te molesto un poco mas y no quiero abusar de tu buena disposición pero pégale un vistoso a este archivo que esta en asm es de un programa para un cdi con pic  para una xr 400 para ver como esta planteado .

 
* cdi x400 mod.asm
(25.7 kB - descargado 197 veces)
   

lo saque de la pagina que te mencione  http://www.transmic.net/en/xr400.htm

 Muchas gracias saludos . Pablo

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re:necesito retrasar un pulso
« Respuesta #8 en: 01 de Julio de 2016, 10:13:51 »
Hola jpccalvo, hoy pude abrir la página que mencionas, más tarde miraré el programa que posteaste, pero desde ya te comento que funciona por medio de tablas.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado lucegiar2005

  • PIC24F
  • *****
  • Mensajes: 504
Re:necesito retrasar un pulso
« Respuesta #9 en: 01 de Julio de 2016, 13:27:22 »
Podrias poner un esquema del circuito electrico implicado en la nececidad? Me gustaría ver modo captor y de disparo de chispa para tratar de implementar algo. Niple es bastante más de lo que aparenta, si vas por modulo caés en muchas limitaciones para programas de tiempo exigente, pero se puede hacer uso de otrs opciones dentro del mismo. Mi ignorancia en lo electrico no me permite una visión clara de posibilidades. Seguramente haré agua, pero por ahí me sale un tiro acertado y ayudo en algo.  8) 8)
- Santiago -

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re:necesito retrasar un pulso
« Respuesta #10 en: 01 de Julio de 2016, 14:48:13 »
Hola lucegiar2005, el funcionamiento del PIC es muy sencillo, por un pin del mismo recibe un pulso, ya sea alto o bajo, el cual proviene del captor. Y después de calcular la demora necesaria, por otro pin envía otro pulso, ya sea bajo o alto.

El circuito en si es bastante complejo, porque al ser sistemas CDI (Capacitor Discharge Ignition), la descarga de alta tensión se produce mediante la descarga de un condensador por medio del primario de la bobina de alta tensión.

Este condensador se carga con tensiones de entre 250 y 400 voltios, por lo que se necesita de un inversor para conseguir esos niveles.
El resto es adaptación de niveles de señales y poco más.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado lucegiar2005

  • PIC24F
  • *****
  • Mensajes: 504
Re:necesito retrasar un pulso
« Respuesta #11 en: 01 de Julio de 2016, 19:17:20 »
No veo tan sencillo el funcionamiento del pic, no basta con recibir un pulso para que defina cuanto modifica, debe determinar las RPM basado en al menos 2 pulsos y midiendo su diferencia en tiempos, vale decir que habran operaciones matemáticas intermedias y sus resoluciones en el accionar. Tambien dependerá de cuantos pulsos se generen por vuelta de cigüeñal, lo que inside en el calculo de las RPM que esta desarrollando. Entiendo lo que me dices sobre un CDI y su funcionamiento, lo que me interesa es más la parte del captor y que disparará al CDI, pues todo influirá. Tambien sería interesante conocer el margen de error aceptable en el momento del disparo, 20º +-X por ejemplo, ello permite determinar en que valores se modifica el punto de disparo y la cantidad de valores o intervalos a generar para una correcta activación. Un abrazo
- Santiago -

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re:necesito retrasar un pulso
« Respuesta #12 en: 01 de Julio de 2016, 20:14:47 »
Hola lucegiar2005, yo dije que el funcionamiento es sencillo, no estaba hablando del programa  :mrgreen:

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado jpccalvo

  • PIC10
  • *
  • Mensajes: 26
Re:necesito retrasar un pulso
« Respuesta #13 en: 01 de Julio de 2016, 23:28:18 »
  Gracias a la gente linda que participa de este foro por las respuestas, les pego una dirección donde sale un esquema de un cdi implementado con pic para que vean el funcionamiento. http://www.transmic.net/16628_v7/sch_cdi16628_v79.pdf

  Para ver si entre todos podemos lograr algo   :-/ ((:-))

 

Desconectado lucegiar2005

  • PIC24F
  • *****
  • Mensajes: 504
Re:necesito retrasar un pulso
« Respuesta #14 en: 02 de Julio de 2016, 11:50:36 »
Ok, no es que  haya mal entendido, sino que le ponía un punto en claro a jpccalvo para que no lo viera como que se hace solo, y me gustaría preguntarle cual versión es la que tiene para poder ver si un desarrollo por parte de otro le servirá o habrá que darselo en imagen. No todas habren lo hecho por anteriores o posteriores, y con ello la problematica de cual se usa. Yo comenzaría detectando el nivel, habiendo establecido un conteo de tiempo unitario que se registrará en el incremento de una variable. El que transcurra entre 2 niveles iguales será indicador de las RPM. Ese tiempo es el critico porque se debe elegir para qie insida lo menos negativo posible. Como ya dije es importante conocer los margenes de error aceptables para determinar el número de segmentos de grado (tiempo) siendo posible 20 valores (cada uno 1º) o 40 (cada uno 0,5º) o más certeza aún. Todo está limitado en bajas por el periodo de los pulsos. Aunque paresca raro las bajas son lo peor, pues entre pulso y pulso transcurre un tiempo grande que cuando se acelera lleva a errores mayores mientras más "picante" sea la moto. En resumen: es bitx=1, si SI vuelvo a preguntar sin demoras, cuando cambia a 0 compruebo el bit hasta que vuelve a 1, incrementando la variable con cada comprobación negativa. Si no se hace modular (con comandos ) se logra rapidez suficiente en altas que es donde más inside la desviación del punto de disparo. Espero ser coherente en lo que digo, solo es de oido. Un abrazo.
- Santiago -