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(" ");
}
Tags:
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por