collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]


Focos LED SMD por almamater
[16 de Dezembro de 2023, 14:12]


I Belive por dropes
[15 de Dezembro de 2023, 13:59]


Carga de corrente eletrónica ZPB30A1 60W por jm_araujo
[11 de Dezembro de 2023, 13:27]

Autor Tópico: Frequêncímetro 1GHz  (Lida 2659 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.185
Frequêncímetro 1GHz
« em: 19 de Setembro de 2020, 23:29 »
Frequêncimetro 1GHz

 

Este é um frequencímetro que foi pensado para medir um transmissor de rádio, já construí vários transmissores de FM, o maior problema sempre foi em saber qual a frequência, ao sintonizar num rádio comum, torna-se desgastante a sua procura, muitas das vezes que se capta o sinal do transmissor, são apenas harmonicas, e só nos afastando é que sabemos se estamos sintonizados na frequência fundamental, ou não.
Se falarmos de um transmissor de 4W (ilustrado na foto em cima), teríamos de nos afastar algumas centenas de metros, só para ter a certeza que estava bem calibrado.

O que mais me impressionou nesta montagem, foi a estabilidade do valor obtido, mesmo deslocando ou agitando o medidor por vários centímetros, o valor a medir mantem-se fixo sem qualquer variação ou perda.
 


Tenho um IC SP4653(prescaler 256) faz +-20 anos, entretanto nunca tive oportunidade de o colocar em funcionamento para este propósito por falta de conhecimentos.

Neste esquema temos a entrada de sinal através de uma bobine, esta não é critica e foi construída com 3 voltas de fio esmaltado em cima de um núcleo de ferrite: 



A seguir passa por uma proteção à base de dois diodos (BAS70), eu usei dois RB501V-40 por não ter em stock o dito diodo, desde que sejam Schottky não tem inconveniente. Esta proteção evita a destruição do SP4653 caso o sinal de entrada seja muito forte, pois a máxima tensão permitida é de 2.5V p-p, o que se consegue se o transmissor for de alguns watts. O sinal de entrada é de +- 10mV para um funcionamento normal:
 


De seguida o sinal entra no prescaler /256 e sai pelo pino 7 com uma amplitude de +- 0.8V p-p, convertendo em TTL no transistor T1.
Embora o prescaler tenha entrada e saída simetrica, funciona bem se só utilizarmos um dos pinos quer na entrada como na saída.
Aqui já temos no Atmega a entrada devidamente dividida por 256 com um sinal lógico viável.
 


Programação:

Na programação, baseei-me num tópico apresentado em https://www.elektroda.pl/rtvforum/topic2657614.html

O limite deste frequencímetro é de 10MHz, pelo que é suficiente para o que pretendo, depois da divisão (1GHz/256= 3.906.250Hz).
O programa é em Bascom AVR, linguagem simples e de fácil entendimento em que se mistura assembly para maior rapidez de processamento.
Alterei várias coisas, como display de 7seg, e nova configuração para o alimentar, a corrente é suficientemente baixa para segurança também do micro (<40mA/pino).

Descrição do código:
 
Código: [Seleccione]
Crystal=12MHz
Prescale Timer1=256
No original o cristal era de 16MHz com prescale de 1024
Optei por um cristal de menor frequência por vários motivos:
Alimentação <5V, a máxima frequência de entrada é de 4MHz, não tinha em stock um cristal com baixo perfil de 16.

Código: [Seleccione]
12.000.000/256=46875O valor do cristal / prescaler, tem de ser um nº inteiro, 12/1024 não o é, mas 12/256 sim.

Colocando o Timer1 a funcionar com o prescaler de 256, em modo de comparação com 46875, temos uma interrupção a cada segundo.

Nisto a contagem é realizada pelo Timer0, que captura a interrupção pelo pino 6 do micro, designado T0, aumentando um valor.
Timer0 é um contador de apenas 8bits, se quisermos chegar a 10M (como foi originalmente programado), a contagem deverá ser adicionada a uma variável suficientemente grande a cada 256.

Código: [Seleccione]
Dim Multiplier As Dword At &H70Este processo foi escrito em assembly, garantindo uma boa rapidez, usando posições de memória para alocar esta variável de 4bytes.

Até aqui temos um valor que já foi dividido em 256 antes da entrada e queremos apresentar no display de 4 dígitos, apenas em MHz e com uma casa decimal após o ponto.
Para isso poderia multiplicar pelos 256 e teria o valor certo da frequência, assim  se multiplicar por 0.00256 terei o resultado certo para enviar para o display, incluindo a casa decimal.

Código para amostragem de 1/seg:
Código: [Seleccione]
12.000.000/256=46875Código para amostragem de 5/seg:
Código: [Seleccione]
12.000.000/256/5=9375A razão de amostragem é de 1/seg. o que é péssimo quando se quer ajustar a frequência num transmissor, culmatando isso, dividi por 5 o valor a comparar em Timer1.

Código: [Seleccione]
Get_real = Frequency * 0 .0128Como o tempo de amostragem ficou em 1/5, terei de multiplicar por 5 a frequência lida para ter o resultado em Hz correto.
No calculo anterior da multiplicação o resultado foi de “0.00256”, multiplicando este valor por 5 terei 0.0128

Código: [Seleccione]
Dig:
    Data 128 , 233 , 068 , 096 , 041 , 034 , 002 , 232 , 000 , 032
'             0       1       2       3       4       5       6       7       8       9
Estas linhas aparecem no final do código, que devem ser adaptadas para o display escolhido e configuração das ligações ao micro, embora esteja representadas em nºs, deverá se ter em conta o formato binário apenas, para a ligação de cada segmento do display. (ficheiro excel dentro do "rar" pode dar uma ajuda neste ponto)



Dados técnicos:
Alimentação 4.5V -  3 x AAA
Consumo +-55mA

PCB e programa em anexo, + outros:
https://drive.google.com/file/d/1uLlKMaiNYRpbppccGz6a3nV3qIpOFwvd/view?usp=sharing

Insatisfeito pelo tempo que "perdi" no microscópio, por vezes algumas montagens funcionam se insistirmos, há que lhe dar porrada de vez em quando  ;)

last edit: Ontem saquei de uma motherboard um cristal de 80MHz para me certificar que este frequencímetro estava a dar valores corretos, confirmo assim o código estar operacional. As derivações são apenas do cristal de 12MHz que são insignificantes para o propósito. Acredito que tem mais potencialidades este aparelho, se levar uma ficha em paralelo com a bobine, sempre pode ter outro propósito.
« Última modificação: 21 de Setembro de 2020, 16:01 por dropes »