Olá, estou montando um sistema de aquisição de dados na plataforma Arduino.

Sensores:

-2x DS18B20

-4x indutivo PNP

-1x hall

-1x termopar K

-1x capacitivo

-rtc

Exposiçao:

-LCD 128x64

-4x led

-Sd card (datalogger)

A leitura dos sensores ds18b20, termopar e capacitivo não são um problema, pois temperatura é uma variavel de dinamica lenta, e o capacitivo é uma chave Lo-Lo, logo a taxa de amostragem no datalogger não é um problema, o problema surge nos sensores Hall e indutivo, que são tacometros, implementados pelo metodo de interrupção para contagem de revoluções, a escrita no data logger não possui limitações temporais no loop, ou seja, ocorre com taxa de amostragem igual a frequencia do ciclo de sketch, atualmente observo uma média de tempo entre cada escrita no data logger de 170 a 250 mili segundos, isso desconsiderando o problema de perda de interrupções em certas partes do ciclo com pausas para calculos algebricos para tratamento de variaveis de saída e escrita no datalogger, preciso saber se há um metodo de diminuir esse tempo de ciclo ou se estou fadado a este problema usando o Arduino Mega2560

Exibições: 330

Responder esta

Respostas a este tópico

Bom dia AD,

você está usando 5 interrupts.

1 para o hall e 4 para os indutivos. Correto?

  Dentro da rotina de interrupção   "chamada"  pelo interrupt, use o minimo de instruções possível.

  Eu tenho por pratica usar somente a mudança de status de um flag.

 

O Mega em cada instrução (instrução de maquina) gasta somente 625 nSeg (1/16.000.000 segundos)

para executar. 

Sugiro que para que possamos entender melhor sua dificuldade que faça assim:

     

Clique em : " Deseja carregar arquivos? " e depois em " Escolher arquivo" e
      anexe o arquivo com o seu sketch. 

Leitura: https://stackabuse.com/speeding-up-arduino/

RV

Bom dia mineirin, estou em aula agora porem assim que possível faço o upload do sketch, obrigado pela resposta

Bom dia, 

Quais são os RPMs dos sensores ?

Dependendo do RPM, sugiro que ao fazer uma contagem de RPM, iniba outras interrupções até terminar. 

até 5000 no hall (um imã por revolução)

indutivo máximo de 600rpm (porém com 13 dentes por revolução)

É uma medição de RPM alto para o Arduino. 

Acho que vai ter que inibir outras interrupções ao fazer a contagem de cada  RPM (minha sugestão). 

https://www.arduino.cc/reference/en/language/functions/interrupts/n...

é uma taxa de 80hz pro hall e 130hz no indutivo em média, não posso afirmar que seja baixa, mas considerando um clock de 16Mhz achei que nãos seria muita coisa, quando você se refere a inibir interrupções, voce fala da parte do código onde eu transformo o período de pulso em rpm? ou inserir ou dentro das ISR?

Dentro da rotina de contagem do RPM. 

obrigado!

Sugiro que faça vários testes com tacômetros com Arduino. 

Algum deles poderá dar uma precisão aceitável.

Os testes que já fiz, me decepcionaram.
http://labdegaragem.com/profiles/blogs/projeto-tac-metro-com-arduino

Tem inúmeros projetos : 

https://playground.arduino.cc/Main/ReadingRPM

https://www.instructables.com/id/Measure-RPM-DIY-Portable-Digital-T...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço