Página 1 de 3

Medir frequência com contador.

MensagemEnviado: 21 Set 2015 09:09
por brasilma
Olá Colegas,

Será que alguém já implementou um algoritmo de medição de frequência utilizando um contador (no meu caso externo)?

Estou desenvolvendo um sistema que poderá ler frequências de até uns 200 KHz e para conseguir realizar a leitura dentro da minha rotina de interrupção (que roda a 1.6 KHz) acrescentei um contador externo. Clareando: a frequência entra no contador e a cada 1/1.6 KHz eu leio e zero - isto está ok.

Para ler frequências mais baixas eu uso um divisor na rotina que lê a frequência. Clareando: para ler a frequência de 1 KHz de referência do osciloscópio, eu inseri uma divisão de 100x (lia com uma frequência de 16x) e mostra exatamente 62 (1000 / 16 = 62).

Minha dúvida é como seria o algoritmo para este fator de divisão automático, ou seja, como fazer para automáticamente quando a frequência for baixa ele aumentá-lo e alta abaixá-lo???

Re: Medir frequência com contador.

MensagemEnviado: 21 Set 2015 09:18
por andre_luis
Baseado no que vejo nos multimetros, parece que fazem uma mera varredura, escala por escala. Se fosse voce partiria primeiro para as mais altas, depois descando conforme ficasse muito abaixo do fundo de escala.

A propósito, precisa ser contador externo mesmo ?

Re: Medir frequência com contador.

MensagemEnviado: 21 Set 2015 10:11
por brasilma
Olá André, no momento eu "acho" que sim, o sistema possui duas rotinas de interrupção rodando (uma que gerencia I/O e outra da serial) e nesta situação não sei como fazer assim com um contador interno.

Por esta razão pensei no contador externo e ler com a interrupção de I/O.

Eu pensei em utilizar o pino 2^7 (mais significativo) apenas como estouro (e o s demais como dado) para determinar a mudança de faixa, mas algumas vezes a contagem pode passar por ele direto...

Re: Medir frequência com contador.

MensagemEnviado: 21 Set 2015 11:03
por andre_luis
Como voce mencionou que há somente 1 vetor de interrupção, ainda assim acho que tem como contornar tranquilamente, usando função de Contador externo do Timer. Essa recepção pela Serial vai ser muito frequente ? Se for o caso, no pior dos cenários, pode implementar uma rotina de média-móvel, eliminando as amostras que ocorrerm durante a recepção serial...só pra garantir.

A propósito, tem de ser muito preciso a contagem ?

Re: Medir frequência com contador.

MensagemEnviado: 21 Set 2015 11:47
por brasilma
Este é o problema André: tem!

Fiz algumas simulações no excel de como ficariam os erros com vários fatores de divisão diferente (obviamente os menores erros são obtidos com multiplos da frequência de interrupção).

Quatro faixas seriam suficientes para cobrir de 1Hz até os 200 KHz, porem os erros estão altos.

Com isso percebo que a melhor ideia é acrescentar mais um CI ao contador externo e ler o valor integral...

Re: Medir frequência com contador.

MensagemEnviado: 21 Set 2015 11:58
por Red Neck Guy
Quantos bits?
Se for 8, 12, 16 pq não usar um CPLD?
Aí você cria um lath com a contagem e "copia" ele assincronamente.

Re: Medir frequência com contador.

MensagemEnviado: 21 Set 2015 12:24
por andre_luis
Sei que é uma sacanagem quando estamos no meio do projeto e alguém diz, muda pra isso ou aquilo :lol:,mas vamos lá....

Partindo de uma ideia parecida com a sua, já usei um Timer de 24 bits que pôde ser implementado tranquilamente num PSoC. Nesse caso, mesmo para uma contagem de 200KHz, bastaria ler o conteúdo do contador a cada 1s, sem risco de perda de informação. Acredito que a unica coisa externa nessa abordagem aí fosse um cristal de 32,768KHz.

Uma outra possibilidade que voce pode tentar avaliar para não ter de usar um CI externo, seria encadear a saída de um Timer na entrada de outro ( ambos internos ), mas provavelmente seu programa já deva estar usando algum. O ideal seria que o principal fosse feito num Timer de 16 bits e o segundo timer ajustado conforme o range.

Re: Medir frequência com contador.

MensagemEnviado: 21 Set 2015 15:19
por brasilma
Boa Tarde Aquino / André,

Para os 200 KHz precisariam ser uns 18 bits, mas no momento estou aceitando 16.

Não posso usar nenhum timer do sistema, e para ter a precisão de contagem unitária, preciso contar todos os ciclos.

Vou fazer o encadeamento de mais um timer de 8 bits (externo) e copiar assincronamente como o Aquino sugeriu.

É a melhor solução para o momento.

Obrigado!!!

Re: Medir frequência com contador.

MensagemEnviado: 21 Set 2015 16:49
por Red Neck Guy
Dá um emaranhado de ligação, mas já vi uma placa que utilizava dois 74HC393 em série, depois as saídas eram ligadas em latchs 74HC574.
Então, os valores da contagem eram lidos assincronamente no loop do programa.
O Clock para os latchs não lembro de onde vinha não...

Re: Medir frequência com contador.

MensagemEnviado: 21 Set 2015 20:44
por KrafT
Uma vez fui fazer uma bagaça dessas com contadores assíncronos... Perdi um bom tempo para descobrir que o jitter causado pela cascata de flip-flops era que inviabilizava meu circuito...

Re: Medir frequência com contador.

MensagemEnviado: 21 Set 2015 21:02
por Red Neck Guy
Mas essa placa que falei é de um treco homologado no INMETRO, era de um contador para o tensão-frequência de uma balança lá de 1998.

Re: Medir frequência com contador.

MensagemEnviado: 21 Set 2015 21:16
por KrafT
Aquino escreveu:Mas essa placa que falei é de um treco homologado no INMETRO, era de um contador para o tensão-frequência de uma balança lá de 1998.


Não duvido, Aquino. Como o CD4060 que utilizei tinha um atraso razoável na saída Q14 em relação ao Q4, isso me causava problemas. Mas isso faz tanto tempo que não lembro dos detalhes, o que torna meu comentário inútil. Sorte que aqui não tem "Dislike" ou "Downvote".

Re: Medir frequência com contador.

MensagemEnviado: 22 Set 2015 08:37
por andre_luis
Vou na mesma linha que o KrafT, os contadores assincronos são propensos a induzir a falsas contagens devido aos estados intermediários, sobretudo nesse caso aí onde serão usados N flip-flops ( sendo N >10 ), mas de qualquer modo via algoritmo é possivel detectar "pontos-fora-da-curva" de uma média-móvel e contabilizar apenas aqueles que parecerem corretos.

Coincidentemente, fiz uma simulação comparando os dois tipos aqui: Performance de contador Sincrono x Assincrono

Re: Medir frequência com contador.

MensagemEnviado: 22 Set 2015 10:48
por brasilma
O meu sistema usa o '393 como contador e o '245 como porta de entrada, funciona muito bem, ontem comecei a montar outro conjunto de '393 e '245 para colocar em cascata.

O interessante desta solução é que não utiliza nenhum recurso do micro.

Re: Medir frequência com contador.

MensagemEnviado: 22 Set 2015 11:32
por ze
O que vc vai ler a seguir é tão tão óbvio que se eu fosse uma pessoa normal acho que teria vergonha de escrever...
Aproveitado sua interrupt 1.6Khz, sinal num contador 16bits, captura o valor da contagem a cada segundo
algo como isso dentro da isr
Código: Selecionar todos
if (contador1600++>1599) {contador1600=0;freq=TIMER16bits;TIMER16bits=0;}

Usa pouco recurso de sw , zero de hw, e não deve gastar muito tempo prum mc rodando a algumas dezenas de MHz
Mas algo me diz que já pensou nisso, está fazendo em asm, quer precisão extrema ou etc