Boa noite pessoal.

Hoje precisei de um frequencímetro, e como não tinha um, resolvi desenvolver um

projeto de um.

Depois de apanhar um pouco cheguei a um modelo que me atende.

Mas não sei se ele tem boa precisão.

Tentei comparar os valores com o osciloscópico, mas o meu não ajuda muito.

Então resolvi disponibilizar o sketch aqui, e se alguém que tenha um frequencímetro tiver a 

paciência de montar este aqui e comparar com o seu eu agradeceria.

De qualquer forma fica aqui um projeto de um frequencímetro para Arduíno (UNO/MEGA/Mini).

Pretendo modifica-lo para funcionar no ESP8266 e no ESP32.

RV

Frequencimetro8.ino

Exibições: 4319

Responder esta

Respostas a este tópico

frequencia = ((psclr * 1600000) / (float) current_cap_value) * 100;

para reduzir, não seria melhor deixar logo um "1600000 * 100 = 160000000" ?

Ficando: 

frequencia = (psclr * 160000000) / (float) current_cap_value;

pensei num 16*10^7 (inicialmente). Isso iria reduzir o número de caractere, mas acho que iria usar mais processamento.

Bom dia a todos. 

Implementações pendentes (desafios) :

  • Melhorar a estabilidade nas medições 
  • auto range para a medição de frequência
  • Display LCD ou OLED ?

Tiago boa noite, 

O máximo valor de uma variável de 32 bits é 4.294.967.296.

Se for usar 160.000.000 x 160, por exemplo, o valor máximo será ultrapassado. ( o resultado da operação será incorreto).

Por isso eu fiz dessa forma:

 frequencia = ((psclr * 1600000) / (float) current_cap_value) * 100;

Como a gente diz aqui em Minas Gerais:

Quando você traz o milho, o fubá já esta pronto! (brincadeira). 

Rui, boa noite,

Testando meus Osciladores a Cristal. Tenho uns 20 módulos. 

Como esses osciladores funcionam com 5V, usei os conversores de nível de sinal para 3,3V.

E hoje a bola da vez do prescaler foi 210. Com esse valor, consegui valores mais precisos de medição.

Por que ??? Isso eu ainda não entendi. Precisamos descobrir isso. 

OBS - medi osciladores enter 4 MHz e 32 MHz. 

Rui, boa noite. 

Fiz algumas alterações no programa para descobrir como esse capture counter funciona. 

Estou cheio de dúvidas ainda. 

Usei um oscilador de cristal de 24 MHz. 

Faço 10 medições com cada valor de prescaler ( de 1 a 255). 

Imprimo o valor do prescaler, da frequencia e do contador do Capture. 

MCPWM11a.ino

================================== No loop 

if (flag == 2) // Se terminou de capturar o sinal
{
frequencia = (psclr * 1600000) / (float) current_cap_value * 100;

flag = 0; // Habilita nova captura
count ++;
delay(100); // Testei com 100
mcpwm_capture_enable(MCPWM_UNIT_0, MCPWM_SELECT_CAP0, MCPWM_POS_EDGE, psclr); // Habilita uso de CAP0 na subida do pulso, prescaler definido por psclr.
Serial.print(psclr); Serial.print(" ");
Serial.print(frequencia, 1); Serial.print(" Hz "); // Print
Serial.println(current_cap_value);
if (count == 10)
{
  count = 0;
  psclr++;
  if (psclr == 256) psclr = 1;
  Serial.println();
 }
}

Veja o arquivo de log da console Arduino.

Dá para entender??? Vamos descobrir...

Log%20ESP32%20teste%20do%20MCPWM%20Capture.txt

Não estou entendendo mais nada - vou dormir - KKKKK


frequencia = (psclr * 1600000) / (float) current_cap_value * 100;
frequencia = (252 * 1600000) / 1680 * 100 = 403200000 / 168000 = 2400 ????

252 24100400.0 Hz 1680
252 24000000.0 Hz 1680
252 24000000.0 Hz 1680
252 24000000.0 Hz 1680
252 24000000.0 Hz 1680
252 24000000.0 Hz 1680
252 24000000.0 Hz 1680
252 24000000.0 Hz 1680
252 24000000.0 Hz 1680
252 24000000.0 Hz 1680

Boa tarde pessoal,

depois de apanhar muito, mas muito mesmo, o Gustavo e eu chegamos a esta versão do frequencímetro.

Ela tem avanços importante:

Tem incorporado no projeto um oscilador de 10.000 KHz que pode seu usado para teste, e se que modificando

internamente pode chegar a gerar até 40.000.xxx MHz .

Mede frequências de 1 a 20MHz, (ou até mais),  com 7 dígitos.

Não precisa de escala, pois vai de 1 a 20.000.000 Hz (ou mais) e até agora nos nossos teste mostrou um erro 

na ordem de 0,00001%.

Como não temos frequencímetro profissional para conferir esta margem de erro, agradeceríamos muito à 

alguma que algum amigo que por ventura tenha acesso à um frequencímetro profissional fizesse 

a verificação de precisão para nós.

Não vamos aqui descrever o uso do mesmo, pois escrevemos toda a descrição de uso no inicio do código,

e gostaríamos de verificar se ficou clara a descrição.

O código segue abaixo.

Frequence_Meter_0.0.22.ino

José Gustavo Abreu Murta e RV

Galera, vocês não vão acreditar! 

O frequencímetro ficou extremamente preciso e estável! 

Alguém do Lab tem acesso à um frequencímetro de precisão para a gente aferir? 

Usei a função frequencímetro do meu Scope TEK 1062 , que tem "apenas" 4 casas decimais, e os valores sempre bateram!! Usei osciladores de cristal para testar o frequencímetro também! 

Nunca vi tanta precisão! 

Parabéns Rui ! E muito obrigado pelo excelente projeto! 

boa tarde, 

uma correção, não imprimia o ponto decimal para frequências de 1000 a 2000 hz.

Modificadas algumas rotinas conforme sugestão do Gustavo.

Corrigido.

Frequence_Meter_0.0.23.ino

RV

Rui, bom dia,

Sabe aquele oscilador a cristal que eu desmontei? Retirei o chip e soldei em um soquete para Protoboard.

Consegui replicar o circuito. O circuito pode ser alimentado com 5V ou com 3,3V.

Testei com cristais entre 2 MHz e 30 Mhz. Muito bom! Dessa forma consegui testar todos os meus cristais. 

Bom dia José Gustavo Abreu Murta,

que legal, 

vou abrir o que eu tenho aqui e fazer o mesmo.

Excelente ideia.

RV

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço