Portal da construção - casa. Aquecedores de água. Chaminés. Instalação de aquecimento. Aquecedores. Equipamento

Frequencímetro caseiro em ATTINY2313. Frequencímetro caseiro no algoritmo de medição de frequência ATTINY2313

Em um dos artigos anteriores dedicados ao estudo de microcontroladores AVR, usamos um exemplo para usar um timer/contador T1 de 16 bits e uma interrupção em um evento de captura. Como complemento a este material, proponho uma versão aprimorada do medidor de frequência. Este projeto também usa um bloco de captura e adicionalmente usa a entrada de clock de um timer de 8 bits.

As desvantagens do antigo projeto estavam na pequena faixa de frequências medidas (~ centenas de quilohertz), que estava associada ao método de medição do período do sinal.

Você provavelmente se lembra que em uma interrupção de evento, o registro de captura do timer de 16 bits foi zerado e o valor capturado correspondente ao número de pulsos do gerador de clock do microcontrolador que cabem em um período do sinal de entrada foi armazenado em uma variável. Com base neste valor, foram feitos os cálculos.

Com o aumento da frequência do sinal de entrada, o microcontrolador não teve tempo de processar as interrupções, ignorou-as e as leituras do frequencímetro começaram a divergir drasticamente da realidade.

No novo design, o cálculo da frequência é realizado em vários períodos do sinal de entrada e sem o uso constante de uma interrupção em um evento de captura. Isso reduz a sobrecarga do microcontrolador e permite medir frequências muito mais altas - idealmente até 1/2 Fcpu (frequência de clock do microcontrolador).

Então, vamos passar para a descrição do novo projeto do frequencímetro.

Esquema

O sinal de entrada é aplicado à entrada do circuito de captura do temporizador T1 e à entrada de contagem do temporizador T0. Para que o temporizador T0 seja cronometrado a partir de um sinal externo, ele deve ser configurado de acordo.

Estrutura do Projeto

O projeto consiste em 4 módulos do programa.

bcd.c– contém uma função para exibir números binários no visor

timer.c- contém a função de inicialização dos timers T0 e T1, manipuladores de interrupção, a função de captura dos valores dos registradores de contagem dos timers e contadores de programa e, por fim, a função de cálculo da frequência.

lcd_lib.cé uma biblioteca para trabalhar com exibição de caracteres.

main.c- o programa principal.

Método de medição de frequência

A frequência do sinal de entrada é medida pelo método da porta de tempo. A essência do método é contar o número de pulsos dos sinais medidos e de referência por um determinado período de tempo.

Para contar o número de pulsos do sinal medido, a entrada do contador do temporizador de hardware é usada. O sinal de clock do microcontrolador é usado como sinal de referência.

O intervalo de tempo durante o qual as contagens de pulso são realizadas é medido usando o circuito de captura do temporizador de hardware T1 e o atraso do software.

A fórmula para calcular a frequência usando o método do intervalo de tempo é:

Fx = Fo * (M/N),

onde Fx é a frequência do sinal de entrada, Fo é a frequência do sinal de referência, M é o número de pulsos do sinal de entrada durante a medição, N é o número de pulsos do sinal de referência durante a medição.

Algoritmo do programa

O projeto usa dois temporizadores - temporizador/contador de 8 bits T0 e T1 de 16 bits. O timer T1 conta o número de pulsos de clock do microcontrolador (baseImp) que cabem em um determinado intervalo de tempo, e o timer T0 conta os pulsos do sinal medido (mesurImp).

O intervalo de tempo durante o qual as contagens de pulso são realizadas é da ordem de um segundo. Uma vez que durante este tempo ambos os temporizadores têm tempo para estourar muitas vezes, o programa usa contadores de programa adicionais (timer0, timer1). Estas são variáveis ​​de 16 bits que são incrementadas nas interrupções do timer T0 e T1.

Uma visão geral do diagrama de sequência de operação do temporizador é mostrada na figura abaixo.

O algoritmo do programa é o seguinte.

1. Temporizadores e inicialização do display em andamento

2. O microcontrolador espera que o sinalizador do circuito de captura do temporizador T1 seja definido ou, em termos simples, captura a borda de subida do sinal medido.

3. Depois de aguardar o sinalizador ser definido (momento Capture1 na figura), o microcontrolador salva os valores dos registradores de contagem dos temporizadores T0 e T1, bem como os valores dos contadores do programa.

4. Um atraso de software de um segundo é invocado. Ambos os temporizadores continuam a funcionar.

5. No final do atraso, o microcontrolador espera que o sinalizador de captura seja definido.

6. Depois de aguardar o sinalizador ser definido (momento Capture2 na figura), o microcontrolador salva os valores dos registradores de contagem T0 e T1 e os valores dos contadores do programa.

7. O valor da frequência é calculado e exibido

8. Retorne ao passo número 2.

Algumas palavras sobre cálculo de frequência.

A seguinte fórmula é usada para calcular o número de pulsos do sinal de referência.

//número de estouros do contador do programa

salvarTimer12 = salvarTimer12 - salvarTimer11;

//número de pulsos do sinal de referência

baseImp = (icr12 + ( longo não assinado)saveTimer12*65536) – icr11;

onde saveTimer12, saveTimer11 - o valor do contador do programa timer1 nos momentos de Capture2, Capture1, respectivamente; icr12, icr12 - o valor do registrador de contagem TCNT1 do temporizador T1 nos momentos de Captura2, Captura1, respectivamente; 65536 - balcão capacidade T1

O frequencímetro apresentado neste artigo permite medir a frequência de 10 Hz a 60 MHz com uma precisão de 10 Hz. Isso permite que você use este dispositivo para uma ampla gama de aplicações, como medir a frequência de um oscilador mestre, um receptor e transmissor de rádio, um gerador de função, um ressonador de quartzo, etc. O medidor de frequência fornece bons parâmetros e tem boa entrada sensibilidade devido à presença de um amplificador e um conversor TTL. Isso permite medir a frequência dos ressonadores de quartzo. Se você usar um divisor de frequência opcional, a frequência máxima de medição pode atingir 1 GHz ou mais.

A ideia de um contador de frequência em um microcontrolador PIC surgiu depois de ler a nota de aplicação AN592 da Microchip, que descreve como medir a frequência em um PIC e apresenta um programa. Desenhei um circuito e escrevi um programa no qual melhorei a precisão da medição e o valor da frequência é exibido na tela LCD. Acabou sendo um contador de frequência bastante simples e eficaz.

O circuito do medidor de frequência é bastante simples, a maioria das funções é executada pelo microcontrolador. A única coisa é que o microcontrolador precisa de um estágio de amplificação para aumentar a tensão de entrada de 200-300 mV para 3 V. O transistor, conectado de acordo com o circuito emissor comum, fornece um sinal pseudo-TTL à entrada do microcontrolador.

Algum transistor "rápido" é necessário como transistor, usei o BFR91 (analógico doméstico do KT3198V).

A tensão Vke é definida no nível de 1,8-2,2 volts pelo resistor R3 * no circuito. Eu tenho 10 kOhm, mas pode precisar ser ajustado. A tensão do coletor do transistor é aplicada na entrada do contador/temporizador do microcontrolador PIC, através de uma resistência série de 470 ohms. Para desligar a medição, os resistores pull-down embutidos são usados ​​no PIC.

O PIC implementa um contador de 32 bits, parte em hardware, parte em software. A contagem começa depois que os resistores pull-down embutidos do microcontrolador são desligados, a duração é exatamente 0,4 segundos. Após esse tempo, o PIC divide o número recebido por 4 e, em seguida, adiciona ou subtrai a frequência intermediária correspondente para obter a frequência real. A frequência recebida é convertida para exibição no visor.

calibração

Para que o frequencímetro funcione corretamente, ele precisa ser calibrado. A maneira mais fácil de fazer isso é conectar uma fonte de pulso com uma frequência precisamente conhecida com antecedência e definir as leituras necessárias girando o capacitor trimmer.

Se este método não for adequado, você pode usar a "calibração aproximada". Para fazer isso, desligue o dispositivo e conecte a 10ª perna do microcontrolador ao GND. Em seguida, ligue a alimentação. O MK medirá e exibirá a frequência interna. Se você não puder ajustar a frequência exibida (ajustando o capacitor de 33 pF), conecte momentaneamente o pino 12 ou 13 MK ao GND. É possível que isso precise ser feito várias vezes, porque. o programa verifica essas saídas apenas uma vez por medição (0,4 seg). Após a calibração, desconecte o pino 10 do microcontrolador do GND, sem desligar a energia do dispositivo, para salvar os dados na memória não volátil do MK.

Lista de elementos de rádio

Designação Tipo Denominação Quantidade ObservaçãoComprarmeu bloco de notas
MK PIC 8 bits

PIC18F84J11

1 Para bloco de notas
Regulador Linear

LM7805

1 Para bloco de notas
TransistorBFR911 Para bloco de notas
diodo retificador

1N4007

1 Para bloco de notas
Capacitor1 uF1 Para bloco de notas
10uF1 Para bloco de notas
capacitor eletrolítico1 uF1 Para bloco de notas
Capacitor0,1uF1 Para bloco de notas
Capacitor33 pF1 Para bloco de notas
capacitor trimmer33 pF1 Para bloco de notas
Resistor

470 ohms

2 Para bloco de notas
Resistor

10 kOhm

1 Seleção Para bloco de notas
Resistor

10 kOhm

1 Para bloco de notas
Resistor variável10 kOhm2

Uma característica do primeiro circuito contador de frequência no microcontrolador AVR é ​​que ele funciona em conjunto com um computador e é conectado à placa-mãe por meio de um conector IRDA. Do mesmo conector, a estrutura recebe energia. O segundo circuito contador de frequência é baseado no microcontrolador Attiny2313 e é capaz de medir frequências de até 10 MHz. O terceiro projeto considerado do contador de frequência é construído com base na lendária placa Arduino, cuja base também é o microcontrolador AVR.

O circuito do contador de frequência consiste em um microprocessador Attiny2313 e um contador binário 74AC161. O sinal de entrada para amplificação segue o transistor VT1, então de sua saída coletora entra na entrada “C” do contador binário. O controle sobre o funcionamento do contador é atribuído ao Attiny2313 MK, que zera, para ou inicia a contagem aplicando um sinal de controle à décima saída.


Aplicando brevemente um zero lógico na entrada reset do contador binário, o MK zera, e após isso, envia o nível de uma unidade lógica na entrada EP, inicia sua operação. Em seguida, ele conta os pulsos da saída do dígito mais significativo do contador por meio segundo.

Medidor de frequência no microcontrolador AVR. Os sinais de dados para o computador vêm da porta Attiny2313 PD6. A linha da porta PB1 é usada para sinais de relógio provenientes do computador.

No momento inicial, o MC gera um pulso de partida com duração de cerca de 1,6 μs, após o qual ocorre uma pausa. O programa de tempos em tempos acessa a porta 2F8H e, ao registrar um byte, inicia a transmissão de pulsos de clock. Esses pulsos de sincronização irão ao enviar o número zero para a porta infravermelha do computador. A composição dos pulsos: O primeiro bit é o início e 8 bits são o número zero.

Quando um nível lógico um é detectado, o microcontrolador inicia a transmissão enviando o primeiro pulso de início, configurando a linha de dados para lógico um e esperando que a linha do relógio caia para poder enviar pulsos de dados. Se o bit de dados for zero, então "1" é definido.

Como as velocidades de transmissão e recepção são as mesmas, isso permite que você obtenha independência da velocidade definida da porta IR do computador.

Os fusíveis para o programa Ponyprog e o próprio firmware estão disponíveis no link verde logo acima.

Neste simples projeto de contador de frequência, o controlador Arduino lê a tensão, depois calcula sua frequência e envia os dados via USB UART para o computador, no qual você precisa instalar o programa de leitura e visualização de dados, o aplicativo e o esboço no download arquivo.

A placa Arduino gera uma base de tempo precisa de um segundo para o contador, colocando em cascata dois temporizadores timer0 e timer2. A ligação entre as entradas digitais 3 e 4 liga a saída do temporizador 2 (250 Hz) à entrada do temporizador 0. O código do programa espera que a saída do temporizador 0 se torne positiva e começa a sincronizar a frequência do sinal de entrada com o temporizador 1 O Timer1 é um timer de 16 bits, ele transborda quando o valor 2 16 é atingido, após isso, o valor do registrador de estouro overF muda. Ao final do primeiro segundo, um registrador de 16 bits é escrito. O Arduino então envia 6 bytes de dados para o PC. O diagrama de fiação do Arduino é simples, e você pode vê-lo na foto abaixo.

Primeiro, o Arduino deve estar conectado ao computador e só então deve ser iniciado o aplicativo Visual Basc 6. O aplicativo procura a porta Com, envia bytes e espera que eles sejam recebidos de volta. Isso leva alguns segundos. O aplicativo deve ser desativado quando você atualizar a placa por meio do Arduino IDE. A entrada de frequência da placa Arduino representa os níveis de sinal TTL, com um sinal fraco, você precisa adicionar um amplificador.

Neste artigo, veremos como construir um frequencímetro pequeno, barato e simples, capaz de medir frequências de até 40 MHz com erro inferior a 1%. Essa precisão é suficiente para depurar a maioria de seus próprios dispositivos analógicos e digitais. O dispositivo permitirá analisar muitos aspectos da operação dos circuitos.

O diagrama esquemático do medidor de frequência é mostrado na Figura 1.

Figura 1. Diagrama esquemático do dispositivo

O frequencímetro é montado em uma protoboard, a base é o microcontrolador Atmel ATmega16, a fonte do clock é um oscilador RC interno de 8 MHz (isso deve ser lembrado ao programar o microcontrolador). Além disso, a parte de entrada usa um contador de 4 bits 74HC191 como um divisor da frequência medida por 16 antes de alimentar a entrada do microcontrolador. Como você pode ver, apenas a saída Q3 do contador é usada, a frequência nesta saída será igual à frequência de entrada dividida por 16.

A entrada do dispositivo (sonda) é o ponto W1, que está conectado diretamente na porta PB0 do microcontrolador e, através de um divisor, na porta PB1.

Para exibir o valor da frequência medida, é usado um indicador LED de sete segmentos de 4 dígitos com um ânodo comum. Esta solução reduz o número de condutores para conectar o indicador. Na ausência de um display deste tipo, é possível utilizar diversos tipos de indicadores de sete segmentos, porém será necessária a adaptação do software do microcontrolador.

O layout e a atribuição de pinos do indicador aplicado são mostrados na Figura 2.


Figura 2. Localização e atribuição de pinos do indicador LED de 4 dígitos aplicado.

Os pinos E1…E4 são usados ​​para ativar os dígitos correspondentes (E1 - para ativar o dígito menos significativo à direita).

Cada linha de I/O do microcontrolador ATmega16 pode fornecer até 40 mA de corrente de saída, portanto não precisamos usar transistores e os sinais de controle do display (E1…E4) são conectados diretamente na porta do microcontrolador.

Conector para programação em circuito do microcontrolador J1. Após a montagem e programação do microcontrolador, será necessário calibrar o aparelho, definir algumas variáveis ​​(por exemplo, para aumentar o brilho do display, reduzir a oscilação do display). Ou seja, você precisará atualizar o software do microcontrolador e, portanto, o conector indicado deve ser instalado na placa.

Algoritmo de medição de frequência

Todos sabemos que frequência é o número de pulsos repetidos por unidade de tempo. No entanto, a medição de frequência com instrumentos digitais, como um microcontrolador, que tem suas limitações, requer algumas pesquisas para alcançar os resultados desejados.

A frequência máxima que pode ser processada pelo contador do microcontrolador ATmega16 não pode exceder a frequência do clock dividida por 2,5. Vamos denotar a frequência máxima - Fmax. A frequência de clock do nosso microcontrolador é de 8 MHz, então podemos medir sinais de até 3,2 MHz diretamente. Para medir a frequência acima desse nível, usamos um contador de 4 bits como divisor de frequência de entrada. Agora podemos medir frequências até 16 vezes Fmax, mas aqui uma limitação é imposta pelo contador 74191 e a frequência máxima real medida não excede 40 MHz.

O algoritmo que foi desenvolvido mede a frequência original (de entrada) (denotamos F o) e a frequência obtida do divisor (denotamos F d). Desde que a condição de que a frequência seja menor que Fmax condição é satisfeita:

F o = 16×F d ;

Mas conforme você se aproxima F o Para F máximo, mais e mais pulsos devem ser processados ​​e a expressão acima se torna:

F o < 16 × F d ;

Portanto, o limite de medição do microcontrolador pode ser detectado automaticamente.

O frequencímetro começa a medir a frequência original (processando e exibindo valores no display) e assim que detecta a aproximação da frequência máxima F máximo(usando o método acima), seleciona a frequência após o divisor a ser medido.

O algoritmo é resumido no diagrama (Fig. 3)

Fig.3 Algoritmo de operação do medidor de frequência no microcontrolador

software de microcontrolador

O código-fonte do programa do microcontrolador é fornecido com comentários detalhados, mas alguns pontos requerem uma explicação separada:

  • O código é projetado para que o valor medido seja exibido no display em "kHz". Por exemplo, se você vir o valor "325,8" no visor, significa 325,8 kHz, o valor "3983" significa 3983 kHz (ou 3,983 MHz).
  • O temporizador/contador 0 do microcontrolador é usado para contar os pulsos de entrada diretamente;
  • O temporizador/contador 1 do microcontrolador é utilizado para contar os pulsos de entrada após a divisão por 16;
  • Timer/Contador 2 é configurado como um timer pré-dimensionado por 1024 (a frequência da CPU é dividida por 1024). Usado para invocar o algoritmo para calcular e selecionar uma frequência a cada período T do temporizador. Em nosso projeto T = 1024× 256/F cpu .
  • A constante "fator", definida no início do programa com o valor "31,78581", deve ser calibrada medindo a frequência de referência. Calculado de acordo com a expressão:

fator = F cpu /(1024× 256)=8.E6/(1024×256)=30.51757

A função Anti-Flickering é bastante complicada, mas muito eficaz, especialmente ao medir frequências não constantes. Esta função evita completamente que o indicador alterne rapidamente entre diferentes valores, enquanto continua a exibir o valor exato e altera rapidamente a leitura se a frequência medida realmente mudou.

Observação

O microcontrolador ATmega16 vem configurado de fábrica para operar a partir de um oscilador RC interno de 1MHz. É necessário definir os fusíveis CKSEL3..0 para “0100” usando o programador serial, o que corresponde à inclusão do oscilador RC interno de 8 MHz.

APLICATIVOS:

- O código-fonte do programa do microcontrolador

Tradução que você pode dizer:

Este contador de frequência caseiro ATTINY2313 foi projetado para medir frequências de aproximadamente 4MHz a mais de 160MHz. Ele pode ser usado como um medidor de frequência ou como um dispositivo TRX I/O, por exemplo, na banda de 144MHz (2m).

Especificações do medidor de frequência:

  • medição de frequência na faixa de 4-160 MHz
  • exibição de medições no LCD
  • sensibilidade 700mV
  • tensão de entrada, máx.< 30В
  • fonte de alimentação: 8-15V
  • taxa muito simples, quantidade mínima
    elementos, início rápido
  • Dimensões da placa: 37x80mm

O circuito funcionou perfeitamente na faixa de 3,8 MHz a 162 MHz. O circuito é baseado no microcontrolador ATTINY2313. Sua vantagem é a capacidade de operar em frequências de até 20 MHz. O circuito usa quartzo de 16 MHz, portanto, o próprio processador deve teoricamente medir corretamente as frequências de até 8 MHz.

Muitas vezes acontece que o alcance de até 8 MHz é muito pequeno. Um aumento na faixa superior pode ser obtido usando um divisor de frequência (prescaler). O circuito usa o prescaler LB3500, que permite medir até 150 MHz.

Breve informação sobre LB3500:

  • tensão de alimentação - 4,5 ... 5,5V
  • consumo de corrente - l6mA-24mA
  • tensão de entrada - 100mV-600mV
  • tensão de saída - 0,9 Vpp
  • divisor - 8

Sem o uso de um divisor adicional, o circuito é capaz de medir frequências de até 64 MHz. Adicionar um divisor adicional na forma de um contador binário 74LS293 (ICl) permite aumentar a faixa de medição para 150 MHz (máx. para LB3500).

ICl divide a frequência por 4. Assim, todo o sistema prescaler (ICl e IC4) divide a frequência de entrada por 32. O transistor Tl com os elementos C7, R2, R3 fornece uma alta impedância de entrada.

O sinal de entrada após a separação vai para a entrada do chip LB3500. Na saída de 9 IC4, o sinal é 8 vezes menor do que na entrada. Infelizmente, o sinal de saída do chip LB3500 não é consistente com os níveis de TTL. Para eliminar essa desvantagem, um transistor T2 é adicionado ao circuito, projetado para correspondência. O potenciômetro PRI garante uma correspondência exata.

postagens semelhantes