Boa noite pessoal, estou com uma séria dificuldade pra desenvolver meu TCC que é um projeto de uma injeção eletrônica com arduino, basicamente estou querendo fazer a leitura do RPM, Ãngulo de posição da borboleta, e gerar um pulso PWM onde o duty cicle vai variar conforme o potenciometro da borboleta. Tenho o código que estarei inserindo abaixo que por enquanto não funciona, gostaria de ver se alguém tem alguma luz sobre o que está errado nesse código. 

/* Firmware - controleInjecaoEletronica
Renato Silva de Carvalho


Este firmware tem a finalidade de fazer o controle
da injecao de combustivel atraves do sensoriamento
da rotacao e sensor de posicao da borboleta
*/

#include <LiquidCrystal.h>


LiquidCrystal lcd(13,12,11,10,9,8);


// Variaveis

int injetor = 6;
int borboleta = A0;
int janela = 0;
float Borboleta;
float tps; //Variavel para receber a variação da posição da borboleta
const long int periodo = 500000; // definindo o periodo
unsigned long voltaVolante = 0; // Rotacao do motor
unsigned long time = 0; // Tempo total
unsigned long tempRotMot = 0 ;
unsigned long ti = 0 ;
unsigned long tioff = 0 ;


void rotacaoMotorInterrupt()
{
long aux = 0;
time = millis(); //mili S
aux = time - voltaVolante; // diferença entre o tempos
voltaVolante = time;
tempRotMot = aux;
}

void setup ()

{

lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("INJ ELETRONICA");

pinMode (injetor, OUTPUT);

delay (2000);

attachInterrupt(0, rotacaoMotorInterrupt, RISING); // Interrupcao na saida da porta 2 (0 = a porta 2)


}

void loop ()

{

Borboleta = analogRead(borboleta);

// map it to the range of the analog out:
tps = map(Borboleta, 0, 1023, 0, 90);

janela = ((1/(tempRotMot/60))* 1000);

// vai iniciar um duty cicle minimo de 5% da janela
// somando a porcentagem de 0 a 90% que sera referente ao
// angulo de aceleracao

ti = ( (janela * 0.05) + ((janela * tps) / 100) );
tioff = (janela - ti);

// acionamento do Injetor

digitalWrite (injetor, HIGH);
delay (ti);
digitalWrite (injetor, LOW);
delay (tioff);

}

void telaLcd()
{

lcd.setCursor(0, 0);
lcd.print("PER.:");
lcd.print(janela);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("TPS:");
lcd.print(tps);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print("RPM:");
lcd.print(tempRotMot);
lcd.print(" ");

}

Exibições: 10104

Responder esta

Respostas a este tópico

Oi JM, boa tarde.

Este "disco dentado com um dente faltando", chama-se roda fônica.

Rui

   Bom dia, essa questão de sincronismo, é o seguinte: Para a injeção do combustível não é tão importante em se tratando de um sistema monoponto, pois o combustível entra pulverizado no sistema de admissão, e o que acaba acontecendo é que pode haver uma perda de eficiência, um sistema um pouco mais gastão do que seria que se conseguissemos uma injeção sincronizada no tempo de explosão. Mas mesmo assim, o injetor de combustível teria de ficar posicionado diretamente na câmara de combustão o que não é o caso do sistema monoponto. 

    Esse tipo de conceito é utilizado em sistemas mais otimizados, para uma injeção sequencial multiponto, com um bico injetor por cilindro.

     Agora para o sistema de ignição (centelhamento) é imprescindível uma precisão de tempo de execução extremamente em tempo real de funcionamento, porque a centelha precisa por exemplo estar sincronizada com o PMS do motor (Ponto Morto Superior) em graus, o que significa que o momento de centelha precisa estar por exemplo a 9 graus de volta do virabrequim conduzir o pistão ao topo, antes do pistão chegar ao topo coisa de poucos milisegundos seria o momento exato de centelhamento para que o motor funcione com precisão, do contrário, o motor fica realmente fraco, no caso de um atraso, e no caso de um adiantamento da centelha o motor começa a bater pino, começa a pré detonar o que pode ocasionar um problema sério de quebra de pistão, ou outras partes móveis do motor.

           Mas no sistema que estou tentando desenvolver Rui, seu tacometro funciona com uma precisão excelente, agora a única coisa que precisamos para funcionar o sistema é um disparo de PWM sincronizado com a borda de subida do sinal do distribuidor, para fazer o acionamento do circuito do bico injetor, daí o sistema de ignição vou utilizar um sistema de ignição eletrônica da Bosch mesmo, e farei o controle apenas do gerenciamento do motor pela injeção de combustível.

   Renato

Renato bom dia.

Qual motor pretende usar com essa injeção  eletrônica?  Qual faixa de rpm ?

Você  já  informou que é  monoponto. 

   Um amigo meu irá emprestar um baja para os testes, esse baja está com motor de santana 2.0, por enquanto está funcionando carburado, mas já tem ignição eletrônica da bosch, a faixa de giro está para partida por volta de 100 a 400 RPM, marcha lenta por volta de 1000 rpm, e limite de giro está entre 6000 e 7000 rpm.

      O que será necessário controlar é somente a injeção de combustível a partir do ângulo da borboleta.

Renato

Estou curioso para saber se um Arduino dará conta de controlar 6000 ou 7000 rpm. 

Boa sorte !

       Pessoal, estava dando uma estudada nas funções de geração de PWM e com digitalWrite a gente consegui gerar um PWM com controle de frequência e DutyCicle, porém com essa função não pode estar sendo usada nenhuma interrupção externa o que causa conflito na geração do PWM, será que é difícil integrar dois Arduinos, um pra fazer a leitura da rotação e sensores, e outro pra processar o sinal do PWM mediante os valores de frequência e Duty Cicle que ele deve trabalhar?

Renato não estudei o seu programa, mas pode bloquear as interrupções usando essas funções :

https://www.arduino.cc/en/Reference/Interrupts

void loop()
{
noInterrupts();
// critical, time-sensitive code here
interrupts();
// other code here
}

   Entendi José Gustavo, vou tentar fazer algum programa utilizando essas estruturas.

Obrigado.

Renato em uma injeção eletronica o que determina o tempo de abertura dos bicos é o vácuo e não a posição da borboleta, o sinal de posição de borboleta (TPS) é utilizado para determinar quando o carro está desacelerando afim de cortar a injeção de combustível para eventual economia e tb para determinar a "injeção rápida" onde é injetado um excedente de combustível em uma aceleração brusca como em carburadores.
Essa informação é correta, vai por mim, já programei várias fueltech e pandoo.

Esse menino, adora um quebra-cabeças ! 

Grande abraço, Rui ! 

Oi gente, sou novo por aqui. Conseguiram fazer funcionar?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço