Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-23 15:03
Eu sei o que você pensa: "Huh? Existem muitos instrutíveis sobre como usar microcontroladores para medir a frequência do sinal. Bocejo." Mas espere, há uma novidade neste aqui: eu descrevo um método de medição de frequências muito mais altas do que um microcontrolador (MCU) pode suportar e o ciclo de trabalho do sinal - tudo ao mesmo tempo!
A faixa de frequência do dispositivo varia de ~ 43 Hz a ~ 450 kHz, enquanto o ciclo de trabalho varia de 1% a 99%.
Deixe-me explicar a parte "pode suportar": um MCU mede o período de um sinal de onda quadrada, T, rastreando o tempo entre dois eventos de transição subsequentes. Por exemplo, saltos de tensão baixa para alta em um de seus pinos de E / S. Ele faz isso contando o número de pulsos de seu próprio relógio interno. Ingenuamente, o limite superior das frequências medidas deve obedecer ao teorema de amostragem de Nyqvist-Shannon; ou seja, seria aproximadamente igual à metade da frequência do relógio MCUs. Na realidade, o limite é muito, muito mais baixo, porque o MCU deve executar código para lidar com interrupções, salvar variáveis, fazer operações aritméticas, exibir resultados, etc. Em meus experimentos com um MCU de 48 MHz, o número mínimo de ciclos de clock entre as transições mensuráveis foi cerca de 106. Portanto, o limite superior da faixa de frequência mensurável, neste caso, seria 48.000 / 212/2 = 226,4 kHz.
Enquanto o MCU mede o período do sinal, ele também pode determinar sua largura de pulso, P: o tempo em que a tensão do sinal permanece alta. Em outras palavras, o tempo entre as transições de baixo para alto e de alto para baixo. O ciclo de trabalho do sinal é então definido como a seguinte porcentagem:
Dever = 100% * P / T
Assim como no caso da frequência, há um limite prático para a largura do pulso. Usando o exemplo acima, 106 ciclos de clock limitariam a largura do pulso a não menos que 2,21 microssegundos. Ou, não menos que 50% a 226,4 kHz.
Uma das maneiras de aumentar o limite superior de frequência dos sinais de onda quadrada é a aplicação de divisores digitais que utilizam flip-flops. Dividir a frequência de entrada por n estenderia o intervalo superior mensurável n vezes. Esta é uma ótima notícia, os divisores digitais têm uma falha fundamental: o sinal dividido perde as informações de largura de pulso (e ciclo de serviço)! Devido à forma como os divisores funcionam, sua produção sempre tem ciclo de trabalho de 50%. Desapontamento…
Nas páginas seguintes, entretanto, mostrarei como dividir digitalmente a frequência e preservar a largura de pulso original, permitindo-me medir sinais muito além dos limites impostos pela contagem direta.
Etapa 1: Divisão de Freqüência Digital
Os divisores de frequência digital tradicionais usam flip-flops; este tutorial explica muito bem os princípios de como construir divisores usando flip-flops JK padrão. Isso resolve o problema de frequências de entrada muito altas para o MCU, mas tem uma grande desvantagem: o sinal dividido tem ciclo de trabalho de 50%, independentemente da função do sinal de entrada! Para ver por que é o caso, observe as duas primeiras figuras. O sinal original com período T e largura de pulso P é alimentado no pino de clock de um flip-flop JK enquanto seus pinos J e K são mantidos altos o tempo todo (primeira figura). A lógica de 3,3 V é assumida por toda parte. Vamos supor que o flip-flop seja acionado pela borda positiva (ou seja, crescente) do relógio. Sob essas condições, mudanças no estado do pino de saída ("flips" e "flops" individuais) ocorrem toda vez que o pino do clock vai de baixo para alto. A transição de alto para baixo do relógio (ou seja, a borda negativa) é completamente ignorada. Veja a segunda figura. O pino de saída, Q, emite um sinal cujo período é duas vezes maior que o período original, ou seja, sua frequência é reduzida à metade. A largura de pulso da saída é sempre igual a T. Consequentemente, a largura de pulso original, P, é perdida.
Adicionar outro flip-flop JK em uma configuração mostrada na terceira figura divide a frequência original por 4. Adicionar mais flip-flops da mesma maneira sequencial divide a frequência por potências subsequentes de 2: 8, 16, 32, etc.
Problema: como dividir a frequência de uma onda quadrada preservando sua largura de pulso?
A ideia é adicionar corretamente um flip-flop JK disparado por borda negativa à mixagem. Vamos chamá-lo de "Neg FF"; veja a quarta figura. Aqui, "corretamente" significa que os pinos J e K do novo flip-flop estão ligados aos pinos de saída Q e Qbar, respectivamente, do divisor por 4 ("Pos FF") ilustrado na figura anterior. (Aqui, "barra" é a barra horizontal sobre o símbolo Q indicando negação lógica.) Para ver o que isso alcança, dê uma olhada na tabela de funções do "Neg FF" na quinta figura: pinos de saída do Neg, Q e Qbar, espelham o estado de seus pinos de entrada, J e K, respectivamente. O que significa que eles refletem o estado de Pos 'Q e Qbar. Mas, a ação de flip-flop do Neg deve esperar pela borda negativa do sinal original, que chega no tempo P após a borda positiva. Aha!
As formas de onda resultantes são ilustradas na sexta figura. "Pos Q" emite sinal na frequência de 1/4, "Pos Qbar" é inverso, "Neg Q" segue "Pos Q" deslocado pela largura de pulso P e "Neg Qbar" é seu inverso. Você pode verificar que o AND lógico de "Pos Qbar" e "Neg Q" produz um trem de pulso caracterizado pela largura de pulso P original e 1/4 da frequência. Bingo!
No início, usei exatamente este sinal de saída para alimentar o MCU. No entanto, acabou sendo problemático para larguras de pulso muito curtas por causa da limitação de 106 ciclos do MCU mencionada na Introdução. Resolvi este pequeno problema escolhendo outra saída: "Pos Qbar" AND "Neg Qbar". Uma olhada nas formas de onda deve convencê-lo de que a largura de pulso desta forma de onda particular, P ', varia entre T e 2T em vez da faixa (0, T) para P. O P pode ser facilmente recuperado de P' por:
P = 2T - P '
Etapa 2: Hardware Recomendado
Eu realmente gosto do novato em relação aos entusiastas eletrônicos: MCUs Atmel SAM D21 baseados no processador ARM Cortex M0 + de 32 bits operando a uma taxa de clock de 48 MHz, muito mais alta do que os Atmels mais antigos. Para este projeto eu comprei:
- Placa ItsyBitsy M0 Express MCU da Adafruit
- Acontece que eu tinha uma bateria recarregável LiPo da Adafruit
- Tela OLED SPI 128x32 monocromática (você adivinhou: Adafruit)
- Flip-flop SN74HC109 duplo com borda positiva disparada pela Texas Instruments
- Flip-flop SN74HC112 duplo disparado por borda negativa da Texas Instruments
- Quadruple AND gate CD74AC08E da Texas Instruments
- Portão OU quádruplo CD74AC32E da Texas Instruments
Etapa 3: o circuito
A primeira figura mostra um esquema simplificado do medidor de frequência / serviço. A lógica CMOS de 3,3 V é assumida por completo. Consequentemente, a amplitude da onda quadrada de entrada deve estar entre o V correspondenteIH nível (ou seja, 2 V) e 3,3 V. Se não, você precisa escalar para cima ou para baixo de acordo. Na maioria dos casos, um simples divisor de tensão seria suficiente. Se você quiser projetar sua versão do medidor em um nível lógico diferente, terá que usar outro microcontrolador (MCU), bateria e um display que funcione no nível desejado. As portas lógicas e flip-flops usados neste projeto funcionam com níveis lógicos em qualquer lugar entre 2 V e 6 V e devem estar OK na maioria dos casos.
Conforme mostrado, o ItsyBitsy MCU usa os pinos 9-13 para se comunicar com o monitor por meio do protocolo SPI do software. O pino de 3 V fornece energia para todo o circuito. O pino 3 da entrada digital aceita o sinal analisado, enquanto os pinos 2 e 4 controlam a fonte do sinal: sinal direto vindo da porta AND3 (frequências de entrada baixas) ou sinal dividido por 4 até a porta AND4 (frequências de entrada altas), conforme descrito na Etapa 2 O código, discutido na próxima etapa, detecta automaticamente a faixa de frequência de entrada e alterna apropriadamente a fonte do sinal.
O esquema não mostra a verdadeira complexidade das conexões do chip digital. A segunda imagem mostra como o projeto ficaria em uma placa de ensaio. O sinal de entrada vem através de um fio vermelho para o pino 2CLK do flip-flop de borda positiva dupla. CUIDADO: Normalmente, todos os pinos J e K deste flip-flop devem ser mantidos altos, mas SN74HC109 em particular apresenta o pino Kbar - um pino K invertido - em vez disso. Portanto, este pino deve ser aterrado! O primeiro flip-flop de borda negativa em SN74HC112 tem seu pino 1K e 1J conectado aos pinos 1Q e 1Qbar de SN74HC109. O segundo flip-flop em SN74HC112 não é usado e seus pinos de entrada (2K, 2J, 2CLRbar) estão aterrados. Todos os outros pinos extras PREbar (predefinidos) e CLRbar (limpar) em todos os flip-flops devem ser conectados ao alto lógico. O relógio não utilizado e os pinos de saída são deixados desconectados. Da mesma forma, os pinos de entrada não usados em todas as portas são aterrados, enquanto os pinos de saída não usados são deixados desconectados. Como discutido em meu Instructable "Invisible Killer of the Phone Ring", aterrar pinos de entrada não utilizados de chips lógicos elimina oscilações aleatórias e economiza energia da bateria.
Etapa 4: O Código e Medição de Freqüências Baixas
Naturalmente, toda a ação acontece no código vinculado abaixo. Quando a entrada de entrada no pino 3 muda de digital baixo para alto, o MCU começa a contar os pulsos de seu relógio interno de 48 MHz. Ele registra o momento da transição de alto para baixo e continua a contagem até a próxima troca de baixo para alto, quando reinicia todo o processo novamente. A primeira contagem representa a largura do pulso, enquanto a contagem inteira representa o período do sinal. E esse é todo o segredo.
A CPU observa essas transições por meio de interrupções de hardware. O SAMD21 possui vários relógios; meu código usa TC3 um. Inicialmente, comecei lendo a planilha de dados do M0, preparando-se para um grande esforço na codificação do manipulador de interrupção, mas logo descobri um código muito relacionado nas postagens do fórum do Arduino pelos usuários electro_95, MartinL e Rucus, cuja contribuição é devidamente reconhecido. Eu incorporei e modifiquei seu código combinado no meu; me economizando muito tempo!
Como mencionei anteriormente, a resolução do sinal é limitada por ~ 106 ciclos de CPU para executar o código entre as interrupções. A divisão digital com preservação da largura de pulso cuida das altas frequências. As baixas frequências, por outro lado, representam outro desafio: como o contador de relógio TC3 tem 16 bits, ele transborda depois de cruzar o limite de 65.536 contagens. Pode-se lidar com essa situação adicionando uma interrupção de estouro, mas escolheu uma solução diferente: TC3 pode usar um clock de CPU pré-escalonado (isto é, dividido por software) em vez de 48 MHz de hardware. Assim, se o período do sinal se aproximar do limite de estouro, o código pode instruir TC3 a usar contagens de 24 MHz para o próximo período e, voila, o contador cai para menos de 32.768 contagens. Para frequências ainda mais baixas, o TC3 pode ser instruído a contar pulsos de 12 MHz, etc. O prescaler apropriado é determinado automaticamente com base na frequência do sinal, com histerese, a fim de manter o contador TC3 dentro do limite de estouro. Como resultado, a extremidade inferior da faixa do dispositivo é de cerca de 43 Hz.
Você está convidado a bifurcar o código e usá-lo em seu projeto, mas mencione sua fonte ao publicar os resultados.
Link para o código.
Recomendado:
Contador de frequência de alta resolução: 5 etapas (com imagens)
Contador de frequência de alta resolução: Este instrutível mostra um contador de frequência recíproco capaz de medir frequências rapidamente e com precisão razoável. É feito com componentes padrão e pode ser feito em um fim de semana (demorei um pouco mais :-)) EDITAR: O código já está disponível
Medidor de frequência usando microcontrolador: 8 etapas
Medidor de frequência usando microcontrolador: Este tutorial simplesmente afirma como calcular a frequência de uma fonte de pulso usando um microcontrolador. O nível de alta tensão da fonte de pulso é 3,3 V e a baixa é 0 V. Usei STM32L476, Tiva launchpad, LCD alfanumérico 16x2, alguns fios de breadboard e 1K resi
A medição da frequência cardíaca está na ponta do dedo: Fotopletismografia Abordagem para determinar a frequência cardíaca: 7 etapas
A medição da frequência cardíaca está na ponta do dedo: Fotopletismografia Abordagem para determinar a frequência cardíaca: A fotopletismografia (PPG) é uma técnica ótica simples e de baixo custo frequentemente usada para detectar alterações no volume sanguíneo em um leito microvascular de tecido. É usado principalmente de forma não invasiva para fazer medições na superfície da pele, normalmente
Como fazer um drone usando o Arduino UNO. Faça um quadricóptero usando um microcontrolador: 8 etapas (com imagens)
Como fazer um drone usando o Arduino UNO. Faça um Quadcopter Usando Microcontrolador: IntroduçãoVisite Meu Canal do YoutubeUm Drone é um gadget (produto) muito caro para comprar. Neste post irei discutir, como faço isso mais barato ?? E como você pode fazer seu próprio assim a um preço barato … Bem, na Índia, todos os materiais (motores, ESCs
Cabos de prata personalizados de áudio / digital / alta frequência / GPS: 7 etapas
Cabos de prata personalizados Áudio / Digital / Alta frequência / GPS: Com muitos novos mods de áudio / vídeo e novos dispositivos, tanto áudio para ipod quanto digital para vídeo, devemos conectar nossos sistemas a novos dispositivos com cabos mais complexos. Alguns muito caros … Estes são componentes & materiais para o projeto de construção