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