Como contar o intervalo entre pulsos? para RPM

Fórum sobre plataforma Arduino

Moderadores: andre_luis, 51, guest2003, Renie

Como contar o intervalo entre pulsos? para RPM

Mensagempor Deivid Roza » 21 Set 2016 13:13

Olá galera seguinte eu preciso saber o RPM de um carro, até então tenho 3 idéias em mente:

1= Pegar o valor de pulsos em 1 segundo, calcular e mostrar (funcionando)
2= Calcular o intervalo entre um pulso e o outro (projeto em andamento)
3 = Usar um conversor de frequência em voltagem lm2907 lm2917 (estou aguardando chegar o componente para testar)

Então galera alguem saberia me dizer qual a forma mais precisa, rápida e eficaz de fazer isso? só uma dica, tenho um modulo da FUELTECH aqui, um FT250 e dentro dele ele usa um simples regulador de voltagem para filtrar o pulso da bobina e depois disso vai direto para uma porta de um chip (raspado). logo ele não usa CI para converter o sinal do rpm em voltagem.

Resumindo amigos, precisava da ajuda de vocês para fazer este codigo onde faz a leitura do intervalo entre pulsos. sómente contando o intervalo em MICROS entre um pulso e o outro já me serve, o restante eu vou acertando com tempo, pois tem calculo de tempo, RPS, RPM, grau, N: de cilindros etc.... ai é comigo
Deivid Roza
Bit
 
Mensagens: 24
Registrado em: 14 Set 2016 12:42

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor barboza » 21 Set 2016 15:36

Penso que se sua necessidade é RPM, sua opção 1 já seja o suficiente...

Pra que precisaria saber o intervalo entre pulsos? É importante saber se são periódicos?
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor tcpipchip » 21 Set 2016 15:38

que ano é o seu Carro ?
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor barboza » 21 Set 2016 15:39

tcpipchip escreveu:que ano é o seu Carro ?


o que isso muda no problema dele?
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor tcpipchip » 21 Set 2016 15:46

vamos aguardar a resposta dele!
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor andre_luis » 21 Set 2016 21:22

Não gosto muito da ideia de trabalhar com analogico em carro, o ambiente é muito propenso á interferencias.
A ideia do tacometro parece ser a mais conveniente.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor Deivid Roza » 22 Set 2016 13:17

Bom vamos lá. primeiro agradecer a atenção de vocês, a principio não queria entrar a fundo nessa parte mais "técnica" do assunto, pois são diversas coisas que podem dar mais dores de cabeça, então como já tenho a base disso tudo em mãos só queria resolver a forma como o RPM é "contado".

Bom primeiramente o carro é de 86 e o sistema utilizado é o sistema indutivo (uma bobina dentro do distribuidor que a cada "passada" envia um sinal para a ignição eletronica, que por sua vez dispara um pulso negativo para o pino (-) da bobina efetuando o disparo da faisca, o pino (+) fica direto no 12v pos-chave.
Logo teremos no pino (-) um pulso 1 e 0. para evitar problemas fiz um filtro de entrada de tensão para o arduino e um regulador de tensão. estou usando um apto-acoplador para filtrar e separa os pulsos vindo da bobina para a porta D2 interrupt do arduino. até ai tudo certo.

Respondendo a pergunta de outro amigo: Sim a forma numero 1 é muito boa, se for falar em praticidade, e confiança ela é sem duvidas pramin a melhor forma de se contar o rpm, porem ai entra um simples fato de que preciso saber a cada pulso o valor de RPM exato, pois o arduino ira executar uma função (calculos) a cada pulso, i se eu esperar a quantidade de pulsos durante 1 segundo eu vou ter muita variação de RPM pois um caro leva milesimos de segundos para alterar o RPM.

Um exemplo muito basico de uma função que tenho aqui é a seguinte:

Código: Selecionar todos
if (rpm > corte) // os valores estao setados em variaveis.
      {
       digitalWrite(bobina, LOW);
      }
if (rpm < corte) // os valores estao setados em variaveis.
      {
       digitalWrite(bobina, HIGH);
      }



Oque temos acima é uma função chamada de CORTE de IGNIÇÃO, isso evita que o motor do carro passa de determinado RPM logicamente esta na forma bruta, pois existe uma variavel de INTERVALO entre HIGH e LOW seria algo do tipo:
Código: Selecionar todos
if (rpm > corte) // os valores estao setados em variaveis.
      {
       digitalWrite(bobina, LOW);
      }
if (rpm < (corte - intervalo)) // os valores estao setados em variaveis.
      {
       digitalWrite(bobina, HIGH);
      }



Isso evita do corte ficar muito rápido, logicamente pode ser programado a gosto, e também temos uma outra função chamada de inércia, onde quanto + rpm for setado no valor corte menor será o valor de corte :roll: (enrolei tudo kk) exemplo:
----
ex1:
CORTE = 1000
INERCIA= 0
carro corta em 1000 RPM.
----
ex2:
CORTE= 8000
INERCIA=1000
carro corta em 7000, após o primeiro corte se ajusta inércia automático até INERCIA=0 ai segura o motor em 8000 cortando( HIGH, LOW)
----

Entre outras coisas a mais que precisa ter para ser perfeito e eficaz. porem vou explicar oque ocorre.
Digamos que estou usando um codigo que leva 1segundo para ler o RPM. logo tenho algo + - assim no meu monitor serial:

RPM:1000
RPM:1200
RPM:850
..
.
ai eu programo meu carro para corta em 5000, ai tenho isso em monitor serial:

RPM: 1000
RPM: 1350
RPM: 1590
RPM: 2400
RPM: 3900
RPM: 4800 (ultima leitura foi em 4800, logo após 1 seg vou ter muuuito mais que 5000 observe...)
RPM: 5700 bobina = low (arduino percebeu que passou de 5000 e desligou a bobina imprimiu no monitor tbm)
RPM: 5100
RPM: 4300 bobina = high (arduino tornou a ligar a bobina pois rpm esta a baixo de 5000)


Bom agora seguinte alem disso tenho outro problema!!! Que és zerar o rpm entre uma contagem e a outra. ai digamos que o arduino perceba que:
RPM: 5700 bobina = low (arduino percebeu que passou de 5000 e desligou a bobina imprimiu no monitor tbm)
logo apos esta leitura o valor de rpm se torna ZERO até se passar 1 segundo. logo se RPM for menor que CORTE a bobina vai pra HIGH tornando a acelerar o carro. veja:
Código: Selecionar todos
if (rpm > corte)
      {
       digitalWrite(bobina, LOW);
      }
if (rpm < corte) // RPM menor que CORTE bobina = high.
      {
       digitalWrite(bobina, HIGH);
      }


neste ponto entre uma contagem e a outra oque acontece é que RPM fica zerado, ai pode estar 10.000 de RPM o código atualizar o valor RPM, vai mandar deligar a bobina e após isso o RPM vai pra zero tornando a ligar a mesma.

Digitando agora aqui acabei de ter uma ideia, posso fazer o seguinte não zerar o contador mais manter o valor RPM em uma variável e só atualizar quando o contador fizer uma nova leitura.

Logicamente posso diminuir esse tempo de 1 segundo para 250milis e multiplicar o resultado por 4. vai ficar + rápido a atualização.

Mais então pessoal ficou meio gigante aqui rsrs mais espero que tenha explicado oque se passa no meu projeto. a prévia do fim será a cada pulso de entrada (interrupção) o arduino vai ler massa de ar, sonda, tps, map, maf, vai comparar com o mapa de injeção e vai fazer a pulsarem dos bicos. isso mais alem kkk agora o problema é o rpm mesmo rsrsr
Deivid Roza
Bit
 
Mensagens: 24
Registrado em: 14 Set 2016 12:42

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor andre_luis » 22 Set 2016 15:14

Se o objetivo é ter uma precisão boa nos RPMs mais altos ( que é onde te interessa fazer o corte ), de certo modo podemos prover o sistema com uma certa “inteligência”, que seria utilizar a velocidade anterior para determinar a nova taxa de amostragem. O fato de você estar utilizando 1s para todas as velocidades, isso torna mais fácil a programação, mas o resultado acaba saindo com uma precisão menor. E ainda, dependendo do uC no qual esteja baseado seu kit Arduino, se tiver Timer capaz de operar em modo de captura, e se tiver biblioteca pra isso, o resultado vai ficar com uma precisão bem razoável.

Enfim, acho que vai ter de pesquizar a fundo os recursos disponiveis no seu kit.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor Deivid Roza » 22 Set 2016 18:32

Então meu amigo gostei da idéia, mais seguinte ai que mora o problema, por que precisava saber o RPM atraves do intervalo entre os pulsos, pois vou executar uma função a cada pulso, outra coisa que acho que vai dar certo seria o uso de um codigo simples como do exemplo 1 porem reduzir o tempo da contagem do rpm em 250milis e multiplicar o valor por 4, ou por 125milis e multiplicar o resultado por 8. que daria no mesmo, ai para não zerar o contador eu poderia armazena o valor atual do rpm em
atual-rpm ai deixava atual-rpm na tela, e só atualizava apos uma nova contagem de rpm. isso acabaria com o problema de "zerar" o valor de rpm ;) a aceleraria o valor da atualização assim seria muito mais preciso.

Agora acabei de descobrir que alguns modulos de injeção que não gerencia "ponto" fazem a leitura em 100millis. tanto em baixa quanto em altas rotações. (informação interna da MegaSquirt) pois eles trabalham com RPM faixa de valores como de 600-800-1400-2500-3800-4500-5800-6200-6900-7400-8000 ai a atualização se encaixa dentro deste valor ;)

Mesmo assim gostaria de fazer como nos exemplos 2 e 3, pois preciso de muita precisão se for gerenciar ponto, muita mesmo.
Pois vou precisar medir direto na rodafonica para saber exatamente o estado dos pistões para efetuar o ponto de descarga de corrente assim como a quantidade de retardo/avanço da injeção.

Mais como disse ai já é ouuutro caso rsrsrs

Vou estudar um pouco essa questão que citei sobre não zerar o valor de rpm. ai amanhã posto novidades, obrigado pela atenção.
Deivid Roza
Bit
 
Mensagens: 24
Registrado em: 14 Set 2016 12:42

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor tcpipchip » 22 Set 2016 20:13

Putz...se fosse 1996 eu iria pedir para usares CAN-BUS e pegar o PID de RPM...da ECU

Eu fiz para meu carro uma painel touch onde ele pego várias varíaveis do carro, MAF, RPM, etc....
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor Deivid Roza » 23 Set 2016 10:55

Boa eu ja usei can-bus. Pretendo fazer um para por no gol g4.

Entao amigos akguma dica sobre o intervalo de leitura entre pulsos?

Enviado de meu LG-E415f usando Tapatalk
Deivid Roza
Bit
 
Mensagens: 24
Registrado em: 14 Set 2016 12:42

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor denis » 23 Set 2016 11:17

tcpipchip escreveu:Putz...se fosse 1996 eu iria pedir para usares CAN-BUS e pegar o PID de RPM...da ECU

Eu fiz para meu carro uma painel touch onde ele pego várias varíaveis do carro, MAF, RPM, etc....


Como conseguiu o mapa da CAN ?
denis
Byte
 
Mensagens: 257
Registrado em: 06 Mar 2007 12:29
Localização: Americana - SP

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor brasilma » 23 Set 2016 11:40

Para uma precisa avaliação do tempo o ideal é utilizar interrupção e um timer.

A cada interrupção lê o valor de tempo no timer e reinicializa.

Dá uma olhada aqui:

http://dobitaobyte.com.br/interrupcao-e ... m-arduino/
http://www.embarcados.com.br/timers-do- ... o-arduino/
http://forum.arduino.cc/index.php?topic=223426.0
http://automatobr.blogspot.com.br/2012/ ... timer.html
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor Deivid Roza » 23 Set 2016 12:18

Boa, fiz algo parecido so que em millis, mais nao funcionou :(
Vou tentar fazer em micros para ser + preciso.

Outra coisa segundo meu codigo eu dou um start millis no setup, ai na funcao chamada pelo interrupt eu guardo o valor de millis em last-millis ai na proxima interrupçao eu pego current-millis e diminuo por last-millis ai tenho o tempo de intervalo certo.
Ai em loop eu pego rpm-valor e vejo quantas vezes ele cabe dentro de. 1 segundo, ai pego o rrsultado e faço as multiplicaçoes da formula rpm.

Porem n deu certo. Logo mais vou tentar de 2 formas ai posto aqui as duas formas com codigo e resultado

Enviado de meu LG-E415f usando Tapatalk
Deivid Roza
Bit
 
Mensagens: 24
Registrado em: 14 Set 2016 12:42

Re: Como contar o intervalo entre pulsos? para RPM

Mensagempor brasilma » 23 Set 2016 14:19

Até para ser mais comodo, o teste do seu sistema pode utilizar como fonte de sinal um oscilador feito com um 555, assim você tem mais controle sobre esta variável!
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Próximo

Voltar para ARDUINO

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x