Bom estou realizando um projeto de controle de velocidade de um motor cc e para tal preciso dos valores de rpm do motor para encontrar a resposta degrau. Contudo quando faço as medições os valores de rpm estão dando entre 480 a 600 rpm, sendo que esse valor deveria está em torno de 270 rpm (velocidade do motor utilizado na planta). Então não consigo enxergar o que poderia está causando esse problema.

Exibições: 352

As respostas para este tópico estão encerradas.

Respostas a este tópico

Boa noite LPM, (se não gosta que te chame pelas iniciais, avise),

Recomendações:
1. Remova seu sketch da área de texto do seu tópico;
2. Leia http://labdegaragem.com/forum/topics/sugest-o-de-como-postar
3. Comente as linhas do seu sketch. Fica mais fácil entender o que vc quer fazer com cada
linha e facilita a ajuda.
4. Clique em : " Deseja carregar arquivos? " e depois em " Escolher arquivo" e anexe o arquivo
com o seu sketch.

RV mineirin

Boa noite, já corrigi a postagem.

Excelente.

Me fale um pouco mais do seu projeto.

Ele é um "tacômetro" e está medindo a RPM de um motor externo?

Com que dispositivo você está medindo os pulsos deste motor?

Qual ucontrolador você está usando?

Post um esquema do seu projeto, mesmo feito a mão livre.  Ajuda muito.

RV mineirin

Estou utilizando um enconder de 20 pulsos e um sensor de velocidade módulo enconder acoplador óptico.

Postei um vídeo do projeto

Vel_motor.mp4

Boa tarde LPM(se não gosta que te chame pelas iniciais, avise),

ontem escrevi um texto sobre seu sketch, mas na hora que fui publicar deu problema aqui 

no fórum.

Aí mandei um email para o dono do site e ele só me respondeu hoje, e agora consegui logar. novamente.

Segue o texto que escrevi sobre seu sketch:

Uma breve analise do seu sketch.
Você diz que o sensor identifica 20 pulsos a cada volta do motor,
e que o motor deveria estar girando a 270 RPM.


Você mede a rotação a cada 100 mseg.


Fazendo as contas;
270 RPM * 20 pulsos por voltas = 5400 pulsos por minuto
5400 pulsos por minuto = 90 pulsos por segundo.
90 pulsos por segundo = 0,9 pulsos por 100 mseg < menor que 1.
Isto já daria um erro muito grande de medida.


Mas vamos continuar:


Você faz o calculo da RPM e em seguida atualiza seu contador de milis(),
Mas logo você faz 5 serial print.


Como você está usando 9600 bps, e cada linha de impressão leva +- 120 mseg
e então se passam 600 milisegundos e você ainda não habilitou interrupt novamente.
Assim vai entra no if de millis() - tempo_passado >= 100 ante de qq interrupt.

Espero ter ajudado.

RV mineirin

Boa tarde,

Entendi que o erro em se medir pulsos a cada 0,1 segundo é maior do que 10% e se medir a cada segundo, o erro diminui para mais do que 1%.

O tempo de impressão pode afetar a medida pois enquanto imprime, o millis() vai aumentando sem a interrupção estar ativa. Sugiro resetar as variáveis tempo-passado e pulsos logo antes de habilitar a interrupção, depois da impressão.

Para aumentar a precisão, poderá aumentar o intervalo de medida para 5, 10 segundos ou mais.

É isso mineirin RV?

Boa sorte e muita saúde,

  'Eiju

Tentei fazer isso, porém não o erro persiste.

Experimente este código, por favor:

https://gist.github.com/eijuito/e4b7bbc4356cd87a9c8f59521f0b94e8

Boa sorte e muita saúde,

  'Eiju

estou entendendo! muito obg!!

Fiz algumas alterações no código, alterando  if de millis() - tempo_passado >= 1000 e retirei 3 linhas de impressão e o erro persistiu. 

Boa noite,

Sobre a equação: 

"rpm = (60 * 1000/ pulsos_por_volta) / (millis() - tempo_passado)* pulsos;"

Uma rotação(volta) = 20 pulsos (encoder usado no projeto)

1 RPM = 1 volta / 60 segundos ou 20 pulsos / 60.000 ms 

// Aciona o contador a cada pulso   attachInterrupt (0,contador, FALLING);

void contador()
{
pulsos++;   // incrementa o contador
}

// Atualiza o contador a cada 100 milisegundos ou mais !  (Incorreto dizer a cada segundo) 

if (millis()- tempo_passado>= 100)

Período de tempo do contador = (millis() - tempo_passado)   em milisegundos 

Contador = numero de pulsos contados durante o periodo acima. 

Conferindo a equação incorreta: 

Supondo 270 RPM ou    270 x 20 pulsos / 60.000 ms 

                                   5400 pulsos / 60.000 ms =  0,09 pulsos a cada milisegundo 

Supondo o Período de 100 ms 

Pulsos = 100 ms x 0,09 pulsos/ ms = 9 pulsos a cada 100 ms

( que é uma contagem pequena para o calculo de RPM!

rpm = (60 * 1000/ pulsos_por_volta) / (millis() - tempo_passado)* pulsos

RPM = (60 * 1000/ 20) / 100 ms * 9 =  3.000 / 900 =  3,333 ( incorreto) 

Origem do erro:

https://forum.arduino.cc/t/help-with-rpm-counter-coding/232812

Colegas, acho que me enganei.

A precedência das operações na Linguagem C é diferente da matemática tradicional. 

https://www.baldengineer.com/arduino-math-fixes.html

De toda forma seguem as minhas sugestões. 

A equação original do tópico esta correta também. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço