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: 10096

Responder esta

Respostas a este tópico

Estou terminando um projeto de injeção eletrônica para um moto clássica com carburador duplo seguindo os preceitos de uma injeção mono ponto porque não da pra ficar alterando cabeçote e tenho que manter as peças originais como carburador, CDI etc.
Fiz algumas analises com estudos de PWM para tentar dosar a quantidade de combustível usando um Arduíno nano mas sem sucesso.
Só consegui realizar a dosagem quando deixei de pensar em PWM, isto porque existe o movimento de um cilindro de 4 tempos se altera com a aceleração e um bico injetor utiliza em média 2 ms de tempo de injeção corrigido pelo modo de acordo com os sensores padrão.

Como um processamento de 16 Mhz do arduino nano é perfeitamente possível simular a injeção em várias rotações como verifiquei utilizando as funções delaymicroseconds() e  millis().

Boa tarde, 

Já li em algum lugar que a velocidade de processamento do Arduino seria limitada para fazer uma injeção eletrônica. E no caso, o cara estava recomendando uma placa com STM32. 

O STM32 tem um problema de precisão de tempo que encontrei ao realizar testes utilizando Arduíno IDE .

Veja o link.

http://forum.fernandok.com/viewtopic.php?f=9&p=7184&sid=cf1...

Imprecisão de tempo no STM32 ???

Opa, custo em acreditar nisso. 

Aconselho a abrir um novo tópico sobre isso, como o meu amigo Rui recomendou. 

A gente pode ajudar na pesquisa. 

Se você puder fazer um teste para comparar, eu ficaria muito agradecido.

Postei tudo o que tinha de outro fórum a respeito em um novo post.

[ ] ´s

Bom dia CB,

Que tal abrir um novo tópico sobre seu projeto?

RV

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço