Autor Tema: generador de pulsos para inyectoras con pic 16f628A  (Leído 17740 veces)

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

Desconectado electronic182

  • PIC10
  • *
  • Mensajes: 36
generador de pulsos para inyectoras con pic 16f628A
« en: 26 de Octubre de 2011, 19:28:41 »
ola k tal soy nuevo en el foro , y tenia algunas dudas con este proyecto! , en fin:

para hacer este proyecto solo m faltarian dos cosas que estan en la opcion del modulo CCP:
- variar la frecuencia
-variar el ancho d pulso
Lo de circuito d potencia lo tengo y se como funciona..
Eh estado viendo k hay aportes magnificos con respecto a estos, pero no lo entiendo muy bien!,  kisiera saber como puedo variar con un potenciometro la frecuencia y con otro el ancho de pulso, y luego visualizarlo en un LCD..ya que encontre estos datos:
mi limite de frecuencia esta entre aproximadament 4kHz a 20Khz
y mi ancho de pulso (PWM) esta entre aproximadament 1.5 a 8.5 ms , agradeceria cualquier ayuda posible ya que recien estoy empezando en este maravilloso arte!
gracias d antemano y que sigan mas exitos! nos vemos ...

psdt: es mas a k les doy el esquema para que se deen una idea..
http://www.megaupload.com/?d=6LUG0LPC
« Última modificación: 26 de Octubre de 2011, 20:18:08 por electronic182 »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #1 en: 26 de Octubre de 2011, 19:50:43 »
a que te refieres con inyectorAs?? te refieres a inyectores?? de vehiculo??

Si es asi esas frecuencias son muy altas, un inyector de automovil 10000RPM = 166Hz

Para hacer una variacion por un potenciometro debes hacer lo siguiente, capturar el pot por el ADC y hacer una regla de 3. Osea:

5000----100%
ADC-----X

x=ADC*100/5000, con eso obtendras un % desde el 0% al 100% para ponerlo al DUTY por ejemplo.

Para variar la frecuencia ya es mas complicado, aunque con una libreria es facil, pero he visto muchas librerias que no permiten modificar la frecuencia unicamente el duty. Pero ya tienes el calculo para obtener una cifra con el ADC, por lo cual lo otro es similar.

Desconectado electronic182

  • PIC10
  • *
  • Mensajes: 36
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #2 en: 26 de Octubre de 2011, 20:09:10 »
si. a inyectoras de autos..

y con respecto a las frecuencias no son muy altas!
es mas tengo estos datos:
Los datos que tengo sobre los inyectores son:

1. Resistencia de la bobina del inyector: 15 a 17 ohms (en la gran mayoría de los vehículos modernos)
2. Alimentación de exitación: 12 volts
3. Pulsaciones de los inyectores:
- En relantí es de: 2,2ms
- De 2000 a 3000 RPM es de: 1,5 a2,2ms
- Con mariposa a plena carga es de: 8.2 a 8.4ms



Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #3 en: 26 de Octubre de 2011, 20:10:58 »
INTERESANTE PROYECTO, voy a seguirte de cerca, y a ver en que puedo ser util.
saludos
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #4 en: 26 de Octubre de 2011, 20:18:34 »
si. a inyectoras de autos..

y con respecto a las frecuencias no son muy altas!
es mas tengo estos datos:
Los datos que tengo sobre los inyectores son:

1. Resistencia de la bobina del inyector: 15 a 17 ohms (en la gran mayoría de los vehículos modernos)
2. Alimentación de exitación: 12 volts
3. Pulsaciones de los inyectores:
- En relantí es de: 2,2ms
- De 2000 a 3000 RPM es de: 1,5 a2,2ms
- Con mariposa a plena carga es de: 8.2 a 8.4ms




lo que pones de las pulsaciones es la duracion del pulso no?? es logico tal y como pones esa duracion, pero la frecuencia no tiene nada que ver con el duty.

Estamos hablando de que 4khz = 240000 inyecciones por minuto, o lo que equivale a 240000rpm una barbaridad... Ni un monopunto tiene tantas inyecciones. Ademas a 4khz cada inyeccion duraria 250us, un inyector tiene un dead time (excitacion), este tiempo suele ser de 1ms dependiendo de la marca (para estos de alta impedancia como los tuyos sera mas o menos eso). Si cada inyeccion son en 250us y tienes 1ms de dead time el inyector no se llegaria a abrir.

Desconectado electronic182

  • PIC10
  • *
  • Mensajes: 36
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #5 en: 26 de Octubre de 2011, 20:29:37 »
Que  posea un tiempo fijo de duración de la prueba de 90 segundos a 15 min.
Que las R.P.M. : Sean variables de 500 a 7000 R.P.M. en pasos de 500 R.P.M. por demdio de un potenciómetro.
El Tiempo de abertura: que sea tambien variable de 1,5 a 8 ms (mili segundos) en pasos de 0,5 ms. ajuste por potenciómetro.

El diseño de este probador de inyectores se basa en la generación de un tren de pulsos de 12 V, en los que se pueda variar la frecuencia y el ancho del tren de pulsos que es capaz de entregar la corriente que demanda la bobina del inyector.
De este modo, cuando el inyector se encuentra alimentado con 12 V, se activa y permite el paso de combustible, si estuviera conectado a la alimentación.
El inyector se encuentra activado durante el tiempo en el que el pulso está en el nivel bajo (0 V). Durante al ancho del pulso, el otro extremo de la bobina está alimentado en forma permanente a 12 V.
La forma de prueba es mediante la activación y desactivación del inyector, lo que se logra gracias a la generación de la señal anteriormente descrita.
Para esto se genera un tren de pulso mediante un oscilador de onda cuadrada.
La salida del oscilador activa una etapa que amplifica la corriente, lo suficiente como para accionar el inyector.
La etapa de salida está formada por un transistor MOSFET en configuración source común.
El circuito posee dos potenciómetros que permiten modificar el ancho de pulso y la frecuencia para, de este modo, simular las condiciones a las que el inyector está sometido en su funcionamiento real.

la verdad esos han sido los datos que encontre , no c much de esto, mas bien toda ayuda es bien recibida..

encontre esto de un usuario:
Pues vamos viendo......



Supongamos que se desea una frecuencia de 1KHz a un ciclo de trabajo de 50% con una frecuencia del oscilador de 4MHz.


Lo primero es revisar la hoja de datos (en mi caso el 16F887 o cualquiera que tenga CCP).

Establece una fórmula
PWM Period = [(PR2)+ 1]•4•TOSC •(TMR2 Prescale Value)

Pero es menos complicado si se contempla en función de la frecuencia (recordar que f=1/t):
Fpwm=  [(Fosc)/(PR2+1)*(TMR2 Prescale Value)*(4)]

Lo que interesa es el PR2 ya que es el registro del periodo para la frecuencia (revisar fórmula de hoja de datos):
PR2= [(Fosc)/(Fpwm)*(TMR2 Prescale Value)*(4)]-1

PR2 debemos recordar que es de 8 bits, por lo que el valor máximo no debe exceder 255 (muy importante).


Si se desea 1KHz tenemos básicamente dos opciones:

    * 1.- Se cambia de frecuencia de oscilación (no recomendable, ya que todo el programa se altera)
    * 2.- Se cambia de preescalador para el Timer2



Si tomamos la segunda entonces tenemos tres opciones: 1, 4 y 16.

Con 1:
PR2= [(4MHz)/(1KHz)*(1)*(4)]-1
PR2=1000-1  <---bien importante no olvidarse del -1

PR2=999

Con 1 no sirve, ya que se pasa de los 8 bits.



Con 4:
PR2= [(4MHz)/(1KHz)*(4)*(4)]-1

PR2=249

Con 4 sirve.



Con 16:
PR2= [(4MHz)/(1KHz)*(16)*(4)]-1

PR2=62.5

Con 16 podría servir pero..... el registro no almacena decimales, solo enteros; lo anterior nos proporciona dos posibles caminos:

    * PR2=62
    * PR2=63


Si PR2=62, entonces la Fpwm será:
Fpwm=  [(Fosc)/(PR2+1)*(TMR2 Prescale Value)*(4)]
Fpwm=  [(4MHz)/(62+1)*(16)*(4)]
Fpwm=  992.0634 Hz

Lo anterior entrega un error de 0.8% aproximadamente.



Si PR2=63, entonces la Fpwm será:
Fpwm=  [(Fosc)/(PR2+1)*(TMR2 Prescale Value)*(4)]
Fpwm=  [(4MHz)/(63+1)*(16)*(4)]
Fpwm=  976.5625 Hz

Lo anterior entrega un error de 2.4% aproximadamente.



La ideal es PR2=249 con preescalador a 4; cabe señalar que solo estamos en la frecuencia.



Para el PWM es algo similar pero, el CCS utiliza funciones donde el comportamiento no es tan transparente como se desearía.


Recordar que
Pulse Width =(CCPRxL:CCPxCON<5:4>) •TOSC • (TMR2 Prescale Value)



y que

Duty Cycle Ratio= (CCPRxL:CCPxCON<5:4>)
                           --------------------------------
                                       4(PR2 + 1)


El ciclo de trabajo ya se conoce (es el deseado), por lo que interesa es el valor de CCPRxL:CCPxCON<5:4>. En C o en BASIC es relativamente sencillo colocar ese valor, en ensamblador no tanto. Lo anterior debido a que los bits 5 y 4 de CCPxCON son los de menor peso y se debe realizar un corrimiento con todo CCPRxL.


Aquí es donde se torna algo confuso (para la mayoría):

suponiendo un ciclo de trabajo de 50%, significa que el valor donde se repite el periodo (PR2+1) es 250, el valor medio sería 125, por lo que CCPRxL deberá tomar ese valor.
CCPRxL toma el valor ya que es el registro de mayor peso para el ciclo de trabajo, los otros dos bits no afectan.

Lo anterior es si deseas utilizar el PWM en "modo de 8 bits"  (no existe tal modo, pero trabaja asi). Si deseas utilizar los 10 bits de resolución, deberás utilizar esos dos bits de menor peso.

Esos dos bits de menor peso siempre producirán 4 combinaciones adicionales (00,01,10,11) a las 256 del CCPRxL y, como sabemos 10bits=1024. El máximo valor que tendrás será 1023.

Si PR2 es 249, y PR2+1 =250, entonces el valor para el ciclo de trabajo crece de 250 a 1000, dando 4 veces el original (debido a esos dos bits).

Aqui está la situación:
para utilizar los 10 bits de resolución el CCS debe saber que el parámetro de set_pwm_duty() es un entero de 16 bits (INT16 o LONG), de otra manera lo tomará como 8 bits (solo tomará el CCPRxL).

Coloca esto:
setup_ccp1(ccp_PWM);
setup_timer_2(t2_div_By_4,249,1);
set_pwm_duty(125);

Coloca esto:
setup_ccp1(ccp_PWM);
setup_timer_2(t2_div_By_4,249,1);
set_pwm_duty(500L);

Verás que no hay cambio.
« Última modificación: 26 de Octubre de 2011, 20:37:26 por electronic182 »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #6 en: 26 de Octubre de 2011, 20:36:58 »
pues ya tienes como calcular la frecuencia para el PWM, 500rpm = 8Hz; 7000rpm=117Hz

ahora tienes que calcular una escala y frecuencia para obtener esos Hz el minimo y maximo. El duty no te preocupes por ahora, lo que mas te va a costar es hacer el calculo para sacar la frecuencia deseada.

Desconectado electronic182

  • PIC10
  • *
  • Mensajes: 36
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #7 en: 26 de Octubre de 2011, 20:47:12 »
alguien mas tiene una idea , gracias x su tiempo

« Última modificación: 26 de Octubre de 2011, 21:20:00 por electronic182 »

Desconectado Yoshua

  • PIC16
  • ***
  • Mensajes: 207
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #8 en: 26 de Octubre de 2011, 21:50:48 »
me parece que para esas frecuencias bajas te conviene usar un timer.

EDITO: para usarlo tendrias que cargar en el timer el tiempo TOTAL del ciclo desde el primer potenciometro y luego, sacar el equivalente al tiempo ON del inyector desde el segundo potenciometro, una vez cumplido el tiempo ON, restas desde el tiempo TOTAL el tiempo ON para generar el tiempo en el que el inyector esta apagado.

______1--------2___3--------+___

1 - entra en la INT. por timer, acciona el inyector y carga el tiempo ON
2 - entra en la INT. por timer, libera el inyector, resta a TIEMPO_TOTAL la variable TIEMPO_ON y la carga en el timer
3 - entra en la INT. por timer, cumplido el ciclo, vuelve al punto 1
« Última modificación: 26 de Octubre de 2011, 22:03:34 por Yoshua »

Desconectado electronic182

  • PIC10
  • *
  • Mensajes: 36
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #9 en: 26 de Octubre de 2011, 22:00:22 »
lo c , es mas tengo su esquema con timer o con un 556 , y tambien con opanes... pero mi objetivo es hacerlo con pic...

Desconectado Yoshua

  • PIC16
  • ***
  • Mensajes: 207
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #10 en: 26 de Octubre de 2011, 22:04:54 »
timer del pic...

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #11 en: 26 de Octubre de 2011, 22:12:13 »
para un PWM tan bajo necesitarias una velocidad baja del pic.

empieza por aqui:

ahi por lo menos veras como funciona, de que se trata, etc...

Desconectado electronic182

  • PIC10
  • *
  • Mensajes: 36
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #12 en: 26 de Octubre de 2011, 22:12:55 »
disculpame , m deje llevar por tu primera frase..

m podrias explicar un poco mas detallado por favor (lo mas detallado posible .gracias)

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #13 en: 26 de Octubre de 2011, 22:23:31 »
en ese video lo detalla perfectamente, si se te hace demasiado complicado, te recomiendo que en ese mismo canal mires otros tutoriales de lo que quieras saber, te lo comento porque explicarte todo desde 0 se me hace complicado, ademas de ser largo, y de que hay miles de tutoriales por ahi que lo explican mejor que lo haria yo.

Desconectado electronic182

  • PIC10
  • *
  • Mensajes: 36
Re: generador de pulsos para inyectoras con pic 16f628A
« Respuesta #14 en: 26 de Octubre de 2011, 22:32:24 »
wowwwwwwwwwww, excelent amigo gracias! y una vez k comprenda eso m orientas mas , por favor!


 

anything