Guia Prático para Interrupções no STM32: Teoria & Aplicação
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 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?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 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.
Configuração do Temporizador para Captura de Entrada🔗
Passo a Passo:
1. Habilitar clock do TIMERUsando 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 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 TIMER
Usando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados..
- Prescaler
Usando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados.: Ajusta a resolução temporal (ex: 79 para clock de 1 MHz).
- Período (ARR
Gerando 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.): Define o valor máximo do contador (ex: 0xFFFF para 16 bits).
- 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ó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:
3. Frequência:
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.
Mede período e duty cycleGerando 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 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 precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. = 0:
Solução de Problemas Comuns🔗
Problema | Causa Provável | Solução |
---|---|---|
Leituras inconsistentes | Ruído no sinal | Aumentar filtro digital |
Frequência zero | Sem bordas detectadas | Verificar polaridade da captura |
Overflow do contador | Sinal muito lento | Aumentar ARR ou usar temporizador de 32 bits |
Valores negativos | Ordem de captura invertida | Verificar 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 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?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🔗
- STM32 Documentation: www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html#documentation
- STM32 Official Website: www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html
- STM32 Step-by-Step Guide: wiki.st.com/stm32mcu/wiki/STM32StepByStep:Getting_started_with_STM32_:_STM32_step_by_step
- STM32 Tutorials: embedded-lab.com/blog/stm32-tutorials/
- STM32CubeMX User Manual: www.st.com/resource/en/user_manual/dm00104712-stm32cubemx-for-stm32-configuration-and-initialization-c-code-generation-stmicroelectronics.pdf