Professional Documents
Culture Documents
Diseo de microcontroladores
Proyecto final
Profesor: Alumno:
INDICE
Introduccin
_
3
Encendido tradicional
Desarrollo proyecto
Diagrama en bloques
11
Simulacin y conclusin
14
17
25
31 2
Introduccin: El propsito de este proyecto es controlar un sistema de encendido (avance o retardo en la chispa) de un motor de combustin interna de 4 cilindros para su ptimo funcionamiento independientemente del combustible utilizado (GNC o NAFTA). Este avance o retardo ser dependiente de las rpm (revoluciones por minuto) del motor. Adems este encendido contara con un corte elctrico en el caso de que el motor este funcionando a un rgimen muy alto de revoluciones, lo cual es muy peligroso para la vida til del mismo. Para lograr los objetivos se usara un PIC16F877A, que ser quien realice los clculos y comandar una etapa de potencia que a la ves manejara el sistema de alta tensin del automvil.
Funcionamiento de un motor: En la siguiente figura se observa cada uno de los 4 tiempos de funcionamiento de un motor.
Como se observa la chispa que produce la explosin se da en el 3er tiempo Y es muy importante que se de en el momento justo, de esta forma aprovechando al mximo las propiedades explosivas del combustible. El encargado de que esta chispa se produzca en el momento preciso es el sistema de encendido. Sistema de encendido (tradicional): Bsicamente el circuito de encendido utilizado en los motores de gasolina, es el encargado de hacer saltar una chispa elctrica en el interior de los cilindros, para provocar la combustin de la mezcla aire-gasolina en el momento oportuno manejado por el ruptor. La encargada de generar una alta tensin para provocar la chispa elctrica es "la bobina". La bobina es un transformador que convierte la tensin de batera 12 V. en una alta tensin del orden de 12.000V a 15.000V. Una vez generada esta alta tensin necesitamos un elemento que la distribuya a cada uno de los cilindros en el momento oportuno, teniendo en cuenta que los motores poli cilndricos trabajan en un ciclo de funcionamiento con un orden de explosiones determinado para cada cilindro (ejemplo: motor de 4 cilindros orden de encendido: 1-3-4-2). El elemento que se encarga de distribuir la alta tensin es el "distribuidor o delco". La alta tensin para provocar la chispa elctrica en el interior de cada uno de los cilindros necesita de un elemento que es "la buja", hay tantas bujas como numero de cilindros tiene el motor 4
Encendido tradicional
El problema de usar distintos tipos de combustible: En teora la chispa de encendido en un motor debe saltar cuando el cilindro llega al p.m.s. (punto muerto superior) en el final de la carrera de compresin, pero esto no pasa en la realidad, ya que, desde que salta la chispa hasta que se produce la combustin de la mezcla pasa un tiempo, este tiempo que pasa al producirse la combustin varia en cada tipo de combustible por ejemplo el GNC tiene un poder de explosin mucho menor que la nafta, lo que llevara mayor tiempo para que se produzca dicha combustin. Si esta prdida de tiempo no la corregimos el motor bajara sus prestaciones (perdida de potencia). Ah es donde entra en juego la correccin de avance o atraso del encendido. Si se esa usando GNC en un motor la chispa de la buja tendra que producirse un momento antes (avance) para compensar el tiempo que le lleva la combustin.
Desarrollo del proyecto: Como ya se menciono anteriormente, al utilizar un combustible con poder explosivo distinto al tradicional, hay que corregir la puesta a punto del motor, esto se logra atrasando o avanzando el sistema de encendido (distribuidor). La siguiente imagen es de un distribuidor convencional.
Un avance o atraso de un distribuidor fsicamente significa girarlo en sentido horario o anti-horario, de esta forma el rotor ara contacto con la buja un momento antes o despus del pms. A continuacin representaremos un avance fsico de un distribuidor.
Este proyecto simula un atraso fsico del distribuidor, mientras el mismo se encuentra funcionando con nafta, mediante una entrada del microcontrolador se dar aviso para que se implemente el retardo. Dentro del distribuidor se encuentra el platino (es una llave accionada por medio de una leva) a travs del mismo se medirn las RPMs del motor, por medio de un capturador (que produce una interrupcin en el microcontrolador).
12V bateria
R1
1k
PLATINO
Entrada UC
R2
1k
En el momento que se recibe un impulso el controlador calculara el retardo necesario para generar la chispa en funcin de las RPM del motor este retardo deber ser menor en un motor funcionando con GNC, ya que este combustible tardara mas en hacer dicha combustin. Adems contara con un limitador de rpm para seguridad del motor.
En el siguiente esquema se observa en que parte del circuito estar funcionando el controlador.
Entradas a utilizar: *_ Capturador de pulsos (producir una interrupcin) *_ Selector nafta/GNC Salidas a utilizar: *_ Pulsos para manejo de la bobina (comando para la etapa de potencia) *_ Indicador de limite de RPM *_Indicador modo nafta/GNC
Diagrama en bloques:
Generador pulsos
Modo selector
Bobina
Curva de retardo: La siguiente curva de retardo se logro realizando clculos que se pueden observar en el apndice 1. Equivale a un atraso de 20 grados (en teora estos veinte grados son la correccin lgica para funcionar en nafta) en el distribuidor.
Para un rgimen de giro menor a las 500 rpm el retardo se mantiene en 8ms, de otra forma esta curva tendera al infinito, para regimenes mayores a 6000 rpm el microcontrolador cesara el envo de pulsos a la etapa de potencia de esta forma no se producirn explosiones y el motor disminuir su rgimen de giro, protegiendo de esta forma al mismo.
10
Descripcin placas: Principal: El microcontrolador usado fue el PIC16F877A puesto que ya contaba con uno en m poder, de todas formas dado a la poca cantidad de entradas y salidas utilizadas se podra usar el 16F84 (que es de los ms simples de la familia), con unas mnimas reformas en el programa ya que este no cuenta con capturadores de entrada. El datasheet del 16F877A se encuentra en el apndice 3
A continuacin una imagen a modo ilustrativo de lo que es la placa en la que esta montado el PIC.
11
Funcionamiento: Selector NAFA/GNC: ante un nivel alto en esta entrada se indica que el motor esta funcionando con GNC, por lo tanto no se implementa la rutina de retardo, (es como darle mas avance al encendido), en nivel bajo el motor funciona a NAFTA y el microcontrolador calcula el retardo a la salida. Entrada pulsos platino: el platino es una llave que cuando abre tendr tensin en la entrada, en el caso de que sierre pondr esta entrada a masa, cuando el motor se encuentra en funcionamiento tendr algo parecido a una onda cuadrada con una frecuencia que varia con las RPMs del motor. Estos pulsos entran por RC2/CCP1 que es un capturador de entrada. Salida etapa de potencia: salida de pulsos (con retardo o no) que manejara la etapa de potencia, que a su vez disparara la bobina para tener la buscada chispa en cada cilindro
12
Etapa de potencia: Esta etapa se usa bsicamente para disparar la bobina del auto por la cual circula una corriente de 3 amperes aproximadamente. Debido a la imposibilidad del PIC de manejar esa corriente se hace con esta etapa de potencia. El PIC dispara un transistor que a la ves dispara otro transistor (arreglo darlington) preparado para manejar mas potencia.
13
Simulacin: Las siguientes imgenes son una simulacin del funcionamiento del PIC. En el canal A tenemos los pulsos provenientes del platino, con los que se miden el rgimen de giro del motor y adems produce la interrupcin para mandar la chispa al cilindro. En el canal C observamos la salida del micro controlador que comanda la etapa de potencia.
Motor girando a 1200 RPM lo que equivale a 40 Hz (por los clculos del apndice 1) se observa el retardo en la salida.
14
Motor girando a 6000 RPM (200 Hz) se observa que el pic no enva mas pulsos a la etapa de potencia (corte de seguridad).
15
Conclusiones:
La decisin de realizar este proyecto, se tomo antes de comenzar a cursar la materia diseo de microcontroladores, sin tener conocimiento de la forma de trabajo y programacin de un microcontrolador. Con todas las dudas que surgan en ese momento pareca ser un proyecto difcil de realizar. Una vez cursada la materia y comenzando a trabajar en el mismo, no resulto tener la complejidad que en un primer momento supona. La idea es seguir desarrollando este proyecto controlando ms variables y sumarle un display entre otras cosas, ya que el problema de la puesta a punto de un automvil que funciona con GNC es real y muy evidente. Por problemas con la etapa de potencia no se pudo hacer funcionar dentro del automvil (luego de quemar varios transistores probando), pero eso ya es un problema de electrnica que lamentablemente me faltan conocimientos para solucionarlo, de todas formas seguir desarrollando le mismo hasta lograr tenerlo funcionando.
16
APENDICE 1
Para calcular la frecuencia en la que vamos a estar trabajando primero tenemos que saber que un motor 4 tiempos de un cilindro hace una explosin cada dos vueltas del cigeal, por lo tanto si pensamos en un motor de 4 cilindros tendremos 2 chispas por vuelta del motor. F=(2xRPM)/60s Nos da el siguiente grafico: Grafico 1
El siguiente paso es calcular que retardo significa un movimiento de 20 grados del distribuidor (que es una pieza que gira por lo tanto estamos hablando de velocidad angular). En el siguiente grafico observamos que estamos hablando de una velocidad angular.
17
Primer calculamos el retardo en funcion de las RPM: RPM-----------60s 20/360---------xs(retardo) Retardo=3.333/RPM Si lo graficamos nos da la siguiente curva: Grafico2
Como vamos a trabajar con frecuencia calcularemos el retardo en funcin de la frecuencia: Retardo=3.333/RPM RPM=(f*60)/2
18
Ahora procederemos a calcular con el micro frecuencia de la seal que proviene del distribuidor para luego poder calcular el retardo. Es muy importante saber con que cristal trabajara el micro controlador (en este proyecto se usara un cristal de 20Mhz) tambin es importante saber que el PIC dispone de un preescalador para poder manejar el tiempo de incremento del timer. Con un preescalado de 1 el timer se incrementara cada Fosc/4, en nuestro caso el preescalador se usara en 1/8 por lo tanto el timer se incrementara cada Fosc/(4*8). Luego de hacer estos clculos pasaremos a hablar de retardo en funcin del nuecero de cuentas que realizo el timer. Fcristal/4*8=frecuencia de incrementacion de timer (la inversa de este resultado nos dar cada cuanto tiempo se incrementa) 20exp6/(4*8)=625khz 1/625 khz=1.6 us Si sabemos que P(periodo)=1/f, si dividimos el P de la seal entrante por el P del timer obtendremos el numero de cuentas en funcin de la frecuencia de entrada. Pplat/Ptim=(1/f)/1,6 us=N cuentas timer
19
Grafico 4
Ahora buscaremos el grafico de retardo en funcin del nmero de cuentas. Retardo=(3.33*2)/(f*60)=0.1111/f Numero de cuentas=1/(1.6us*f) Ret=0.1111*1.6us*numero de cuentas Ret=0.177776us * numero de cuentas
20
Rutina de retardo en un micro: La siguiente es una rutina de dos ciclos anidados para generar un retardo
;(1) Carga dato N ;(1) inicializa contador1 ciclo externo ;(1) Carga dato M ;(1) inicializa contador2 ciclo interno ;(1,2)Decrementa contador2 y escapa si cero ;(2) si no es cero, repite ciclo interno ;(1,2)Decrementa contador1 y escapa si cero ;(2) si no es cero repite ciclo externo
21
Para manejar solo una variable al generar el retardo se le da el valor 255 a la variable M, de esta forma se esa discretizando el retardo generado por la rutina, lo que producir un error mximo de 0.15ms que se puede despreciar. As la rutina de retardo ser:
T=(N*769+7)*Tcy Ahora se puede relacionar el numero de cuentas con el numero N. Ret=0.177776us * numero de cuentas Ret =(N*769+7)*Tcy N={[(0.177776us * numero de cuentas) / Tcy]-7} / 769 Lo que nos da el siguiente grafico: Grafico 6
Dado que el microcontrolador dispone de muy pocas instrucciones y este clculo de retardo se hace entre chispa y chispa del motor hay que hacerlo lo ms rpido posible hay que hacer varias aproximaciones y algunos trminos que no tienen mucho peso sobre el resultado final podrn ser obviados:
22
Timer: el timer que se uso en este proyecto es de 16 bits. Una de las aproximaciones ser usar solo la parte alta del mismo. Variable N: si desarrollamos el calculo de N={[(0.177776us * numero de cuentas) / Tcy]-7} / 769 Llegamos a que , N= 1.156e-3 *numero de cuentas 0.0091 Ya que N es un nmero entero el numero 0.0091 puede ser obviado, una buena aproximacin de la ecuacin anterior podra ser: N=numero de cuentas/800 Con todas estas aproximaciones llegamos a la curva final de retardo en funcin de RPM: Grafico 7
23
El siguiente grafico muestra el error total del clculo de retardo, relacionando el grafico 2 con el grafico 7. Error(RPM)=retardo(RPM)-retardodiscretizado(RPM) Grafico 8
24
APENDICE 2
Diagrama de flujo del programa: El programa principal solo espera que ocurra una interrupcin por captura de entrada. El siguiente diagrama de flujos describe lo que ocurre en la interrupcin.
25
26
Programa para encendido electrnico: En esta primer parte se declaran variables y configuran puertos y algunos mdulos. RC2/CCP1: se configura como entrada T1CON: configura el timer 1 como temporizador preescalado 1/8. CCP1CON: se lo configura para captura en flanco descendente. INTCON: se habilitan interrupciones de perifricos.
;*************************************************************************** ;************Alumno: Pablo Kikot********************************************* ;************proyecto: Retardo elecronico encendido para motores con GNC************ ;*************************************************************************** Include "p16f877.inc" msnib EQU 0x20 lsnib EQU 0x21 STATUS_temp EQU 0x40 W_temp EQU 0x41 cont1 EQU 0x25 cont2 EQU 0x26 num1 EQU 0x27 num2 EQU 0x28 N EQU 0x29 cuenta EQU 0x30 limrpm EQU 0x31 M EQU 0x32 org 0x0000 ;inicia con un reset GOTO Inc org 0x0004 ;vector de interrupcin GOTO interr ;salta a la rutina de atencin a la interrupcin inic BSF STATUS,RP0 ;Banco1 BCF TRISC,0 ;patita RC0 como salida BCF TRISB,0 ;patita RB0 como salida BSF TRISB,1 ;patita RB1 como entrada BSF TRISC,2 ;patita RC2/CCP1 como entrada BCF STATUS,RP0 ;Banco 0 MOVLW 0x31 MOVWF T1CON ;Configura Timer1 modo temporizador, preesc 1/8 CLRF TMR1H ;Inicializa en cero el timer 1 CLRF TMR1L ; CLRF CCP1CON ;limpia latch de CCP1 BSF CCP1CON,CCP1M2 ;Habilita CCP1 para captura en transicin bajada BCF PIR1,CCP1IF ;limpia bandera de interrupcin. BSF STATUS,RP0 ;banco 1 BSF PIE1,CCP1IE ;Habilita interrupciones del CCP1 BCF STATUS,RP0 ;banco 0 BSF INTCON,PEIE ;habilita interrupciones de perifricos BSF INTCON,GIE ;Habilita interrupciones globales
27
Rutina de interrupcin:
En el momento que se produce una interrupcin lo primero que hace es chequear que sea una interrupcin por el capturador CCP1 (mira el flag CCP1F), si no es as sale de la interrupcin. Si la interrupcin fue por captura, guarda en la variable cuenta la parte alta del contador (ya que es de 16 bits), luego lo compara con un valor predeterminado para ver si se pas del lmite de RPM. En caso de pasarse de RPM sale de la interrupcin (no hay pulso de salida en el puerto C,0). En el caso de no exceder las RPM, compara que no este por encima de las 5200 RPM ni por debajo de las 500RPM (si se encuentra en uno de estos extremos el retardo ser fijo de 0.6mseg y 7.9mseg respectivamente). Una vez que chequeo que esta dentro del rango de 500-5200RPM, pasa a la subrutina donde calcula el retardo para el nmero de cuentas capturado. Por ultimo, una vez que se conoce el tiempo que hay que esperar, salta a una subrutina donde espera el tiempo dado, para luego mandar el pulso de salida por el puerto C ,0 y as volver de la interrupcin y esperar a la nueva captura.
28
;***** rutina de atencin a la interrupcin********************************************************************** interr BCF STATUS,RP0 ;banco 0 ;MOVWF W_temp ;salva contexto SWAPF STATUS,W CLRF STATUS MOVWF STATUS_temp BTFSS PIR1,CCP1IF ;miro bandera de captura de evento GOTO ret ;si no es bandera de captura retorna BCF PIR1,CCP1IF ;si es bandera de captura, la limpia clrw clrf cuenta MOVF CCPR1H,W ;copia periodo capturado MOVWF cuenta ;copio el periodo para luego calcular retardo CLRF TMR1L ;limpia la cuenta del timer 1 CLRF TMR1H movf cuenta,W ;***ac miro limite de RPM (6000rpm=200hz)***** SUBLW 0x0C ;resto a p. alta del p..RPM=30/(TMR1H*1.6 useg) BTFSC STATUS,0 ;me fijo si la cuenta anterior dio negativo goto ret ;se paso de rpm no tiro chispa BTFSC PORTB,1 ;****miro si esta en cero entrada RB1******** GOTO GNC ;si es uno salto a GNC (no uso retardo) movlw 0xff ;en este programa num1 siempre vale ff movwf num1 movlw 0x0E ;****miro si esta en el limite superior de retardo**** SUBWF cuenta,0 ;le resto x a la parte alta del periodo capturado BTFSC STATUS,0 ;me fijo si la cuenta anterior dio negativo escapa si =0 goto aaa ;si da negativono estoy en el limite movlw 0x03 ;si da positivo ret=0.6mseg MOVWF num2 MOVWF cont2 goto na aaa movlw 0x95 ; **miro si esta en el limite inferior de retardo******* SUBWF cuenta,0 ;le resto x a la parte alta del periodo capturado BTFSS STATUS,0 ;miro si dio negativo escapa si=1 goto no ;si da positivo calc ret movlw 0x33 ;negativo...re mximo=7.9mseg MOVWF num2 MOVWF cont2 GOTO na no CALL retardo ;****subrutina donde calculo retardo************ na CALL pausa ;****implemento retardo calculado************* GNC BCF PORTC,0 ;salida= CHISPA CALL pau ;duracin de la chispa(1.5 mseg) BSF PORTC,0 ;corto salida ret BCF STATUS,RP0 ;Banco 0 SWAPF STATUS_temp,W ;restablece contexto MOVWF STATUS SWAPF W_temp,F SWAPF W_temp,W RETFIE ;************************************************************ ;****** Subrutina de pausa de aprox. 30 seg (con Fosc=20 MHZ)****** ;************************************************************ pausa MOVF num2,W ;Cargo en cont2 el numero de ciclos MOVWF cont2 ;secundarios guardados en num2 rep1 MOVF num1,W ;Cargo en cont1 el numero de ciclos MOVWF cont1 ;primarios guardados en num1 rep2 DECFSZ cont1,1 ;Decrementa contador 1 y escapa si cero GOTO rep2 ;si no es cero, repite ciclo interno DECFSZ cont2,1 ;Decrementa contador 2 y escapa si cero GOTO rep1 ;si no es cero repite ciclo externo RETURN ;regresa de esta subrutina
29
;************************************************************************************************ ;********************** Subrutina de pausa de aprox. 150 seg (con Fosc=20 MHZ)************************* ;************************************************************************************************ pau MOVLW 0X0A MOVWF M ciclo1 MOVLW 0xFF ;Cargo en cont2 el numero de ciclos MOVWF N ;secundarios guardados en num2 ciclo DECFSZ N,1 ;Decrementa contador2 y escapa si cero GOTO ciclo ;si no es cero, repite ciclo interno DECFSZ M,1 GOTO ciclo1 RETURN ;regresa de esta subrutina ;************************************************************************************************ ;*************En esta rutina calculo el retardo de acuerdo a las rpm que esta giirando el motor******************* ;************************************************************************************************ retardo clrw CLRF num2 bcf STATUS,0 INCF num2,1 movf cuenta,W BTFSS STATUS,0 ;me fijo si la cuenta anterior dio negativo goto cic movlw 0x03 neg SUBWF cuenta,1 ;le resto 03 a cuenta escapa si es cero BTFSS STATUS,0 ;me fijo si la cuenta anterior dio negativo goto cic INCF num2,1 goto neg cic movlw 0x03 bcf STATUS,0 SUBWF cuenta,1 ;le resto 03 a cuenta escapa si es cero BTFSS STATUS,0 ;me fijo si la cuenta anterior dio negativo GOTO listo INCF num2,1 GOTO cic listo BSF STATUS,RP0 clrf STATUS RETURN End
30
31
32
33
34
35
Toda la informacin referida al microcontrolador PIC16F877A, y su respectivo datasheet fue obtenido de la pgina del fabricante: http://www.microchip.com
Los grficos que describen el funcionamiento de un motor fueron obtenidos de la pgina: http://blogingenieria.com/ingenieria-mecanica/interior-cilindro-motorgasolina/ Sobre como realizar un proyecto en un pic:
Autores:
36