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

Bom dia Gustavo,

Que legal, algum dispositivo assim que eu estava pensado.

Olha este com ele montado.  2,4 GHz.

https://pt.aliexpress.com/item/32830195325.html?af=191415&utm_c...

RV

Rui bom dia,

Essa placa montada tem no ML= mb506 modulo.

Mas é importado da China! 

Rui boa noite, 

Como o Paul  citou no Blog dele, existem basicamente esses dois métodos para medir frequência:

https://www.pjrc.com/teensy/td_libs_FreqCount.html

https://github.com/PaulStoffregen/FreqCount

Pesquisando no ESP32 Forum, encontrei esse programa para medir frequência, medindo o período do pulso, usando o Timer de 64 bits e uma interrupção de GPIO. 

https://www.esp32.com/viewtopic.php?f=19&t=6533

Achei que estava impreciso e assim fiz algumas modificações para melhorar a precisão e estabilidade. 

Ficou preciso e estável entre 8 Hz e 98 KHz. 

https://www.esp32.com/viewtopic.php?f=19&t=6533&start=10

Sketch ESP32_freqMeter :

https://github.com/Gustavomurta/ESP32_frequenceMeter/blob/master/ES...

OBs; conecte o pino de entrada do frequencímetro, somente após o boot do ESP32. Ou ele entrará em loop. 

Abraços,
Gustavo 

Bom dia é José Gustavo Abreu Murta,

existem basicamente 2 métodos de medição de frequência:

Contagem direta e contagem reciproca.

A contagem direta, você conta quantos pulsos pulsos ocorrem durante um tempo definido.

A contagem reciproca você conta quanto tempo passou durante um ciclo do pulso.

Este é um excelente documento sobre medição de frequência pelo método reciproco:

https://www.best-microcontroller-projects.com/fast-reciprocal-frequ...

Testei e ainda estou testando os 2 métodos em várias plataformas.  PIC, Arduíno e ESP.

Com o ESP32 até agora o melhor resultado que obtive foi com a contagem direta.

Ontem eu estava testando com o ESP32 a contagem reciproca com 2 tipos de códigos diferentes.

Um deu um bom resultado e o outro não.

Estou usando o processo de manupular os registradores do ESP diretamente.

por exemplo o tegistrada de entrada dos PORTs de 0 a 31 é o de endereço :  0x3FF4403C.

Há alguns anos montei com o PIC  um projeto de um radioamador,  (Wolf" Büscher, DL4YHF),

e deu um excelente resultado até 50 MHz.   Ainda tenho ele aqui montado.

Fiz uma alteração no código para medir ou freqüência ou RPM.

O link do projeto original é este:

Um detalhe, está escrito em assembly para PIC.

 https://www.qsl.net/dl4yhf/freq_counter/freq_counter.html#cc_or_ca_...

A China vende este frequencímetro montado mas sem citar o autor do projeto.

https://pt.aliexpress.com/item/32915794765.html?src=google&src=...

RV

até uns 50khz, com o arduino, posso utilizar cegamente o código disponibilizado até agora?

Boa noite Sr. TM,

até uns 50khz, com o arduino, "  neste último post eu digo 50 Mhz com PIC. ?

Cegamente não, pois aí vc não verá o display!!

Mas seria bom saber sobre qual frequencímetro vc se refere.

RV

Olá RV.  =)

Bem, as vezes eu tenho uma certa dificuldade para compreender algumas questões.

É comum eu ler as postagens de vocês e levar 3+ dias para responder, pois eu leio e, no primeiro momento, eu não entendo (falta de base).

Isso é mais frequente quando o José posta, pois ele arranca conteúdo para ser lido até do espaço. Ai levo algum tempo para ser capaz de pincelar as referências.

Por ter hardware diferente, fiquei confuso quanto ao teto de precisão e operação do arduino/esp, pois imagino que o teto do esp32 seja maior que o do esp8266 que, por sua vez, seja maior que o do arduino uno.

Quanto ao frequencimetro, utilizei o codigo V.7 (quando realizei o comentário anterior)

Tiago, 

Isso já é um bom começo. 

Ter interesse em aprender! Lendo e tentando entender. 

Muitos aqui do Lab querem tudo pronto e mastigado (preguiça mental). 

Rui bom dia, 

Estou estudando o ESP32 Technical reference. 

https://www.espressif.com/sites/default/files/documentation/esp32_t...

Capítulo 16 - MCPWM 

Estou vendo uma luz no fim do túnel. 

The capture submodule contains three complete capture channels. Channel inputs CAP0, CAP1 and CAP2 are
sourced from the GPIO matrix. Thanks to the flexibility of the GPIO matrix, CAP0, CAP1 and CAP2 can be
configured from any PAD input. Multiple capture channels can be sourced from the same PAD input, while
prescaling for each channel can be set differently. Also, capture channels are sourced from different PADs. This
provides several options for handling capture signals by hardware in the background, instead of having them
processed directly by the CPU. A capture submodule has the following independent key resources:
• One 32-bit timer (counter) which can be synchronized with the PWM timer, another submodule or software.
• Three capture channels, each equipped with a 32-bit time-stamp and a capture prescaler.
• Independent edge polarity (rising/falling edge) selection for any capture channel.
• Input capture signal prescaling (from 1 to 256).
• Interrupt capabilities on any of the three capture events.

API Reference » Peripherals API » MCPWM

 https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-ref...

https://github.com/espressif/esp-idf/blob/master/docs/en/api-reference/peripherals/mcpwm.rst

Capturar

Um dos requisitos do controle do motor BLDC (CC sem escova, veja a figura abaixo) é detectar a posição do rotor. Para facilitar esta tarefa, cada unidade MCPWM fornece três entradas de detecção juntamente com o hardware dedicado. O hardware é capaz de detectar a borda do sinal de entrada e medir o tempo entre os sinais. Como resultado, o software de controle é mais simples e a energia da CPU pode ser usada para outras tarefas.

Na segunda etapa acima, um timer de captura de 32 bits está ativado. O temporizador funciona continuamente acionado pelo relógio APB. A frequência do relógio é tipicamente 80 MHz. Em cada evento de captura, o valor do temporizador de captura é armazenado no registro de data e hora que pode ser verificado ao chamar : cpp: func: `mcpwm_capture_signal_get_value` . A margem do último sinal pode ser verificada com : cpp: func: `mcpwm_capture_signal_get_edge` .

Boa noite pessoal

Teste usando o capture do MCPWM.

MCPWM5.ino

versão reduzida.

MCPWM6.ino

mais reduzida ainda.

MCPWM7.ino

Boa tarde pessoal,

uma informação conflitante sobre o  MCPWM.

Ele tem um prescaler e segundo o manual online ele é de 32 bits.

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-ref...

conforme esta linha:

esp_err_tmcpwm_capture_enable(mcpwm_unit_tmcpwm_nummcpwm_capture_signal_tcap_sigmcpwm_capture_on_edge_tcap_edge, uint32_t num_of_pulse)

uint32_t num_of_pulse  é o valor que define o prescaler.

Mas o prescaler é do formato uint8_t, conforme descrito no 

ESP32 Technical Reference Manual

Input capture signal prescaling (from 1 to 256).   ou seja um byte somente.

Testei definindo valores variados de 0x0 a 0x FFFF e só funcionou corretamente dentro dos valores de 0x0 a 0xFF.

O restante, os valores a esquerda de FF foram desprezados.

Este Sr. aqui também encontrou este problema.

https://www.gitmemory.com/issue/espressif/esp-idf/5032/606365562

Se alguém tiver alguma sugestão, agradeço antecipadamente.

RV

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço