Domine a Captura de Entrada no STM32 e Meça Frequência

A captura de entrada (Input Capture) em microcontroladores STM32Famílias de microcontroladores STM32: Uma visão geralFamílias de microcontroladores STM32: Uma visão geralProfundo mergulho nas famílias STM32, explorando arquitetura, aplicações e desempenho. Descubra dicas e casos práticos para projetos embarcados. é uma técnica essencial para medição precisa de frequência em aplicações como controle de motores, análise de sensores e sistemas de comunicação. Este artigo combina teoria, configuração prática, exemplos de código e técnicas avançadas para dominar o assunto, incluindo tratamento de overflow, cálculos robustos e otimizações.

Índice🔗

1. Funcionamento do Input Capture no STM32O que é STM32 e por que usá-lo?O que é STM32 e por que usá-lo?Descubra os principais benefícios, arquitetura ARM Cortex-M e aplicações práticas dos microcontroladores STM32. Comece a inovar agora.

2. Configuração do TemporizadorModo encoder em temporizadores do STM32: Controle preciso de motoresModo encoder em temporizadores do STM32: Controle preciso de motoresExplore a teoria e prática do modo encoder no STM32. Aprenda a configurar e interpretar sinais, otimizando o controle de motores com exemplos reais. para Captura de Entrada

3. Métodos de Cálculo de Frequência

4. Exemplo Prático com Tratamento de Overflow

5. Técnicas Avançadas: Filtro, Resolução e Overflow

6. Solução de Problemas Comuns

Funcionamento do Input Capture no STM32🔗

O Input Capture registra o valor do contador (CNT) do temporizador no instante em que uma borda (subida/descida) é detectada no sinal externo. Isso é possível graças a:

  • Canais de captura: Até 4 canais por temporizador (ex: TIM2_CH1).
  • Registradores CCR: Armazenam o valor de CNT durante a borda.
  • Interrupções: Alertam o sistema quando uma captura ocorre.
graph TD A[Sinal de entrada] --> B{Detecção de borda} B -->|Borda configurada| C[Captura valor CNT em CCRx] C --> D[Gera interrupção] D --> E[Calcula período/frequência]

Configuração do Temporizador para Captura de Entrada🔗

Passo a Passo:

1. Habilitar clock do TIMERUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. via RCC.

2. Configurar GPIOConfigurando e usando GPIOs no STM32Configurando e usando GPIOs no STM32Explore neste tutorial os fundamentos e configurações práticas dos GPIOs no STM32, com exemplos de LED, botões e modos alternativos. como entrada alternada (AF) para o canal do TIMERUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados..

3. Inicializar o TIMERUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados.:

4. Modo Input CaptureEntendendo os temporizadores no STM32Entendendo os temporizadores no STM32Descubra como configurar temporizadores STM32 para gerar PWM, medir intervalos e capturar eventos com exemplos práticos e dicas de troubleshooting.:

  • Selecionar borda (subida/descida).
  • Ativar filtro digital para redução de ruído.

5. Habilitar interrupções para processamento em tempo real.

Exemplo de Inicialização (CubeMX + HALUsando o DAC no STM32 para gerar sinais analógicosUsando o DAC no STM32 para gerar sinais analógicosAprenda a configurar e calibrar o DAC do STM32 para gerar sinais analógicos precisos. Descubra técnicas avançadas, exemplos práticos e dicas de otimização.):

TIM_HandleTypeDef htim2;
void MX_TIM2_Init(void) {
  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 79; // Clock de 80 MHz / 80 = 1 MHz
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 0xFFFF;
  HAL_TIM_IC_Init(&htim2);
  TIM_IC_InitTypeDef sConfigIC;
  sConfigIC.ICPolarity = TIM_ICPOLARITY_RISING;
  sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  sConfigIC.ICFilter = 0;
  HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1);
  HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);
}

Métodos de Cálculo de Frequência🔗

Método 1: Período entre Duas Bordas

1. Capturar CCR1 e CCR2 em bordas consecutivas.

2. Calcular o período:

$$ T = \frac{(CCR2 - CCR1) \times (Prescaler + 1)}{Clock_{TIM}} $$

3. Frequência:

$$ F = \frac{1}{T} $$

Método 2: Contagem de Pulsos em Janela Fixa

Usar um segundo temporizador para definir uma janela de tempo (ex: 1 segundo) e contar bordas dentro dela.

Exemplo Prático com Tratamento de Overflow🔗

Implementação com Ajuste de Overflow:

volatile uint32_t icValue1 = 0, icValue2 = 0;
volatile uint8_t captureIndex = 0;
volatile uint32_t frequency = 0;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
  if (htim->Instance == TIM2) {
    if (captureIndex == 0) {
      icValue1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
      captureIndex = 1;
    } else {
      icValue2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
      // Tratamento de overflow
      uint32_t diff;
      if (icValue2 > icValue1) {
        diff = icValue2 - icValue1;
      } else {
        diff = (htim->Instance->ARR - icValue1) + icValue2 + 1;
      }
      frequency = 1000000 / diff; // Para f_timer = 1 MHz
      captureIndex = 0;
    }
  }
}

Técnicas Avançadas: Filtro, Resolução e Overflow🔗

1. Filtro Digital:

Configure ICFilter (ex: 0x4) para ignorar pulsos menores que 4 ciclos de clock.

2. Modo PWMEntendendo os temporizadores no STM32Entendendo os temporizadores no STM32Descubra como configurar temporizadores STM32 para gerar PWM, medir intervalos e capturar eventos com exemplos práticos e dicas de troubleshooting. Input:

Mede período e duty cycleGerando sinais PWM com STM32 para controle de motoresGerando sinais PWM com STM32 para controle de motoresAprenda os fundamentos e técnicas avançadas do PWM em sistemas STM32, otimizados para controle preciso de motores DC e servos com códigos de exemplo. usando dois canais simultaneamente.

3. Slave Mode:

Sincroniza temporizadoresUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. para medições complexas.

4. Tratamento de Overflow:

Ajuste matemático para contas diferenças quando o contador reinicia.

Resolução Máxima:

Para clock de 80 MHz e prescalerUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. = 0:

$$ Resolução = \frac{1}{80 \times 10^6} = 12.5\,ns $$

Solução de Problemas Comuns🔗

ProblemaCausa ProvávelSolução
Leituras inconsistentesRuído no sinalAumentar filtro digital
Frequência zeroSem bordas detectadasVerificar polaridade da captura
Overflow do contadorSinal muito lentoAumentar ARR ou usar temporizador de 32 bits
Valores negativosOrdem de captura invertidaVerificar ordem de CCR1 e CCR2

Dica Prática: Use um osciloscópio para validar o sinal de entrada e verifique a configuração do prescalerEntendendo os temporizadores no STM32Entendendo os temporizadores no STM32Descubra como configurar temporizadores STM32 para gerar PWM, medir intervalos e capturar eventos com exemplos práticos e dicas de troubleshooting./ARR para evitar saturação.

Conclusão🔗

A medição de frequência via Input Capture no STM32O que é STM32 e por que usá-lo?O que é STM32 e por que usá-lo?Descubra os principais benefícios, arquitetura ARM Cortex-M e aplicações práticas dos microcontroladores STM32. Comece a inovar agora. é uma técnica versátil e precisa, ideal para aplicações críticas. Combinar a configuração adequada do temporizador, tratamento de overflow e filtragem de ruído garante resultados confiáveis. Os exemplos e métodos apresentados fornecem um caminho claro para implementação em projetos reais, enquanto as técnicas avançadas permitem otimização para cenários complexos.

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados