Sumari - CORE · Sistema de control per a un motor de combustió interna 3Pág. A. Codi dels...

181
Sistema de control per a un motor de combustió interna Pág. 1 Sumari SUMARI _____________________________________________________1 A. CODI DELS PROGRAMES __________________________________3 A.1. Microcontrolador 2 ........................................................................................... 3 A.2. Microcontrolador 1 ........................................................................................... 8 A.2.1. Programa per a realitzar una única injecció per cicle........................................... 9 A.2.2. Programa amb preinjecció. ................................................................................. 17 B. ESQUEMES DE CONNEXIÓ ________________________________29 C. LLISTA DE COMPONENTS ELECTRÒNICS. ___________________32 D. FITXES DELS COMPONENTS ELECTRÒNICS MÉS IMPORTANTS. _33 D.1. Microcontrolador............................................................................................. 34 D.1.1. Pin diagram.......................................................................................................... 34 D.1.2. Device overview................................................................................................... 35 D.1.4. Oscillator .............................................................................................................. 43 D.1.5 Reset ................................................................................................................... 50 D.1.6. Interrupts .............................................................................................................. 62 D.1.7. I/O Ports ............................................................................................................... 78 D.1.8. Timer .................................................................................................................... 92 D.1.9. USART ................................................................................................................. 99 D.1.10. A/D Converter .................................................................................................... 114 D.1.11. Electrical characteristics. ................................................................................... 122 D.2. Amplificador operacional, tractament de la senyal ........................................ 138 D.3. Mosfet injector potència. .............................................................................. 151 D.4. Avanç de la injecció, protocol RS-232. ........................................................ 159

Transcript of Sumari - CORE · Sistema de control per a un motor de combustió interna 3Pág. A. Codi dels...

Sistema de control per a un motor de combustió interna Pág. 1

Sumari SUMARI _____________________________________________________1

A. CODI DELS PROGRAMES __________________________________3 A.1. Microcontrolador 2 ........................................................................................... 3 A.2. Microcontrolador 1 ........................................................................................... 8

A.2.1. Programa per a realitzar una única injecció per cicle...........................................9 A.2.2. Programa amb preinjecció. .................................................................................17

B. ESQUEMES DE CONNEXIÓ ________________________________29

C. LLISTA DE COMPONENTS ELECTRÒNICS. ___________________32

D. FITXES DELS COMPONENTS ELECTRÒNICS MÉS IMPORTANTS. _33 D.1. Microcontrolador............................................................................................. 34

D.1.1. Pin diagram..........................................................................................................34 D.1.2. Device overview...................................................................................................35 D.1.4. Oscillator ..............................................................................................................43 D.1.5 Reset...................................................................................................................50 D.1.6. Interrupts..............................................................................................................62 D.1.7. I/O Ports...............................................................................................................78 D.1.8. Timer ....................................................................................................................92 D.1.9. USART.................................................................................................................99 D.1.10. A/D Converter ....................................................................................................114 D.1.11. Electrical characteristics. ...................................................................................122

D.2. Amplificador operacional, tractament de la senyal ........................................138 D.3. Mosfet injector potència. ..............................................................................151 D.4. Avanç de la injecció, protocol RS-232. ........................................................159

Pág. 2 Memoria

Sistema de control per a un motor de combustió interna Pág. 3

A. Codi dels Programes

A.1. Microcontrolador 2

Programa del microcontralador 2. Encargado de posicionar el ciclo y decidir el momento de la inyeccion.

#include <p18f458.h> // Declaraciones de registros del PIC18F458 #include <portb.h> // Funciones de los puertos de entrada de datos #include <usart.h> void InterruptHandlerHigh(void); // DEFINICIONES HARDWARE #define ya LATEbits.LATE0 //llamada de inyeccion al micro2 #define injector1 LATCbits.LATC0 #define injector2 LATCbits.LATC1 #define injector3 LATCbits.LATC2 #define injector4 LATCbits.LATC3 //definicion variavles auxiliares unsigned int dent; unsigned int avanc; //definicion de angulos de inyeccion unsigned int i1; unsigned int i2; unsigned int i3; unsigned int i4; #pragma code InterruptVectorHigh=0x08 // Puntero que redirecciona al codigo de las interrupciones

Pág. 4 Memoria

void InterruptVectorHigh(void) { _asm goto InterruptHandlerHigh _endasm } #pragma code #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh() // interrupciones de alta pioridad { // Interrupcion externa para contar los dientes if(INTCONbits.INT0IF) // ¿Ha llegado una interrupción? { INTCONbits.INT0IF=0; // Borrar flag de interrupción dent=dent+1; } if(PIR1bits.RCIF&PIE1bits.RCIE) // ¿Ha llegado una interrupción de recepción de la uart y ésta está habilidata? { PIR1bits.RCIF = 0; // Borrar flag de interrupción de recepción de la usart avanc = ReadUSART(); // Leer carácter recibido if(!BusyUSART()) // ¿UART Libre para transmitir? { WriteUSART(avanc); // Enviar carácter recibido por la usart } if(avanc==0||avanc==1||avanc==2||avanc==3||avanc==4||avanc==5||avanc==6||avanc==7||avanc==8||avanc==9) // control de que el lo recibido por la USART sea un numero { // Calculo del los puntos de inyeccion

Sistema de control per a un motor de combustió interna Pág. 5

i1=15-avanc; i2=30-avanc; i3=45-avanc; i4=60-avanc; } } if(INTCON3bits.INT1IF) // Interrupcion externa del arbol de levas para poner a 0 { dent=0; INTCON3bits.INT1IF=0; // Borrar flag de interrupción } if(INTCON3bits.INT2IF) // Interrupcion para informar de que el micro 1 a recibido la informacion de cuando y en que cilindro inyectar . { INTCON3bits.INT2IF=0; // Borrar flag de interrupción injector1=0; injector2=0; injector3=0; injector4=0; } } //fin interrupcion // programa principal void main (void) {

Pág. 6 Memoria

// CONFIGURACIÓN DEL PIC, PUERTOS Y PERIFÉRICOS CMCON = 0x07; // Comparadores OFF, para disponer de puertos totalmente digitales I/O TRISA = 0xFF; // Entradas TRISB = 0b11111111; // Entradas TRISC = 0b11110000; // Entradas y Salidas TRISD = 0b11111111; // Entradas TRISE = 0b11111110; // Entradas y Salidas // Registros de las interrupciones INTCON3=0x00; INTCON=0x00; INTCON=0b11010000; INTCONbits.GIEH = 1; INTCONbits.INT0IF=0; INTCON3bits.INT1IF=0; INTCON3bits.INT1IP=1; INTCON3bits.INT1IE=1; INTCON3bits.INT2IP=1; INTCON3bits.INT2IE=1; INTCON3bits.INT2IF=0; IPR1bits.RCIP = 1; // Alta prioridad de interrupción para la USART PIE1bits.RCIE = 1; // Habilitar interrupción de recepción (RX) de la USART RCONbits.IPEN = 1; // Habilitar niveles de prioridad de interrupciones // Configuracion de la USART OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 64); // Puntos de inyeccion de referencia

Sistema de control per a un motor de combustió interna Pág. 7

i1=14; i2=28; i3=42; i4=56; // inicializacion de las variables avanc=0; dent=0; injector1=0; injector2=0; injector3=0; injector4=0; while (1) // Bucle infinito { // Momentos en los que se realiza la inyecion if(dent==i1) { injector1=1; // indicacion de inyectar en el cilindro 1 // Orden al micro 1 para que realice una interrupcion en la que lea donde tiene que inyectar.

ya=1; ya=0; } if(dent==i2) {

injector2=1; // indicacion de inyectar en el cilindro 2 // Orden al micro 1 para que realice una interrupcion en la que lea donde tiene que inyectar.

ya=1; ya=0;

Pág. 8 Memoria

} if(dent==i3) { injector3=1; // indicacion de inyectar en el cilindro 3 // Orden al micro 1 para que realice una interrupcion en la que lea donde tiene que inyectar.

ya=1; ya=0; } if(dent==i4) // indicacion de inyectar en el cilindro 4 { injector4=1; // Orden al micro 1 para que realice una interrupcion en la que lea donde tiene que inyectar.

ya=1; ya=0; } } // fin del bucle infinito } // fin del main

A.2. Microcontrolador 1

Programa del microcontralador 1. Encargado de calcular la cantidad de combustible y reguimen de giro.

Sistema de control per a un motor de combustió interna Pág. 9

A.2.1. Programa per a realitzar una única injecció per cicle.

#include <p18f458.h> // Declaraciones de registros del PIC18F458 #include <adc.h> // Funciones de Conversor A/D #include <timers.h> // Funciones de los TIMERS #include <portb.h> // Funciones de los puertos de entrada de datos #include <delays.h> // Funciones de retrasos void InterruptHandlerHigh(void); // DEFINICIONES HARDWARE #define IN1 LATCbits.LATC0 #define IN2 LATCbits.LATC1 #define IN3 LATCbits.LATC2 #define IN4 LATCbits.LATC3 #define EIN1 PORTCbits.RC4 #define EIN2 PORTCbits.RC7 #define EIN3 PORTCbits.RC6 #define EIN4 PORTCbits.RC5 #define ok LATBbits.LATB4 #define ACELE ADC_CH0 //Definicion variavles auxiliares struct { unsigned CalculaRPM:1; /* Bit 0 */

Pág. 10 Memoria

unsigned :1; unsigned :1; unsigned :1; unsigned :1; unsigned :1; unsigned :1; unsigned :1; /* Bit 7 */ } Flag; unsigned int gas; double relenti; double gasdouble; double acele; unsigned int trpm; unsigned int auxinyec; double tinyec; // programa void main(void) { // CONFIGURACIÓN DEL PIC, PUERTOS Y PERIFÉRICOS

Sistema de control per a un motor de combustió interna Pág. 11

CMCON = 0x07; // Comparadores OFF, para disponer de puertos totalmente digitales I/O TRISA = 0xFF; // Entradas TRISB = 0b01101111; // Entradas y Salidas TRISC = 0b11110000; // Entradas y Salidas TRISD = 0b11111111; // Entradas TRISE = 0xFF; // Entradas // CONFIGURACIÓN DEL CONVERSOR A/D // Frecuencia fosc/64, justificación a la derecha, 3 canales analógicos, sin referencia de tensión, sin interrupciones OpenADC(ADC_FOSC_64 & ADC_RIGHT_JUST & ADC_3ANA_0REF, ADC_CH0 & ADC_CH1 & ADC_CH2 & ADC_INT_OFF); // CONFIGURACION DEL TIMER 0 PARA MEDIR LAS RPM DEL MOTOR OpenTimer0(TIMER_INT_OFF&T0_SOURCE_INT&T0_16BIT&T0_PS_1_32); // CONFIGURACION DEL TIMER 1 PARA CONTROLAR LOS TIEMPOS DE APERTURA DEL INYEC OpenTimer1(TIMER_INT_ON&T1_SOURCE_INT&T1_16BIT_RW&T1_PS_1_8); // inicializacion de las variables auxinyec=0; ok=0; trpm=0; relenti=0; tinyec=0; Flag.CalculaRPM = 0; IN1=0;

Pág. 12 Memoria

IN2=0; IN3=0; IN4=0; // Registros de las interrupciones INTCON=0x00; INTCON=0b11010000; RCONbits.IPEN=1; // Habilitar niveles de prioridad de interrupciones INTCONbits.GIEH=1; PIE1bits.TMR1IE=1; IPR1bits.TMR1IP=1; while(1) // Bucle infinito { SetChanADC(ACELE); // Selección CANAL 0 (AN0) PIN 2 MICRO ConvertADC(); // Inicio de conversión while(BusyADC()) // Conversor A/D Ocupado -> espera { } gas=ReadADC(); // Leer el resultado conversión A/D (10 bits justificados a la derecha) gasdouble=((double)gas); gas1=65500-gas*10; //regulacion del relentin //relenti en torno a una variacion de 100rpm if(Flag.CalculaRPM) {

Flag.CalculaRPM=0; // Borrar flag

Sistema de control per a un motor de combustió interna Pág. 13

if(trpm>=1953) //si es menor de 600 rpm { if(relenti<=15) { relenti=15; //Valor minimo del relentin } relenti=relenti*1.05; //aumento de un 5% en el tiempo de inyeccion

} else { if(trpm<=1802) //si es mayor de 650 rpm { if(relenti>=50) { relenti=50; //valor maximo del relentin } relenti=relenti*0.05; //Disminucion de un 5% en el tiempo de inyeccion } } //Utiliza el mayor entre al acelerador y el relenti. if(relenti>=gasdouble) { acele=relenti; //Utilizar la que indica el relenti } else { acele=gasdouble; // Utilizar la que indica el acelerador }

Pág. 14 Memoria

// Limite de velocidad de giro maxima if(trpm<=195) //este valor corresponde para el prescaler de 256 a 6000 rpm { acele=0; } // correccion de para calcular el tiempo de inyeccion

tinyec=65536-125*acele; //tinyec=65536-12500*acele/100 }

} // Fin Bucle Infinito } // Fin main #pragma code InterruptVectorHigh=0x08 // Puntero que redirecciona al codigo de las interrupciones void InterruptVectorHigh(void) { _asm goto InterruptHandlerHigh _endasm }

Sistema de control per a un motor de combustió interna Pág. 15

#pragma code #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh() // interrupciones de alta pioridad { // Interrupcion externa generada por el micro dos para avisar de que es momento de inyectar y que a de mirar que cilindro es el que le toca. if(INTCONbits.INT0IF) // ¿Ha llegado una interrupción? { INTCONbits.INT0IF=0; // Borrar flag de interrupción T1CONbits.TMR1ON=1; //empieza a contar el timer 1 if(EIN1) // Si verdadero inyectar en el cilindro 1 { IN1=1; // Abrir el inyector 1 WriteTimer1(tinyec); // Figar el preescaler del timer para que haga una

interrupcion trascurrido el tiempo deseado. WriteTimer0(0); // Pone el timer 0 a 0 para que empiece a contar para

calcular el regimende giro del motor } if(EIN2) // Si verdadero inyectar en el cilindro 2

Pág. 16 Memoria

{ IN2=1; // Abrir el inyector 2 WriteTimer1(tinyec); // Figar el preescaler del timer para que haga una interrupcion trascurrido el tiempo deseado. } if(EIN3) // Si verdadero inyectar en el cilindro 3 { IN3=1; // Abrir el inyector 3 WriteTimer1(tinyec); // Figar el preescaler del timer para que haga una interrupcion trascurrido el tiempo deseado. trpm=ReadTimer0(); // Lee el tiempo trascurrido desde la la inyeccion del cilindro 1 para saber el tiempo que ha tardado en dar un vuelta el motor y asi calcular el regimen de giro. } if(EIN4) // Si verdadero inyectar en el cilindro 4 { IN4=1; // Abrir el inyector 4 WriteTimer1(tinyec); // Figar el preescaler del timer para que haga una interrupcion trascurrido el tiempo deseado. Flag.CalculaRPM=1; //Informa al micro de que han pasado 2 vueltas desde la ultima correccion del relentin y que deve de hacer una nueva correccion. } } if(PIR1bits.TMR1IF) // ¿Ha llegado una interrupción en el timer 1 por haber terminado de contar? { PIR1bits.TMR1IF=0; // Borrar flag de interrupción del timer 1 ok=1; //informar al micro 2 de que la inyeccion ya la a hecho // Pararla inyeccion del inyector que estaba inyectando

Sistema de control per a un motor de combustió interna Pág. 17

IN1=0; IN2=0 IN3=0; IN4=0;

Nop(); ok=0; } } // Final de la interupcion

A.2.2. Programa amb preinjecció.

#include <p18f458.h> // Declaraciones de registros del PIC18F458 #include <adc.h> // Funciones de Conversor A/D #include <timers.h> // Funciones de los TIMERS #include <portb.h> // Funciones de los puertos de entrada de datos void InterruptHandlerHigh(void);

Pág. 18 Memoria

// DEFINICIONES HARDWARE #define IN1 LATCbits.LATC0 #define IN2 LATCbits.LATC1 #define IN3 LATCbits.LATC2 #define IN4 LATCbits.LATC3 #define EIN1 PORTCbits.RC4 #define EIN2 PORTCbits.RC7 #define EIN3 PORTCbits.RC6 #define EIN4 PORTCbits.RC5 #define ok LATBbits.LATB4 #define ACELE ADC_CH0 //definicion variavles auxiliares struct { unsigned CalculaRPM:1; /* Bit 0 */ unsigned :1; unsigned :1; unsigned :1; unsigned :1; unsigned :1; unsigned :1; unsigned :1; /* Bit 7 */

Sistema de control per a un motor de combustió interna Pág. 19

} Flag; double acele; unsigned int gas; double relenti; double gasdouble; unsigned int trpm; unsigned int auxinyec; double tinyec; double auxTinyec1; double auxTinyec2; double auxTinyec3; // programa void main(void) { // CONFIGURACIÓN DEL PIC, PUERTOS Y PERIFÉRICOS CMCON = 0x07; // Comparadores OFF, para disponer de puertos totalmente digitales I/O TRISA = 0xFF; // Entradas TRISB = 0b01101111; // Entradas y Salidas TRISC = 0b11110000; // Entradas y Salidas

Pág. 20 Memoria

TRISD = 0b11111111; // Entradas TRISE = 0xFF; // Entradas // CONFIGURACION DEL TIMER 0 PARA MEDIR LAS RPM DEL MOTOR OpenTimer0(TIMER_INT_OFF&T0_SOURCE_INT&T0_16BIT&T0_PS_1_32); // CONFIGURACION DEL TIMER 1 PARA CONTROLAR LOS TIEMPOS DE APERTURA DEL INYEC OpenTimer1(TIMER_INT_ON&T1_SOURCE_INT&T1_16BIT_RW&T1_PS_1_8&T1_OSC1EN_ON&T1_SYNC_EXT_ON); // Inicialización de actuadores trás un reset, todo desactivado // CONFIGURACIÓN DEL CONVERSOR A/D // Frecuencia fosc/64, justificación a la derecha, 3 canales analógicos, sin referencia de tensión, sin interrupciones OpenADC(ADC_FOSC_64 & ADC_RIGHT_JUST & ADC_3ANA_0REF, ADC_CH0 & ADC_CH1 & ADC_CH2 & ADC_INT_OFF); // inicializacion de las variables auxinyec=0; ok=0; trpm=0; relenti=0; acele=0; tinyec=0; Flag.CalculaRPM = 0; IN1=0; IN2=0; IN3=0; IN4=0;

Sistema de control per a un motor de combustió interna Pág. 21

// Registros de las interrupciones INTCON=0x00; INTCON=0b11010000; PIR1=0b00000001; PIE1bits.TMR1IE=1; IPR1bits.TMR1IP=1; RCONbits.IPEN=1; // Habilitar niveles de prioridad de interrupciones INTCONbits.GIEH=1; while(1) // Bucle infinito { // Conversion a digital de la posicion del acelerador SetChanADC(ACELE); // Selección CANAL 0 (AN0) PIN 2 MICRO ConvertADC(); // Inicio de conversión while(BusyADC()) // Conversor A/D Ocupado -> espera { }

Pág. 22 Memoria

gas=ReadADC(); // Leer el resultado conversión A/D (10 bits justificados a la derecha) gasdouble=((double)gas)/10.24; //regulacion del relentin //relenti en torno a una variacion de 100rpm if(Flag.CalculaRPM) { Flag.CalculaRPM=0; // Borrar flag if(trpm>=1953) //si es menor de 600 rpm { if(relenti<=15) { relenti=15; //Valor minimo del relentin } relenti=relenti*1.05; //aumento de un 5% en el tiempo de inyeccion

} else { if(trpm<=1802) //si es mayor de 650 rpm { if(relenti>=50) { relenti=50; //valor maximo del relentin } relenti=relenti*0.05; //Disminucion de un 5% en el tiempo de inyeccion } }

Sistema de control per a un motor de combustió interna Pág. 23

//Utiliza el mayor entre al acelerador y el relenti. if(relenti>=gasdouble) { acele=relenti; //Utilizar la que indica el relenti } else { acele=gasdouble; // Utilizar la que indica el acelerador } // Limite de velocidad de giro maxima if(trpm<=195) //este valor corresponde para el prescaler de 256 a 6000 rpm { acele=0; } // correccion de para calcular el tiempo de inyeccion

tinyec=65536-125*acele; //tinyec=65536-12500*acele/100;

auxTinyec1=(unsigned int)(tinyec+tinyec*0.2); //20% del tiempo para la preinyeccion auxTinyec2=(unsigned int)(tinyec+tinyec*0.1); //10% del tiempo por el retardo de combustion auxTinyec3=(unsigned int)(tinyec+tinyec*0.8); ///70% del tiempo para la inyeccion

} } // Fin Bucle Infinito } // Fin main

Pág. 24 Memoria

#pragma code InterruptVectorHigh=0x08 // Puntero que redirecciona al codigo de las interrupciones void InterruptVectorHigh(void) { _asm goto InterruptHandlerHigh _endasm } #pragma code #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh() // interrupciones de alta pioridad {

// Interrupcion externa generada por el micro dos para avisar de que es momento de inyectar y que a de mirar que cilindro es el que le toca

if(INTCONbits.INT0IF) { INTCONbits.INT0IF=0; // Borrar flag de interrupción T1CONbits.TMR1ON=1; //empieza a contar el timer 1

auxinyec=1; // Da el valor 1 indicar que ya ha pasado por la primera preinyeccion

Sistema de control per a un motor de combustió interna Pág. 25

if(EIN1) // Si verdadero inyectar en el cilindro 1 { IN1=1; // Abrir el inyector 1 WriteTimer1(auxTinyec1); // Figar el preescaler del timer para que

haga una interrupcion trascurrido el tiempo deseado. WriteTimer0(0); // Pone el timer 0 a 0 para que empiece a contar para

calcular el regimende giro del motor. } if(EIN2) // Si verdadero inyectar en el cilindro 2 { IN2=1; // Abrir el inyector 2. WriteTimer1(auxTinyec1); // Figar el preescaler del timer para que haga una interrupcion trascurrido el tiempo deseado. } if(EIN3) // Si verdadero inyectar en el cilindro 3 { IN3=1; // Abrir el inyector 3. WriteTimer1(auxTinyec1); // Figar el preescaler del timer para que haga una interrupcion trascurrido el tiempo deseado. trpm=ReadTimer0(); // Lee el tiempo trascurrido desde la la inyeccion del cilindro 1 para saber el tiempo que ha tardado en dar un vuelta el motor y asi calcular el regimen de giro. } if(EIN4) // Si verdadero inyectar en el cilindro 4 { IN4=1; // Abrir el inyector 4. WriteTimer1(auxTinyec1); // Figar el preescaler del timer para que haga una interrupcion trascurrido el tiempo deseado. Flag.CalculaRPM=1; //Informa al micro de que han pasado 2 vueltas desde la ultima correccion del relentin y que deve de hacer una nueva correccion.

Pág. 26 Memoria

} } if(PIR1bits.TMR1IF) // ¿Ha llegado una interrupción en el timer 1 por haber terminado de contar? {

PIR1bits.TMR1IF=0; // Borrar flag de interrupción del timer 1

switch(auxinyec) //decide el momento en el que se encuentra la inyeccion y por tanto cual es el siguiente paso.

{ case 1: // Finaliza la preinyeccion. auxinyec=2; // Da el valor 2 indicar que ya ha pasado por el retardo (tiempo si inyecrtar entre 2 inyecciones) // Cerrar los inyectores IN1=0; // Cerrar los inyectores IN2=0; IN3=0; IN4=0; WriteTimer1(auxTinyec2); // Figar el preescaler del timer para que haga una interrupcion trascurrido el tiempo deseado. break; case 2: // Comienza la inyeccion

Sistema de control per a un motor de combustió interna Pág. 27

auxinyec=3; // Da el valor 3 indicar que ya ha pasado por la la inyeccion, para que de esta forma cuando le vuelva a llegar una interrupcion sepa que el siguiente paso es el corte de la inyeccion.

if(EIN1) // Si verdadero inyectar en el cilindro 1 { IN1=1; // Abrir el inyector 1. WriteTimer1(auxTinyec3); // Figar el preescaler del timer para que haga una interrupcion trascurrido el tiempo deseado. } if(EIN2) // Si verdadero inyectar en el cilindro 2 { IN2=1; // Abrir el inyector 2. WriteTimer1(auxTinyec3);// Figar el preescaler del timer para que haga una interrupcion trascurrido el tiempo deseado. } if(EIN3) // Si verdadero inyectar en el cilindro 3 { IN3=1; // Abrir el inyector 3. WriteTimer1(auxTinyec3); // Figar el preescaler del timer para que haga una interrupcion trascurrido el tiempo deseado. } if(EIN4) // Si verdadero inyectar en el cilindro 4 { IN4=1; // Abrir el inyector 4. WriteTimer1(auxTinyec3); // Figar el preescaler del timer para que haga una interrupcion trascurrido el tiempo deseado. }

break; case 3: // Finaliza la inyeccion la inyeccion

Pág. 28 Memoria

T1CONbits.TMR1ON=0; //deja a contar el timer 1 auxinyec=0; // Da el valor 0 indicando que ya ha pasado por todo el proceso y que la proxima interrupcion sera una nueva inyeccion. ok=1; //informar al micro 2 de que la inyeccion ya la a hecho

// Cerrar los inyectores IN1=0; IN2=0;

IN3=0; IN4=0; Nop(); ok=0; break; } //fin del switch } //fin de if de la interrupcion del timer 1 } //fin interrupcion

Sistema de control per a un motor de combustió interna Pág. 29

B. Esquemes de connexió

Pág. 30 Memoria

Sistema de control per a un motor de combustió interna Pág. 31

Pág. 32 Memoria

C. Llista de components electrònics.

Descripción Unidades R 500 0,25W 5% 2 R 1k 0,25W 5% 1

R 4k7 0,25W 5% 4 R 10k 0,25W 5% 1 R 50k 0,25W 5% 2 R 100k 0,25W 5% 4

POT 470 k (Trimmer de carbón de una vuelta) 1

C 27pF pel. Cerámica subminiaturizado 4

C 330nF Poliester 10 % 63 V 1 C 100nF Poliester 10 % 100 V 4

C 1uF Aluminio axial 100V 85ºC 5 C 2200uF Aluminio axial 25V 85ºC 1

LED Difusor estandar rojo 1

BZX55C5V1 (Diodo, BZV55C5V1) 5 1N5817 1

P6KE20A 4 1N4004 1

MAX 232 (C.I., +5V, RS232) 1 LM324 (C.I., amplificador operacional) 1

PIC18F458 2 ZTB 20Mhz 2

IRFZ48N 4 TS7805 1

Conector telefonico 6 vias 1

Conector DB7 Hembra 1 Poste 2,54X13,5 MM 6

Jumper para poste 2,54X13,5 MM 2 Conector Hembra de 40 pines 1 Conector Hembra de 6 pines 1

Sistema de control per a un motor de combustió interna Pág. 33

D. Fitxes dels components electrònics més importants.

Se adgunta las paguinas de los manuales echas servir ya que los manuales enteros no hacen falta para la comprension de este sistema.

Pág. 34 Memoria

D.1. Microcontrolador

D.1.1. Pin diagram

Sistema de control per a un motor de combustió interna Pág. 35

D.1.2. Device overview

Pág. 36 Memoria

Sistema de control per a un motor de combustió interna Pág. 37

Pág. 38 Memoria

Sistema de control per a un motor de combustió interna Pág. 39

Pág. 40 Memoria

Sistema de control per a un motor de combustió interna Pág. 41

Pág. 42 Memoria

Sistema de control per a un motor de combustió interna Pág. 43

D.1.4. Oscillator

Pág. 44 Memoria

Sistema de control per a un motor de combustió interna Pág. 45

Pág. 46 Memoria

Sistema de control per a un motor de combustió interna Pág. 47

Pág. 48 Memoria

Sistema de control per a un motor de combustió interna Pág. 49

Pág. 50 Memoria

D.1.5 Reset

Sistema de control per a un motor de combustió interna Pág. 51

Pág. 52 Memoria

Sistema de control per a un motor de combustió interna Pág. 53

Pág. 54 Memoria

Sistema de control per a un motor de combustió interna Pág. 55

Pág. 56 Memoria

Sistema de control per a un motor de combustió interna Pág. 57

Pág. 58 Memoria

Sistema de control per a un motor de combustió interna Pág. 59

Pág. 60 Memoria

Sistema de control per a un motor de combustió interna Pág. 61

Pág. 62 Memoria

D.1.6. Interrupts

Sistema de control per a un motor de combustió interna Pág. 63

Pág. 64 Memoria

Sistema de control per a un motor de combustió interna Pág. 65

Pág. 66 Memoria

Sistema de control per a un motor de combustió interna Pág. 67

Pág. 68 Memoria

Sistema de control per a un motor de combustió interna Pág. 69

Pág. 70 Memoria

Sistema de control per a un motor de combustió interna Pág. 71

Pág. 72 Memoria

Sistema de control per a un motor de combustió interna Pág. 73

Pág. 74 Memoria

Sistema de control per a un motor de combustió interna Pág. 75

Pág. 76 Memoria

Sistema de control per a un motor de combustió interna Pág. 77

Pág. 78 Memoria

D.1.7. I/O Ports

Sistema de control per a un motor de combustió interna Pág. 79

Pág. 80 Memoria

Sistema de control per a un motor de combustió interna Pág. 81

Pág. 82 Memoria

Sistema de control per a un motor de combustió interna Pág. 83

Pág. 84 Memoria

Sistema de control per a un motor de combustió interna Pág. 85

Pág. 86 Memoria

Sistema de control per a un motor de combustió interna Pág. 87

Pág. 88 Memoria

Sistema de control per a un motor de combustió interna Pág. 89

Pág. 90 Memoria

Sistema de control per a un motor de combustió interna Pág. 91

Pág. 92 Memoria

D.1.8. Timer

Sistema de control per a un motor de combustió interna Pág. 93

Pág. 94 Memoria

Sistema de control per a un motor de combustió interna Pág. 95

Pág. 96 Memoria

Sistema de control per a un motor de combustió interna Pág. 97

Pág. 98 Memoria

Sistema de control per a un motor de combustió interna Pág. 99

D.1.9. USART

Pág. 100 Memoria

Sistema de control per a un motor de combustió interna Pág. 101

Pág. 102 Memoria

Sistema de control per a un motor de combustió interna Pág. 103

Pág. 104 Memoria

Sistema de control per a un motor de combustió interna Pág. 105

Pág. 106 Memoria

Sistema de control per a un motor de combustió interna Pág. 107

Pág. 108 Memoria

Sistema de control per a un motor de combustió interna Pág. 109

Pág. 110 Memoria

Sistema de control per a un motor de combustió interna Pág. 111

Pág. 112 Memoria

Sistema de control per a un motor de combustió interna Pág. 113

Pág. 114 Memoria

D.1.10. A/D Converter

Sistema de control per a un motor de combustió interna Pág. 115

Pág. 116 Memoria

Sistema de control per a un motor de combustió interna Pág. 117

Pág. 118 Memoria

Sistema de control per a un motor de combustió interna Pág. 119

Pág. 120 Memoria

Sistema de control per a un motor de combustió interna Pág. 121

Pág. 122 Memoria

D.1.11. Electrical characteristics.

Sistema de control per a un motor de combustió interna Pág. 123

Pág. 124 Memoria

Sistema de control per a un motor de combustió interna Pág. 125

Pág. 126 Memoria

Sistema de control per a un motor de combustió interna Pág. 127

Pág. 128 Memoria

Sistema de control per a un motor de combustió interna Pág. 129

Pág. 130 Memoria

Sistema de control per a un motor de combustió interna Pág. 131

Pág. 132 Memoria

Sistema de control per a un motor de combustió interna Pág. 133

Pág. 134 Memoria

Sistema de control per a un motor de combustió interna Pág. 135

Pág. 136 Memoria

Sistema de control per a un motor de combustió interna Pág. 137

Pág. 138 Memoria

D.2. Amplificador operacional, tractament de la senyal

Sistema de control per a un motor de combustió interna Pág. 139

Pág. 140 Memoria

Sistema de control per a un motor de combustió interna Pág. 141

Pág. 142 Memoria

Sistema de control per a un motor de combustió interna Pág. 143

Pág. 144 Memoria

Sistema de control per a un motor de combustió interna Pág. 145

Pág. 146 Memoria

Sistema de control per a un motor de combustió interna Pág. 147

Pág. 148 Memoria

Sistema de control per a un motor de combustió interna Pág. 149

Pág. 150 Memoria

Sistema de control per a un motor de combustió interna Pág. 151

D.3. Mosfet injector potència.

Pág. 152 Memoria

Sistema de control per a un motor de combustió interna Pág. 153

Pág. 154 Memoria

Sistema de control per a un motor de combustió interna Pág. 155

Pág. 156 Memoria

Sistema de control per a un motor de combustió interna Pág. 157

Pág. 158 Memoria

Sistema de control per a un motor de combustió interna Pág. 159

D.4. Avanç de la injecció, protocol RS-232.

Pág. 160 Memoria

Sistema de control per a un motor de combustió interna Pág. 161

Pág. 162 Memoria

Sistema de control per a un motor de combustió interna Pág. 163

Pág. 164 Memoria

Sistema de control per a un motor de combustió interna Pág. 165

Pág. 166 Memoria

Sistema de control per a un motor de combustió interna Pág. 167

Pág. 168 Memoria

Sistema de control per a un motor de combustió interna Pág. 169

Pág. 170 Memoria

Sistema de control per a un motor de combustió interna Pág. 171

Pág. 172 Memoria

Sistema de control per a un motor de combustió interna Pág. 173

Pág. 174 Memoria

Sistema de control per a un motor de combustió interna Pág. 175

Pág. 176 Memoria

Sistema de control per a un motor de combustió interna Pág. 177

Pág. 178 Memoria

Sistema de control per a un motor de combustió interna Pág. 179

Pág. 180 Memoria

Sistema de control per a un motor de combustió interna Pág. 181