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

Boa noite  José Gustavo Abreu Murta ,

tomei a liberdade de fazer umas modificações no seu sketch.

Os valores de frequência, canal, duty, e resolução serão digitados no

serial monitor a qualquer tempo em uma sequencia que está indicada em cada enter.

Faz-se necessário que o serial monitor esteja com a opção ou de nova linha (NL)

ou nova linha e retorno de carro (NL & CR).

RV

ESP_OscilatorV02.ino

Beleza Rui! 

Obrigado pelo sketch. 

Abraços.

Rui boa noite, 

Fiz alguns melhoramentos no Programa Gerador de Frequencia =>  ESP_OscilatorV03.ino

Ficou mais interativo e explicativo. 

Importante ressaltar, que o sistema divisor de frequencia do ESP32 tem limitações! 

O programa faz os cálculos para o Duty Cycle. Poderá digitá-lo em porcentagem! 

E dependendo do valor dos bits de resolução, ele já calcula a frequencia máxima para essa faixa. 

  Frequencia maxima = Oscilador do ESP32 / resolução em decimal 

  

  Por exemplo para 10 bits => 2^10 = 1024 

  Frequencia maxima = 80 MHz / 1024 = 78125 Hz 

  Por exemplo para 2 bits => 2^2 = 4 

  Frequencia maxima = 80 MHz / 4 = 20 MHz

( quanto menos bits, menor será a resolução) 

=====================

Digite a frequencia em Hz - 1 a 40.000.000:
Frequencia = 480 Hz

Digite o Canal - 0 a 15:
canal = 1

Digite a resolucao 1 a 16 bits - 2 elevado a X. Por exemplo 2^5 = 32
resolucao = 13 bits >>>> 8192
Frequencia maxima = 9765 Hz

Digite o Duty cycle em % - 1 a 99:
Duty cycle = 10 %

Digite a frequencia em Hz - 1 a 40.000.000:

==========================

Abraços.

Anexos

Rui , 

Para não ter que montar o LCD, retirei as funções associadas ao mesmo. 

E tirei o pullup do pino de entrada, já que estou usando o ESP32 para gerar pulsos.

pinMode(entrada,INPUT);            // Port pulsos como entrada 

Estou gerando um sinal (onda quadrada - 3,3V - duty cycle 25%) de 248,065 KHz (medida com o scope) com o ESP32.

E usando um Arduino Uno, a frequência medida é - 142 ou 143 KHz. (com o seu programa). 

Mais testes com o ESP32. O frequencimentro rodou em Arduino Uno.

Mudei o duty cycle para 50%.

Gerada     =    Frequencimentro8 

60,00 Hz          9 khz 

500,00 Hz        501 Hz = OK 

1,000 KHz        1 kHz  = OK 

15,000 kHz       15 kHz = OK 

50,000 kHz        50 KHz = OK 

100,000 kHz      100 ou 99 KHz

200,000 kHz       142 kHz 

500,006 kHz       143 KHz 

1,000001 MHz     143 KHz 

Você pode testar ai com o seu ESP32! 

As frequências geradas com o ESP32 são incrivelmente precisas! 

O pino de geração no ESP32 é o GPIO18.

Mudando para Duty Cycle 50%

void freq248KHz ()
{
    pinMode(18, OUTPUT);              // GPIO_18 as Output
    ledcAttachPin(18, 1);                  // GPIO_18 attached to PWM Channel 1
    ledcSetup(1, 248000, 5);            // Channel 1 , freq 248,000 KHz , 5 bit resolution = 32
    ledcWrite(1, 16);                         // Enable frequency with dutty cycle 50%
}

Bom dia  José Gustavo Abreu Murta,

obrigado pela analise do frequencímetro.

Vou sim montar estes osciladores e rever o que está errado com as altas frequências.

Acredito que seja o tempo gasto pelas instruções criadas no processo

de compilação  ao criar o HEX para o Arduíno,

Vou fazer um teste com um PIC onde domino mais o assembly dele.

Depois uso no Arduíno, e talvez depois nos ESPs;

RV

Boa noite pessoal,

Continuando com a saga do frequencímetro, e como o com Arduíno não ficou bom,

escrevi para o ESP32.

Ainda está na fase de teste mas já se mostra muito promissor.

Usei 4 escalas mudados por um botão (que ainda as vezes falha) no port 25.

As medidas tiveram uma boa precisão na faixa que já testei. De 500 Hz até 40 Mhz.

Usei um LCD como display, mas o valor da frequência aparece também no serial monitor.

Se puderem fazer testes aí e me contarem o que encontraram de problemas, eu agradeço.

Estou estudando o interrupt do pcnt para implantar uma rotina de ajuste de escala automática.

As escalas são:


// Escala 1 de 40 MHz a 1 MHz
// Escala 2 de 999 KHz a 100 KHz 
// Escala 3 de 100 KHz a 1 KHz 
// Escala 4 de 999 Hz a 1 Hz 

RV

Frequencimetro1PulseCountV04.ino

PS: agradeço ao nosso amigo  José Gustavo Abreu Murta ,pelo teste no modelo anterior,

e principalmente por disponibilizar um sketch com rotina s de geração de frequências.

Boa noite Rui, 

Esse seu projeto é de muita utilidade! 

Assim que eu puder, farei testes. 

Parabéns! 

Abraços.

Boa tarde pessoal.

melhoria no frequencímetro.

Nesta versão se a frequência for muito alta para a escala e ocorrer overflow de pulse count, 

a escala é mudada automaticamente para uma maior.

Por exemplo: medido 90 KHz na escala 4 (1 a 999 HZ) , ocorre overflow e automaticamente

muda para a escala 3 (1 a 100KHz).

RV

Freq_pnct_V06.ino

Mais uma evolução no projeto.

Esta versão faz o ajusta automático da escala de medida da frequência.

RV

Freq_pnct_V07.ino

PS. versão comentada.

Rui boa noite, 

Viu a nova versão do Gerador de Frequencias ?

http://labdegaragem.com/forum/topics/frequenc-metro-1?commentId=622...

Hoje não tive tempo para testar seu frequencímetro. 

Bom dia José Gustavo Abreu Murta,

vis sim a nova versão, já baixei e testei.

Muito legal mesmo.

Obrigado e parabéns pelo projeto. me ajudou muito no teste do frequencímetro.

RV

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço